Auto: ν•˜λ‚˜μ˜ 리포지토리에 μ—¬λŸ¬ νŒ¨ν‚€μ§€ κ΄€λ¦¬μž ν”ŒλŸ¬κ·ΈμΈ

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

κΈ°λŠ₯ μš”μ²­μ΄ λ¬Έμ œμ™€ κ΄€λ ¨λ˜μ–΄ μžˆμŠ΅λ‹ˆκΉŒ?

μ§€κΈˆμ€ ν”„λ‘œμ νŠΈλ‹Ή ν•˜λ‚˜μ˜ νŒ¨ν‚€μ§€ κ΄€λ¦¬μž ν”ŒλŸ¬κ·ΈμΈλ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 즉, chrome-web-store ν”ŒλŸ¬κ·ΈμΈκ³Ό npm ν”ŒλŸ¬κ·ΈμΈμ„ ν•˜λ‚˜μ˜ μ €μž₯μ†Œμ—μ„œ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μ›ν•˜λŠ” μ†”λ£¨μ…˜ μ„€λͺ…

이 μ œν•œμ€ ν˜„μž¬ auto κ°€ git ν”„λ‘œμ νŠΈλ₯Ό 기반으둜 μž‘λ™ν•˜κ³  νŒ¨ν‚€μ§€ κ°œλ…μ΄ μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

npm ν”ŒλŸ¬κ·ΈμΈμ—μ„œ sub-packages λŒ€ν•œ λ³€κ²½ 둜그 관리 및 κ°œλ³„ 릴리슀λ₯Ό μˆ˜ν–‰ν•˜λŠ” 방법을 λ³΄μ—¬μ£Όμ—ˆμŠ΅λ‹ˆλ‹€. 이것은 λͺ¨λ‘ lerna μ£Όμœ„λ₯Ό 기반으둜 ν•˜λ©° μ‹€μ œλ‘œ core 둜 이동할 수 μ—†μŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ 각 νŒ¨ν‚€μ§€ κ΄€λ¦¬μž ν”ŒλŸ¬κ·ΈμΈμ€ νŒ¨ν‚€μ§€ κ΄€λ¦¬μžλ₯Ό μœ„ν•œ λͺ‡ 가지 μΆ”κ°€ 파일( git-tag μ œμ™Έ)에 μ˜μ‘΄ν•˜κΈ° λ•Œλ¬Έμ— λ‹€μŒκ³Ό 같이 μ•„μ£Ό μ‰½κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예: npm ν”ŒλŸ¬κ·ΈμΈ

  1. λ‘œλ“œλ˜λ©΄ package.json (단일 λ˜λŠ” lerna)λ₯Ό 찾으렀고 ν•©λ‹ˆλ‹€.
  2. auto λŠ” ν•΄λ‹Ή ν΄λ”μ˜ λͺ¨λ“  ν•­λͺ©μ„ package 의 μΌλΆ€λ‘œ κ°„μ£Όν•©λ‹ˆλ‹€.
  3. auto λŠ” 각 package λŒ€ν•œ κ³ μœ ν•œ λ³€κ²½ 둜그λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.

이것은 잠재적으둜 쒋지 μ•Šμ€ κ²½ν—˜μ΄ 될 수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€μ‹  ν΄λ”μ˜ λͺ¨λ“  νŒ¨ν‚€μ§€ κ΄€λ¦¬μž ν”ŒλŸ¬κ·ΈμΈμ— μΆ”κ°€ ꡬ성 μ˜΅μ…˜μ„ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이것은 λ˜ν•œ git-tg ν”ŒλŸ¬κ·ΈμΈμ„ 지원할 수 μžˆμŠ΅λ‹ˆλ‹€(그리고 그것이 μž‘λ™ν•˜λ„λ‘ ν•˜λŠ” 데 ν•„μš”ν•  κ²ƒμž…λ‹ˆλ‹€).

잠재적인 문제

  • 각 ν”ŒλŸ¬κ·ΈμΈμ€ ν˜„μž¬ 컀밋, νƒœκ·Έ 및 ν‘Έμ‹œν•©λ‹ˆλ‹€. 이것은 λ§Žμ€ μ†ŒμŒμ„ λ°œμƒμ‹œν‚¬ κ²ƒμž…λ‹ˆλ‹€. ν•œ 번만 λ°œμƒν•˜λ„λ‘ ν•΄λ‹Ή μžμ‹ μž‘μ—…μ„ μ½”μ–΄λ‘œ 이동해야 ν•©λ‹ˆκΉŒ? 각 package 에 λŒ€ν•΄ λ³„λ„μ˜ 컀밋을 원할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
  • 루트 λ³€κ²½ 둜그 - μ•„λ§ˆλ„ μ΄λŸ¬ν•œ μœ ν˜•μ˜ ν”„λ‘œμ νŠΈμ—μ„œλŠ” μ˜λ―Έκ°€ 없을 κ²ƒμž…λ‹ˆλ‹€. 각 νŒ¨ν‚€μ§€ κ΄€λ¦¬μž ν”ŒλŸ¬κ·ΈμΈμ€ κ΄€λ¦¬λ˜λŠ” 각 package λŒ€ν•œ λ³€κ²½ λ‘œκ·Έλ„ μƒμ„±ν•©λ‹ˆλ‹€.

κ³ λ €ν•œ λŒ€μ•ˆμ„ κΈ°μˆ ν•˜μ‹­μ‹œμ˜€

정말 아무것도.

enhancement

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

쑰금 더 생각해보면 μƒˆλ‘œμš΄ μ΅œμƒμœ„ ꡬ성 μ˜΅μ…˜μ„ λ„μž…ν•˜λŠ” 것이 더 합리적일 κ²ƒμž…λ‹ˆλ‹€.

{
  // 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 λ₯Ό μ‹€ν–‰ν•˜κ³  λ™μΌν•œ μ–‘μ˜ 컀밋을 생성할 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

예: μ΅œμ‹ :

  1. λͺ¨λ‘ λ™μ‹œμ— μ‹€ν–‰
  2. λ³€κ²½ 둜그λ₯Ό μ»€λ°‹ν•˜κΈ° 전에 양보
  3. λ³€κ²½ 둜그λ₯Ό ν•œ λ²ˆμ— 컀밋
  4. 버전이 μΆ©λŒν•  λ•ŒκΉŒμ§€ 양보
  5. ν•„μš”ν•œ 경우 컀밋 버전
  6. λκΉŒμ§€ 달리닀

이 섀정을 μ‚¬μš©ν•˜λ©΄ 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 포함 이미지)

  • λ²”μœ„μ˜ λ§ˆμ§€λ§‰ μΉ΄λ‚˜λ¦¬μ•„ 제거
  • λ²”μœ„μ—μ„œ n번째 λ§ˆμ§€λ§‰ λ‹€μŒ 제거
  • ...

λ‚˜λŠ” λ˜ν•œ 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κ³Ό 같은 ν”„λ‘œμ νŠΈμ— λ„ˆλ¬΄ 편ν–₯λ˜μ–΄ μžˆμŠ΅λ‹ˆκΉŒ?

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