ci(gh-actions): change release workflow (#962) #2659
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Node.js CI/CD | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
jobs: | |
lint: | |
name: Check Format | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4.1.4 | |
- name: Use Node.js ${{ vars.NODE_VERSION }} | |
uses: actions/setup-node@v4.0.2 | |
with: | |
node-version: ${{ vars.NODE_VERSION }} | |
cache: npm | |
- name: Install Dependencies | |
run: npm ci --ignore-scripts | |
- name: Lint | |
run: npm run lint | |
build: | |
name: Build Action Assets | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4.1.4 | |
- name: Use Node.js ${{ vars.NODE_VERSION }} | |
uses: actions/setup-node@v4.0.2 | |
with: | |
node-version: ${{ vars.NODE_VERSION }} | |
cache: npm | |
- name: Install Dependencies | |
run: npm ci --ignore-scripts | |
- name: Build | |
run: npm run build | |
- name: Upload Action Assets | |
uses: actions/upload-artifact@v4.3.3 | |
with: | |
name: dist | |
path: dist | |
unit-test: | |
name: Unit Test | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4.1.4 | |
- name: Use Node.js ${{ vars.NODE_VERSION }} | |
uses: actions/setup-node@v4.0.2 | |
with: | |
node-version: ${{ vars.NODE_VERSION }} | |
cache: npm | |
- name: Install Dependencies | |
run: npm ci --ignore-scripts | |
- name: Test | |
run: npm test -- --coverage | |
- name: Report Code Coverage to codecov | |
uses: codecov/codecov-action@v4.3.1 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
integration-test: | |
name: Integration Test | |
needs: [build] | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-22.04 | |
- ubuntu-20.04 | |
- macos-12 | |
- macos-11 | |
- windows-2022 | |
- windows-2019 | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4.1.4 | |
- name: Download Action Assets | |
uses: actions/download-artifact@v4.1.7 | |
with: | |
name: dist | |
path: dist | |
- name: Execute GitHub Action | |
uses: ./ | |
with: | |
image-url: ${{ vars.LGTM_IMAGE_URI }} | |
diff: | |
name: Compare Build Assets | |
if: github.event_name == 'pull_request' | |
needs: [build] | |
runs-on: ubuntu-latest | |
permissions: | |
issues: write | |
pull-requests: write | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4.1.4 | |
with: | |
ref: main | |
- name: Use Node.js ${{ vars.NODE_VERSION }} | |
uses: actions/setup-node@v4.0.2 | |
with: | |
node-version: ${{ vars.NODE_VERSION }} | |
cache: npm | |
- name: Install Dependencies | |
run: npm ci --ignore-scripts | |
- name: Build Action Assets on main | |
run: npm run build | |
- name: Download Current Action Assets | |
uses: actions/download-artifact@v4.1.7 | |
with: | |
name: dist | |
path: current | |
- name: Setup js-beautify to compare minified js files | |
run: | | |
npm install --global js-beautify | |
git config --local diff.minjs.textconv js-beautify | |
echo "index.js diff=minjs" > .gitattributes | |
- name: Compare | |
id: compare | |
continue-on-error: true | |
run: | | |
echo '# Compare ${{ github.sha }} to main' >> $GITHUB_STEP_SUMMARY | |
echo '```diff' >> $GITHUB_STEP_SUMMARY | |
git diff --no-index ./dist/ ./current/ >> $GITHUB_STEP_SUMMARY | |
echo '```' >> $GITHUB_STEP_SUMMARY | |
git diff --no-index --exit-code ./dist/ ./current/ | |
- name: Report diff | |
if: steps.compare.outcome == 'failure' | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const message = 'There is a difference in the build results.' | |
core.warning(message) | |
await github.rest.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: `${message} [Show More](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})` | |
}) | |
deploy: | |
name: Deploy to Release branch | |
if: github.event_name == 'push' | |
needs: [build] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Release Branch | |
uses: actions/checkout@v4.1.4 | |
with: | |
ref: ${{ vars.RELEASE_BRANCH }} | |
- name: Checkout Documents from main | |
uses: actions/checkout@v4.1.4 | |
with: | |
sparse-checkout: ${{ vars.RELEASE_ASSETS }} | |
sparse-checkout-cone-mode: false | |
- name: Download Build Assets | |
uses: actions/download-artifact@v4.1.7 | |
with: | |
name: dist | |
path: dist | |
- name: Commit and Push | |
continue-on-error: true | |
run: | | |
git config user.name github-actions[bot] | |
git config user.email 41898282+github-actions[bot]@users.noreply.github.com | |
git add . | |
git commit -m "build: deploy via ${{ github.sha }}" | |
git push |