This is an automated email from the ASF dual-hosted git repository. hsluoyz pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/casbin-Casbin.NET-dotnet-cli.git
commit bdaa44f86bc58980d5c7f250a70690546eae6dee Author: Yang Luo <[email protected]> AuthorDate: Wed Oct 7 10:48:55 2026 +0800 feat: release the CLI binaries only from a manually pushed tag --- .github/workflows/build.yml | 119 +++++++++++++++++++++++++++++--------------- .releaserc.json | 29 ----------- README.md | 1 - 3 files changed, 79 insertions(+), 70 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f827c45..3bae991 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -87,43 +87,82 @@ jobs: name: binaries-${{ matrix.platform }} path: dist/casbin-dotnet-cli-${{ matrix.output_name }} - release: - needs: [test, build-binaries] - if: github.event_name == 'push' && github.ref == 'refs/heads/master' - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - persist-credentials: false - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 20 - - - name: Setup .NET - uses: actions/setup-dotnet@v4 - with: - dotnet-version: '8.0' - dotnet-quality: 'ga' - - - name: Download all artifacts - uses: actions/download-artifact@v4 - with: - path: artifacts - - - name: Move binaries to dist - run: | - mkdir -p dist - find artifacts -name "casbin-dotnet-cli-*" -type f -exec cp {} dist/ \; - ls -la dist/ - - - name: Release - id: semantic - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: npx [email protected] \ No newline at end of file + # Releases are cut by hand: nothing here runs on a merge, only on a pushed tag. + # + # v1.4.0-rc1 -> GitHub pre-release (the candidate put up for the Apache vote) + # v1.4.0 -> GitHub release + # + # Either way the release carries an Apache-style source tarball plus the CLI + # binaries built above. The release manager downloads the tarball and signs / + # checksums it locally before starting the vote; nothing is signed here. + release: + needs: [test, build-binaries] + if: github.repository == 'apache/casbin-Casbin.NET-dotnet-cli' && startsWith(github.ref, 'refs/tags/v') + runs-on: ubuntu-latest + permissions: + contents: write + env: + # Base name of the source release artifact, per Apache naming conventions. + ARTIFACT_BASENAME: apache-casbin-dotnet-cli + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Resolve version from tag + id: version + run: | + set -euo pipefail + VERSION="${GITHUB_REF_NAME#v}" + # v1.4.0-rc1 -> 1.4.0. The tarball the PPMC votes on is the exact tarball + # that ships, so the candidate counter is never part of its name. + BASE_VERSION="${VERSION%%-rc*}" + if [ "$VERSION" = "$BASE_VERSION" ]; then + PRERELEASE=false + else + PRERELEASE=true + fi + if ! echo "$VERSION" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+(-rc[0-9]+)?$'; then + echo "::error::Tag $GITHUB_REF_NAME is not vX.Y.Z or vX.Y.Z-rcN." + exit 1 + fi + { + echo "base_version=$BASE_VERSION" + echo "prerelease=$PRERELEASE" + } >> "$GITHUB_OUTPUT" + echo "Tag $GITHUB_REF_NAME -> version $BASE_VERSION (pre-release: $PRERELEASE)" + + - name: Build source release tarball + id: package + run: | + set -euo pipefail + NAME="${ARTIFACT_BASENAME}-${{ steps.version.outputs.base_version }}-incubating-src" + ASSET="${RUNNER_TEMP}/${NAME}.tar.gz" + # git archive gives us exactly the tracked sources at this tag, unpacking + # into a single top-level directory named after the release. + git archive --format=tar.gz --prefix="$NAME/" -o "$ASSET" HEAD + echo "asset=$ASSET" >> "$GITHUB_OUTPUT" + ls -l "$ASSET" + + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts + + - name: Move binaries to dist + run: | + mkdir -p dist + find artifacts -name "casbin-dotnet-cli-*" -type f -exec cp {} dist/ \; + ls -la dist/ + + - name: Publish GitHub release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG: ${{ github.ref_name }} + ASSET: ${{ steps.package.outputs.asset }} + run: | + set -euo pipefail + FLAGS=(--title "$TAG" --generate-notes) + if [ "${{ steps.version.outputs.prerelease }}" = "true" ]; then + FLAGS+=(--prerelease) + fi + gh release create "$TAG" "$ASSET" dist/casbin-dotnet-cli-* "${FLAGS[@]}" diff --git a/.releaserc.json b/.releaserc.json deleted file mode 100644 index 443d0a7..0000000 --- a/.releaserc.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "branches": [ - "master", - "main", - { - "name": "dev", - "prerelease": true - }, - { - "name": "beta", - "prerelease": true - }, - { - "name": "+([0-9])?(.{+([0-9]),x}).x", - "prerelease": false - } - ], - "plugins": [ - "@semantic-release/commit-analyzer", - "@semantic-release/release-notes-generator", - ["@semantic-release/github", { - "assets": [ - "dist/casbin-dotnet-cli-linux-*", - "dist/casbin-dotnet-cli-darwin-*", - "dist/casbin-dotnet-cli-windows-*" - ] - }] - ] -} \ No newline at end of file diff --git a/README.md b/README.md index 3ffc52b..5ee2d08 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,6 @@ casbin-dotnet-cli/ │ ├── abac_model.conf # ABAC model file │ └── abac_policy.csv # ABAC policy file ├── build.ps1 # Local multi-platform build script -├── .releaserc.json # Semantic release configuration ├── README.md # Project documentation └── casbin-dotnet-cli.sln # Visual Studio solution file ``` --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
