diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2374ea449..20054c064 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,13 +5,6 @@ on: branches: - staging - feature* - tags: - - v** - -env: - GIT_SUBMODULE_STRATEGY: recursive - npm_config_cache: "${{ github.workspace }}/tmp/npm" - npm_config_prefer_offline: "true" jobs: check-lint: @@ -95,37 +88,10 @@ jobs: name: cobertura-coverage path: tmp/coverage/cobertura-coverage.json - build-prerelease: - name: "Build / Pre-release" - runs-on: ubuntu-latest - needs: - - check-lint - - check-build - - check-test - if: > - startsWith(github.ref, 'refs/tags/v') && - contains(github.ref, '-') - steps: - - uses: actions/checkout@v4 - - name: Run deployment - run: | - echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ./.npmrc - echo 'Publishing library prerelease' - npm install - npm publish --tag prerelease --access public - rm -f ./.npmrc - build-pull: name: "Build / Pull Request" runs-on: ubuntu-latest - needs: - - check-lint - - check-build - - check-test - if: > - github.ref == 'refs/heads/staging' || - (startsWith(github.ref, 'refs/tags/v') && - !contains(github.ref, '-')) + if: github.ref == 'refs/head/staging' steps: - uses: actions/checkout@v4 - name: Create pull request @@ -150,11 +116,12 @@ jobs: concurrency: group: integration-merge cancel-in-progress: true - needs: build-pull - if: > - github.ref == 'refs/heads/staging' || - (startsWith(github.ref, 'refs/tags/v') && - !contains(github.ref, '-')) + needs: + - build-pull + - check-lint + - check-build + - check-test + if: github.ref == 'refs/heads/staging' steps: - uses: actions/checkout@v4 with: @@ -175,24 +142,3 @@ jobs: git checkout master git merge --ff-only "$GITHUB_SHA" git push origin master - - release-distribution: - name: "Release / Distribution" - runs-on: ubuntu-latest - concurrency: - group: release-distribution - cancel-in-progress: false - needs: integration-merge - if: > - startsWith(github.ref, 'refs/tags/v') && - !contains(github.ref, '-') - steps: - - uses: actions/checkout@v4 - - name: Publish release - run: | - echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ./.npmrc - echo 'Publishing library' - npm install - npm publish --access public - rm -f ./.npmrc - diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..778e17805 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,136 @@ +name: Release + +on: + push: + tags: + - v** + +jobs: + check-lint: + name: "Check / Lint" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Run linting + run: | + npm install + npm run lint + npm run lint-shell + + check-build: + name: "Check / Build" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Run build + run: | + npm install + npm run build --verbose + + check-matrix: + name: "Check / Matrix" + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - uses: actions/checkout@v4 + - id: set-matrix + run: | + files=$(find tests/* -maxdepth 0 -type d | sed 's/.*/"&"/' | paste -sd, -) + files=$files,$(find tests/* -maxdepth 0 -type f | grep -e "/*.test.ts" | sed 's/.*/"&"/' | paste -sd, -) + if [ -z "$files" ]; then + echo "matrix={\"shard\":[]}" >> $GITHUB_OUTPUT + else + echo "matrix={\"shard\":[$files]}" >> $GITHUB_OUTPUT + fi + + check-test: + name: "Check / Test" + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: ${{fromJson(needs.check-matrix.outputs.matrix)}} + needs: check-matrix + steps: + - uses: actions/checkout@v4 + - name: Set artifact name + run: echo "SLUG=$(echo ${{ matrix.shard }} | sed 's/[/.]/-/g')" >> $GITHUB_ENV + - name: Run tests + run: | + npm install + npm run test -- \ + --coverageReporters json \ + --coverage \ + "${{ matrix.shard }}" + mv tmp/coverage/coverage-final.json "tmp/coverage/${{ env.SLUG }}.json" + - uses: actions/upload-artifact@v4 + with: + name: coverage-artifacts-${{ env.SLUG }} + path: tmp/coverage/ + + check-coverage: + name: "Check / Coverage" + runs-on: ubuntu-latest + needs: check-test + steps: + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 + with: + pattern: coverage-artifacts-* + path: tmp/coverage/ + merge-multiple: true + - run: rm .npmrc + - name: Merge coverage results + run: npx nyc merge tmp/coverage/ tmp/coverage/cobertura-coverage.json + - uses: actions/upload-artifact@v4 + with: + name: cobertura-coverage + path: tmp/coverage/cobertura-coverage.json + + build-prerelease: + name: "Build / Pre-release" + runs-on: ubuntu-latest + concurrency: + group: build-prerelease + cancel-in-progress: false + needs: + - check-lint + - check-build + - check-test + if: > + startsWith(github.ref, 'refs/tags/v') && + contains(github.ref, '-') + steps: + - uses: actions/checkout@v4 + - name: Run deployment + run: | + echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ./.npmrc + echo 'Publishing library prerelease' + npm install + npm publish --tag prerelease --access public + rm -f ./.npmrc + + release-distribution: + name: "Release / Distribution" + runs-on: ubuntu-latest + concurrency: + group: release-distribution + cancel-in-progress: false + needs: + - check-lint + - check-build + - check-test + if: > + startsWith(github.ref, 'refs/tags/v') && + !contains(github.ref, '-') + steps: + - uses: actions/checkout@v4 + - name: Publish release + run: | + echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ./.npmrc + echo 'Publishing library' + npm install + npm publish --access public + rm -f ./.npmrc + +