chore(release): v0.104.0 #142
Workflow file for this run
This file contains hidden or 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
| # STABLE binary release. On a `vX.Y.Z` tag (cut by the nightly-release orchestrator's stable job | |
| # — nightly-release.yml — either from the midnight cron detecting a version bump or from a manual | |
| # `workflow_dispatch`), this workflow builds the `dig-node` service binary + its `dign` alias for | |
| # every OS/arch (via the reusable build workflow) and publishes them to a STABLE GitHub Release: | |
| # `prerelease: false`, marked `latest`. Every per-OS/arch binary is published under the canonical | |
| # `dig-node-*` name (+ the `dign-*` alias) — SPEC §11.2; the duplicate legacy `dig-companion-*` | |
| # copy was dropped in #585. The changelog is already | |
| # inside the tag (the orchestrator committed it before tagging), so the notes carry the changelog. | |
| # | |
| # This is intentionally tag-ONLY: merges to main no longer build or release here (dig_ecosystem | |
| # #590 batches releases to the nightly cron + manual dispatch). Pre-merge coverage comes from | |
| # ci.yml (fmt/clippy/test/coverage on every PR); daily main-HEAD build coverage comes from the | |
| # nightly channel. A `workflow_dispatch` is kept as a manual "does main still build?" canary — it | |
| # builds but does not publish (publish is gated on a tag ref). | |
| name: Release (stable) | |
| on: | |
| push: | |
| tags: | |
| - "v*" | |
| workflow_dispatch: | |
| concurrency: | |
| group: release-${{ github.ref }} | |
| cancel-in-progress: false | |
| permissions: | |
| contents: write | |
| jobs: | |
| # Resolve the version string the artifacts are stamped with: `X.Y.Z` from a `vX.Y.Z` tag, or a | |
| # `g<shortsha>` build id for the manual canary (which never publishes). | |
| meta: | |
| name: Resolve version | |
| runs-on: ubuntu-latest | |
| outputs: | |
| version: ${{ steps.v.outputs.version }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| persist-credentials: false | |
| - id: v | |
| shell: bash | |
| run: | | |
| if [ "$GITHUB_REF_TYPE" = "tag" ]; then | |
| echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "version=g$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT" | |
| fi | |
| # Build every OS/arch through the shared reusable workflow — the same build the nightly channel | |
| # uses, so the two release paths can never diverge on how a binary is produced. | |
| build: | |
| name: Build | |
| needs: meta | |
| uses: ./.github/workflows/build-binaries.yml | |
| with: | |
| version: ${{ needs.meta.outputs.version }} | |
| # Empty ref => build the tag/commit this run is on. | |
| ref: "" | |
| # Publish ONLY for a real tag — the manual-dispatch canary builds but stops here. | |
| publish: | |
| name: Publish GitHub Release | |
| needs: build | |
| if: github.ref_type == 'tag' | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Download all build artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Flatten | |
| run: | | |
| mkdir -p release | |
| find artifacts -type f -exec cp {} release/ \; | |
| ls -la release | |
| - name: Create / update the STABLE release and attach binaries | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| # `prerelease: false` + `make_latest: true`: a stable release is the one that moves | |
| # `latest`. Nightlies (nightly-release.yml) are always prerelease + never latest, so a | |
| # nightly can never masquerade as this stable download. | |
| prerelease: false | |
| make_latest: "true" | |
| files: release/* | |
| generate_release_notes: true | |
| fail_on_unmatched_files: true |