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-gateway.git
The following commit(s) were added to refs/heads/master by this push:
new fc8e6d3 ci: replace semantic-release with manual tag-triggered
release (#180)
fc8e6d3 is described below
commit fc8e6d3b5b05896d79d8bf9135420293d782302f
Author: Ziyang Dong <[email protected]>
AuthorDate: Mon Aug 10 21:21:02 2026 +0800
ci: replace semantic-release with manual tag-triggered release (#180)
---
.github/workflows/build.yml | 68 ---------------------------
.github/workflows/release.yml | 107 ++++++++++++++++++++++++++++++++++++++++++
.releaserc.json | 23 ---------
3 files changed, 107 insertions(+), 91 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 53a1562..45530c7 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -62,71 +62,3 @@ jobs:
run: |
go build -race -ldflags "-extldflags '-static'"
working-directory: ./
-
- release-and-push:
- name: Release And Push
- runs-on: ubuntu-latest
- if: github.repository == 'casbin/caswaf' && github.event_name == 'push' &&
github.ref == 'refs/heads/master'
- needs: [ frontend, backend]
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- with:
- fetch-depth: -1
-
- - name: Create Tag with Semantic Release
- id: semantic
- uses: cycjimmy/semantic-release-action@v4
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Decide Should_Push Or Not
- id: should_push
- run: |
- old_version=${{ steps.semantic.outputs.last_release_version }}
- new_version=${{ steps.semantic.outputs.new_release_version }}
-
- # If semantic-release didn't create a new version, skip Docker push
- if [ -z "$new_version" ]; then
- echo ::set-output name=push::'false'
- exit 0
- fi
-
- old_array=(${old_version//\./ })
- new_array=(${new_version//\./ })
-
- if [ ${old_array[0]} != ${new_array[0]} ]
- then
- echo ::set-output name=push::'true'
- elif [ ${old_array[1]} != ${new_array[1]} ]
- then
- echo ::set-output name=push::'true'
- else
- echo ::set-output name=push::'false'
- fi
-
- - name: Set up QEMU
- uses: docker/setup-qemu-action@v2
-
- - name: Set up buildx
- id: buildx
- uses: docker/setup-buildx-action@v2
- with:
- version: latest
-
- - name: Log in to Docker Hub
- uses: docker/login-action@v1
- if: github.repository == 'casbin/caswaf' && github.event_name ==
'push' && github.ref == 'refs/heads/master' &&
steps.should_push.outputs.push=='true'
- with:
- username: ${{ secrets.DOCKERHUB_USERNAME }}
- password: ${{ secrets.DOCKERHUB_PASSWORD }}
-
- - name: Push to Docker Hub
- uses: docker/build-push-action@v3
- if: github.repository == 'casbin/caswaf' && github.event_name ==
'push' && github.ref == 'refs/heads/master' &&
steps.should_push.outputs.push=='true'
- with:
- context: .
- target: STANDARD
- platforms: linux/amd64
- push: true
- tags: casbin/caswaf:${{ steps.semantic.outputs.new_release_version
}},casbin/caswaf:latest
\ No newline at end of file
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..7a2e304
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,107 @@
+name: Release
+
+# Releases are cut manually by pushing a git tag:
+# v1.4.0-rc1 -> GitHub pre-release only (source package for the Apache vote)
+# v1.4.0 -> GitHub release (the Go module is published automatically by
+# proxy.golang.org once the tag exists)
+#
+# The release manager downloads the source package from the release, signs it
+# locally with their own GPG key, and uses it for the vote. This workflow does
+# not sign anything and does not touch any other Apache infrastructure.
+
+on:
+ push:
+ tags:
+ - "v*"
+
+permissions:
+ contents: write
+
+jobs:
+ release:
+ if: ${{ github.repository == 'apache/casbin-gateway' }}
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Compute release metadata
+ id: meta
+ run: |
+ TAG_NAME="${GITHUB_REF_NAME}"
+
+ if [[ "${TAG_NAME}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
+ PRERELEASE=false
+ elif [[ "${TAG_NAME}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+-rc[0-9]+$ ]]; then
+ PRERELEASE=true
+ else
+ echo "Unsupported release tag: ${TAG_NAME}. Use v1.2.3 or
v1.2.3-rc1." >&2
+ exit 1
+ fi
+
+ VERSION="${TAG_NAME#v}"
+ BASENAME="apache-casbin-gateway-${VERSION}-incubating-src"
+
+ {
+ echo "tag=${TAG_NAME}"
+ echo "version=${VERSION}"
+ echo "basename=${BASENAME}"
+ echo "prerelease=${PRERELEASE}"
+ } >> "${GITHUB_OUTPUT}"
+
+ - name: Build source release tarball
+ env:
+ BASENAME: ${{ steps.meta.outputs.basename }}
+ TAG: ${{ steps.meta.outputs.tag }}
+ run: |
+ set -euo pipefail
+ mkdir -p dist
+ git archive --format=tar.gz --prefix="${BASENAME}/" -o
"dist/${BASENAME}.tar.gz" "${TAG}"
+ cd dist
+ sha512sum "${BASENAME}.tar.gz" > "${BASENAME}.tar.gz.sha512"
+ sha512sum -c "${BASENAME}.tar.gz.sha512"
+ ls -l
+
+ - name: Write release notes
+ env:
+ VERSION: ${{ steps.meta.outputs.version }}
+ PRERELEASE: ${{ steps.meta.outputs.prerelease }}
+ BASENAME: ${{ steps.meta.outputs.basename }}
+ run: |
+ set -euo pipefail
+ {
+ if [[ "${PRERELEASE}" == "true" ]]; then
+ printf 'Release candidate for version `%s`. This is **not** a
released version; it is the source artifact for the Apache release vote.\n'
"${VERSION%%-rc*}"
+ else
+ printf 'Version `%s`.\n' "${VERSION}"
+ fi
+ printf '\n| Asset | Description |\n| --- | --- |\n'
+ printf '| `%s.tar.gz` | Source release |\n' "${BASENAME}"
+ printf '| `%s.tar.gz.sha512` | SHA-512 checksum |\n\n'
"${BASENAME}"
+ printf 'The release manager signs the tarball locally with their
own GPG key before starting the vote.\n'
+ } > release-notes.md
+ cat release-notes.md
+
+ # The gh CLI is used instead of a marketplace action: the ASF org only
+ # allows actions owned by GitHub or by the enterprise allow-list.
+ - name: Create GitHub release
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ TAG: ${{ steps.meta.outputs.tag }}
+ BASENAME: ${{ steps.meta.outputs.basename }}
+ PRERELEASE: ${{ steps.meta.outputs.prerelease }}
+ run: |
+ set -euo pipefail
+ args=(
+ "${TAG}"
+ --title "Casbin Gateway ${TAG}"
+ --notes-file release-notes.md
+ )
+ if [[ "${PRERELEASE}" == "true" ]]; then
+ args+=(--prerelease)
+ fi
+ gh release create "${args[@]}" \
+ "dist/${BASENAME}.tar.gz" \
+ "dist/${BASENAME}.tar.gz.sha512"
diff --git a/.releaserc.json b/.releaserc.json
deleted file mode 100644
index e38e740..0000000
--- a/.releaserc.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "debug": true,
- "branches": [
- "+([0-9])?(.{+([0-9]),x}).x",
- "master",
- {
- "name": "rc"
- },
- {
- "name": "beta",
- "prerelease": true
- },
- {
- "name": "alpha",
- "prerelease": true
- }
- ],
- "plugins": [
- "@semantic-release/commit-analyzer",
- "@semantic-release/release-notes-generator",
- "@semantic-release/github"
- ]
-}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]