Auto: maven-release-plugin์— ๋Œ€ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ ์ œ๊ฑฐ

์— ๋งŒ๋“  2020๋…„ 05์›” 26์ผ  ยท  44์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: intuit/auto

auto maven ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ์ž‘์—…์„ ์‹œ์ž‘ํ•˜์—ฌ auto ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„๊ณผ ๋” ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด์„œ ์ €๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ฒฐ๋ก ์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

maven ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ๋Š” auto ๋Œ€ํ•œ ํ˜„์žฌ ์š”๊ตฌ ์‚ฌํ•ญ์€ ํ”„๋กœ์ ํŠธ์—์„œ maven-release-plugin ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ auto ์ ํ•ฉํ•˜์ง€ ์•Š๊ฒŒ ๋งŒ๋“œ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

maven-release-plugin ์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์€ release:prepare ๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ์†Œ์Šค์— ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
  2. SNAPSHOT ์ข…์†์„ฑ์ด ์—†๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
  3. x-SNAPSHOT์—์„œ ์ƒˆ ๋ฒ„์ „์œผ๋กœ POM์˜ ๋ฒ„์ „ ๋ณ€๊ฒฝ
  4. ํƒœ๊ทธ์˜ ์ตœ์ข… ๋Œ€์ƒ์„ ํฌํ•จํ•˜๋„๋ก POM์˜ SCM ์ •๋ณด๋ฅผ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  5. ์ˆ˜์ •๋œ POM์— ๋Œ€ํ•ด ํ”„๋กœ์ ํŠธ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ชจ๋“  ๊ฒƒ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  6. ์ˆ˜์ •๋œ POM ์ปค๋ฐ‹
  7. ๋ฒ„์ „ ์ด๋ฆ„์œผ๋กœ SCM์˜ ์ฝ”๋“œ์— ํƒœ๊ทธ ์ง€์ •
  8. POM์˜ ๋ฒ„์ „์„ ์ƒˆ ๊ฐ’ y-SNAPSHOT์œผ๋กœ ๋ฒ”ํ”„
  9. ์ˆ˜์ •๋œ POM ์ปค๋ฐ‹

๊ทธ๋Ÿฐ ๋‹ค์Œ release:perform ๋ฅผ ํ†ตํ•ด ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

  1. ์„ ํƒ์  ํƒœ๊ทธ๊ฐ€ ์žˆ๋Š” SCM URL์—์„œ ์ฒดํฌ์•„์›ƒ
  2. ๋ฏธ๋ฆฌ ์ •์˜๋œ Maven ๋ชฉํ‘œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆด๋ฆฌ์Šคํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ์ ์œผ๋กœ deploy site-deploy ).

ํ”Œ๋Ÿฌ๊ทธ์ธ์ด auto ์™€ ์ผ์น˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ๊ตฌํ˜„์—์„œ๋Š” release:prepare ๋ชฉํ‘œ์— ์˜ํ•ด ์ˆ˜ํ–‰๋œ ์ปค๋ฐ‹์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ git ํ•ด์ปค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, maven-release-plugin ๋Š” auto ์ด ์„ค๊ณ„๋œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ๋œ ์šฐ์•„ํ•œ ๋ฐฉ์‹์œผ๋กœ "ํ•ด๊ฒฐ"ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋™๋“ฑํ•œ ์ค‘์š”์„ฑ์˜ ์ €์žฅ์†Œ ๋ฐ ์ €์ž ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค - ํ˜„์žฌ maven ์šฉ๋„๋ฅผ ํ”Œ๋Ÿฌ๊ทธ์ธ <scm/> ๋ฐ <developers/> ์˜ ์„น์…˜์„ pom.xml ๋„์ถœ ๊ทธ ์ •๋ณด. ์ด๊ฒƒ์€ git ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‚˜๋จธ์ง€ auto ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์—์„œ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ตฌํ˜„์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. author ๋น„์•„ ์„ค์ • <developers/> ์˜ ๋‹จ๋ฉด pom.xml MAY ์„ ํƒ๋œ ๊ฒƒ๊ณผ ๋™์ผ ํ•  ์ปค๋ฐ‹ ์‚ฌ๋žŒ์ด ํ•˜ ๊ฒƒ์„ ์˜๋ฏธ author . <developers/> ์ •๋ณด์™€ ํ•จ๊ป˜ git commit ์ž‘์„ฑ์ž๋ฅผ ์ •๋ ฌํ•˜๋ ค๋Š” ์‹œ๋„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  2. owner ๋ฐ repo ์ •๋ณด๋Š” <scm/> ์„น์…˜์„ ํ†ตํ•ด ์„ค์ •๋˜๋ฉฐ ํ˜„์žฌ ๋ณต์ œ๋ณธ์˜ ์‹ค์ œ ์ €์žฅ์†Œ ๋ฐ ์†Œ์œ ์ž์™€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๊นŠ์€ ๋‹ค์ด๋น™ ์ผ์„ํ•˜๊ณ ์™€ ๋น„๊ต์— gradle ํ”Œ๋Ÿฌ๊ทธ์ธ,์˜ ์œ ์ผํ•œ ๋ชฉํ‘œ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค maven-release-plugin ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค release:update-versions ๋ชฉํ‘œ. ๊ทธ ๋ชฉํ‘œ๋Š” ๊ฐ„๋‹จํ•œ XML ์ฒ˜๋ฆฌ๋กœ ์‰ฝ๊ฒŒ ๋Œ€์ฒด๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

maven-release-plugin ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋“œ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ์™€ ์ตœ์†Œํ•œ์˜ ์ด์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋‚ด ์ƒ๊ฐ์€ ์š”๊ตฌ ์‚ฌํ•ญ์„ ํ•ด์ œํ•˜๊ณ  auto maven ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋” ๋งŽ์€ auto ์—์„œ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค

enhancement released

๋ชจ๋“  44 ๋Œ“๊ธ€

์™„์ „ํžˆ ๋™์˜ ํ•ด!

pom.xml์—์„œ ์–ป์€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๋Œ€๋ถ€๋ถ„์˜ ์š”์ ์€ ์•„๋งˆ๋„ ํ•ด๋‹น ํ•„๋“œ์— ๋Œ€ํ•œ ๋‚˜์˜ ์˜คํ•ด์™€ ๊ด€๋ จ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์–ด๋–ค ๋ณ€๊ฒฝ๋„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ•ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. #1156์— ์ž์„ธํžˆ ์„ค๋ช…๋œ ์ž‘์€ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ค‘ ์ผ๋ถ€๋ฅผ ๋กค๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<scm/> ๋ฐ <developers/> ์— ๋Œ€ํ•œ ๋‘ ๊ฐ€์ง€ ์š”์ ์ด ์ž˜๋ชป๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. npm ํ”Œ๋Ÿฌ๊ทธ์ธ์€ package.json ์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ pom.xml _should_ ์žˆ์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

npm repository ๋ฐ author ํ•„๋“œ์— ํ•ด๋‹นํ•˜๋Š” pom ๊ฒฝ์šฐ ์˜ˆ์ž…๋‹ˆ๋‹ค.

์ž‘์„ฑ์ž๋Š” ๋‹ค์Œ์„ ํ†ตํ•ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ปค๋ฐ‹์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์‚ฌ๋žŒ์ด ์„ ํƒํ•œ ์ž‘์„ฑ์ž์™€ ๋™์ผํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. git commit ์ž‘์„ฑ์ž๋ฅผ ๋‹ค์Œ๊ณผ ์ •๋ ฌํ•˜๋ ค๋Š” ์‹œ๋„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ •๋ณด.

์ด๊ฒƒ์€ npm ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๋กœ์ปฌ์—์„œ auto๋Š” git ๊ตฌ์„ฑ์„ ์žฌ์ •์˜ํ•˜์ง€ ์•Š์ง€๋งŒ CI ํ™˜๊ฒฝ์—์„œ๋Š” author ๋ฅผ ์ปค๋ฐ‹`์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์†Œ์œ ์ž ๋ฐ repo ์ •๋ณด๋Š” ๋‹ค์Œ์„ ํ†ตํ•ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์„น์…˜์€ ํ˜„์žฌ ํด๋ก ์˜ ์‹ค์ œ ์ €์žฅ์†Œ ๋ฐ ์†Œ์œ ์ž์™€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋‹ค๋ฅผ๊นŒ์š”? npm ์„ธ๊ณ„์—์„œ repository ํ•„๋“œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํŒจํ‚ค์ง€์˜ ์ฝ”๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ์—ฐ์Šต ํ•˜๋‚˜์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค auto A์˜ fork ๊ทธ๋“ค์ด์— ์žˆ๋‹ค๋ฉด ๋‚˜๋Š” ๊ทธ๋“ค์ด์ด ์—…๋ฐ์ดํŠธ ํฌ๋ง repository ์ž์‹ ์˜ ํฌํฌ์— ํ•„๋“œ๋ฅผ

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ ์ ˆํ•œ ๋™์ž‘์€ ํ•ด๋‹น ํ•ญ๋ชฉ(ํ˜„์žฌ)์„ ์ฐพ๋Š” ๊ฒƒ์ด๋ฉฐ pom.xml ์—์„œ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฉด .autorc (์ƒˆ ๋™์ž‘).

๋Š” ์ฐพ์„ ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ ํ˜„์žฌ ํ”Œ๋Ÿฌ๊ทธ์ธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ <scm/> ๋ฐ <developers/> ์˜ ์„น์…˜ pom.xml .

์•„, ํ™•์‹คํžˆ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/intuit/auto/blob/master/plugins/npm/src/index.ts#L504

๊ธฐ๊ณ„๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ auto ์—์„œ ๋ฒ„์ „ NUMBER๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? auto version ๋ช…๋ น์ด ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฒ„์ „ ๋ฒ”ํ”„์˜ TYPE์„ ์ƒ์„ฑํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ๋†€๋ž์Šต๋‹ˆ๋‹ค.

--quiet ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ช…๋ น์œผ๋กœ ์ƒ์„ฑ๋œ ๋ฒ„์ „๋งŒ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” --dry-run ์™€ ํŽ˜์–ด๋งํ•˜๋ฉด ๋‹ค์Œ์— ๊ฒŒ์‹œ๋  ๋ฒ„์ „์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

version ๊ฐ€ ์‹ค์ œ ๋ฒ„์ „์„ ๋ฑ‰์–ด๋‚ด๋„๋ก ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค์ค‘ ํŒจํ‚ค์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ด์ƒํ•ด์ง‘๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐพ๊ณ  ์žˆ๋Š” ๋ฒ„์ „์„ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœ์ž์—๊ฒŒ ๋งก๊ธฐ๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์ค‘ ํŒจํ‚ค์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์š”์ ์€ ์—ฌ๊ธฐ์—์„œ ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค. maven-release-plugin์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•ด๋‹น ์œ ํ˜•์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘ํ’ˆ์„ ์žฌํ˜„ํ•˜๊ณ  ์‹ถ์€์ง€ ์˜๋ฌธ์ด ๋“ญ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•ฝ๊ฐ„์˜ ๊ต์ฐฉ ์ƒํƒœ์— ๋น ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œํŽธ์œผ๋กœ๋Š” maven-release-plugin์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ œ ์ฃผ์žฅ์ด ์œ ํšจํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ๋Š” ํ•˜์œ„ ๋ชจ๋“ˆ ๋ฒ„์ „ ๊ด€๋ฆฌ์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌ์†Œํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค. ํ•ด๊ฒฐ๋˜์–ด์•ผ ํ•˜๋ฉฐ maven-release-plugin์— ์˜ํ•ด ๋‹ค๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

release:prepare ๋™์•ˆ maven ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ €์žฅ์†Œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” maven-release-plugin์„ ์‚ฌ์šฉํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์œผ๋ฉฐ ์˜ค๋Š˜ ๋‚˜์ค‘์— ํ…Œ์ŠคํŠธํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

@hipstersmoothie getAuthor , getRepo ๋“ฑ ํ›„ํฌ ๋™์ž‘์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค . - RE:

์˜ˆ์‹œ:
https://github.com/intuit/auto/blob/47d3b54ef1a7af990fe0ca898e747dd833fde3b1/plugins/maven/__tests__/maven.test.ts#L95

๋”ฐ๋ผ์„œ undefined AuthorInformation ๋ฐ˜ํ™˜ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ฌด์—‡์„ ์ž˜๋ชปํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋˜๋Š” ํ›„ํฌ ์ฒ˜๋ฆฌ์— throw ๋ฅผ ๋‹ค์‹œ ๋„์ž…ํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค๋ฅธ ๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ๊ณ ๋ คํ•  ๋•Œ ์ด๋Š” ํ™•์‹คํžˆ ์ž˜๋ชป๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. undefined๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด core ๋Š” ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋กœ์ปฌ๋กœ ๊ตฌ์„ฑ๋œ git ์‚ฌ์šฉ์ž๋กœ ํด๋ฐฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Gotcha - ๊ทธ๊ฒŒ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ์‹คํŒจํ•œ ํ›„ํฌ๊ฐ€ undefined ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„์ „์„ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฉด gradle ๋ฐ cocoapods ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ชจ๋‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. gradle ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ๋ฒ„๊ทธ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. cocoapods์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๋ฒ„๊ทธ๋ฅผ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ?

๋ฌธ์ œ์— ๋Œ€ํ•ด ๊ทธ๋ƒฅ ๋‘์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์žก์•„์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

hooks.beforeRun ๋™์•ˆ ๊ฐ’ ์ดˆ๊ธฐํ™”๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ์ข‹์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋””๋ฒ„๊ทธ ์ƒํƒœ์—์„œ hooks.beforeRun ํƒญ ์ค‘์— ์ž‘์„ฑ์ž ์ •๋ณด๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ถ”์ถœํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ์— ์‹คํŒจํ•˜๋Š” ๋‹ค์Œ ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

    test("should get author from pom.xml", async () => {
      mockRead(`
        <project
          xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
          <developers>
            <developer>
              <name>Andrew Lisowski</name>
              <email>[email protected]</email>
            </developer>
          </developers>
        </project>
      `);

      await hooks.beforeRun.promise({} as any);

      expect(await hooks.getAuthor.promise()).toStrictEqual(
        expect.objectContaining({
          email: "[email protected]",
          name: "Andrew Lisowski",
        })
      );
    });

beforeRun ํ›„ํฌ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธ๊ฐ€ getAuthor ํ›„ํฌ์— ๋„๋‹ฌํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋‹ค๋ฅธ ์ฝ”๋“œ (gradle, s3)๋ฅผ ๋ณด์•˜๊ณ  ์šด์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ beforeRun ํ›„ํฌ๋ฅผ ๊ฒฐ์ •๋ก ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๊ณ  ์ˆ˜ํ–‰ ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ถ„๊ธฐ๋ฅผ ํ‘ธ์‹œํ•˜๋ฉด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@hipstersmoothie ์—ฌ๊ธฐ ์ง€์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/terradatum/auto/tree/remove-maven-release-plugin-requirement

์›๊ฒฉ ๊ธฐ๋ก์„ ์˜ค์—ผ์‹œํ‚ค์ง€ ์•Š๊ณ  ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ค‘์•™ ์ €์žฅ์†Œ๋กœ ํ‘ธ์‹œํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•ด ๋„์›€์„ ์ฃผ์‹œ๋ฉด ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. "์ฝ”๋“œ๋ฅผ ์‹ค์ œ ํŒŒ์ผ์„ ํ™•์ธํ•˜๊ณ , git reset --hard HEAD~1 ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ œ๊ฑฐํ•˜๊ณ , ํ—น๊ตฌ๊ณ  ๋ฐ˜๋ณตํ•˜์‹ญ์‹œ์˜ค."

๋˜ํ•œ IntelliJ์—์„œ jest ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ฃจํŠธ package.json ์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋กœ์ปฌ package.json ๋ฅผ ์ผ๋ถ€ ๋ณ€๊ฒฝํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋Š” ์ง€์นจ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋ฐ”๋กœ "์ž‘๋™"ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

ํŠนํžˆ, maven ํ”Œ๋Ÿฌ๊ทธ์ธ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๊ณ  npm test ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ - "test": "jest --maxWorkers=2 --config ../../package.json" ๋•Œ๋ฌธ์— ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘๊ธฐ์—์„œ IntelliJ Test Runner๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

  โ— Test suite failed to run

    SyntaxError: /home/rbellamy/Development/Terradatum/auto/plugins/maven/__tests__/maven.test.ts: Unexpected token, expected "," (15:24)

      13 | }));
      14 | 
    > 15 | const mockRead = (result: string) =>
         |                         ^
      16 |   jest
      17 |     .spyOn(fs, "readFile")
      18 |     // @ts-ignore

      at Parser._raise (../../node_modules/@babel/parser/src/parser/location.js:241:45)
      at Parser._raise [as raiseWithData] (../../node_modules/@babel/parser/src/parser/location.js:236:17)
      at Parser.raiseWithData [as raise] (../../node_modules/@babel/parser/src/parser/location.js:220:17)
      at Parser.raise [as unexpected] (../../node_modules/@babel/parser/src/parser/util.js:149:16)
      at Parser.unexpected [as expect] (../../node_modules/@babel/parser/src/parser/util.js:129:28)
      at Parser.expect [as parseParenAndDistinguishExpression] (../../node_modules/@babel/parser/src/parser/expression.js:1293:14)
      at Parser.parseParenAndDistinguishExpression [as parseExprAtom] (../../node_modules/@babel/parser/src/parser/expression.js:1029:21)
      at Parser.parseExprAtom [as parseExprSubscripts] (../../node_modules/@babel/parser/src/parser/expression.js:539:23)
      at Parser.parseExprSubscripts [as parseMaybeUnary] (../../node_modules/@babel/parser/src/parser/expression.js:519:21)
      at Parser.parseMaybeUnary [as parseExprOps] (../../node_modules/@babel/parser/src/parser/expression.js:311:23)

jest.config.ts ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ IntelliJ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

module.exports = {
  clearMocks: true,
  moduleFileExtensions: ['js', 'ts'],
  testEnvironment: 'node',
  testMatch: ['**/*.test.ts'],
  testRunner: 'jest-circus/runner',
  transform: {
    '^.+\\.ts$': 'ts-jest'
  },
  verbose: true
}

๊ทธ๋ฆฌ๊ณ  ์ถ”๊ฐ€ jest-circus ๋ฃจํŠธ ๋˜๋Š” ๋ฐ›๋Š”๋‹ค๋Š” ํ•˜๋‚˜์— package.json ํŒŒ์ผ.

xml2js ๋Š” XML => JSON => XML ๋ณ€ํ™˜ ๋™์•ˆ ๋ชจ๋“  XML ์ฃผ์„์„ ์ž๋™์œผ๋กœ ์ œ๊ฑฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž„์„ ๋ฐฉ๊ธˆ ์•Œ์•„์ฐจ๋ ธ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ž‘๋™์‹œํ‚ค๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๊ณ , ๊ทธ๊ฒƒ์€ ์ด๋นจ์„ ๋ฝ‘๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค. xml2js ๋ณ€ํ™˜์„ ํ†ตํ•ด ์ด๋™ํ•  ๋•Œ XML์ด ์›๋ณธ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๋ณด์ผ ๊ฒƒ์ด๋ผ๋Š” ๋ณด์žฅ์€ ์—†์œผ๋ฉฐ ์ด๋Š” ๊ฑฐ๋ž˜ ์ฐจ๋‹จ๊ธฐ์ž…๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋ฃจํŠธ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

yarn test plugins/maven

๊ทธ๋Ÿฌ๋ฉด ์‹ค์ œ๋กœ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ ๋งŒ๋“ค๋ ค๋Š” ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด๋‚˜ ๋นŒ๋“œํ•  ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์‰ฝ๊ฒŒ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ด ์ƒ๊น๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๊ฝค ํฐ ๋ฌธ์ œ์˜ ์ฐจ๋‹จ๊ธฐ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ํŒŒ์ผ์„ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” Java ํ™˜๊ฒฝ์— ์ œ๊ณต๋˜๋Š” ํ‘œ์ค€ CLI๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ตฌ์„ฑ ํŒŒ์ผ(์˜ˆ: ruby)์— ๋Œ€ํ•œ ํŒŒ์„œ๊ฐ€ ์—†๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๊ฒฝ์šฐ auto ๋Š” ๋Œ€๋ถ€๋ถ„ ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

beforeRun ์ด์Šˆ๋ฅผ ๋ณผ ๊ธฐํšŒ๊ฐ€ ์žˆ์—ˆ๋‚˜์š”? ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ ์ •๋ง ํ•ดํ‚น ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ...

XML๊ณผ ํ•จ๊ป˜ ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ์•„์ด๋””์–ด๋Š” ์ •๋ง ์‹ซ์Šต๋‹ˆ๋‹ค. XML์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๊ณ  ๋ถ€์„œ์ง€๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ DOMParser ๋˜๋Š” XMLSerializer ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ„์ „์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ๋„ ์—„์ฒญ๋‚˜๊ฒŒ ๋ณต์žกํ•ด ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์—๋Š” xml2js ๋กœ ์ž‘์—…ํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ์ด๊ฒƒ์„๋ณด๊ณ !

https://github.com/terradatum/auto/blob/remove-maven-release-plugin-requirement/plugins/maven/src/index.ts#L127

๋ฌธ์ œ๋Š” "๋™๊ธฐ์‹" ํƒญ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚ด๋ถ€์—์„œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ๋ณ€๊ฒฝ

auto.hooks.beforeRun.tap(this.name, async () => {

์ด์—

auto.hooks.beforeRun.tapPromise(this.name, async () => {

์•„ ์‹คํ–‰ ์ „ ํ›„ํฌ๊ฐ€ ์ง€๊ธˆ ๋™๊ธฐํ™”๋˜์–ด์žˆ์–ด ๊ทธ๊ฒŒ ์ง„์งœ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฐ€ ๋œ ๊ฒฝ์šฐ๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ณ€ํ•˜์ง€ ์•Š์„ ๊ฒƒ AsyncSeriesHook ๋Œ€์‹ ์˜ SyncHook . ๋‚ด๊ฐ€ ๋งํ•˜๋Š” ๊ฒƒ์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ปค๋ฐ‹์„ ๋ธŒ๋žœ์น˜๋กœ ํ‘ธ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ๋ฐœ... ๋‚ด๊ฐ€ ๋‹น์‹ ์„ ๊ธฐ์—ฌ์ž๋กœ ๋งŒ๋“ค๊ฒŒ ํ•ด์ฃผ์„ธ์š”.

๊ฐ€์ž!

๊ทธ๋ƒฅ ๋ฐ€์–ด. ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ๊ณ  ์ง€๊ธˆ์€ 2๊ฐœ๋งŒ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. beforeRun ํ›„ํฌ๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@hipstersmoothie terradatum/auto repo์— ๋Œ€ํ•œ ์ปค๋ฐ‹์ด ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์ด์ œ ๋‚˜๋Š” ์‹ค์ œ๋กœ ๋ฐ€์—ˆ๋‹ค

ํ˜„์žฌ ๋™๊ธฐ ํƒญ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์— ํฐ ๋ณ€ํ™”๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”. ๋™๊ธฐํ™” ํƒญ์€ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹จ์ง€ ์•ฝ์†์„ ํƒญํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค

๊นจ์ง€๊ธฐ ์‰ฌ์šด/์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฌ์šด ์ •๊ทœ์‹์œผ๋กœ ์ด ์ž‘์—…์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ด€์‹ฌ์‚ฌ๋Š” <version/> ์š”์†Œ๊ฐ€ pom.xml ํŒŒ์ผ์˜ ๋ชจ๋“  ๊ณณ์—์„œ - ์•„ํ‹ฐํŒฉํŠธ ๋ฒ„์ „๊ณผ ์ข…์†์„ฑ ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•ด ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ •๊ทœ์‹์€ ์˜๋„ํ•˜์ง€ ์•Š์€ ๋ฒ„์ „์„ ์‹ค์ˆ˜๋กœ ๋ณ€๊ฒฝํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

XML DOM(xmldom, xmldom-ts, xml2js, xml2json ๋“ฑ์„ ํ†ตํ•ด)์œผ๋กœ ์ž‘์—…ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์—„์ฒญ๋‚œ ๊ทœ๋ชจ์˜ ์ˆ˜๋ ์— ๋น ์ ธ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฒฐ์ฝ” ์Šค์Šค๋กœ๋ฅผ ํƒ€์ดํ”„์Šคํฌ๋ฆฝํŠธ๋‚˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ „๋ฌธ๊ฐ€๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋งˆ ์ œ๊ฐ€ ๋„˜์–ด์ง€๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€๊ฐ€ ๋‚ด ์—‰๋ฉ์ด๋ฅผ ๊ฑท์–ด์ฐจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  1. IntelliJ๊ฐ€ ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ maven ํ…Œ์ŠคํŠธ(๋ฐ maven ํ…Œ์ŠคํŠธ๋งŒ)๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋•Œ๋กœ๋Š” ์ž‘๋™ํ•˜๊ณ  ๋•Œ๋กœ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. pom.xml์„ Document ๋กœ๋“œํ•œ ๋‹ค์Œ xpath๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "/project/version" ๋ฐ "/project/parent/version" ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ๋‘ ๋ฌธ์ œ ์‚ฌ์ด์—์„œ ๋‚˜๋Š” ์•„๋งˆ ์ด 12~16์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์„ ๊ฒƒ์ด๊ณ , ๋‚˜๋Š” ์ •๋ง๋กœ ์ขŒ์ ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜ ์•„์นจ๊นŒ์ง€ 1๋ฒˆ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์—ˆ๊ณ  2๋ฒˆ์€ ๋น„๊ต์  ๋‹จ์ˆœํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ๋งค๋ฒˆ ์ €์™€ ์‹ธ์šฐ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

pom.xml ํŒŒ์ผ ์—…๋ฐ์ดํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์—„์ฒญ๋‚˜๊ฒŒ ๊ฐ„๋‹จํ•œ ์ด์œ  ๋•Œ๋ฌธ์— maven-release-plugin์„ ๋‹ค์‹œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

IntelliJ๊ฐ€ ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ maven ํ…Œ์ŠคํŠธ(๋ฐ maven ํ…Œ์ŠคํŠธ๋งŒ)๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋•Œ๋กœ๋Š” ์ž‘๋™ํ•˜๊ณ  ๋•Œ๋กœ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๋„์›€์ด ๋˜์ง€ ๋ชปํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” VSCode๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์˜ ๋””๋ฒ„๊ทธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. yarn test plugins/maven ๋ฃจํŠธ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

pom.xml์„ ๋ฌธ์„œ์— ๋กœ๋“œํ•œ ๋‹ค์Œ xpath๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "/project/version" ๋ฐ "/project/parent/version" ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ข‹์€ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

pom.xml ํŒŒ์ผ ์—…๋ฐ์ดํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์—„์ฒญ๋‚˜๊ฒŒ ๊ฐ„๋‹จํ•œ ์ด์œ  ๋•Œ๋ฌธ์— maven-release-plugin์„ ๋‹ค์‹œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

https://stackoverflow.com/questions/5726291/updating-version-numbers-of-modules-in-a-multi-module-maven-project ์™€ ๊ฐ™์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ธฐ๋ฐ˜ ํ•ญ๋ชฉ๋งŒ maven์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ฎ์€ ์ˆ˜์ค€์˜ mvn ๊ธฐ๋ฐ˜์˜ ๊ฒƒ์ด ์™„๋ฒฝํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.


BTW ์ด๊ฒƒ์— ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

ํ”ผ๋“œ๋ฐฑ๊ณผ ์ง€์›์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. rant(ish) ์ด์ „ ๋Œ“๊ธ€์— ๋Œ€ํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

Versions-maven-plugin์— ๋Œ€ํ•œ ์ข‹์€ ์  - ์ด์ „์— ์ž‘์—…ํ•œ ์ ์ด ์—†๊ณ  ๊ทธ๊ฒƒ์ด ์กด์žฌํ•˜๋Š”์ง€ ์ „ํ˜€ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํ™•์‹คํžˆ ๋‚˜๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค ... ๊ทธ๊ฒƒ์€ maven-release-plugin๊ณผ ์ž๋™ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด pom.xml ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๋ ค๋Š” ๊ฒƒ ์‚ฌ์ด์˜ ์™„๋ฒฝํ•œ ์ ˆ์ถฉ์•ˆ์ž…๋‹ˆ๋‹ค.

yarn test plugins/maven ์„(๋ฅผ) ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ ๋” ์ „ํ†ต์ ์ธ console.log ๋ณด๋‹ค๋Š” ๋””๋ฒ„๊ฑฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌผ๊ฑด์„ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ์ด ์•„๋งˆ๋„ ์ œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ๋ณด๋‹ค ๋” ๊ฐ€์Šด ์•“์ด๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ณณ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค...

๊ธธ๊ณ  ํž˜๋“  ์—ฌ์ • ๋์— pom.xml ํŒŒ์ผ์„ ์ง์ ‘ ์ˆ˜์ • ํ•˜๊ฑฐ๋‚˜ versions-maven-plugin ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ„์ „์„ ์„ค์ •ํ•˜๋Š” ์™„์ „ํ•œ ์†”๋ฃจ์…˜์ด ๊ฑฐ์˜ ์™„์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ์ฃผ์˜์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. pom.xml ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ๋Š” DOM๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  1. "dom" ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ "compilerOptions" "es2017" ์•ž์— ์žˆ์–ด์•ผ ํ•˜๋Š” tsconfig.json ์ฒ˜๋ฆฌ์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณต์žฅ:

"compilerOptions": [ "dom", "es2017" ]

์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค:

"compilerOptions": [ "es2017", "dom" ]

"์ˆ˜์ •"์ด ์—†์œผ๋ฉด ๋‹ค์Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

$ tsc -b tsconfig.dev.json
node_modules/@types/jsdom/index.d.ts:28:40 - error TS2304: Cannot find name 'DocumentFragment'.

28         static fragment(html: string): DocumentFragment;
                                          ~~~~~~~~~~~~~~~~

node_modules/@types/jsdom/index.d.ts:45:28 - error TS2304: Cannot find name 'Node'.

45         nodeLocation(node: Node): ElementLocation | null;
                              ~~~~

node_modules/@types/jsdom/index.d.ts:188:19 - error TS2304: Cannot find name 'HTMLScriptElement'.

188         element?: HTMLScriptElement | HTMLLinkElement | HTMLIFrameElement | HTMLImageElement;
                      ~~~~~~~~~~~~~~~~~

node_modules/@types/jsdom/index.d.ts:188:39 - error TS2304: Cannot find name 'HTMLLinkElement'.

188         element?: HTMLScriptElement | HTMLLinkElement | HTMLIFrameElement | HTMLImageElement;
                                          ~~~~~~~~~~~~~~~
<snip - numerous other errors>
  1. jest ํ…Œ์ŠคํŠธ์—๋Š” testEnvironment: 'jsdom' ์™€ ๋‹ฌ๋ฆฌ 'node' ํ•ฉ๋‹ˆ๋‹ค.

"์ˆ˜์ •"์ด ์—†์œผ๋ฉด ๋‹ค์Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

$ jest --runInBand plugins/maven
 FAIL  plugins/maven/__tests__/maven.test.ts
  maven
    updatePomVersion
      โœ• should replace the previousVersion with the newVersion (39ms)

  โ— maven โ€บ updatePomVersion โ€บ should replace the previousVersion with the newVersion

    ReferenceError: XPathEvaluator is not defined

      51 | ) => {
      52 |   const pomDom = new jsdom.JSDOM(content, {contentType: "text/xml"}).window.document;
    > 53 |   const evaluator = new XPathEvaluator();
         |                     ^
      54 |   const resolver = evaluator.createNSResolver(pomDom.documentElement);
      55 |   const expression = evaluator.createExpression("/project/version", resolver);
      56 |   const versionNode = expression.evaluate(pomDom.documentElement, XPathResult.FIRST_ORDERED_NODE_TYPE);

      at Object.exports.updatePomVersion (plugins/maven/src/index.ts:53:21)
      at Object.test (plugins/maven/__tests__/maven.test.ts:53:26)

ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋ฃจํŠธ ๊ตฌ์„ฑ์— ์„ค์ •๋œ ๊ฒฝ์šฐ ์œ„์˜ "์ˆ˜์ •" ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์˜ˆ: plugins/maven/tsconfig.json ๋˜๋Š” plugins/maven/package.json ์˜ jest ๊ตฌ์„ฑ ๋ชจ๋‘). ๋ฃจํŠธ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•ด๋„ ํ…Œ์ŠคํŠธ๋‚˜ ๊ธฐ๋Šฅ์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‹น์‹ ์˜ ์ง€์ ์— ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ์•„๋งˆ ์ด๊ฒƒ์„ ๊ณ ์น  ์ˆ˜ ์žˆ๋‹ค

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

๋ฐฉ๊ธˆ master๋ฅผ ๋‚ด ๋ธŒ๋žœ์น˜๋กœ ๋ฆฌ๋ฒ ์ด์Šคํ–ˆ๋Š”๋ฐ ์ด์ œ ๋ช‡ ๊ฐ€์ง€ ๋นŒ๋“œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋จผ์ € yarn.lock ํŒŒ์ผ์ด ๋ณ‘ํ•ฉ ์ถฉ๋Œ๋กœ ์ธํ•ด ์ค‘๋‹จ๋˜์—ˆ์œผ๋ฏ€๋กœ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

error Incorrect integrity when fetching from the cache for "babel-plugin-jest-hoist". Cache has "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g== sha1-EpyAulx/x1uvOkW5Pi43LVfKJnc=" and remote has "sha512-+AuoehOrjt9irZL7DOt2+4ZaTM6dlu1s5TTS46JBa0/qem4dy7VNW3tMb96qeEqcIh20LD73TVNtmVEeymTG7w==". Run `yarn cache clean` to fix the problem

์ผ๋‹จ ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด ์ด์ œ @octokit/graphql ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

$ tsc -b tsconfig.dev.json
packages/core/src/auto.ts:2018:13 - error TS2571: Object is of type 'unknown'.

2018         if (result?.[`hash_${commit}`]) {
                 ~~~~~~

packages/core/src/auto.ts:2019:27 - error TS2571: Object is of type 'unknown'.

2019           const number = (result[`hash_${commit}`] as ISearchResult).edges[0]
                               ~~~~~~

packages/core/src/release.ts:286:52 - error TS2769: No overload matches this call.
  Overload 1 of 2, '(o: ArrayLike<unknown> | { [s: string]: unknown; }): [string, unknown][]', gave the following error.
    Argument of type 'unknown' is not assignable to parameter of type 'ArrayLike<unknown> | { [s: string]: unknown; }'.
      Type 'unknown' is not assignable to type '{ [s: string]: unknown; }'.
  Overload 2 of 2, '(o: {}): [string, any][]', gave the following error.
    Argument of type 'unknown' is not assignable to parameter of type '{}'.

286       (acc, result) => [...acc, ...(Object.entries(result) as QueryEntry[])],
                                                       ~~~~~~


packages/core/src/__tests__/git.test.ts:209:12 - error TS2571: Object is of type 'unknown'.

209     expect(result!.data).not.toBeUndefined();
               ~~~~~~~


Found 4 errors.

error Command failed with exit code 2.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์œ„ํ•œ PR์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋งค์šฐ ํฌ๋งํ–ˆ์ง€๋งŒ ์•„์ง ์ค€๋น„๊ฐ€ ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์ด ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค.

๋‚œ ๊ทธ๋ƒฅ ์ฒดํฌ ์•„์›ƒ - ์ข‹์•„, ๋‚ด๊ฐ€ ํ•  ํ•„์š”๊ฐ€ ๋ฌด์—‡์ธ์ง€ํ–ˆ๋‹ค yarn.lock ์—์„œ ํŒŒ์ผ master ๋‹ค์Œ-์‹คํ–‰ ๋‹ค์‹œ yarn clean && yarn install && yarn build && yarn test plugins/maven ํ•˜๊ณ  ๋‚ด๊ฐ€ ์ž˜ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์š” -๊ฐ€๋‹ค.

์—„์ฒญ๋‚œ! ์˜ค๋Š˜ ๋ฆฌ๋ทฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฃผ๋ง์— ๋‹ต์žฅ์„ ๋“œ๋ฆฌ์ง€ ๋ชปํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค!


:rocket: v9.40.0 ์—์„œ ๋ฐœํ–‰๋œ ๋ฌธ์ œ :rocket:

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰