From f0296775a7a841e7291458920874c190c5f32978 Mon Sep 17 00:00:00 2001 From: GermanBluefox Date: Thu, 29 Aug 2024 16:31:06 +0800 Subject: [PATCH] Working on build CI --- .github/workflows/test-and-release.yml | 210 ++++++++++++------------- .gitignore | 1 + 2 files changed, 101 insertions(+), 110 deletions(-) diff --git a/.github/workflows/test-and-release.yml b/.github/workflows/test-and-release.yml index fc28124..de56c29 100644 --- a/.github/workflows/test-and-release.yml +++ b/.github/workflows/test-and-release.yml @@ -6,115 +6,105 @@ name: Test and Release # Run this job on all pushes and pull requests # as well as tags with a semantic version on: - push: - branches: - - master - tags: - # normal versions - - "v?[0-9]+.[0-9]+.[0-9]+" - # pre-releases - - "v?[0-9]+.[0-9]+.[0-9]+-**" - pull_request: {} - -# Cancel previous PR/branch runs when a new commit is pushed -concurrency: - group: ${{ github.ref }} - cancel-in-progress: true + push: + branches: + - '*' + tags: + # normal versions + - "v?[0-9]+.[0-9]+.[0-9]+" + # pre-releases + - "v?[0-9]+.[0-9]+.[0-9]+-**" + pull_request: {} jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: 18.x - - - name: 'Install' - run: | - npm i - - - name: 'Build' - run: npm run build - - auto-merge: - if: | - always() && - github.event_name == 'pull_request' - needs: [build] - runs-on: macos-latest # ubuntu-latest has too few RAM - - steps: - - id: automerge - name: automerge - uses: "pascalgn/automerge-action@v0.16.3" - env: - GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" - MERGE_LABELS: "automated pr 🔧" - MERGE_FILTER_AUTHOR: "foxriver76" - MERGE_FORKS: "false" - MERGE_DELETE_BRANCH: "false" - UPDATE_LABELS: "automated pr 🔧" - MERGE_METHOD: "squash" - MERGE_COMMIT_MESSAGE: "pull-request-title-and-description" - - - name: Checkout repository - if: steps.automerge.outputs.mergeResult == 'merged' - uses: actions/checkout@v4 - with: - fetch-depth: 0 # Fetch the history, or this action won't work - ref: 'master' - - - name: Use Node.js 20 - if: steps.automerge.outputs.mergeResult == 'merged' - uses: actions/setup-node@v4 - with: - node-version: 20 - - - name: Determine version - if: steps.automerge.outputs.mergeResult == 'merged' - id: version - uses: actions/github-script@v7 - with: - result-encoding: string - script: | - return require('./lerna.json').version; - - - name: Extract the commit body - if: steps.automerge.outputs.mergeResult == 'merged' - id: extract_release - # The body may be multiline, therefore we need to escape some characters - run: | - BODY=$(git show -s --format=%b) - BODY="${BODY//'%'/'%25'}" - BODY="${BODY//$'\n'/'%0A'}" - BODY="${BODY//$'\r'/'%0D'}" - echo "::set-output name=BODY::$BODY" - - - name: Install Dependencies - if: steps.automerge.outputs.mergeResult == 'merged' - run: npm i - - - name: 'Build' - if: steps.automerge.outputs.mergeResult == 'merged' - run: npm run build - - - name: Publish package to npm - if: steps.automerge.outputs.mergeResult == 'merged' - run: | - npm config set //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }} - npm whoami - git checkout -- package-lock.json - npx lerna publish from-package --yes - - - name: Create Github Release - if: steps.automerge.outputs.mergeResult == 'merged' - uses: ncipollo/release-action@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag: v${{ steps.version.outputs.result }} - name: Release v${{ steps.version.outputs.result }} - draft: false - prerelease: ${{ contains(steps.version.outputs.result, '-') }} - body: ${{ steps.extract_release.outputs.BODY }} + # Performs quick checks before the expensive test runs + check-and-lint: + if: contains(github.event.head_commit.message, '[skip ci]') == false + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Use Node.js 20.x + uses: actions/setup-node@v4 + with: + node-version: 20.x + + - name: Install Dependencies + run: npm install + + # - name: Perform a type check + # run: npm run check:ts + # env: + # CI: true + # - name: Lint TypeScript code + # run: npm run lint + # - name: Test package files + # run: npm run test:package + + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20.x + - run: npm i + - run: npm run build + + # Deploys the final package to NPM + deploy: + needs: [build] + + # Trigger this step only when a commit on master is tagged with a version number + if: | + contains(github.event.head_commit.message, '[skip ci]') == false && + github.event_name == 'push' && + startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Use Node.js 20.x + uses: actions/setup-node@v4 + with: + node-version: 20.x + + - name: Extract the version and commit body from the tag + id: extract_release + # The body may be multiline, therefore we need to escape some characters + run: | + VERSION="${{ github.ref }}" + VERSION=${VERSION##*/} + VERSION=${VERSION##*v} + echo "::set-output name=VERSION::$VERSION" + BODY=$(git show -s --format=%b) + BODY="${BODY//'%'/'%25'}" + BODY="${BODY//$'\n'/'%0A'}" + BODY="${BODY//$'\r'/'%0D'}" + echo "::set-output name=BODY::$BODY" + + - name: Install Dependencies + run: npm install -f + + - name: Create a clean build + run: npm run build + - name: Publish package to npm + run: | + npm config set //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }} + npm whoami + npm publish + + - name: Create Github Release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: Release v${{ steps.extract_release.outputs.VERSION }} + draft: false + # Prerelease versions create pre-releases on GitHub + prerelease: ${{ contains(steps.extract_release.outputs.VERSION, '-') }} + body: ${{ steps.extract_release.outputs.BODY }} diff --git a/.gitignore b/.gitignore index 2ccbe46..e3c3649 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /node_modules/ +.idea/