Lerna 및 Github Actions로 모노 리포지토리를 강화하세요
문제
Scalable Capital에서 우리는 재사용 가능한 반응 구성 요소, 구성, 도우미 등을 위한 공통 장소인 Whitelabel 플랫폼을 사용합니다.
플랫폼은 패키지를 관리하기 위해 monorepo
로 구성됩니다. 패키지와 해당 종속성을 처리하기 위해 Lerna을 사용하고 있습니다.
현재Lerna는 캐시 시스템을 사용하지 않습니다. 루트 수준에서 테스트를 빌드하거나 실행할 때마다 패키지 중 하나에서 파일을 변경한 경우에도 모든 패키지에 대해 모든 것을 실행합니다.
빌드 및 테스트에 시간이 걸리고 많은 개발 시간이 소요될 수 있기 때문에 좋지 않습니다.
What if somehow we build and run tests only for the package that is changed and not all packages?
What if we can cache the Github action workflows for the Pull requests subsequent commits for PR checks?
Turborepo을 입력합니다. ⚡️
변경 사항
바로 변경 사항을 살펴보겠습니다.
1부 - Turborepo 추가(Lerna가 이미 설정되었다고 가정)
터보를 추가하려면 터미널에서 다음 명령을 실행하십시오.
yarn add turbo --dev -W
프로젝트의 루트에 turbo.json 파일을 만듭니다.
{
"$schema": "https://turborepo.org/schema.json",
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": [".next/**"]
},
"test": {
"outputs": []
},
"test-coverage": {
"outputs": ["coverage/**"]
},
"start": {
"cache": false
},
"typecheck": {
"outputs": []
},
"prepublishOnly": {
"outputs": []
},
"@scacap/whitelabel-app-cockpit#prepublishOnly": {
"dependsOn": ["@scacap/whitelabel-components#prepublishOnly"]
},
"@scacap/whitelabel-app-onboarding#prepublishOnly": {
"dependsOn": ["@scacap/whitelabel-components#prepublishOnly"]
}
}
}
위의 turbo.json
파일에서 pipeline
를 정의해야 합니다.
따라서 package.json
를 사용하여 루트turbo run <tests | build>
의 NPM 스크립트에서 실행하려는 모든 항목은 pipeline
에 동일한 필드가 있어야 합니다.
turbo
실행 중에 파이프라인 작업을 NPM 스크립트에 적용합니다.
여기서 주목해야 할 가장 중요한 것은 dependsOn
입니다. 위 구성@scacap/whitelabel-app-cockpit
패키지prepublishOnly
에서 NPM 스크립트는 @scacap/whitelabel-components
의 prepublishOnly
스크립트가 실행된 경우에만 실행됩니다.
파이프라인 설정에 대한 자세한 내용은 here입니다.
마지막으로 루트로 변경됨package.json
packageManager
를 package.json
와 함께 사용하는 경우 Yarn Workspaces
를 Lerna
에 추가
"packageManager": "[email protected]",
2부 - 터보 캐시로 Github 작업 설정
코드 품질을 유지하기 위해 Github 작업 PR 검사를 사용합니다.
문제는 PR에 대한 모든 커밋이 이러한 검사(테스트 실행, 유형 검사 등)를 트리거하고 일부 캐싱 메커니즘 없이 이러한 작업이 모든 패키지에 대해 실행된다는 것입니다.
액션 워크플로 속도를 높이기 위해 Github 액션에 터보 매직을 추가해 봅시다.
테스트 실행의 예를 들어 보겠습니다.
패키지에 대한 일부 테스트를 변경하면 Turbo CacheLerna
가 없으면 모든 패키지에 대한 테스트가 실행됩니다. 그리고 이것은 모든 커밋에 대해 발생합니다. 😱
변경하자
tests:
name: Unit tests
runs-on: ubuntu-18.04
steps:
- name: Checkout repo
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Setup node
uses: actions/[email protected]
with:
node-version: 14
- name: Restore node_modules cache
uses: actions/[email protected]
with:
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
- name: Turbo Cache
id: turbo-cache
uses: actions/cache@v2
with:
path: .turbo
key: turbo-${{ github.job }}-${{ github.ref_name }}-${{ github.sha }}
restore-keys: |
turbo-${{ github.job }}-${{ github.ref_name }}-
- name: Install packages
run: yarn --frozen-lockfile
- name: All tests
run: yarn test-coverage --cache-dir=".turbo"
- name: Add coverage comment
continue-on-error: true
uses: eeshdarthvader/code-coverage-assistant@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
monorepo-base-path: './packages'
여기서는 Github 작업 워크플로에 mem 캐시를 추가하고 동일한 PR의 커밋 간에 재사용될 캐시 데이터를 .turbo
에 저장합니다.
결과
각 커밋에 대한 일반 CI PR 검사는 다음과 같습니다.
ℹ️ Note the time. This much time is taken for every tiny commit you push to PR.
CI는 TurboRepo와 함께 실행됩니다.
ℹ️ The test run has decreased from 4 min
to 1 min
and Typecheck reduced from 3 min
to 52 sec 😱
로컬에서 개발할 때 어떻게 도움이 되는지 살펴보겠습니다.
yarn test
를 사용하여 테스트를 처음 실행한 후 다시 실행해 보십시오.
✅ ===> 풀 터보 ✅
매번 실행하는 데 일반적으로 걸리는 테스트~20 sec
는 Turborepo와 함께 캐싱 시스템으로 괴물0.7 sec
로 실행되었습니다. 🎉
그게 다야! Turborepo으로 모노레포를 빠르게 충전하시기 바랍니다.
더 많은 리소스
What if somehow we build and run tests only for the package that is changed and not all packages?
What if we can cache the Github action workflows for the Pull requests subsequent commits for PR checks?
바로 변경 사항을 살펴보겠습니다.
1부 - Turborepo 추가(Lerna가 이미 설정되었다고 가정)
터보를 추가하려면 터미널에서 다음 명령을 실행하십시오.
yarn add turbo --dev -W
프로젝트의 루트에 turbo.json 파일을 만듭니다.
{
"$schema": "https://turborepo.org/schema.json",
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": [".next/**"]
},
"test": {
"outputs": []
},
"test-coverage": {
"outputs": ["coverage/**"]
},
"start": {
"cache": false
},
"typecheck": {
"outputs": []
},
"prepublishOnly": {
"outputs": []
},
"@scacap/whitelabel-app-cockpit#prepublishOnly": {
"dependsOn": ["@scacap/whitelabel-components#prepublishOnly"]
},
"@scacap/whitelabel-app-onboarding#prepublishOnly": {
"dependsOn": ["@scacap/whitelabel-components#prepublishOnly"]
}
}
}
위의
turbo.json
파일에서 pipeline
를 정의해야 합니다.따라서
package.json
를 사용하여 루트turbo run <tests | build>
의 NPM 스크립트에서 실행하려는 모든 항목은 pipeline
에 동일한 필드가 있어야 합니다.turbo
실행 중에 파이프라인 작업을 NPM 스크립트에 적용합니다.여기서 주목해야 할 가장 중요한 것은
dependsOn
입니다. 위 구성@scacap/whitelabel-app-cockpit
패키지prepublishOnly
에서 NPM 스크립트는 @scacap/whitelabel-components
의 prepublishOnly
스크립트가 실행된 경우에만 실행됩니다.파이프라인 설정에 대한 자세한 내용은 here입니다.
마지막으로 루트로 변경됨
package.json
packageManager
를 package.json
와 함께 사용하는 경우 Yarn Workspaces
를 Lerna
에 추가"packageManager": "[email protected]",
2부 - 터보 캐시로 Github 작업 설정
코드 품질을 유지하기 위해 Github 작업 PR 검사를 사용합니다.
문제는 PR에 대한 모든 커밋이 이러한 검사(테스트 실행, 유형 검사 등)를 트리거하고 일부 캐싱 메커니즘 없이 이러한 작업이 모든 패키지에 대해 실행된다는 것입니다.
액션 워크플로 속도를 높이기 위해 Github 액션에 터보 매직을 추가해 봅시다.
테스트 실행의 예를 들어 보겠습니다.
패키지에 대한 일부 테스트를 변경하면 Turbo Cache
Lerna
가 없으면 모든 패키지에 대한 테스트가 실행됩니다. 그리고 이것은 모든 커밋에 대해 발생합니다. 😱변경하자
tests:
name: Unit tests
runs-on: ubuntu-18.04
steps:
- name: Checkout repo
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Setup node
uses: actions/[email protected]
with:
node-version: 14
- name: Restore node_modules cache
uses: actions/[email protected]
with:
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
- name: Turbo Cache
id: turbo-cache
uses: actions/cache@v2
with:
path: .turbo
key: turbo-${{ github.job }}-${{ github.ref_name }}-${{ github.sha }}
restore-keys: |
turbo-${{ github.job }}-${{ github.ref_name }}-
- name: Install packages
run: yarn --frozen-lockfile
- name: All tests
run: yarn test-coverage --cache-dir=".turbo"
- name: Add coverage comment
continue-on-error: true
uses: eeshdarthvader/code-coverage-assistant@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
monorepo-base-path: './packages'
여기서는 Github 작업 워크플로에 mem 캐시를 추가하고 동일한 PR의 커밋 간에 재사용될 캐시 데이터를
.turbo
에 저장합니다.결과
각 커밋에 대한 일반 CI PR 검사는 다음과 같습니다.
ℹ️ Note the time. This much time is taken for every tiny commit you push to PR.
CI는 TurboRepo와 함께 실행됩니다.
ℹ️ The test run has decreased from 4 min
to 1 min
and Typecheck reduced from 3 min
to 52 sec 😱
로컬에서 개발할 때 어떻게 도움이 되는지 살펴보겠습니다.
yarn test
를 사용하여 테스트를 처음 실행한 후 다시 실행해 보십시오.
✅ ===> 풀 터보 ✅
매번 실행하는 데 일반적으로 걸리는 테스트~20 sec
는 Turborepo와 함께 캐싱 시스템으로 괴물0.7 sec
로 실행되었습니다. 🎉
그게 다야! Turborepo으로 모노레포를 빠르게 충전하시기 바랍니다.
더 많은 리소스
ℹ️ Note the time. This much time is taken for every tiny commit you push to PR.
ℹ️ The test run has decreased from 4 min
to 1 min
and Typecheck reduced from 3 min
to 52 sec 😱
게시물에 언급된 Pull request Github Action workflow
Code coverage Github action 모노레포용으로 제작
Reference
이 문제에 관하여(Lerna 및 Github Actions로 모노 리포지토리를 강화하세요), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/eteesh/turbocharge-your-monorepo-with-lerna-and-github-actions-3bgo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)