κΈ°λ₯: ν¨ν€μ§ λ²μ μ λ²νν λ NPM νλ¬κ·ΈμΈμμ μ¬μ©νλ μ»€λ° λ©μμ§λ₯Ό μ¬μ©μ μ§μ νκΈ° μν .autorc
μ΅μ
μ μΆκ°ν©λλ€.
{
"bumpHeader": "{{version}}",
"bumpFooter": "[skip ci]"
}
λλ λ²ν 컀λ°μ μ νΈνμ§ μμ μλ μμ΅λλ€( semantic-release
μ²λΌ):
{
"skipBumpCommit": true
}
λ²ν 컀λ°μ΄ λΉνμ±νλ μνμμ μ΅μ NPM λ²μ μ μ§μ€μ μμ€μ΄λ©°(λλ μ΄λ―Έ κ·Έλ° μμΌλ‘ μλν©λκΉ?) package.json
μ "λ²μ " νλλ 0.0.0-development
λλ μ΄μ μ μ¬ν κ²μΌλ‘ μ€μ ν μ μμ΅λλ€.
travisμμ skip CIκ° λ€λ₯Έκ°μ? μ»€λ° λ©μμ§κ° μμΌλ©΄ 루νμ μ½κ² λΉ μ§ μ μμ΅λλ€.
auto
λ λ‘컬 λ²μ κ³Ό κ²μλ λ²μ μ μ΄ν΄λ³΄κ³ npm μ€λ₯λ₯Ό νΌνκΈ° μν΄ λ λμ λ²μ μ μ νν©λλ€. κ·Έκ²μΌλ‘ μΆ©λΆν©λκΉ?
travisμμ skip CIκ° λ€λ₯Έκ°μ? μ»€λ° λ©μμ§κ° μμΌλ©΄ 루νμ μ½κ² λΉ μ§ μ μμ΅λλ€.
νμ€νμ§ μμ΅λλ€. μ»€λ° ν€λμ νμνλ€λ©΄ κ·Έλ κ² ν΄μΌ ν©λλ€. π
auto
λ λ‘컬 λ²μ κ³Ό κ²μλ λ²μ μ μ΄ν΄λ³΄κ³ npm μ€λ₯λ₯Ό νΌνκΈ° μν΄ λ λμ λ²μ μ μ νν©λλ€. κ·Έκ²μΌλ‘ μΆ©λΆν©λκΉ?
μ€, μ§μ§? λ©μ§. μ΄ κ²½μ° λ²ν 컀λ°μ΄ μμ±λμ§ μμ΅λκΉ?
μλμ μ΄ κ²½μ° κ²μλ λ²μ μ μΆ©λνλ―λ‘ μ΄μ λ²μ μμ κ²μν μ μμ΅λλ€.
skipBumpCommit
μ΄ μ΄λ»κ² μλνλμ§ λλ μ΅μ’
κ²°κ³Όκ° μ΄λ»κ² 보μΌμ§ μκ°ννλ λ° λ¬Έμ κ° μμ΅λλ€. shipit
λ₯Ό μ€ννλ €λ©΄ μ΄λ€ μμΌλ‘λ λ²μ μ λ³κ²½ν΄μΌ νλ―λ‘ ν΄λΉ 컀λ°μμ μ΄λ»κ² λ²μ΄λ μ μλμ§ μ μ μμ΅λλ€.
λΉμ μ μ΄λ»κ² μκ°νμλκΉ shipit
μ λ²μ λ μ»€λ° λ²ν 건λ λ°λ package.json
κ°μ κ²μ
λλ€ 0.0.0-development
?
ν¨ν€μ§λ 0.0.0 κ°λ°μμ μμν©λλ€.
version
λ₯Ό μ€ννλ©΄ PRμ κΈ°λ°μΌλ‘ λ²νλ₯Ό λ°ννκ³ λ¬΄μμ΄λ λ°νν©λλ€(ν¨μΉ, λ§μ΄λ, λ©μ΄μ ) - ν¨μΉλΌκ³ κ°μ ν΄ λ³΄κ² μ΅λλ€.
λ³κ²½ λ‘κ·Έ μμ± - (0.0.0-κ°λ° => 0.0.0). νμ§λ§ κ·Έλ° μΌμ΄ μΌμ΄λμ§ μκΈ°λ₯Ό μνμλκΉ? λμ '0.0.0-development' λ³κ²½ λ‘κ·Έ μ λͺ© μλμ μΆκ°νμκ² μ΅λκΉ?
κ²μ νν¬ μκ° - 0.0.0-development => 0.0.0μ΄κ³ κ²μν©λλ€. νμ§λ§ development
μ΄ κ°μ§λκ³ κ²μ λ¨κ³λ₯Ό λͺ¨λ 건λλ°κΈ°λ₯Ό μν©λλ€.
github λ¦΄λ¦¬μ€ λ§λ€κΈ° - μ 릴리μ€λ₯Ό λ§λλ λμ μ 컀λ°μΌλ‘ μ΄μ 릴리μ€λ₯Ό μ λ°μ΄νΈν©λλ€.
ν¨ν€μ§λ ???κΉμ§ 0.0.0-developmentλ‘ μ μ§λ©λλ€. λ³κ²½ μ¬νμ΄ λμ λλ λμ
μνλ κ²½μ° λ κ°μ§ μ΅μ :
λ¦΄λ¦¬μ€ λ° κ²μλ₯Ό μμν λκΉμ§ auto shipit
μ€ννμ§ λ§μμμ€. μ¬μ ν PRμ λ μ΄λΈμ μΆκ°νμμμ€. μ€λΉκ° λλ©΄ CI νλ‘μΈμ€μ auto shipit
λ₯Ό μΆκ°νλ©΄ 첫 λ²μ§Έ 릴리μ€μ λͺ¨λ λ μ΄λΈ PRμ΄ ν¬ν¨λ©λλ€.
νλ¬κ·ΈμΈμ μμ±ν©λλ€. μ΄ λμμ λ§€μ° λ νΉνλ©° npmμ΄ λ²μ κ΄λ¦¬λ₯Ό μννλ λ°©μκ³Ό μ€μ λ‘ μΌμΉνμ§ μμ΅λλ€. μ΄ μμ μ μννκΈ° μν΄ νλ¬κ·ΈμΈμ λ§λ€ μ μλ€κ³ μκ°ν©λλ€. λΉλ‘ λΉμ μ΄ μ¬μ©ν νν¬λ₯Ό νλ κ° μΆκ°ν΄μΌ ν κ²μ λλ€.
0.0.0-development
λ²μ μ ν¨ν€μ§λ λ€μμ λνλ
λλ€.
version
μ package.json
λ λ³κ²½νλ©΄ μ λ©λλ€.μ NPM λ²μ μ΄ κ²μλμ΄μΌ νλ κ²½μ° Autoλ npm version $(auto version)
μ¬μ©νμ¬ "νμ¬ λ²μ "μ μ¦κ°μμΌμΌ ν©λλ€.
λ³κ²½ λ‘κ·Έλ package.json
λμ NPMμ "νμ¬ λ²μ "μ μ¬μ©ν©λλ€.
νμ κ·Έλ λ―μ΄ λͺ¨λ NPM λ²μ μ λν΄ μλ‘μ΄ Github 릴리μ€κ° μμ±λ©λλ€.
λλ μΆ©λΆν λͺ ννκ³ μμ΅λκΉ?
package.jsonμ λ²μ μ μ λ λ³κ²½ν΄μλ μ λ©λλ€.
μ λ²μ μ NPMμ κ²μνλ €λ©΄ μ΄λ₯Ό λ³κ²½ν΄μΌ ν©λλ€. "νμ¬ λ²μ "μ λλ¦¬κ³ λ‘컬 λ²μ μ λ³κ²½νμ§ μλ μ μΌν λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
λλ λΉμ μ μ¬μ© μ¬λ‘λ₯Ό μ΄ν΄νκ³ μλ€κ³ νμ ν©λλ€.
NS. μ¬λ¬ PRSλ₯Ό ν΅ν΄ κΈ°λ₯μ κ°λ°νλ λμ μ¬λ¬ λ²μ μ κ²μνκ³ μΆμ§ μμ΅λλ€.
NS. μ λ²μ μ΄ κ²μλλ©΄ λͺ¨λ λ³κ²½ μ¬νμ΄ ν¬ν¨λκΈ°λ₯Ό μν©λλ€.
λ΄ λμλ μ΄λ―Έ λ κ°μ§ λ°©λ²μ΄ μμ΅λλ€.
onlyPublishWithReleaseLabel
ν©λλ€. μ΄ λ μ΄λΈμ μΆκ°ν λκΉμ§ μ λ²μ μ΄ μμ±λμ§ μμ΅λλ€. λ°λΌμ λ μ΄λΈμ΄ μλ λͺ¨λ PR/μ½λλ₯Ό VERSION-development
ν° κΈ°λ₯μ μν΄ PRμ λ³ν©ν λ λ²μ μ λν μ€λΉκ° λ λκΉμ§ skip-release
λ₯Ό μ¬μ©ν λ€μ PRμ λ³ν©νκΈ°λ§ νλ©΄ λ©λλ€. μ 릴리μ€μλ 건λλ΄ PRμ΄ λͺ¨λ ν¬ν¨λμ΄ μμ΅λλ€. μ΄ κ²½μ° λ²μ μ΄ VERSION-development
μμ λνλ΄λ skip-release
λ μ΄λΈμ μΆκ°νλ κ²μ λ³Ό μ μμ΅λλ€.
μ΄κ²μ λΉμ μ΄ μνλ νλκ³Ό μ΄λ»κ² λ€λ¦ λκΉ?
μμ½νμλ©΄ λ€μκ³Ό κ°μ΄ μμ½ν μ μμ΅λλ€. λ²μ μ -development
λ₯Ό μΆκ°νμ¬ λ¦΄λ¦¬μ€ κ±΄λλ°κΈ°λ₯Ό μμνκ³ λͺ¨λ λ³κ²½ μ¬νμ ν λ²μ 릴리μ€ν μ€λΉκ° λλ©΄ μ κ±°νλ €κ³ ν©λλ€.
λ΄ λ§μ§λ§ λ¬Έμ₯μ μμ±νκΈ° μν΄ beforeShipit
λ₯Ό μ¬μ©νμ¬ λ²μ μ -development
κ° μλμ§ νμΈνκ³ μμΌλ©΄ μ€λ₯κ° λ°μνλ νλ¬κ·ΈμΈμ λ§λ€ μ μμ΅λλ€. μ΄λ κ² νλ©΄ -development
λ₯Ό μ κ±°ν λκΉμ§ shipit
κ° μμΌλ‘ μ΄λνμ§ μμ΅λλ€.
λ΄κ° λ³Ό μμλ μ μΌν λ¬Έμ λ CI μμ λ μ€ν¨νλ€λ κ²μ λλ€.
ν₯λ―Έλ‘μ΄ ν΄μμ΄μ§λ§ λ΄κ° μλν λ°λ μλλλ€. π
κΈ°λ³Έμ μΌλ‘ semantic-release
μλ λ°©μμ μ€λͺ
νκ³ μμ΅λλ€.
" package.json
μ λ²μ μ npm publish
κ° μ±κ³΅νκΈ° μν΄ μΌμμ μΌλ‘λ§ λ³κ²½λμμ΅λλ€"(" package.json
μ λ²μ μ μ λ λ³κ²½λμ΄μλ μ λ¨" λμ )λΌκ³ _ν΄μΌ_ ν©λλ€. λ΄κ° μ λ§λ‘ νλ €κ³ νλ κ²μ λ²ν 컀λ°μ μμ ν νΌνλ κ²μ
λλ€. :)
μ’μ, λΉμ μ΄ λλ μνλ λ€μκ³Ό κ°μ΅λλ€.
repo: λ²μ 0.0.0-devλ§ μμ΅λλ€.
npm: νμ μ€μ λ²μ μ΄ μμ΅λλ€(μ΄κ²μ΄ 무μμ΄λ μ¬μ©λ¨)
μ³μ?
μ’ μ’μ
if (auto.options.skipBumpCommit) {
// get published version
// change local version to publish
} else {
await execPromise('npm', [
'version',
latestBump || version,
'-m',
'"Bump version to: %s [skip ci]"'
]);
}
await setTokenOnCI();
await execPromise(
'npm',
!isPrivate && isScopedPackage
? ['publish', '--access', 'public']
: ['publish']
);
if (auto.options.skipBumpCommit) {
// change local version back to DEV
}
await execPromise('git', [
'push',
'--follow-tags',
'--set-upstream',
'origin',
'$branch'
]);
}
μ, μ’μ 보μ λλ€!
auto
v4.0.0 μ¬κΈ° μμ΅λλ€. publish
νν¬λ₯Ό λΆλ¦¬ν΄μΌ ν κ² κ°μ΅λλ€. μ΄κ²μ λ λ€λ₯Έ νλ¬κ·ΈμΈμ΄ λ κ²μ
λλ€
μνλ κ²½μ° μ§κΈμ μ΄ κΈ°λ₯μ Autoλ‘ κ΅½κ³ λ€λ₯Έ νλ¬κ·ΈμΈμμλ νμν λκΉμ§ publish
νν¬λ₯Ό λΆν ν λκΉμ§ κΈ°λ€λ¦΄ μ μμ΅λλ€. π
μ΄κ²μ #247(semver κΈ°λ₯)μ΄ μλ νλ¬κ·ΈμΈμ ν΅ν΄ κ°λ₯ν΄μΌ ν©λλ€. μ»€λ° λ©μμ§λ μ½κ°μ κ΅¬μ± λ³κ²½μ΄ νμνλ©° μ€μ λ‘ λ§μ κ²μ μ»μ§λ λͺ»ν©λλ€. λ«ν μμ§λ§ PRμ μ΄λ € μμ΅λλ€!
κ°μ₯ μ μ©ν λκΈ
auto
v4.0.0 μ¬κΈ° μμ΅λλ€.publish
νν¬λ₯Ό λΆλ¦¬ν΄μΌ ν κ² κ°μ΅λλ€. μ΄κ²μ λ λ€λ₯Έ νλ¬κ·ΈμΈμ΄ λ κ²μ λλ€