< BACK TO BLOG

Electron Release with GitHub Action

πŸ—“οΈ2021-02-14

Electron 으둜 μž‘μ„±λœ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ Windows, Macos μ‹€ν–‰νŒŒμΌλ‘œ λΉŒλ“œν•˜κ³ , GitHub Release μ—μ„œ λ‹€μš΄λ‘œλ“œ κ°€λŠ₯ν•œ μƒνƒœλ‘œ μ€€λΉ„ν•˜λŠ” 과정을 μžλ™ν™”ν•œ μ›Œν¬ν”Œλ‘œμš°λ₯Ό νšŒκ³ ν•©λ‹ˆλ‹€.

GitHub Actions

GitHub μ—μ„œ μ œκ³΅ν•˜λŠ” μ›Œν¬ ν”Œλ‘œμš° μžλ™ν™” λ„κ΅¬μž…λ‹ˆλ‹€.

ν™œμš©ν•΄μ„œ μ—¬λŸ¬κ°€μ§€ μžλ™ν™”λ₯Ό μ‹œλ„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Build, Release 두 개의 μ•‘μ…˜μœΌλ‘œ κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

Release μ•‘μ…˜μ€ Build μ•‘μ…˜μ— μ˜μ‘΄ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  단계가 λ¬Έμ œμ—†μ΄ μ‹€ν–‰λ˜λ©΄, main λΈŒλžœμΉ˜μ— μƒˆλ‘œμš΄ νƒœκ·Έκ°€ μž‘μ„±λ˜κ³ , GitHub Release 에 μƒˆλ‘œ μž‘μ„±λœ νƒœκ·Έμ— ν•΄λ‹Ήν•˜λŠ” Electron μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ λ‹€μš΄λ‘œλ“œκ°€ μ€€λΉ„λœ μƒνƒœλ‘œ λΉ„κ³΅κ°œλ‘œ μž‘μ„±λ©λ‹ˆλ‹€.

κ°„λž΅ν•œ 흐름은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

  1. main λΈŒλžœμΉ˜μ— 컀밋이 μ „μ†‘λ©λ‹ˆλ‹€.
  2. Build μ•‘μ…˜μ΄ μ‹€ν–‰λ©λ‹ˆλ‹€.
    1. Ubuntu 에 Node.js ν™˜κ²½μ„ μ€€λΉ„ν•©λ‹ˆλ‹€.
    2. npm build 슀크립트λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
    3. git tagλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.
    4. GitHub Release λ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.
    5. upload-assets 이벀트λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
  3. Release μ•‘μ…˜μ΄ μ‹€ν–‰λ©λ‹ˆλ‹€. Macos 와 Windows μ—μ„œ μ•„λž˜ 단계가 각각 μ‹€ν–‰λ©λ‹ˆλ‹€.
  4. Node.js ν™˜κ²½μ„ μ€€λΉ„ν•©λ‹ˆλ‹€.
  5. npm pack 슀크립트λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
  6. GitHub Release 에 μ‘μš©ν”„λ‘œκ·Έλž¨μ„ μ—…λ‘œλ“œν•©λ‹ˆλ‹€.

βš™ Job: Build

main λΈŒλžœμΉ˜μ— 컀밋이 ν‘Έμ‰¬λ˜λ©΄ μ‹€ν–‰λ˜λŠ” GitHub Action μž…λ‹ˆλ‹€. .github/workflows/build.yml 보기

build Job 은 Checkout, Install Node.js, Npm, Install Dependencies, Build, package-version, package-version-to-git-tag, Release Drafter, Check Upload Url, Repository Dispatch λ‹¨κ³„λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

Ubuntu μ—μ„œ μ‹€ν–‰ν•©λ‹ˆλ‹€.

πŸ‘ž step: Checkout

원격 μ €μž₯μ†Œμ—μ„œ μ½”λ“œλ₯Ό λ‚΄λ €λ°›μŠ΅λ‹ˆλ‹€.

πŸ‘ž step: Install Node.js, Npm

Node.js ν™˜κ²½μ„ κ΅¬μ„±ν•©λ‹ˆλ‹€.

v12 Node.js λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

πŸ‘ž step: Install Dependencies

package.json 에 μž‘μ„±λœ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€.

πŸ‘ž step: Build

npm build 슀크립트λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

πŸ‘ž step: package-version

package.json νŒŒμΌμ— μž‘μ„±λœ 버전 값을 PACKAGE_VERION ν™˜κ²½λ³€μˆ˜λ‘œ μ„€μ •ν•©λ‹ˆλ‹€.

πŸ‘ž step: package-version-to-git-tag

pkgdeps/git-tag-action μ•‘μ…˜μœΌλ‘œ git tag λ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.

package.json 파일의 버전과 git tag λ₯Ό λ™κΈ°ν™”ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€.

package-version λ‹¨κ³„μ—μ„œ 얻은 버전을 μ‚¬μš©ν•©λ‹ˆλ‹€.

πŸ‘ž step: Release Drafter

release-drafter/release-drafter μ•‘μ…˜μœΌλ‘œ μž‘μ„±λœ git tag 에 λŒ€ν•œ GitHub Release λ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.

GitHub Release의 본문에 변경사항 μ •μ˜λœ ν…œν”Œλ¦Ώ 기반의 λ‚΄μš©μœΌλ‘œ μž‘μ„±λ©λ‹ˆλ‹€.

package-version λ‹¨κ³„μ—μ„œ 얻은 버전을 μ‚¬μš©ν•©λ‹ˆλ‹€.

μž‘μ„±λœ GitHub Relase λŠ” Draft μƒνƒœμž…λ‹ˆλ‹€.

μ‹€ν–‰ 파일이 μ—…λ‘œλ“œλœ ν›„ 직접 μƒνƒœλ₯Ό λ³€κ²½ν•΄μ„œ κ³΅κ°œν•˜λ„λ‘ ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

πŸ‘ž step: Check Upload Url

Release Drafter λ‹¨κ³„μ˜ 좜λ ₯값을 ν™•μΈν•©λ‹ˆλ‹€.

Release Drafter λ‹¨κ³„μ—μ„œ μž‘μ„±λœ GitHub Release 의 μ²¨λΆ€νŒŒμΌ Assets μ—…λ‘œλ“œ 경둜λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄ μΆ”κ°€λœ λ‹¨κ³„μž…λ‹ˆλ‹€.

πŸ‘ž step: Repository Dispatch

peter-evans/repository-dispatch μ•‘μ…˜μœΌλ‘œ μ§€μ •λœ GitHub μ €μž₯μ†Œλ₯Ό λŒ€μƒμœΌλ‘œ μ‚¬μš©μž μ •μ˜ 이벀트λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

peter-evans/repository-dispatch μ•‘μ…˜μ€ GitHub api 쀑 web hook 을 μ‚¬μš©ν•©λ‹ˆλ‹€.

이벀트 ν˜•μ‹μ€ upload-assets 으둜 μ§€μ •ν•©λ‹ˆλ‹€. μ›Ή 훅을 μš”μ²­ν•  λ•Œ, μš”μ²­ 본문으둜 Release Drafter λ‹¨κ³„μ˜ 좜λ ₯값쀑 upload_url 을 μ „μ†‘ν•©λ‹ˆλ‹€.

βš™ Job: Release

μ €μž₯μ†Œμ— μ›Ή ν›… μ΄λ²€νŠΈκ°€ μš”μ²­λ˜λ©΄ μ‹€ν–‰λ˜λŠ” GitHub Action μž…λ‹ˆλ‹€. .github/workflows/release.yml 보기

κ΅¬λ…ν•˜λŠ” 이벀트 ν˜•μ‹μ€ upload-assets μž…λ‹ˆλ‹€.

Release Job 은 Context, Verify Upload Url, Checkout, Install Node.js, Npm, Install dependencies, Pack, Upload Assets to Release with a wildcard λ‹¨κ³„λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

Macos, Windows μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€. 각 λ‹¨κ³„λŠ” μ§€μ •λœ OS λ³„λ‘œ ν•œλ²ˆμ”© λ‘λ²ˆ μ‹€ν–‰λ©λ‹ˆλ‹€.

πŸ‘ž step: Context

GitHub Action 으둜 μ œκ³΅λ˜λŠ” κΈ°λ³Έ 데이터λ₯Ό 확인해보고 μ‹Άμ–΄μ„œ μΆ”κ°€ν•œ λ‹¨κ³„μž…λ‹ˆλ‹€.

πŸ‘ž step: Verify Upload Url

μ›Ή ν›…μœΌλ‘œ μž…λ ₯된 μš”μ²­ 본문이 μ •μƒμ μœΌλ‘œ μ „λ‹¬λ˜λŠ”μ§€ 확인해보고 μ‹Άμ–΄μ„œ μΆ”κ°€ν•œ λ‹¨κ³„μž…λ‹ˆλ‹€. Conext λ‹¨κ³„μ—μ„œ λ™μΌν•œ 값을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ‘ž step: Checkout

원격 μ €μž₯μ†Œμ—μ„œ μ½”λ“œλ₯Ό λ‚΄λ €λ°›μŠ΅λ‹ˆλ‹€.

πŸ‘ž step: Install Node.js, Npm

Node.js ν™˜κ²½μ„ κ΅¬μ„±ν•©λ‹ˆλ‹€.

v12 Node.js λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

πŸ‘ž step: Install dependencies

package.json 에 μž‘μ„±λœ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€.

πŸ‘ž step: Pack

npm pack 슀크립트λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

electron 으둜 μž‘μ„±λœ μ‹€ν–‰νŒŒμΌμ΄ packages 디렉터리에 μž‘μ„±λ©λ‹ˆλ‹€.

πŸ‘ž step: Upload Assets to Release with a wildcard

packages 디렉터리에 μž‘μ„±λœ μ‹€ν–‰νŒŒμΌμ„ 이전 Build μ•‘μ…˜μ—μ„œ μ „λ‹¬ν•œ μ—…λ‘œλ“œ 경둜λ₯Ό μ‚¬μš©ν•΄μ„œ Release Assets 둜 μ—…λ‘œλ“œν•©λ‹ˆλ‹€.

πŸ“‹ Workflows

Actions: bbonkr/renameapp νŽ˜μ΄μ§€μ—μ„œ μ‹€ν–‰λœ μ›Œν¬ν”Œλ‘œμš°λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

🧰 Releases

Releases: bbonkr/renameapp νŽ˜μ΄μ§€μ—μ„œ μž‘μ„±λœ GItHub Release λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“’ Conclusion

κ°€λŠ₯ν•˜λ©΄ λ§Žμ€ 뢀뢄을 μžλ™ν™”ν•΄μ„œ κΌ­ ν•„μš”ν•œ 일에 집쀑할 수 μžˆλŠ” ν™˜κ²½μ„ μ€€λΉ„ν•˜λŠ” 것은 맀우 μ€‘μš”ν•œ 일이라고 μƒκ°λ©λ‹ˆλ‹€.

μ΄λ ‡κ²Œ κ²Œμ‹œ μ›Œν¬ν”Œλ‘œμš°λ₯Ό μžλ™ν™”ν•΄λ‘λ©΄ 이번 κ²Œμ‹œμ— 뭐가 λ³€κ²½λ˜μ—ˆλŠ”μ§€λ₯Ό μž‘μ„±ν•˜λŠ” μ‹œκ°„μ„ 쀄일 수 있고, κ²Œμ‹œμ— λ‹€μš΄λ‘œκ·Έ κ°€λŠ₯ν•œ νŒŒμΌμ„ λˆ„λ½ν•˜λŠ” μ‹€μˆ˜λ„ μ—†μŠ΅λ‹ˆλ‹€.

μ§€μ†μ μœΌλ‘œ 더 쒋은 μ›Œν¬ν”Œλ‘œμš°λ₯Ό μƒκ°ν•˜κ³ , κ΅¬μ„±ν•˜κ³  νšŒκ³ ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

저와 μœ μ‚¬ν•œ μ›Œν¬ν”Œλ‘œμš°λ₯Ό μžλ™ν™”ν•˜λ €κ³  μ§„ν–‰ν•˜μ‹œλŠ” λΆ„μ—κ²Œ 도움이 되면 μ’‹κ² μŠ΅λ‹ˆλ‹€.

GitHub Repository


Profile picture

Pon Cheol Ku (ꡬ본철)

Software developer

Other sites

If does not find interesting topic, you might visit other site on below link.

Β© 2024, Built with Gatsby