Auto: μ»€μŠ€ν…€ λ²”ν”„ 컀밋 λ©”μ‹œμ§€

에 λ§Œλ“  2019λ…„ 01μ›” 20일  Β·  18μ½”λ©˜νŠΈ  Β·  좜처: intuit/auto

κΈ°λŠ₯: νŒ¨ν‚€μ§€ 버전을 λ²”ν”„ν•  λ•Œ NPM ν”ŒλŸ¬κ·ΈμΈμ—μ„œ μ‚¬μš©ν•˜λŠ” 컀밋 λ©”μ‹œμ§€λ₯Ό μ‚¬μš©μž μ§€μ •ν•˜κΈ° μœ„ν•œ .autorc μ˜΅μ…˜μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

{
  "bumpHeader": "{{version}}",
  "bumpFooter": "[skip ci]"
}
enhancement

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

auto v4.0.0 μ—¬κΈ° μžˆμŠ΅λ‹ˆλ‹€. publish 후크λ₯Ό 뢄리해야 ν•  것 κ°™μŠ΅λ‹ˆλ‹€. 이것은 또 λ‹€λ₯Έ ν”ŒλŸ¬κ·ΈμΈμ΄ 될 κ²ƒμž…λ‹ˆλ‹€

λͺ¨λ“  18 λŒ“κΈ€

λ‚˜λŠ” λ²”ν”„ 컀밋을 μ„ ν˜Έν•˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€( 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 ?

  1. νŒ¨ν‚€μ§€λŠ” 0.0.0 κ°œλ°œμ—μ„œ μ‹œμž‘ν•©λ‹ˆλ‹€.

  2. version λ₯Ό μ‹€ν–‰ν•˜λ©΄ PR을 기반으둜 λ²”ν”„λ₯Ό λ°˜ν™˜ν•˜κ³  무엇이든 λ°˜ν™˜ν•©λ‹ˆλ‹€(패치, λ§ˆμ΄λ„ˆ, 메이저) - 패치라고 κ°€μ •ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

  3. λ³€κ²½ 둜그 생성 - (0.0.0-개발 => 0.0.0). ν•˜μ§€λ§Œ 그런 일이 μΌμ–΄λ‚˜μ§€ μ•ŠκΈ°λ₯Ό μ›ν•˜μ‹­λ‹ˆκΉŒ? λŒ€μ‹  '0.0.0-development' λ³€κ²½ 둜그 제λͺ© μ•„λž˜μ— μΆ”κ°€ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

  4. κ²Œμ‹œ 후크 μ‹œκ°„ - 0.0.0-development => 0.0.0이고 κ²Œμ‹œν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ development 이 κ°μ§€λ˜κ³  κ²Œμ‹œ 단계λ₯Ό λͺ¨λ‘ κ±΄λ„ˆλ›°κΈ°λ₯Ό μ›ν•©λ‹ˆλ‹€.

  5. github 릴리슀 λ§Œλ“€κΈ° - μƒˆ 릴리슀λ₯Ό λ§Œλ“œλŠ” λŒ€μ‹  μƒˆ μ»€λ°‹μœΌλ‘œ 이전 릴리슀λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.

  6. νŒ¨ν‚€μ§€λŠ” ???κΉŒμ§€ 0.0.0-development둜 μœ μ§€λ©λ‹ˆλ‹€. λ³€κ²½ 사항이 λˆ„μ λ˜λŠ” λ™μ•ˆ

μ›ν•˜λŠ” 경우 두 가지 μ˜΅μ…˜:

  1. 릴리슀 및 κ²Œμ‹œλ₯Ό μ‹œμž‘ν•  λ•ŒκΉŒμ§€ auto shipit μ‹€ν–‰ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€. μ—¬μ „νžˆ PR에 λ ˆμ΄λΈ”μ„ μΆ”κ°€ν•˜μ‹­μ‹œμ˜€. μ€€λΉ„κ°€ 되면 CI ν”„λ‘œμ„ΈμŠ€μ— auto shipit λ₯Ό μΆ”κ°€ν•˜λ©΄ 첫 번째 릴리슀의 λͺ¨λ“  λ ˆμ΄λΈ” PR이 ν¬ν•¨λ©λ‹ˆλ‹€.

  2. ν”ŒλŸ¬κ·ΈμΈμ„ μž‘μ„±ν•©λ‹ˆλ‹€. 이 λ™μž‘μ€ 맀우 λ…νŠΉν•˜λ©° npm이 버전 관리λ₯Ό μˆ˜ν–‰ν•˜λŠ” 방식과 μ‹€μ œλ‘œ μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ ν”ŒλŸ¬κ·ΈμΈμ„ λ§Œλ“€ 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 비둝 당신이 μ‚¬μš©ν•  후크λ₯Ό ν•œλ‘ 개 μΆ”κ°€ν•΄μ•Ό ν•  κ²ƒμž…λ‹ˆλ‹€.

0.0.0-development λ²„μ „μ˜ νŒ¨ν‚€μ§€λŠ” λ‹€μŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

  • κ°€μž₯ 높은 κ²Œμ‹œλœ NPM 버전은 "ν˜„μž¬ 버전"으둜 κ°„μ£Όλ©λ‹ˆλ‹€.
  • version 의 package.json λŠ” λ³€κ²½ν•˜λ©΄ μ•ˆ λ©λ‹ˆλ‹€.

μƒˆ NPM 버전이 κ²Œμ‹œλ˜μ–΄μ•Ό ν•˜λŠ” 경우 AutoλŠ” npm version $(auto version) μ‚¬μš©ν•˜μ—¬ "ν˜„μž¬ 버전"을 μ¦κ°€μ‹œμΌœμ•Ό ν•©λ‹ˆλ‹€.

λ³€κ²½ λ‘œκ·ΈλŠ” package.json λŒ€μ‹  NPM의 "ν˜„μž¬ 버전"을 μ‚¬μš©ν•©λ‹ˆλ‹€.

항상 그렇듯이 λͺ¨λ“  NPM 버전에 λŒ€ν•΄ μƒˆλ‘œμš΄ Github λ¦΄λ¦¬μŠ€κ°€ μƒμ„±λ©λ‹ˆλ‹€.

λ‚˜λŠ” μΆ©λΆ„νžˆ λͺ…ν™•ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

package.json의 버전은 μ ˆλŒ€ λ³€κ²½ν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.

μƒˆ 버전을 NPM에 κ²Œμ‹œν•˜λ €λ©΄ 이λ₯Ό λ³€κ²½ν•΄μ•Ό ν•©λ‹ˆλ‹€. "ν˜„μž¬ 버전"을 늘리고 둜컬 버전을 λ³€κ²½ν•˜μ§€ μ•ŠλŠ” μœ μΌν•œ 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • ν˜„μž¬ 버전(NPM)으둜 λ³€κ²½
  • λ²”ν”„λ₯Ό ν•˜λ‹€
  • λ‹€μ‹œ λ³€κ²½
  • ν•˜μ§€λ§Œ νƒœκ·Έκ°€ λ²”ν”„ ν˜„μž¬ 버전이 될 것이기 λ•Œλ¬Έμ— ???

λ‚˜λŠ” λ‹Ήμ‹ μ˜ μ‚¬μš© 사둀λ₯Ό μ΄ν•΄ν•˜κ³  μžˆλ‹€κ³  ν™•μ‹ ν•©λ‹ˆλ‹€.

NS. μ—¬λŸ¬ PRSλ₯Ό 톡해 κΈ°λŠ₯을 κ°œλ°œν•˜λŠ” λ™μ•ˆ μ—¬λŸ¬ 버전을 κ²Œμ‹œν•˜κ³  싢지 μ•ŠμŠ΅λ‹ˆλ‹€.
NS. μƒˆ 버전이 κ²Œμ‹œλ˜λ©΄ λͺ¨λ“  λ³€κ²½ 사항이 ν¬ν•¨λ˜κΈ°λ₯Ό μ›ν•©λ‹ˆλ‹€.

λ‚΄ λˆˆμ—λŠ” 이미 두 가지 방법이 μžˆμŠ΅λ‹ˆλ‹€.

  1. onlyPublishWithReleaseLabel ν•©λ‹ˆλ‹€. 이 λ ˆμ΄λΈ”μ„ μΆ”κ°€ν•  λ•ŒκΉŒμ§€ μƒˆ 버전이 μƒμ„±λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λ ˆμ΄λΈ”μ΄ μ—†λŠ” λͺ¨λ“  PR/μ½”λ“œλ₯Ό VERSION-development

  2. 큰 κΈ°λŠ₯을 μœ„ν•΄ 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에 μ—΄λ € μžˆμŠ΅λ‹ˆλ‹€!

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰