๐Ÿ“ ํ•ํŽซ์˜ ๋ฐฐํฌ์‹œ ๋ฒ„์ €๋‹ ๊ด€๋ฆฌ ์ž๋™ํ™”ํ•˜๊ธฐ

์ด๋ฒˆ๊ธ€์—์„œ๋Š” ํ•ํŽซ์˜ ์ปค๋จธ์Šค ์Šค์ฟผ๋“œ์—์„œ์–ด๋–ป๊ฒŒ ์›น ๋ฒ„์ €๋‹์„ ํ•˜๊ณ  ์žˆ์—ˆ๋Š”์ง€
๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๊ฐœ์„ ์„ ์‹œ๋„ํ–ˆ๊ณ , ์•ž์œผ๋กœ ํ• ์ผ์€ ๋ฌด์—‡์ด ์žˆ์„์ง€ ์ž‘์„ฑํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๊ณ ๋ฏผ์˜ ์‹œ์ž‘

์ปค๋จธ์Šค ์Šค์ฟผ๋“œ์—์„œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ, ๋ฐฑ์—”๋“œ๊ฐ„์˜ Versioning ๋ฐฉ์‹์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. Versioning ์„ ์œ„ํ•ด์„œ Release Note์— ์ง์ ‘ tag๊ฐ’์„ ์ž…๋ ฅํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ”์˜์ง€ ์•Š์„๋•Œ๋Š” ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์œผ๋‚˜ ์ •์‹ ์—†์ด ๋ฐ”์œ๋‚ ์—๋Š” ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด์„œ ํ•ด์•ผํ•˜๋Š” ์—ฌ๋Ÿฌ๋ฒˆ์˜ ํด๋ฆญ๊ณผ ์ž…๋ ฅ์€ ์ŠคํŠธ๋ ˆ์Šค๊ฐ€ ๋˜๊ธฐ์— ์ถฉ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž๋™ํ™”๋œ ๋ฒ„์ €๋‹์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜์—ˆ๊ณ , ์‚ฌ์šฉ๊ธฐ์ˆ ์— ๊ด€๊ณ„์—†๋Š” ๋ฒ„์ €๋‹๋ฐฉ์‹์ด ์žˆ์œผ๋ฉด ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

๋ฐฐํฌ ํ›„์—๋Š” Release Note ๋‚ด์šฉ์„ ๋ชจ๋“  ๊ตฌ์„ฑ์›์ด ์žˆ๋Š” slack ์ฑ„๋„์— ๊ณต์ง€ํ•˜์˜€๋Š”๋ฐ, ๊ณต์ง€ ๋‚ด์šฉ์—๋Š” task ๋งํฌ (์•„์‚ฌ๋‚˜ ๋งํฌ)๋ฅผ ํ•จ๊ป˜ ์ ์–ด์ค˜์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

์œ ๊ด€๋ถ€์„œ์—์„œ๋Š” pr ๋งํฌ๋กœ ๋‚ด์šฉํ™•์ธ์„ ํ• ์ˆ˜๊ฐ€ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” PR์— ์ ์–ด๋‘” ์•„์‚ฌ๋‚˜ ๋งํฌ๋ฅผ ๋‹ค ๊ฐ€์ ธ์™€์„œ ๋‚ด์šฉ์„ ์žฌ๊ตฌ์„ฑํ•ด์•ผํ–ˆ๋Š”๋ฐ, ์ด๊ฒƒ ๋˜ํ•œ ๊ท€์ฐฎ๊ณ  ์‹œ๊ฐ„์ด ์•„๊นŒ์šด ์ผ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๋ฒ„์ €๋‹์„ ํ•˜๋ฉด์„œ Release Note ๋‚ด์šฉ๋„ ์ปค์Šคํ…€์„ ํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค๋ผ๋Š” ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฌด์—‡์ด ํ•„์š”ํ•œ๊ฐ€?

  • ์‚ฌ์šฉ๊ธฐ์ˆ ์— ๊ด€๊ณ„์—†๋Š” ์ž๋™ํ™”๋œ ๋ฒ„์ „๊ด€๋ฆฌ
  • ๋ฐ”๋กœ ๊ณต์œ ํ•˜๊ธฐ ํŽธํ•œ Release Note์˜ ์ƒ์„ฑ

๐Ÿ‘€ ๊ธฐ์กด๋ฐฉ์‹

๋ฌด์Šจ ๋ฒ„์ „์ด๋ผ๊ณ ?

ํ”„๋ก ํŠธ์—”๋“œ๋Š” YYYY-MM-DD-hhmm ํ˜•์‹์œผ๋กœ ์‹œ๊ฐ„์„ tag๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์‹œ๊ฐ„ํ˜•์‹์˜ tag๋Š” ์œ ๋‹ˆํฌํ•œ ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „์— ๋ฒ„์ „์— ๋Œ€ํ•ด์„œ ๋ชฐ๋ผ๋„ ๋˜๋Š” ์žฅ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

โ—๏ธํ•˜์ง€๋งŒ ํ˜„์žฌ ๋ฒ„์ „ tag์™€ ๋ฏธ๋ž˜ ๋ฒ„์ „ tag์— ๋Œ€ํ•œ ์ถ”์ธก์ด ์•ˆ๋˜๋Š” ๊ฒƒ์ด ๋‹จ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. (๋‚ ์งœ, ์‹œ๊ฐ„์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์‹ค์ƒ ๋‚œ์ˆ˜๋กœ ๋Š๊ปด์กŒ์Šต๋‹ˆ๋‹ค.)

ํ”„๋ก ํŠธ์—”๋“œ์˜ ์ดˆ๊ธฐ Release Note

๋ฐฑ์—”๋“œ๋Š” Semantic Version ํ˜•์‹์˜ tag๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
tag ์ƒ์„ฑ์€ ์ˆ˜๋™์œผ๋กœ ํ•˜์˜€๊ธฐ์—, ์‹ค์ˆ˜๋กœ ๊ฑด๋„ˆ๋›ฐ๋Š” ๋ฒ„์ „์ด ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿคญ
๋ฒ„์ „ ์ˆœ์„œ๋ฅผ ์ž˜ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด์ „ tag๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ฒดํฌ๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐฑ์—”๋“œ์˜ ์ดˆ๊ธฐ Release Note

๊ทธ๋ ‡๋‹ค๋ฉดโ€ฆ โ€œ์šฐ๋ฆฌ์˜ ์›น์€ ์ผ๊ด€์„ฑ์žˆ๋Š” ๋ฒ„์ „๊ด€๋ฆฌ๊ฐ€ ๋˜๊ณ  ์žˆ๋Š”๊ฐ€?โ€ ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์–ด๋””์— ์žˆ๋Š”๊ฐ€?

๐ŸŽฏ ๋ชฉํ‘œ

  1. Consistency : ์‚ฌ์šฉ๊ธฐ์ˆ ์— ๋ฌด๊ด€ํ•œ (javascript, python ๋“ฑ) ๋ฒ„์ €๋‹ ๋ฐฉ์‹
  2. Automatic : ์ˆ˜๋™๋ฒ„์ €๋‹์—์„œ ์ž๋™์œผ๋กœ ๋ฒ„์ €๋‹์œผ๋กœ์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”
  3. Easy : ๋ฐฐํฌํ›„์— ์œ ๊ด€๋ถ€์„œ ๋ฐ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๋ฐ”๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” Release Note

Github Action์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ๋ฐฐํฌ๋ฅผ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, Github Action์„ ์‚ฌ์šฉํ•˜์—ฌ Release Note๋ฅผ ์ƒ์„ฑํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

Action์˜ workflow(*.yml)ํŒŒ์ผ์—์„œ๋Š” shell script๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  github-script๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด javascript๋กœ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

typescript๋กœ ๊ฐœ๋ฐœํ•˜๊ธฐ

๋น ๋ฅธ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด์„œ๋Š” javascript๋งŒ ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€๋งŒ, ์•„๋ฌด๋ž˜๋„ ์‹ค์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด javascript๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ typescript๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก webpack, typescript๋ฅผ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ป ํ”„๋กœ์ ํŠธ Setup

script ์ถ”๊ฐ€

  • build ์Šคํฌ๋ฆฝํŠธ: package.json์—์„œ ๊ธฐ์กด build file ์‚ญ์ œ ๋ฐ webpack ์‹คํ–‰

npm ํŒจํ‚ค์ง€ ์„ค์น˜

  • Ocktokit์€ Github API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.
    ์ €๋Š” Octokit์˜ type์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์„ค์น˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค. (github-script์ด Octokit์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋Šฅ๊ตฌํ˜„์„ ์œ„ํ•ด์„œ ํ•„์š”ํ•˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค.)
package.json์— ์„ค์น˜ํ•œ npm ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
package๋ฅผ Github Registry์— ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž‘์„ฑ

์–ด๋–ค ์ˆœ์„œ๋กœ ๋งŒ๋“ค๋ฉด ๋ ๊นŒ?

์ „์ฒด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฝœ์Šคํƒ์œผ๋กœ ํ‘œํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋…ธ๋ž€์˜์—ญ : Github API ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ๋ž€์˜์—ญ: ์ผ๋ฐ˜ ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

Example โ€” Functional Code

๊ธ€์˜ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด์„œ ์‹ค์ œ ์ฝ”๋“œ์—์„œ ์ผ๋ถ€ ์ฝ”๋“œ(๋‚ด์šฉ ์ดํ•ด์— ๊ผญ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ, tryโ€ฆcatch๋ฌธ, console, ์˜ˆ์™ธ์ฒ˜๋ฆฌ)๋Š” ์ œ์™ธํ•˜๊ณ , ์ฝ๊ธฐ ์‰ฝ๋„๋ก ๋ณ€ํ˜•ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ํƒ€์ž…์ •์˜

์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” Type์ž…๋‹ˆ๋‹ค. (๊ธฐ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ๋ถ€๋ถ„์ด ์•„๋‹ˆ๊ณ  ์ž๋™์™„์„ฑ์„ ์œ„ํ•ด์„œ ์ถ”๊ฐ€ํ•œ type์ด๋ฏ€๋กœ ์„ค๋ช…์€ ์ฃผ์„์œผ๋กœ ๋Œ€์‹ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.)

Release Note ์ƒ์„ฑ ํ•จ์ˆ˜

createRelease ๋Š” 2๊ฐ€์ง€ ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์‹ ๊ทœ ๋ฒ„์ „ ์ƒ์„ฑ : generateNewTagFromLatestRelease๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ ๊ทœ tag๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Release Note ์ƒ์„ฑ : creator ํ•จ์ˆ˜๋Š” Github์— Release Note๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์‹ ๊ทœ tag ์ƒ์„ฑํ•จ์ˆ˜

generateNewTagFromLatestRelease : ์‹ ๊ทœ tag(๋ฒ„์ „)์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์‹ ๊ทœ tag๋ฅผ ์ƒ์„ฑํ• ๋•Œ๋Š” input์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
input ์€ ์–ด๋–ค๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ํ• ์ง€ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค.

github-script์˜ context.payload์—๋Š” Action์˜ workflow์—์„œ ์„ ํƒํ•œ input์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(์–ด๋–ป๊ฒŒ workflow์˜ input์„ ๋ฐ›๋Š”์ง€๋Š” ์•„๋ž˜์— <Example โ€” Action Code> ํŒŒํŠธ์—์„œ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.)

๋งŒ์•ฝ input์œผ๋กœ ๋ฐ›์€ ๋ณ€์ˆ˜๊ฐ’์ด(upgradeVersionType)์œผ๋กœ ๋ฒ„์ „ํ˜•์‹์ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

  • major : ๊ฐ€์žฅ์•ž์˜ ์ˆซ์ž๋ฅผ ์ฆ๊ฐ€ ๋ฐ ๋‚˜๋จธ์ง€๋Š” 0์œผ๋กœ ๋ณ€๊ฒฝ
  • minor : ์ค‘๊ฐ„ ์ˆซ์ž๋ฅผ ์ฆ๊ฐ€ ๋ฐ ๋งˆ์ง€๋ง‰ ์ˆซ์ž๋ฅผ 0์œผ๋กœ ๋ณ€๊ฒฝ
  • patch : ๋งˆ์ง€๋ง‰ ์ˆซ์ž๋ฅผ ์ฆ๊ฐ€์‹œํ‚ด

Release Note ์ปจํ…์ธ  ์ƒ์„ฑํ•จ์ˆ˜

generateReleaseNoteContent : Release Note์— ๋„ฃ์„ ๋‚ด์šฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

getPR์€ ๊ฐ PR์—์„œ ํ•„์š”ํ•œ ์ •๋ณด(Title, PR Number, Asana URL)๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

generateReleaseNotes์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•œ Note
์ž๋™์ƒ์„ฑ๋œ ๋‚ด์šฉ ๋ฐ URL์€ ์ด๋Ÿฐ ํ˜•ํƒœ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

์ž๋™์ƒ์„ฑ๋œ ๋‚ด์šฉ์˜ ํ˜•์‹์„ ์ฐธ๊ณ ํ•ด๋ณด๋ฉด url์˜ pull ๋’ค์—์žˆ๋Š” pr๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , PR์˜ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(์ฐธ๊ณ . ์ €ํฌ ์ปค๋จธ์Šค(ํƒ์ƒ‰, ์ฃผ๋ฌธ) ์Šค์ฟผ๋“œ์—์„œ๋Š” PR์˜ ๋‚ด์šฉ์— Asana URL์„ ๋„ฃ์Šต๋‹ˆ๋‹ค.)

Asana URL์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์ œ๋ชฉ๊ณผ PR๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. (URL ํ˜•์‹์ด ์—†๋Š” ๊ฒฝ์šฐ๋Š” โ€œAsana link๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.โ€)

โœ… Release Note์˜ ์™„์„ฑ

๋งˆ๋ฒ•๊ฐ™์ด ๊น”๋”ํ•œ Release Note
์ด์ œ Release Note๋Š” ์ด๋Ÿฐํ˜•์‹์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ Release Note๋Š” ๋ฐ”๋กœ slack ์ฑ„๋„์— ๊ณต์œ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ

์ •๋ฆฌ๋œ Release Note ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ๋น„๊ฐœ๋ฐœ ๋ถ€์„œ์—์„œ๋Š” ์•„์‚ฌ๋‚˜ URL๋กœ ๋ฐฐํฌ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฐœ๋ฐœ์ž๋Š” PR ๋งํฌ๋ฅผ ํ†ตํ•ด์„œ ์ฝ”๋“œํ™•์ธ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Example โ€” Action Code

ํ•ํŽซ๋ชฐ์˜ Action์—์„œ Release Note๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” javascript ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” github-script๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ํŽธํ•ฉ๋‹ˆ๋‹ค.

workflow ์‹คํ–‰์กฐ๊ฑด (on)

  • ์ˆ˜๋™์‹คํ–‰ โ€” workflow_dispatch
  • generateNewTagFromLatestRelease์—์„œ ์‚ฌ์šฉํ•œ inputs๊ฐ’์„ ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์€ patch ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

workflow์˜ ์ž‘์—… (job)

create-release๋ผ๋Š” job์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. job์—๋Š” 3๊ฐ€์ง€ step์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Install NPM(npm ์„ค์น˜)

  • ์œ„์—์„œ ์ž‘์„ฑํ•˜๊ณ  ๋ฐฐํฌํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

Print Current Version(ํ˜„์žฌ ๋ฒ„์ „ํ‘œ์‹œ)

  • ํ˜„์žฌ ์‚ฌ์šฉํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์˜ ๋ฒ„์ „์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณ„๋„์˜ repo๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์ด์œ ๋Š” 2๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ repo์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ
  • ํ•ญ์ƒ ์ตœ์‹ ๋ฒ„์ „์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉ (ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ์ˆ˜์ •ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ์™€ ์ƒ๊ด€์—†๋Š” commit์„ ๋งŒ๋“ค๊ณ  ๋ฐฐํฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.)

Create Release(์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰)

  • github-script๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ github, context object๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋„˜๊ฒจ์„œ ์‚ฌ์šฉํ•œ๊ฒƒ์ด ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์— GithubScriptInput ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
์‹คํ–‰ํ• ๋•Œ๋Š” ์ด๋ ‡๊ฒŒ input์—์„œ ๋ฒ„์ „ํ˜•์‹์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿš€ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

๐Ÿฅฐ ์–ด๋–ค๊ฒƒ์ด ์ข‹์•„์กŒ๋‚˜?

๋ฒ„์ €๋‹์„ ์ž๋™์œผ๋กœ ํ•˜๊ฒŒ ๋˜๋ฉด์„œ ํ™•์‹คํžˆ tag ์ƒ์„ฑ์— ๋Œ€ํ•œ ๋ถ€๋‹ด์ด ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•˜๋‹ค๋ฉด ์›ํ•˜๋Š”๋Œ€๋กœ ๋ฒ„์ €๋‹ ๋ฐฉ๋ฒ•์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
github action์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ”„๋กœ์ ํŠธ์˜ ์‚ฌ์šฉ๊ธฐ์ˆ ์— ์ƒ๊ด€์—†์ด git์˜ tag๋กœ ๋ฒ„์ €๋‹์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿค” ๋” ๊ณ ๋ฏผํ•ด์•ผํ•  ๋‚ด์šฉ

<ํ…Œ์ŠคํŠธ์ฝ”๋“œ์˜ ๋ถ€์žฌ>
ํ˜„์žฌ ๋ฒ„์ €๋‹ ์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ฆฌํŒฉํ† ๋ง์„ ํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ์šฉ repo๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‹คํ–‰ํ•ด๋ณด๋ฉด ๋˜์ง€๋งŒ ๊ฝค๋‚˜ ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ˜„์žฌ ํ•จ์ˆ˜๋“ค์„ ํ…Œ์ŠคํŠธ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋„ฃ์—ˆ๋‹ค๋ฉด ๋” ์ข‹์•˜์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

<ํ”„๋กœ์ ํŠธ๋‚ด์— ๋ฒ„์ „ํ‘œ์‹œ ๋ถˆ๊ฐ€>
git tag๋กœ ๋ฒ„์ „๊ด€๋ฆฌ๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, git์ด ์—†๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” (ํ”„๋กœ์ ํŠธ ์†Œ์Šค์ฝ”๋“œ๋งŒ ์žˆ๋Š” ์ƒํ™ฉ) ๋ฒ„์ „์„ ์•Œ ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
github API๋กœ Latest Release ๋ฅผ ์กฐํšŒํ•˜๋ฉด ๋˜์ง€๋งŒ, ์ด ๋ฐฉ์‹์€ ํ•ญ์ƒ token์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋กœ์ ํŠธ๋‚ด์— ํ˜„์žฌ ๋ฒ„์ „์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ณ ๋ฏผ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ฝ์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Reference

written by Steven (Sungjin Cho)

email: sj_cho@fitpet.co.kr

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store