κΈ°λ₯ μμ²μ΄ λ¬Έμ μ κ΄λ ¨λμ΄ μμ΅λκΉ?
μ§κΈμ νλ‘μ νΈλΉ νλμ ν¨ν€μ§ κ΄λ¦¬μ νλ¬κ·ΈμΈλ§ μ¬μ©ν μ μμ΅λλ€. μ¦, chrome-web-store
νλ¬κ·ΈμΈκ³Ό npm
νλ¬κ·ΈμΈμ νλμ μ μ₯μμμ μ¬μ©ν μ μμ΅λλ€.
μνλ μ루μ μ€λͺ
μ΄ μ νμ νμ¬ auto
κ° git νλ‘μ νΈλ₯Ό κΈ°λ°μΌλ‘ μλνκ³ ν¨ν€μ§ κ°λ
μ΄ μκΈ° λλ¬Έμ
λλ€.
npm
νλ¬κ·ΈμΈμμ sub-packages
λν λ³κ²½ λ‘κ·Έ κ΄λ¦¬ λ° κ°λ³ 릴리μ€λ₯Ό μννλ λ°©λ²μ 보μ¬μ£Όμμ΅λλ€. μ΄κ²μ λͺ¨λ lerna
μ£Όμλ₯Ό κΈ°λ°μΌλ‘ νλ©° μ€μ λ‘ core
λ‘ μ΄λν μ μμ΅λλ€.
κ·Έλ¬λ κ° ν¨ν€μ§ κ΄λ¦¬μ νλ¬κ·ΈμΈμ ν¨ν€μ§ κ΄λ¦¬μλ₯Ό μν λͺ κ°μ§ μΆκ° νμΌ( git-tag
μ μΈ)μ μμ‘΄νκΈ° λλ¬Έμ λ€μκ³Ό κ°μ΄ μμ£Ό μ½κ² ν μ μμ΅λλ€.
μ: npm νλ¬κ·ΈμΈ
package.json
(λ¨μΌ λλ lerna)λ₯Ό μ°ΎμΌλ €κ³ ν©λλ€.auto
λ ν΄λΉ ν΄λμ λͺ¨λ νλͺ©μ package
μ μΌλΆλ‘ κ°μ£Όν©λλ€.auto
λ κ° package
λν κ³ μ ν λ³κ²½ λ‘κ·Έλ₯Ό κ΄λ¦¬ν©λλ€.μ΄κ²μ μ μ¬μ μΌλ‘ μ’μ§ μμ κ²½νμ΄ λ μ μμ΅λλ€. λμ ν΄λμ λͺ¨λ ν¨ν€μ§ κ΄λ¦¬μ νλ¬κ·ΈμΈμ μΆκ° κ΅¬μ± μ΅μ
μ μΆκ°ν μ μμ΅λλ€. μ΄κ²μ λν git-tg
νλ¬κ·ΈμΈμ μ§μν μ μμ΅λλ€(κ·Έλ¦¬κ³ κ·Έκ²μ΄ μλνλλ‘ νλ λ° νμν κ²μ
λλ€).
package
μ λν΄ λ³λμ 컀λ°μ μν μλ μμ΅λλ€.package
λν λ³κ²½ λ‘κ·Έλ μμ±ν©λλ€.κ³ λ €ν λμμ κΈ°μ νμμμ€
μ λ§ μ무κ²λ.
μ‘°κΈ λ μκ°ν΄λ³΄λ©΄ μλ‘μ΄ μ΅μμ κ΅¬μ± μ΅μ μ λμ νλ κ²μ΄ λ ν©λ¦¬μ μΌ κ²μ λλ€.
{
// Still have some global config at root
"name": "Andrew Lisowski",
"email": "[email protected]",
// Plugins used for every package
"plugins": ["conventional-commits"],
"packages": [
// Target specific directories and apply a set of plugins to them
{
"target": "www",
"plugins": ["git-tag"]
},
{
"target": "api",
"plugins": ["npm"]
},
// Specify a pattern or even and array of patterns or directories
{
"target": ["packages/**", "utils"],
"plugins": ["npm"]
},
{
"target": "web-store",
"plugins": [
"chrome-web-store",
// Whole lifecycle is run for each package so you can have package plugins
["upload-assets", { "assets": ["./path/to/file"] }]
]
}
]
}
μ΄λ₯Ό λ¬μ±νκΈ° μν΄ λ°λ³΅μ ν¨μλ₯Ό μ¬μ©νμ¬ μ¬λ¬ νλͺ©μ λν΄ shipit
λ₯Ό μ€ννκ³ λμΌν μμ 컀λ°μ μμ±ν μ μλ€κ³ μκ°ν©λλ€.
μ: μ΅μ :
μ΄ μ€μ μ μ¬μ©νλ©΄ lernaλ₯Ό ν¨κ» 건λλΈ μ μμ΅λλ€.
{
"name": "Andrew Lisowski",
"email": "[email protected]",
"packages": [
{
"target": "packages/**",
"plugins": ["npm"]
}
]
}
package
μ μΌμΉνλ 컀λ°μ΄ μμΌλ©΄ 릴리μ€κ° μ΄λ£¨μ΄μ§μ§ μμ΅λλ€. μ΄κ²μ lerna
μμ΄ ν¨μ¬ κ°λ¨ν λ°©μμΌλ‘ λ
립μ μΈ λͺ¨λ
Έλ ν¬ κ΄λ¦¬λ₯Ό μνν©λλ€. κ³ μ λ²μ λͺ¨λ
Έλ ν¬λ₯Ό μνμ λ€λ©΄ ν΄λμ 루νΈλ₯Ό μ ννλ κ²μ΄ μ’μ΅λλ€.
μ΄κ²μ λ λ€λ₯Έ λ©μ§ κΈ°λ₯μ 리ν¬μ§ν 리μ μλ‘ λ€λ₯Έ λ²μ κ΄λ¦¬ 체κ³( fixed
λ° independent
)λ₯Ό μ¬μ©νμ¬ λ κ°μ leran
νλ‘μ νΈλ₯Ό κ°μ§ μ μλ€λ κ²μ
λλ€.
{
"name": "Andrew Lisowski",
"email": "[email protected]",
"packages": [
{
"target": "fixed-monorepo",
"plugins": ["npm"]
},
{
"target": "independent-monorepo",
"plugins": ["npm"]
}
]
}
μ΄κ²μ νλμ μ μ₯μμμ chrome-web-store νλ¬κ·ΈμΈκ³Ό npm νλ¬κ·ΈμΈμ μ¬μ©ν μ μμμ μλ―Έν©λλ€.
λλ λΉμ μ΄ κ°μ νλ‘μ νΈμμ λ λ€ μ¬μ©ν μ _μλ€λ κ²μ μλ―Ένλ€κ³ κ°μ νκ³ μμ΅λκΉ?
κ° νλ¬κ·ΈμΈμ νμ¬ μ»€λ°, νκ·Έ λ° νΈμν©λλ€. μ΄κ²μ λ§μ μμμ λ°μμν¬ κ²μ λλ€. ν λ²λ§ λ°μνλλ‘ ν΄λΉ μμ μμ μ μ½μ΄λ‘ μ΄λν΄μΌ ν©λκΉ? κ° ν¨ν€μ§μ λν΄ λ³λμ 컀λ°μ μν μλ μμ΅λλ€.
νμ΄λΈλ¦¬λ μ κ·Ό λ°©μμ μ¬μ©νλ κ²μ΄ ν©λ¦¬μ μΌ μ μμ΅λλ€. κ° νλ¬κ·ΈμΈμ΄ 컀λ°ν μ μμ§λ§ ν λ²λ§ νΈμν©λκΉ?
κ° ν΄λκ° μ체 ν¨ν€μ§ 릴리μ€μΈ μΈκ³μμ νκ·Έκ° μ΄λ»κ² μλνλμ§ μ λͺ¨λ₯΄κ² μ΅λλ€. λΉμ μ λΉμ μ΄ λ§λλ κ° λ²μ μ λν νκ·Έλ₯Ό μμ±ν©λκΉ? λ§μ§λ§μ νλ λ§λλμ?
μ‘°κΈ λ μκ°ν΄λ³΄λ©΄ μλ‘μ΄ μ΅μμ κ΅¬μ± μ΅μ μ λμ νλ κ²μ΄ λ ν©λ¦¬μ μΌ κ²μ λλ€.
ν¨ν€μ§λ³λ‘ λ¦΄λ¦¬μ€ κ²½νμ μ¬μ©μ μ μν μ μλ€λ μμ΄λμ΄κ° λ§μμ λλλ€. docs
ν¨ν€μ§μ λΌμ΄λΈλ¬λ¦¬ ν¨ν€μ§μ λν s3/gh-pages λ°°ν¬λ₯Ό κ΄λ¦¬ν μ μλ€λ μ΄μ μ νμ€ν μ μ μμ΅λλ€.
ν κ°μ§ μ²λ¦¬ν΄μΌ ν κ²μ λ μ΄μμ λ¦΄λ¦¬μ€ νμ΄νλΌμΈμ ν¨ν€μ§λ₯Ό ν¬ν¨νλ κ²μ λλ€. λ€μκ³Ό κ°μ κ²½μ° μ΄λ»κ² λ©λκΉ?
{
"name": "Andrew Lisowski",
"email": "[email protected]",
"packages": [
{
"target": "packages/**",
"plugins": ["npm"]
},
{
"target": "packages/chrome-ext",
"plugins": ["chrome-web-store"]
},
]
}
chrome-ext
ν¨ν€μ§κ° npm
_and_ webstore
λͺ¨λμ κ²μλ©λκΉ? μλλ©΄ npm
릴리μ€κ° λ¨Όμ μ μΈλμκΈ° λλ¬Έμ μΉλ¦¬ν©λκΉ?
κ° ν΄λκ° μ체 ν¨ν€μ§ 릴리μ€μΈ μΈκ³μμ νκ·Έκ° μ΄λ»κ² μλνλμ§ μ λͺ¨λ₯΄κ² μ΅λλ€. λΉμ μ λΉμ μ΄ λ§λλ κ° λ²μ μ λν νκ·Έλ₯Ό μμ±ν©λκΉ? λ§μ§λ§μ νλ λ§λλμ?
λλ μ°λ¦¬κ° lernaμ νλμ μΌμΉμν¬ μ μλ€κ³ μκ°ν©λλ€. νλμ 컀λ°μ λ§μ νκ·Έκ° μμ΅λλ€. κ° νκ·Έλ μ체 릴리μ€κ° λ©λλ€.
chrome-ext ν¨ν€μ§κ° npmκ³Ό μΉμ€ν μ΄ λͺ¨λμ κ²μλλμ? μλλ©΄ npm 릴리μ€κ° λ¨Όμ μ μΈλμκΈ° λλ¬Έμ μΉλ¦¬ν©λκΉ?
μ΄ κ²½μ° μ, λ κ°μ§ λͺ¨λλ₯Ό μλν©λλ€. κ·Έλ¬λ κ·Έκ²μ λ¨μ§ λμ ꡬμ±μ λλ€. μ΄λ₯Ό κΈ°λ₯μΌλ‘ μ¬μ©νκ³ λ κ°μ λ€λ₯Έ λ μ§μ€νΈλ¦¬(μ: npm λ° github ν¨ν€μ§ λ μ§μ€νΈλ¦¬)μ ν¨ν€μ§λ₯Ό κ²μν μ μμ΅λλ€.
{
"name": "Andrew Lisowski",
"email": "[email protected]",
"packages": [
{
"target": "packages/**",
"plugins": [["npm", { registry: "https://npm" }]]
},
{
"target": "packages/**",
"plugins": [["npm", { registry: "https://github-package-registry" }]]
},
]
}
μ¬λ―Έμκ³ ... 볡μ‘ν΄λ³΄μ΄λ€μ π
λλ μΌλ°μ μΌλ‘ κ°μ§ κΈ°λ₯μ μ§λμΉκ² λλνκ² νλ €κ³ νλ κ²λ³΄λ€ ꡬμ±μ κ°μ§κ³ μμ΅λλ€(μκΈ°μΉ μμ λ°©μμΌλ‘ κ³ μ₯λ μ μκ³ ν μ€νΈνκΈ° μ΄λ €μΈ μ μκΈ° λλ¬Έμ).
λ΄ μ²« λ²μ§Έ μ§λ¬Έμ μ΄κ²μ κΈ°λ³Έ μνκ° μ΄λ»κ² μκ²Όλμ§μ
λλ€. npm
νλ¬κ·ΈμΈλ§ μλ€λ©΄ μλνκΈ° μ μ ꡬμ±μ μΆκ°ν΄μΌ ν©λκΉ? λ€λ₯Έ μ¬λλ€κ³Ό κ°μ μ§λ¬Έμ
λλ€.
μμ μνΈ μμ©μ κ΄ν΄μλ μμ μνΈ μμ©μ΄ μΌλ°μ μΌλ‘ νλ¬κ·ΈμΈ νμ΄νλΌμΈμ μΌλΆμ¬μΌ νλ€κ³ μκ°ν©λλ€. νλ¬κ·ΈμΈμ΄ 컀λ°μ μνν΄μΌ νλ κ²½μ° μ»€λ° κ°λ₯ν νν¬λ₯Ό μ¬μ©ν μ μμ΄μΌ ν©λλ€. νΈμλ CI μ€ν λ°©μκ³Ό κ°μ μ¬νμ μν₯μ λ―ΈμΉκΈ° λλ¬Έμ μ½μ΄μμλ§ μ²λ¦¬ν΄μΌ ν©λλ€.
npm νλ¬κ·ΈμΈλ§ μλ€λ©΄ μλνκΈ° μ μ ꡬμ±μ μΆκ°ν΄μΌ ν©λκΉ?
νμ¬ μλνλ ꡬμ±μ packages
μΈκ³μμ μλν΄μΌ ν©λλ€. λ°λΌμ λ³κ²½μ΄ νμνμ§ μμ΅λλ€. λλΆλΆμ μ£Όμ λ³κ²½ μ¬νμ λ
Έλ API μΈ‘μ΄λ©° μΌλ° μ¬μ©μμκ²λ νμλμ§ μμ΅λλ€.
νλ¬κ·ΈμΈμ΄ 컀λ°μ μνν΄μΌ νλ κ²½μ° μ»€λ° κ°λ₯ν νν¬λ₯Ό μ¬μ©ν μ μμ΄μΌ ν©λλ€.
λλ μ΄ μμ΄λμ΄λ₯Ό μ’μνλ€. auto λ΄μμ μ΄ git μνΈ μμ©μ νμννλ κ²μ΄ μλ§λ μ μ©ν κ²μ λλ€. κ·Έλ¦¬κ³ κ·Έλ€μ΄ μ΄ νν¬λ₯Ό μ¬μ©νμ§ μλλ€λ©΄ κ·Έκ²μ λ¨μ§ μ½κ° λ λ§μ λ Έμ΄μ¦λ₯Ό μλ―Έν©λλ€(μ: μΆκ° μ»€λ° λ° μΆκ° νΈμ)
λν Monorepoμ ν¨κ» Autoλ₯Ό μ¬μ©νλ λ°©λ²μ λν΄ μκ°νκ³ μμκ³ νμμ λ°λΌ μλν μ μλ μ½κ° λ€λ₯Έ μ κ·Ό λ°©μμ μκ°ν΄ λμ΅λλ€.
κΈ°λ³Έμ μΌλ‘ νλμ monorepoκ° ββμλ κ²½μ° κ° νμ νλ‘μ νΈμ νμν νλ¬κ·ΈμΈμ μ€μ ν μ μλ κ°κ°μ .autorc
νμΌμ΄ μλ μ¬λ¬ νμ λλ ν°λ¦¬λ₯Ό κ°μ§ μ μμ΅λλ€.
κ·Έλ° λ€μ νμν κ²½μ° κ° νλ‘μ νΈκ° λ€λ₯Έ μκ°μ 릴리μ€λ μ μλλ‘ κ° νλ‘μ νΈμ λν΄ λ€λ₯Έ μ λμ¬λ₯Ό κ°λλ‘ μ νν μ μμ΅λλ€. μλ₯Ό λ€μ΄ sub-project1μ 릴리μ€μλ sub-project/v1.4.5
νκ·Έκ° μ§μ λκ³ λ€λ₯Έ νλ‘μ νΈμλ sub-project2/v9.9.9
νκ·Έκ° μ§μ λ©λλ€.
κ·Έλ° λ€μ Autoλ git describe --tags --matches "sub-project1/*"
μ κ°μ κ²μ μ¬μ©νμ¬ κ·Έμ λ°λΌ κ° νλ‘μ νΈμ λν νκ·Έλ₯Ό κ°μ Έμ€κ³ μ
λ°μ΄νΈν μ μμ΅λλ€.
κ·Έλ₯ μκ°.
κ·Έκ²μ μ€μ λ‘ λ΄κ° μ·¨ν μ κ·Ό λ°©μμ λ§€μ° κ°κΉμ΅λλ€. λλ
μ΄λ² μ£Όμ μμ
νμ΅λλ€.
μ§κΈκΉμ§ μΌλΆ λͺ
λ Ή(-μΌμΉ)μ ν΄λΉ νλκ·Έλ₯Ό μΆκ°ν΄μΌ νμ΅λλ€.
κ½€ μμ‘°λ‘κ² μ§νλκ³ μμ΅λλ€.
μ λ "ν¨ν€μ§" νλ μ κ·Ό λ°©μμ μ¬μ©νμΌλ©° κΈ°λ³Έμ μΌλ‘
"autorc" λ°°μ΄
μ λμ¬λ₯Ό κ°μ Έμ€κΈ° μν΄ νλ¬κ·ΈμΈμ λν νν¬λ₯Ό μΆκ°νμ¬ μ΄λ¦μ μ 곡νμ΅λλ€. μ΄κ²
νλ¬κ·ΈμΈμ΄ λ€μ€ ν¨ν€μ§μ νΈνλλ κ²½μ° μλμΌλ‘ μ νΈλ₯Ό 보λ΄λ λ° λμμ΄ λ©λλ€.
2020λ
1μ 29μΌ μμμΌ μ€ν 9μ 11λΆ Alejandro Barrientos <
[email protected]>μ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
μ λ λͺ¨λ Έλ ν¬μμ Autoλ₯Ό μ΄λ»κ² μ¬μ©ν μ§ κ³ λ―Όνλ€κ°
κ·νμ νμμ λ°λΌ μλν μ μλ μ½κ° λ€λ₯Έ μ κ·Ό λ°©μμ λλ€.κΈ°λ³Έμ μΌλ‘ νλμ monorepoκ° ββμλ κ²½μ° μ¬λ¬ νμ λλ ν 리λ₯Ό κ°μ§ μ μμ΅λλ€.
κ°κ°μ νλ¬κ·ΈμΈμ μ€μ ν μ μλ μ체 .autorc νμΌμ΄ μμ΅λλ€.
κ° νμ νλ‘μ νΈκ° νμν©λλ€.κ·Έλ° λ€μ κ° νλ‘μ νΈμ λν΄ μλ‘ λ€λ₯Έ μ λμ¬λ₯Ό κ°λλ‘ μ νν μ μμ΅λλ€.
κ° νλ‘μ νΈλ νμν κ²½μ° λ€λ₯Έ μκ°μ 릴리μ€λ μ μμ΅λλ€. μλ₯Ό λ€μ΄
sub-project1μ 릴리μ€λ sub-project/v1.4.5λ‘ νκ·Έκ° μ§μ λ μ μμΌλ©°
λ€λ₯Έ νλ‘μ νΈλ sub-project2/v9.9.9 νκ·Έλ₯Ό κ°μ Έμ΅λλ€.Autoλ git describe --tags --matchesμ κ°μ κ²μ μ¬μ©ν μ μμ΅λλ€.
"sub-project1/*"μ μ¬μ©νμ¬ κ·Έμ λ°λΌ κ° νλ‘μ νΈμ λν νκ·Έλ₯Ό κ°μ Έμ€κ³ μ λ°μ΄νΈν©λλ€.κ·Έλ₯ μκ°.
β
μ€λ λλ₯Ό μμ±νκΈ° λλ¬Έμ μ΄ λ©μμ§λ₯Ό λ°λ κ²μ λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ³ GitHubμμ νμΈ
https://github.com/intuit/auto/issues/917?email_source=notifications&email_token=AAJDEBGUZR5HF6P3OKRILTDRAJOOXA5CNFSM4KMLWYF2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNNMVXH
λλ ꡬλ μ·¨μ
https://github.com/notifications/unsubscribe-auth/AAJDEBDX72NB5Z7ZJPTDHVLRAJOOXANCNFSM4KMLWYFQ
.
λ€μ λμκ°μ μ΄ κΈμ μ½κ³ μλλ°, μ λ μ¬μ€ κ½€ ν₯λΆλ©λλ€! ν¨ν€μ§ μ΄λ¦ μμ μ λμ΄κ° λΆμ μ¬λ¬ νκ·Έλ μ λ§ μ’μ΅λλ€. λν packages
νλλ₯Ό μ λ§ μ’μν©λλ€.
@hipstersmoothie μ€λ shipitμ μ¬μ©νμ¬ 2 npm λ μ§μ€νΈλ¦¬μ κ²μνλ μ¬μ΄ λ°©λ²μ΄ μμ΅λλ€. λ³΄μ ¨λμ? λλ λ΄κ° μ§κΈ μ’μ κ°μλ₯Ό κ°μ§κ³ μμ§ μμ μλμ μΌλΆ κΈ°λ₯ ν κΈ.
@vincentbriglia λ GitHub ν¨ν€μ§μ κ²μνλ νλ¬κ·ΈμΈμ΄ μλν κΉμ? npm νλ¬κ·ΈμΈμ κ±°μ νΌκΈ°λ°±ν μ μμ΅λλ€. next
λ° latest
릴리μ€μλ μ¬μΈ κ²μ
λλ€. μΉ΄λ리μλ κ·Έλ€μ§ μλ―Έκ° μμ΅λλ€. μκ°?
@hipstersmoothie NPM λ μ§μ€νΈλ¦¬μ GHPR λ μ§μ€νΈλ¦¬μ λμΌν ν¨ν€μ§λ₯Ό κ²μνλ κ²½μ°κ° μμ΅λλ€. κ·Έ μ΄μ λ GHPRμ΄ κ·Έλ κ² κ΄κ³ λλλΌλ ν¨ν€μ§λ₯Ό μ¬λ°λ₯΄κ² νλ‘μνμ§ μκΈ° λλ¬Έμ λλ€. κ·Όλ³Έμ μΈ λ¬Έμ λ npmκ³Ό githubμμ λμΌν λ²μλ₯Ό κ°μ§κ³ μλ€λ κ²μ λλ€.
μ°λ¦¬λ μ£Όλ‘ λΉκ³΅κ°λ‘ κ°λ° μ€μ΄λ©° feature branches > next
λΆν° λμμΈ νκ³Ό λν/μΉμΈμ λ°κΈ° μν΄ canary λΉλλ₯Ό μ¬μ©νλ―λ‘ canary λΉλλ μ΄λ¬ν λ§₯λ½μμ μ¬μ ν μ μ©ν©λλ€. npm νλ¬κ·ΈμΈμ νμ¬ μ΄ κΈ°λ₯μ μ 곡νλ―λ‘ μ΄λ₯Ό μλ κ²μ λΆλλ¬μ΄ μΌμ
λλ€.
GHPRμ μ¬μ©νλ 컨ν μ€νΈλ μΌλ°μ μΌλ‘ λΉκ³΅κ° "μ‘°μ§" 컨ν μ€νΈμμ κ²μν κΈ°λ³Έ μμΉμ΄κ³ κ΅¬μ± μμκ° κ³΅κ°λμ΄μΌ νλ κ²½μ° npmjs.orgκ° λ³΄μ‘° μμΉλΌκ³ κ°μ ν©λλ€. (λλ githubμμ κ³΅κ° κ΅¬μ± μμλ₯Ό μ€μΉνλ μ¬λμ λ³Έ μ μ΄ μμ΅λλ€). μ€ν μμ€ μ»¨ν μ€νΈμμ μΌλ°μ μΌλ‘ npmjsμ΄λ©° GHPR λλ λ€λ₯Έ κ°μΈ ν¨ν€μ§ λ μ§μ€νΈλ¦¬κ° μμ΅λλ€.
μ°Έκ³ λ‘, νΉμ GHPR νλ¬κ·ΈμΈμ μΈκΈνμ ¨κΈ° λλ¬Έμ λ€μ μ£Όμ μΌλΆ κ·μΉμ λ°λΌ ν¨ν€μ§ λ²μ μ μ κ±°νλ μλ νλ¬κ·ΈμΈμ λ§λ€κΈ° μν΄ μκ°μ λ°λ‘ λ§λ ¨νμ΅λλ€(μ‘°μ§μ 50Gb ν¨ν€μ§λ‘ μ νλλ©° μ¬κΈ°μλ docker ν¬ν¨ μ΄λ―Έμ§)
λλ λν v10μμ μμ μ΄ μμλ λκΉμ§ νΉμ ghpr κ²μμλ₯Ό λ§λλ κ²μ κΈ°μκ² κΈ°λ€λ¦½λλ€. μ¬κΈ°μ μ μλ μμ΄λμ΄λ λ§€μ° ν₯λ―Έλ‘κ³ μλ§λ λ "λ―Έλ μ¦κ±°"μΌ κ²μ λλ€.
μ°λ¦¬λ λΉλΆκ° κ³΅κ° λ° λΉκ³΅κ°λ₯Ό λμμ κ²μνμ§ μκ³ μ΄ μ μμ§λ§ μ μ΄λ μ΄κ²μ΄ μ μ μ¬μ© μ¬λ‘μμ μ μ μμ΅λλ€.
"보쑰 ν¨ν€μ§ λ μ§μ€νΈλ¦¬" νλ¬κ·ΈμΈμ λν΄ λ λ§μ΄ μκ°νμ΅λλ€. λ°λΌμ npm νλ¬κ·ΈμΈμ κ·Έλλ‘ μλνμ¬ κ΅¬μ±λ λ μ§μ€νΈλ¦¬μ κ²μν©λλ€. κ·Έλ° λ€μ μ΄ μ νλ¬κ·ΈμΈμ HEAD 컀λ°μ μλ λͺ¨λ λ²μ μ 릴리μ€νλ λ λ²μ§Έ λ μ§μ€νΈλ¦¬(npmμ΄λ ghprμ΄λ μκ΄ μμ)μ κ²μν©λλ€.
μ°Έκ³ λ‘, νΉμ GHPR νλ¬κ·ΈμΈμ μΈκΈνμ ¨κΈ° λλ¬Έμ λ€μ μ£Όμ μΌλΆ κ·μΉμ λ°λΌ ν¨ν€μ§ λ²μ μ μ κ±°νλ μλ νλ¬κ·ΈμΈμ λ§λ€κΈ° μν΄ μκ°μ λ°λ‘ λ§λ ¨νμ΅λλ€(μ‘°μ§μ 50Gb ν¨ν€μ§λ‘ μ νλλ©° μ¬κΈ°μλ docker ν¬ν¨ μ΄λ―Έμ§)
μ΄κ²μ μ’μ κΈ°λ₯μΈ κ² κ°μ΅λλ€. κ·Έλ° νκ³κ° μλ μ€ λͺ°λμ΄μ!
μ΄ μ νλ¬κ·ΈμΈμ HEAD 컀λ°μ μλ λͺ¨λ λ²μ μ 릴리μ€νλ λ λ²μ§Έ λ μ§μ€νΈλ¦¬(npmμ΄λ ghprμ΄λ μκ΄ μμ)μ κ²μν©λλ€.
κΈμ, κ·Έκ²μ νμ€ν ν¨κ³Όκ°μμ κ²μ λλ€! νΈμ§: λν μ°λ¦¬μ μλ리μ€(λ€)
μλ νμΈμ! μ΄ μ€λ λμ κ΄λ ¨νμ¬ Autoμ νμ¬ μνλ 무μμ λκΉ? λμΌν 릴리μ€μμ λ μ΄μμ κ²μ κ²μν μ μμ΅λκΉ?
κ° ν¨ν€μ§ κ΄λ¦¬μ νλ¬κ·ΈμΈμ ν¨ν€μ§ κ΄λ¦¬μλ₯Ό μν λͺ κ°μ§ μΆκ° νμΌμ μμ‘΄νκΈ° λλ¬Έμ(
git-tag
μ μΈ)
μ΄κ²μ μλͺ»λ κ°μ μ΄λΌκ³ μκ°ν©λλ€. docker
νλ¬κ·ΈμΈμ΄ νμΌμ μμ‘΄ν©λκΉ? νμνμ§ μμ μ μμΌλ―λ‘ λμ μμΌ μ μμ΅λλ€. λ€μμ λ λ€λ₯Έ κ²μ
λλ€. μ λ sbt (Scalaμ κ°μ₯ μΌλ°μ μΈ λΉλ λꡬ)μ ν¨κ» Autoλ₯Ό μ¬μ©νλ λ° κ΄μ¬μ΄ μμΌλ©° κΈ°κ³κ° μ½μ μ μλ JSON/XML ꡬμ±μ΄ μμ΅λλ€. sbt λΉλλ Scala μ½λλ‘ κ΅¬μ±λλ©° μ΄λ€ λ°©μμΌλ‘λ sbtμ ν΅μ νλ λ° νμν λΉλμ λν μ 보λ₯Ό μΆμΆν©λλ€.
μ΄κ²μ ν¨μ¬ κ°λ¨ν λ°©μμΌλ‘ λ 립μ μΈ λͺ¨λ Έλ ν¬ κ΄λ¦¬λ₯Ό μνν©λλ€.
λν μ΄ μ€λ λμμ λͺ©νλ κ²μ μꡬ μ¬νμ΄ μλ‘ λ€λ₯Έ μ¬λ¬ νμ νλ‘μ νΈκ° μλ λͺ¨λ Έλ ν¬ νλ‘μ νΈλ₯Ό μμ©νλ κ² κ°μ΅λλ€. λ€μν μ’ λ₯μ μν°ν©νΈλ₯Ό μμ±νλ λ¨μΌ νλ‘μ νΈλ μ΄λ»μ΅λκΉ? μλ₯Ό λ€μ΄ Docker μ΄λ―Έμ§μ κ΅¬μ± μμΉ΄μ΄λΈ(μ΄λκ°μ μ λ‘λ μμ ). λλ NPMμ λΌμ΄λΈλ¬λ¦¬λ‘ κ²μν μ μκ³ GitHub 릴리μ€μμ μμ μΌλ‘ κ²μν μ μλ GitHub μμ μ λλ€.
κ° νλ¬κ·ΈμΈμ νμ¬ μ»€λ°, νκ·Έ λ° νΈμν©λλ€. μ΄κ²μ λ§μ μμμ λ°μμν¬ κ²μ λλ€. ν λ²λ§ λ°μνλλ‘ ν΄λΉ μμ μμ μ μ½μ΄λ‘ μ΄λν΄μΌ ν©λκΉ? κ°
package
μ λν΄ λ³λμ 컀λ°μ _μν _ μ μμ§λ§.
μ΄κ²μ΄ νμ¬ νλ¬κ·ΈμΈ ꡬνμ μ£Όμ λ¬Έμ λΌκ³ μκ°ν©λλ€. μ΄κ²μ κ° λͺ
λ Ήμ΄ "λ¨ ν κ°μ§λ§ μ λ§ μ νλ€"λ μ£Όμ₯μ λν λμ νΌλ μΌλ‘ λμκ°λλ€. μ μκ°μ publish
νν¬λ 컀λ°μ μμ±νκ±°λ git νκ·Έλ₯Ό νΈμνμ§ μκ³ μ£Όμ΄μ§ ν¨ν€μ§ κ΄λ¦¬μμ λν΄ μ€μ λ‘ _λ§ κ²μ_ν΄μΌ ν©λλ€. κ° κ²μ νλ¬κ·ΈμΈμ΄ ν¨ν€μ§ κ΄λ¦¬μ μΈλΆ μ¬νμ ꡬνμλ§ μ§μ€ν μ μλ κ²½μ° νλ‘μΈμ€μ κ³΅ν΅ λΆλΆμ μ¬μ¬μ© λ°/λλ 곡μ ν μ μμ΅λλ€. Autoλ‘ μ΄κ²μ λ¬μ±ν μ μμ΅λκΉ? μλλ©΄ NPMκ³Ό κ°μ νλ‘μ νΈμ λ무 νΈν₯λμ΄ μμ΅λκΉ?