From 5c044006e9b601b52b3b758a0f0e8a0c77f05859 Mon Sep 17 00:00:00 2001 From: Teakowa Date: Fri, 4 Sep 2026 01:26:27 +0800 Subject: [PATCH 1/3] fix(release): set provider upload repository context Fixes #176 --- .github/workflows/provider-release.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/provider-release.yml b/.github/workflows/provider-release.yml index 36c56b6..eb11b3b 100644 --- a/.github/workflows/provider-release.yml +++ b/.github/workflows/provider-release.yml @@ -84,10 +84,12 @@ jobs: - name: Upload provider artifacts to the GitHub Release env: GH_TOKEN: ${{ github.token }} + GH_REPO: ${{ github.repository }} run: | set -euo pipefail for attempt in {1..30}; do - if gh release view "$GITHUB_REF_NAME" >/dev/null 2>&1; then + if gh release view "$GITHUB_REF_NAME" \ + --repo "$GH_REPO" >/dev/null 2>&1; then break fi if [[ "$attempt" == 30 ]]; then @@ -96,4 +98,8 @@ jobs: fi sleep 10 done - gh release upload "$GITHUB_REF_NAME" dist/*/opy-provider-*.tar.gz dist/*/opy-provider-*.tar.gz.sha256 --clobber + gh release upload "$GITHUB_REF_NAME" \ + --repo "$GH_REPO" \ + dist/*/opy-provider-*.tar.gz \ + dist/*/opy-provider-*.tar.gz.sha256 \ + --clobber From 2de3192d3d14b733340a19db7cbd556a4cdcda53 Mon Sep 17 00:00:00 2001 From: Teakowa Date: Fri, 4 Sep 2026 01:58:21 +0800 Subject: [PATCH 2/3] fix(release): integrate provider assets with release-plz Build and publish provider archives as downstream jobs of the release-plz workflow, using its release metadata and skipping the jobs when no release is created. Fixes #176 --- .github/workflows/provider-release.yml | 105 ------------------------- .github/workflows/release-plz.yml | 92 ++++++++++++++++++++++ 2 files changed, 92 insertions(+), 105 deletions(-) delete mode 100644 .github/workflows/provider-release.yml diff --git a/.github/workflows/provider-release.yml b/.github/workflows/provider-release.yml deleted file mode 100644 index eb11b3b..0000000 --- a/.github/workflows/provider-release.yml +++ /dev/null @@ -1,105 +0,0 @@ -name: OPY provider release artifacts - -on: - push: - tags: ["v*"] - -permissions: - contents: write - -jobs: - provider: - name: Provider (${{ matrix.target }}) - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - include: - - os: ubuntu-latest - target: x86_64-unknown-linux-gnu - - os: macos-15-intel - target: x86_64-apple-darwin - - os: macos-14 - target: aarch64-apple-darwin - - os: windows-latest - target: x86_64-pc-windows-msvc - - steps: - - name: Check out tagged source - uses: actions/checkout@v7 - with: - ref: ${{ github.ref_name }} - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@master - with: - toolchain: stable - targets: ${{ matrix.target }} - - - name: Build provider - run: cargo build --locked --release --target ${{ matrix.target }} -p opy-provider --bin opy-provider - - - name: Archive provider - shell: bash - env: - TARGET: ${{ matrix.target }} - VERSION: ${{ github.ref_name }} - run: | - VERSION="${VERSION#v}" - mkdir -p dist - if [[ "$TARGET" == *windows* ]]; then - BINARY=opy-provider.exe - cp "target/$TARGET/release/$BINARY" "dist/$BINARY" - else - BINARY=opy-provider - cp "target/$TARGET/release/$BINARY" "dist/$BINARY" - fi - tar -czf "opy-provider-$VERSION-$TARGET.tar.gz" -C dist "$BINARY" - ARCHIVE="opy-provider-$VERSION-$TARGET.tar.gz" - CHECKSUM="${ARCHIVE}.sha256" - if command -v sha256sum >/dev/null 2>&1; then - sha256sum "$ARCHIVE" > "$CHECKSUM" - else - shasum -a 256 "$ARCHIVE" > "$CHECKSUM" - fi - - - name: Stage provider artifact and checksum - uses: actions/upload-artifact@v4 - with: - name: opy-provider-${{ matrix.target }} - path: | - opy-provider-*.tar.gz - opy-provider-*.tar.gz.sha256 - - publish: - name: Publish provider release artifacts - needs: provider - runs-on: ubuntu-latest - steps: - - name: Download all target artifacts - uses: actions/download-artifact@v4 - with: - path: dist - - - name: Upload provider artifacts to the GitHub Release - env: - GH_TOKEN: ${{ github.token }} - GH_REPO: ${{ github.repository }} - run: | - set -euo pipefail - for attempt in {1..30}; do - if gh release view "$GITHUB_REF_NAME" \ - --repo "$GH_REPO" >/dev/null 2>&1; then - break - fi - if [[ "$attempt" == 30 ]]; then - echo "release $GITHUB_REF_NAME was not created" >&2 - exit 1 - fi - sleep 10 - done - gh release upload "$GITHUB_REF_NAME" \ - --repo "$GH_REPO" \ - dist/*/opy-provider-*.tar.gz \ - dist/*/opy-provider-*.tar.gz.sha256 \ - --clobber diff --git a/.github/workflows/release-plz.yml b/.github/workflows/release-plz.yml index e7cdfca..06b6a6c 100644 --- a/.github/workflows/release-plz.yml +++ b/.github/workflows/release-plz.yml @@ -13,3 +13,95 @@ jobs: secrets: github-token: ${{ secrets.GH_TOKEN }} cargo-registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }} + + provider: + name: Provider (${{ matrix.target }}) + if: needs.release-plz.outputs.releases_created == 'true' + needs: release-plz + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + target: x86_64-unknown-linux-gnu + - os: macos-15-intel + target: x86_64-apple-darwin + - os: macos-14 + target: aarch64-apple-darwin + - os: windows-latest + target: x86_64-pc-windows-msvc + + steps: + - name: Check out release source + uses: actions/checkout@v7 + with: + ref: ${{ fromJSON(needs.release-plz.outputs.releases)[0].tag }} + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@master + with: + toolchain: stable + targets: ${{ matrix.target }} + + - name: Build provider + run: cargo build --locked --release --target ${{ matrix.target }} -p opy-provider --bin opy-provider + + - name: Archive provider + shell: bash + env: + TARGET: ${{ matrix.target }} + VERSION: ${{ fromJSON(needs.release-plz.outputs.releases)[0].tag }} + run: | + VERSION="${VERSION#v}" + mkdir -p dist + if [[ "$TARGET" == *windows* ]]; then + BINARY=opy-provider.exe + else + BINARY=opy-provider + fi + cp "target/$TARGET/release/$BINARY" "dist/$BINARY" + tar -czf "opy-provider-$VERSION-$TARGET.tar.gz" -C dist "$BINARY" + ARCHIVE="opy-provider-$VERSION-$TARGET.tar.gz" + CHECKSUM="${ARCHIVE}.sha256" + if command -v sha256sum >/dev/null 2>&1; then + sha256sum "$ARCHIVE" > "$CHECKSUM" + else + shasum -a 256 "$ARCHIVE" > "$CHECKSUM" + fi + + - name: Stage provider artifact and checksum + uses: actions/upload-artifact@v4 + with: + name: opy-provider-${{ matrix.target }} + path: | + opy-provider-*.tar.gz + opy-provider-*.tar.gz.sha256 + + publish-provider: + name: Publish provider release artifacts + if: needs.release-plz.outputs.releases_created == 'true' + needs: + - release-plz + - provider + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - name: Download all target artifacts + uses: actions/download-artifact@v4 + with: + path: dist + + - name: Upload provider artifacts to the GitHub Release + env: + GH_TOKEN: ${{ github.token }} + RELEASE_TAG: ${{ fromJSON(needs.release-plz.outputs.releases)[0].tag }} + run: | + set -euo pipefail + gh release upload "$RELEASE_TAG" \ + --repo "$GITHUB_REPOSITORY" \ + dist/*/opy-provider-*.tar.gz \ + dist/*/opy-provider-*.tar.gz.sha256 \ + --clobber From 6df15fa2f41fbf3621eeb48c78e1ef384c9ae687 Mon Sep 17 00:00:00 2001 From: Teakowa Date: Fri, 4 Sep 2026 02:07:43 +0800 Subject: [PATCH 3/3] fix(release): select the opy-rs release metadata Resolve the release-plz metadata by package name before gating provider publication, so unrelated package releases cannot trigger provider assets. Refs #176 --- .github/workflows/release-plz.yml | 39 +++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/.github/workflows/release-plz.yml b/.github/workflows/release-plz.yml index 06b6a6c..cbf00c1 100644 --- a/.github/workflows/release-plz.yml +++ b/.github/workflows/release-plz.yml @@ -14,10 +14,35 @@ jobs: github-token: ${{ secrets.GH_TOKEN }} cargo-registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }} - provider: - name: Provider (${{ matrix.target }}) + release-context: + name: Resolve opy-rs release if: needs.release-plz.outputs.releases_created == 'true' needs: release-plz + runs-on: ubuntu-latest + outputs: + opy_release_created: ${{ steps.resolve.outputs.opy_release_created }} + opy_release_tag: ${{ steps.resolve.outputs.opy_release_tag }} + + steps: + - name: Select opy-rs release metadata + id: resolve + env: + RELEASES: ${{ needs.release-plz.outputs.releases }} + run: | + set -euo pipefail + opy_release_tag="$(jq -r 'map(select(.package_name == "opy-rs")) | first | .tag // empty' <<<"$RELEASES")" + if [[ -n "$opy_release_tag" ]]; then + echo "opy_release_created=true" >> "$GITHUB_OUTPUT" + echo "opy_release_tag=$opy_release_tag" >> "$GITHUB_OUTPUT" + else + echo "opy_release_created=false" >> "$GITHUB_OUTPUT" + echo "opy_release_tag=" >> "$GITHUB_OUTPUT" + fi + + provider: + name: Provider (${{ matrix.target }}) + if: needs.release-context.outputs.opy_release_created == 'true' + needs: release-context runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -36,7 +61,7 @@ jobs: - name: Check out release source uses: actions/checkout@v7 with: - ref: ${{ fromJSON(needs.release-plz.outputs.releases)[0].tag }} + ref: ${{ needs.release-context.outputs.opy_release_tag }} - name: Install Rust toolchain uses: dtolnay/rust-toolchain@master @@ -51,7 +76,7 @@ jobs: shell: bash env: TARGET: ${{ matrix.target }} - VERSION: ${{ fromJSON(needs.release-plz.outputs.releases)[0].tag }} + VERSION: ${{ needs.release-context.outputs.opy_release_tag }} run: | VERSION="${VERSION#v}" mkdir -p dist @@ -80,9 +105,9 @@ jobs: publish-provider: name: Publish provider release artifacts - if: needs.release-plz.outputs.releases_created == 'true' + if: needs.release-context.outputs.opy_release_created == 'true' needs: - - release-plz + - release-context - provider runs-on: ubuntu-latest permissions: @@ -97,7 +122,7 @@ jobs: - name: Upload provider artifacts to the GitHub Release env: GH_TOKEN: ${{ github.token }} - RELEASE_TAG: ${{ fromJSON(needs.release-plz.outputs.releases)[0].tag }} + RELEASE_TAG: ${{ needs.release-context.outputs.opy_release_tag }} run: | set -euo pipefail gh release upload "$RELEASE_TAG" \