GitHub Action JS 패키지 및 출시
10424 단어 actionsjavascriptnccgithub
🔭 개술
본고에서 ncc 패키지 도구를 사용하는 자바스크립트 GitHub 생성과 관련된 기록되지 않은 세부 사항을 공유하고 싶습니다.
이것은 순서에 따라 점진적인 지도가 아니라 문제의 이야기를 묘사하고 제기하는 방법과 배후의 추리이다.
만약 당신이 단지 빠른 코드 예시를 찾고 싶을 뿐이라면, this one 로 건너뛰고 돌아와서 설명해 주십시오🙂
🎬 네가 이미 알고 있는 기본 지식
기본 방법은 간단합니다. GitHub 문서here에 설명되어 있습니다.또한 GitHub은 간단한 JavaScript 및 TypeScript 액션 예제를 제공합니다.나는 여기서 그것을 집중적으로 토론하지 않을 것이다.
📦 ncc가 뭐예요? 왜 써요?
가장 명확하지 않고 혼란스러운 부분은 ncc 패키지 코드를 사용하는 것이다.이 단계의 필요성은 GitHub이 실행하는 방법에 의해 발생합니다.
작업이 없는 컴파일러 (용기) 는 메모리 라이브러리에서 직접 실례화하고 실행됩니다.Docker 컨테이너 작업은 매번 재구성
dockerfile
을 의미하며, 자바스크립트 작업은 node_modules
의 모든 의존항을 버전 제어 아래에 두어야 한다.GitHub의 솔루션은 다음과 같습니다.
node_modules
라이브러리는 ncc
에 필요한 모든 의존항과 코드를 단일 JS 파일(부품)에 포장합니다.🤔 왜 마음에 안 드세요?
일반적으로 버전 제어 아래 구축 부품을 저장하는 것은 좋지 않은 방법으로 여겨진다.따라서 코드가 중복되고 두 복제본이 동기화됩니다.
node_modules
압축 파일의 로컬 경로를 포함할 수 있다는 것을 발견했다. 이 파일은 로컬 컴퓨터에 대한 정보를 표시하고 서로 다른 컴퓨터에 구축할 수 있도록 한다.💡 자동화
나는 기존의 해결 방안을 조사하고 테스트했으며 자신의 방법을 제시하여 여러분과 공유하고 싶습니다.코드나 의존항이 변경된 후에, 나는 조작을 이용하여 포장된 JS 파일을 구축하고 제출하기로 결정했다.이렇게 하면 우리는 상술한 세 가지 문제를 해결할 수 있다.다음과 같은 워크플로우를 만들겠습니다.
🚀 워크플로우 만들기
1️⃣ 먼저 표준 절차에 따라
ncc
파일을 만듭니다.name: "build-and-pack"
on:
push:
branches:
- master
- develop
- 'v\*'
jobs:
build:
env:
PACKED_JS_PATH: 'dist/index.js'
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [12.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
...
Defined env variable.github/workflows/build-and-pack.yml
는 JS 가공소재의 대상 경로(저장소 기준)를 표시합니다.2️⃣ 우리의 작업은 열거된 지점으로만 실행될 것입니다.이것은
PACKED_JS_PATH
env 변수(Actionsengine에서 작성)가 지점 이름을 반영한다는 것을 의미한다.단, "on push tags"이벤트를 추가하면, 태그 인용도 포함할 수 있습니다.분기 이름을 가져오려면 다음 단계를 추가합니다.- name: Extract branch name
id: extractBranch
shell: bash
run: echo "##\[set-output name=branch;\]$(echo ${GITHUB\_REF#refs/heads/})"
셋️⃣ 그런 다음 의존 항목을 설치하고 TypeScript 코드를 구축하며 (사용할 경우) 원본 코드를 GITHUB_REF
로 포장하는 간단한 절차를 추가합니다.- name: Install dependencies
run: npm install
- name: Build
run: npm run build
- name: Pack
run: npm run pack
여기의 dist/index.js
및 build
명령은 (GitHub 문서에서 권장하는 경우와 같이 pack
에 정의된 스크립트일 뿐입니다."scripts": {
...
"build": "tsc",
"pack": "ncc build",
...
}
4️⃣ 단계 추가package.json
명령을 사용하여 단계 생성/패키지화 후 변경되었는지 찾기dist/index.js
:- name: Check packed JS changes
id: packedJsStatus
run: echo ::set-output name=changes::$(git status ${{ env.PACKED\_JS\_PATH }} --porcelain)
5️⃣ 변경되면 다음과 같이 제출합니다.- name: Commit packed JS
id: commitPackedJs
if: steps.packedJsStatus.outputs.changes
run: |
git config --local user.email "[email protected]"
git config --local user.name "GitHub Action"
git add ${{ env.PACKED_JS_PATH }}
git commit -m "Pack with dependencies to ${{ env.PACKED_JS_PATH }}"
6️⃣ ... 그런 다음 현재 브랜치git status
단계에서 해당 이름을 얻습니다.- name: Push packed JS
if: steps.commitPackedJs.outcome == 'success'
uses: ad-m/github-push-action@master
with:
github\_token: ${{ secrets.GITHUB\_TOKEN }}
tags: true
force: true
branch: ${{ steps.extractBranch.outputs.branch }}
🏷 게시 관리
내가 하고 싶은 마지막 점은 조작에 관한 버전 제어 전략이다.이 예에서, 나는 게시를 표시하기 위해 분기를 사용한다는 것을 알 수 있습니다.
GitHubrecommends에는 레이블이 사용됩니다.만약 우리가 이렇게 한다면 우리는 반드시 기억해야 한다.
extractBranch
이벤트가 작업 흐름을 촉발할 때 on push tags
env 변수는 표시ref를 가리키며 지점에 대한 정보가 없습니다.Tag ref를 목표로 변경 사항을 추진하는 것은 보통 나쁜 생각입니다.작업을 수행할 수 있지만 새 커밋은 분기와 분리되며 많은 GUI git 도구에 제대로 표시되지 않습니다.GIT_REF
분기는 최신 버전에 사용됩니다.master
는 지속적인 개발과 테스트에 사용되는 지점이다.develop
,v1
...API 변경 중단 없이 안정적인 버전으로 분기🏁 결말
게시를 표시하는 데 태그를 사용할 수 있지만, 작업 흐름이 끝난 후에 '패키지 의존항...' 이 제출되고 태그로 표시될 때까지 기다려야 합니다.
결과 워크플로우 파일의 예제에는 나만의 작업this one이 표시됩니다.
👏 읽어주셔서 감사합니다.
어떤 평론, 비판, 그리고 당신의 경험을 공유하더라도 감격을 금치 못할 것입니다.
만약 당신이 자신의 행동을 발전시키는 것에 관심이 있다면, 나도 당신에게 GitHub Actions Testing 시리즈를 읽는 것을 건의합니다.
Reference
이 문제에 관하여(GitHub Action JS 패키지 및 출시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/cardinalby/managing-javascript-github-action-ncc-packing-3jpb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)