auto
maven
ํ๋ฌ๊ทธ์ธ์ ๋ฆฌํฉํ ๋งํ๋ ์์
์ ์์ํ์ฌ auto
์ ๋๋จธ์ง ๋ถ๋ถ๊ณผ ๋ ์ผ๊ด์ฑ์ ์ ์งํ๋ ค๊ณ ํ์ต๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด์ ์ ๋ ๋ช ๊ฐ์ง ๊ฒฐ๋ก ์ ๋๋ฌํ์ต๋๋ค.
maven
ํ๋ฌ๊ทธ์ธ์ด ์๋ auto
๋ํ ํ์ฌ ์๊ตฌ ์ฌํญ์ ํ๋ก์ ํธ์์ maven-release-plugin
์
๋๋ค. ์ด๊ฒ์ auto
์ ํฉํ์ง ์๊ฒ ๋ง๋๋ ๋ช ๊ฐ์ง ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
maven-release-plugin
์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ release:prepare
๋ฅผ ํตํด ๋ค์ ๋จ๊ณ๋ฅผ ์คํํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ release:perform
๋ฅผ ํตํด ๋ฆด๋ฆฌ์ค๊ฐ ์ํ๋ฉ๋๋ค.
deploy
site-deploy
).ํ๋ฌ๊ทธ์ธ์ด auto
์ ์ผ์นํ๋ ๋ฐฉ์์ผ๋ก ์๋ํ๋๋ก ํ๊ธฐ ์ํด ํ์ฌ ๊ตฌํ์์๋ release:prepare
๋ชฉํ์ ์ํด ์ํ๋ ์ปค๋ฐ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ผ๋ถ git ํด์ปค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฆ, maven-release-plugin
๋ auto
์ด ์ค๊ณ๋ ์์
์ ์ํํ๋ฏ๋ก ๋ ์ฐ์ํ ๋ฐฉ์์ผ๋ก "ํด๊ฒฐ"ํด์ผ ํฉ๋๋ค.
๋๋ฑํ ์ค์์ฑ์ ์ ์ฅ์ ๋ฐ ์ ์ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์
๋๋ค - ํ์ฌ maven
์ฉ๋๋ฅผ ํ๋ฌ๊ทธ์ธ <scm/>
๋ฐ <developers/>
์ ์น์
์ pom.xml
๋์ถ ๊ทธ ์ ๋ณด. ์ด๊ฒ์ git ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๋๋จธ์ง auto
์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ก ์์ ๋ฒ์ด๋ฉ๋๋ค. ํ์ฌ ๊ตฌํ์๋ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
author
๋น์ ์ค์ <developers/>
์ ๋จ๋ฉด pom.xml
MAY ์ ํ๋ ๊ฒ๊ณผ ๋์ผ ํ ์ปค๋ฐ ์ฌ๋์ด ํ ๊ฒ์ ์๋ฏธ author
. <developers/>
์ ๋ณด์ ํจ๊ป git commit ์์ฑ์๋ฅผ ์ ๋ ฌํ๋ ค๋ ์๋๊ฐ ์์ต๋๋ค.owner
๋ฐ repo
์ ๋ณด๋ <scm/>
์น์
์ ํตํด ์ค์ ๋๋ฉฐ ํ์ฌ ๋ณต์ ๋ณธ์ ์ค์ ์ ์ฅ์ ๋ฐ ์์ ์์ ๋ค๋ฅผ ์ ์์ต๋๋ค.ํ๋ฌ๊ทธ์ธ์ ๊น์ ๋ค์ด๋น ์ผ์ํ๊ณ ์ ๋น๊ต์ gradle
ํ๋ฌ๊ทธ์ธ,์ ์ ์ผํ ๋ชฉํ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค maven-release-plugin
๋์์ด ๋ ๊ฒ์
๋๋ค release:update-versions
๋ชฉํ. ๊ทธ ๋ชฉํ๋ ๊ฐ๋จํ XML ์ฒ๋ฆฌ๋ก ์ฝ๊ฒ ๋์ฒด๋ ์ ์์ต๋๋ค.
maven-release-plugin
๋ฅผ ์ ์งํ๋ ๋ฐ ๋๋ ์ค๋ฒํค๋์ ์ต์ํ์ ์ด์ ์ ๊ฐ์ํ ๋ ๋ด ์๊ฐ์ ์๊ตฌ ์ฌํญ์ ํด์ ํ๊ณ auto
maven
ํ๋ฌ๊ทธ์ธ์ ๋ ๋ง์ auto
์์ ๊ตฌํํด์ผ ํ๋ค๋ ๊ฒ์
๋๋ค
์์ ํ ๋์ ํด!
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:
๋ฐ๋ผ์ 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
๋ก ์์
ํ๋ ค๊ณ ํ์ต๋๋ค.
์ง๊ธ ์ด๊ฒ์๋ณด๊ณ !
๋ฌธ์ ๋ "๋๊ธฐ์" ํญ์ ์ํํ๊ณ ๋ด๋ถ์์ ๋น๋๊ธฐ ์์ ์ ์ํํ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ๋ณ๊ฒฝ
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 ๋ฑ์ ํตํด)์ผ๋ก ์์ ํ๋ ค๊ณ ํ ๋ ์์ฒญ๋ ๊ท๋ชจ์ ์๋ ์ ๋น ์ ธ ์์์ต๋๋ค. ๋๋ ๊ฒฐ์ฝ ์ค์ค๋ก๋ฅผ ํ์ดํ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ ๋ฌธ๊ฐ๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ทธ๋์ ์๋ง ์ ๊ฐ ๋์ด์ง๊ณ ์๋ ๋ถ๋ถ์ผ ๊ฒ์ ๋๋ค.
๋ ๊ฐ์ง๊ฐ ๋ด ์๋ฉ์ด๋ฅผ ๊ฑท์ด์ฐจ๊ณ ์์ต๋๋ค.
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๊ณผ ํจ๊ป ์๋ํ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํฉ๋๋ค.
"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>
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: