diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2dc5c701..cd6bd47b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,9 +14,9 @@ jobs: uses: actions/checkout@v4 - name: setup pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v3 with: - version: 8 + version: 9 - name: setup node.js uses: actions/setup-node@v4 @@ -27,6 +27,9 @@ jobs: - name: install dependencies run: pnpm install + - name: check for lint and format errors + run: pnpm run biome:ci + - name: build typescript run: pnpm run build --noEmit @@ -62,9 +65,35 @@ jobs: uses: actions/checkout@v4 - name: setup pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v3 + with: + version: 9 + + - name: setup node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + + - name: install dependencies + run: pnpm install + + - name: run tests + run: pnpm run test + + coverage: + name: "Test Coverage" + runs-on: "ubuntu-latest" + needs: [tests] + if: ${{ github.event_name == 'push' }} # Publish coverage only for push commits, not PRs. + steps: + - name: checkout code + uses: actions/checkout@v4 + + - name: setup pnpm + uses: pnpm/action-setup@v3 with: - version: 8 + version: 9 - name: setup node.js uses: actions/setup-node@v4 @@ -79,7 +108,6 @@ jobs: run: pnpm run coverage - name: publish code coverage to code-climate (duh) - if: ${{ github.event_name == 'push' && matrix.os.index == 1 }} # Push coverage only once inside the matrix. uses: paambaati/codeclimate-action@v5.0.0 env: CC_TEST_REPORTER_ID: 3470adaf12ff7cecdfe5a968ae0e95d098b6ee58c340114e1e90d440ee9e66ab diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a128261a..b435adad 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -5,7 +5,6 @@ on: - published - created - released - - rerequested jobs: publish: @@ -21,7 +20,7 @@ jobs: CREATE_MAJOR_VERSION_TAG: true CREATE_MINOR_VERSION_TAG: true CREATE_PATCH_VERSION_TAG: true - CLEAN_TARGETS: '.[!.]*,test,src,*.ts,*.json,CHANGELOG.md,_config.yml,.github,coverage,.nyc_output' + CLEAN_TARGETS: '.[!.]*,test,src,*.ts,*.json,CHANGELOG.md,_config.yml,.github,.tap' BRANCH_NAME: 'releases/${MAJOR}/${MINOR}/${PATCH}' env: DEBUG: '*' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 46ec16d2..10f09f60 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,102 +6,23 @@ on: tags: - '!*' -jobs: - next-version: - name: Get next release version - runs-on: ubuntu-latest - outputs: - need-release: ${{ steps.need-release.outputs.result }} - steps: - - name: checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: setup pnpm - uses: pnpm/action-setup@v2 - with: - version: 8 - - - name: setup node.js - uses: actions/setup-node@v4 - with: - node-version: 20 - cache: 'pnpm' - - - name: install dependencies - run: pnpm install - - - name: install workflow script dependencies - run: pnpm add semver@7.5.4 - - - name: find current latest release version - uses: pozetroninc/github-action-get-latest-release@master - id: last-release - with: - repository: ${{ github.repository }} - token: ${{ secrets.CUSTOM_GITHUB_PERSONAL_TOKEN }} - - - name: find next release version - id: next-release - run: pnpm -s dlx semantic-release --dry-run - env: - GITHUB_TOKEN: ${{ secrets.CUSTOM_GITHUB_PERSONAL_TOKEN }} - - - name: print discovered versions - run: | - echo "Last release version = ${{ steps.last-release.outputs.release }}" - echo "Next release version = ${{ steps.next-release.outputs.new-release-version }}" - - - name: check if we need a new release - uses: actions/github-script@v6 - id: need-release - env: - LAST_RELEASE: ${{ steps.last-release.outputs.release }} - NEW_RELEASE: ${{ steps.next-release.outputs.new-release-version }} - with: - script: | - const semver = require('semver'); - - const lastRelease = process.env.LAST_RELEASE.replace(/^v/, ''); - const newRelease = process.env.NEW_RELEASE.replace(/^v/, ''); - return semver.gt(newRelease, lastRelease); - result-encoding: string - - - name: print if we need a new release - run: | - echo "Need a new release = ${{ steps.need-release.outputs.result }}" +permissions: + contents: write + pull-requests: write +jobs: release: name: Cut a release on GitHub runs-on: ubuntu-latest - needs: next-version - if: needs.next-version.outputs.need-release == 'true' steps: - name: checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - - name: setup pnpm - uses: pnpm/action-setup@v2 - with: - version: 8 - - - name: setup node.js - uses: actions/setup-node@v4 + - name: make a new release PR + uses: google-github-actions/release-please-action@v4 + id: release with: - node-version: 20 - cache: 'pnpm' - - - name: install dependencies - run: pnpm install - - - name: make a release on GitHub - run: pnpm -s dlx semantic-release - env: - GITHUB_TOKEN: ${{ secrets.CUSTOM_GITHUB_PERSONAL_TOKEN }} - GIT_AUTHOR_NAME: 'GP' - GIT_COMMITTER_NAME: 'GP' - GIT_AUTHOR_EMAIL: 'me@httgp.com' - GIT_COMMITTER_EMAIL: 'me@httgp.com' + token: ${{ secrets.CUSTOM_GITHUB_PERSONAL_TOKEN }} + config-file: .release-please-config.json diff --git a/.release-please-config.json b/.release-please-config.json new file mode 100644 index 00000000..505b8364 --- /dev/null +++ b/.release-please-config.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "packages": { + ".": { + "release-type": "node", + "include-v-in-tag": true, + "include-component-in-tag": false + } + } +} diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 00000000..ec4aebc8 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "5.0.0" +}