name: Release on: push: tags: - 'v*.*.*' permissions: contents: read concurrency: group: release-${{ github.ref_name }} cancel-in-progress: false jobs: build: name: Verify and package ${{ github.ref_name }} runs-on: ubuntu-latest steps: - name: Checkout full history uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 with: fetch-depth: 0 persist-credentials: false - name: Setup pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 with: version: 11.7.0 - name: Setup Node.js uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: node-version: 24.x cache: pnpm - name: Install dependencies run: pnpm install --frozen-lockfile - name: Verify workspace run: pnpm check - name: Pack release assets shell: bash run: | set -euo pipefail mkdir -p release pnpm --filter @weekit/dsh-notify pack --pack-destination "$PWD/release" pnpm --filter @weekit/dsh-trace pack --pack-destination "$PWD/release" pnpm --filter @weekit/dsh-keybinding pack --pack-destination "$PWD/release" pnpm --filter @weekit/dsh-delegate-agent pack --pack-destination "$PWD/release" mv release/weekit-dsh-notify-*.tgz release/dsh-notify.tgz mv release/weekit-dsh-trace-*.tgz release/dsh-trace.tgz mv release/weekit-dsh-keybinding-*.tgz release/dsh-keybinding.tgz mv release/weekit-dsh-delegate-agent-*.tgz release/dsh-delegate-agent.tgz cp install.sh release/install.sh chmod +x release/install.sh (cd release && sha256sum dsh-notify.tgz dsh-trace.tgz dsh-keybinding.tgz dsh-delegate-agent.tgz install.sh > SHA256SUMS) - name: Verify release assets shell: bash run: | set -euo pipefail (cd release && sha256sum -c SHA256SUMS) assets=(dsh-notify.tgz dsh-trace.tgz dsh-keybinding.tgz dsh-delegate-agent.tgz) packages=(@weekit/dsh-notify @weekit/dsh-trace @weekit/dsh-keybinding @weekit/dsh-delegate-agent) for index in "${!assets[@]}"; do archive_listing=$(tar -tzf "release/${assets[$index]}") package_manifest=$(tar -xOf "release/${assets[$index]}" package/package.json) grep -q '^package/lib/' <<<"$archive_listing" grep -Fq "\"name\": \"${packages[$index]}\"" <<<"$package_manifest" done ./release/install.sh all --version "$GITHUB_REF_NAME" --dry-run - name: Upload verified release assets uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: release-${{ github.ref_name }} path: release/ if-no-files-found: error retention-days: 7 publish: name: Publish ${{ github.ref_name }} needs: build runs-on: ubuntu-latest permissions: contents: write steps: - name: Download verified release assets uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: name: release-${{ github.ref_name }} path: release - name: Create GitHub Release env: GH_TOKEN: ${{ github.token }} run: | if [[ "$GITHUB_REF_NAME" == *-* ]]; then gh release create "$GITHUB_REF_NAME" release/* --repo "$GITHUB_REPOSITORY" --verify-tag --prerelease --generate-notes --title "$GITHUB_REF_NAME" else gh release create "$GITHUB_REF_NAME" release/* --repo "$GITHUB_REPOSITORY" --verify-tag --generate-notes --title "$GITHUB_REF_NAME" fi