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.git
The following commit(s) were added to refs/heads/master by this push:
new 15c1a45 feat: auto release snapshot versions now (#1726)
15c1a45 is described below
commit 15c1a453daca25ca322c5aaf1901e6b56e2b2d9d
Author: cooronx <[email protected]>
AuthorDate: Sat Apr 25 19:31:30 2026 +0800
feat: auto release snapshot versions now (#1726)
---
.github/workflows/default.yml | 19 ----
.github/workflows/source-release-draft.yml | 137 ++++++++++++++++++++++++++
.github/workflows/source-snapshot.yml | 150 +++++++++++++++++++++++++++++
.releaserc.json | 16 ---
Makefile | 3 -
5 files changed, 287 insertions(+), 38 deletions(-)
diff --git a/.github/workflows/default.yml b/.github/workflows/default.yml
index 86bdc0f..6881758 100644
--- a/.github/workflows/default.yml
+++ b/.github/workflows/default.yml
@@ -38,22 +38,3 @@ jobs:
- name: Run go test bench
run: make benchmark
-
- semantic-release:
- needs: test
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- with:
- fetch-depth: 0
- - name: Setup Node.js
- uses: actions/setup-node@v3
- with:
- node-version: 20
-
- - name: Run semantic-release
- if: github.repository == 'casbin/casbin' && github.event_name == 'push'
- run: make release
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/source-release-draft.yml
b/.github/workflows/source-release-draft.yml
new file mode 100644
index 0000000..5caa3f7
--- /dev/null
+++ b/.github/workflows/source-release-draft.yml
@@ -0,0 +1,137 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+name: Build Source Release Draft
+
+on:
+ push:
+ tags:
+ - "v*"
+
+permissions:
+ contents: write
+
+jobs:
+ build-source-release-draft:
+ if: ${{ github.repository == 'apache/casbin' && !contains(github.ref_name,
'-') }}
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Compute release metadata
+ id: release
+ run: |
+ TAG_NAME="${GITHUB_REF_NAME}"
+ if ! [[ "${TAG_NAME}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
+ echo "Unsupported release tag: ${TAG_NAME}" >&2
+ exit 1
+ fi
+
+ VERSION="${TAG_NAME#v}"
+ BASENAME="casbin-${VERSION}-src"
+ PREVIOUS_TAG="$(
+ git tag --list 'v*' |
+ grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' |
+ sort -V |
+ awk -v current="${TAG_NAME}" '
+ $0 == current {
+ print previous
+ exit
+ }
+ {
+ previous = $0
+ }
+ '
+ )"
+
+ echo "tag=${TAG_NAME}" >> "${GITHUB_OUTPUT}"
+ echo "version=${VERSION}" >> "${GITHUB_OUTPUT}"
+ echo "basename=${BASENAME}" >> "${GITHUB_OUTPUT}"
+ echo "previous_tag=${PREVIOUS_TAG}" >> "${GITHUB_OUTPUT}"
+
+ - name: Generate release notes
+ run: |
+ CURRENT_TAG="${{ steps.release.outputs.tag }}"
+ CURRENT_VERSION="${CURRENT_TAG#v}"
+ PREVIOUS_TAG="${{ steps.release.outputs.previous_tag }}"
+ RELEASE_DATE="$(date -u +%F)"
+ RANGE="${CURRENT_TAG}"
+
+ if [ -n "${PREVIOUS_TAG}" ]; then
+ RANGE="${PREVIOUS_TAG}..${CURRENT_TAG}"
+ fi
+
+ FEATURES="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep -Ei
'^(feat)(\(.+\))?: ' || true)"
+ FIXES="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep -Ei
'^(fix)(\(.+\))?: ' || true)"
+ DOCS="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep -Ei
'^(docs?|doc)(\(.+\))?: ' || true)"
+
+ {
+ if [ -n "${PREVIOUS_TAG}" ]; then
+ echo "#
[${CURRENT_VERSION}](https://github.com/${GITHUB_REPOSITORY}/compare/${PREVIOUS_TAG}...${CURRENT_TAG})
(${RELEASE_DATE})"
+ else
+ echo "# ${CURRENT_VERSION} (${RELEASE_DATE})"
+ fi
+ echo
+ echo "This GitHub release is a draft helper for packaging and
release notes."
+ echo
+ if [ -n "${FEATURES}" ]; then
+ echo "## Features"
+ echo
+ printf '%s\n' "${FEATURES}" | sed 's/^/- /'
+ echo
+ fi
+
+ if [ -n "${FIXES}" ]; then
+ echo "## Fixes"
+ echo
+ printf '%s\n' "${FIXES}" | sed 's/^/- /'
+ echo
+ fi
+
+ if [ -n "${DOCS}" ]; then
+ echo "## Docs"
+ echo
+ printf '%s\n' "${DOCS}" | sed 's/^/- /'
+ echo
+ fi
+
+ if [ -z "${FEATURES}${FIXES}${DOCS}" ]; then
+ echo "## Notes"
+ echo
+ echo "- No feat/fix/doc commits were found in this release
range."
+ fi
+ } > RELEASE_NOTES.md
+
+ - name: Create source archives
+ run: |
+ mkdir -p dist
+ git archive --format=tar.gz --prefix="${{
steps.release.outputs.basename }}/" -o "dist/${{ steps.release.outputs.basename
}}.tar.gz" "${{ steps.release.outputs.tag }}"
+ git archive --format=zip --prefix="${{
steps.release.outputs.basename }}/" -o "dist/${{ steps.release.outputs.basename
}}.zip" "${{ steps.release.outputs.tag }}"
+
+ - name: Create draft GitHub release
+ uses: softprops/action-gh-release@v2
+ with:
+ tag_name: ${{ steps.release.outputs.tag }}
+ name: Casbin ${{ steps.release.outputs.tag }}
+ body_path: RELEASE_NOTES.md
+ draft: true
+ files: |
+ dist/${{ steps.release.outputs.basename }}.tar.gz
+ dist/${{ steps.release.outputs.basename }}.zip
diff --git a/.github/workflows/source-snapshot.yml
b/.github/workflows/source-snapshot.yml
new file mode 100644
index 0000000..ddc6e82
--- /dev/null
+++ b/.github/workflows/source-snapshot.yml
@@ -0,0 +1,150 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+name: Build Source Snapshot
+
+on:
+ push:
+ branches:
+ - master
+ workflow_dispatch:
+
+permissions:
+ contents: write
+
+jobs:
+ build-source-snapshot:
+ if: ${{ github.repository == 'apache/casbin' }}
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Compute snapshot metadata
+ id: snapshot
+ run: |
+ LATEST_RELEASE_TAG="$(
+ git tag --list 'v*' |
+ grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' |
+ sort -V |
+ tail -n 1
+ )"
+
+ if [ -z "${LATEST_RELEASE_TAG}" ]; then
+ BASE_VERSION="0.1.0"
+ else
+ RELEASE_VERSION="${LATEST_RELEASE_TAG#v}"
+ IFS='.' read -r MAJOR MINOR PATCH <<< "${RELEASE_VERSION}"
+ BASE_VERSION="${MAJOR}.$((MINOR + 1)).0"
+ fi
+
+ ESCAPED_BASE_VERSION="${BASE_VERSION//./\\.}"
+ LAST_SNAPSHOT_NUMBER="$(
+ git tag --list "v${BASE_VERSION}-snapshot.*" |
+ sed -nE "s/^v${ESCAPED_BASE_VERSION}-snapshot\\.([0-9]+)$/\\1/p"
|
+ sort -n |
+ tail -n 1
+ )"
+ LAST_SNAPSHOT_NUMBER="${LAST_SNAPSHOT_NUMBER:-0}"
+ NEXT_SNAPSHOT_NUMBER="$((LAST_SNAPSHOT_NUMBER + 1))"
+ SNAPSHOT_VERSION="v${BASE_VERSION}-snapshot.${NEXT_SNAPSHOT_NUMBER}"
+ BASENAME="casbin-${SNAPSHOT_VERSION#v}-src"
+
+ if [ "${LAST_SNAPSHOT_NUMBER}" -gt 0 ]; then
+
CHANGELOG_START_TAG="v${BASE_VERSION}-snapshot.${LAST_SNAPSHOT_NUMBER}"
+ else
+ CHANGELOG_START_TAG="${LATEST_RELEASE_TAG}"
+ fi
+
+ echo "latest_release_tag=${LATEST_RELEASE_TAG}" >> "${GITHUB_OUTPUT}"
+ echo "changelog_start_tag=${CHANGELOG_START_TAG}" >>
"${GITHUB_OUTPUT}"
+ echo "base_version=${BASE_VERSION}" >> "${GITHUB_OUTPUT}"
+ echo "number=${NEXT_SNAPSHOT_NUMBER}" >> "${GITHUB_OUTPUT}"
+ echo "version=${SNAPSHOT_VERSION}" >> "${GITHUB_OUTPUT}"
+ echo "basename=${BASENAME}" >> "${GITHUB_OUTPUT}"
+
+ - name: Generate snapshot release notes
+ run: |
+ PREVIOUS_TAG="${{ steps.snapshot.outputs.changelog_start_tag }}"
+ CURRENT_TAG="${{ steps.snapshot.outputs.version }}"
+ CURRENT_VERSION="${CURRENT_TAG#v}"
+ RELEASE_DATE="$(date -u +%F)"
+ RANGE="HEAD"
+
+ if [ -n "${PREVIOUS_TAG}" ]; then
+ RANGE="${PREVIOUS_TAG}..HEAD"
+ fi
+
+ FEATURES="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep -Ei
'^(feat)(\(.+\))?: ' || true)"
+ FIXES="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep -Ei
'^(fix)(\(.+\))?: ' || true)"
+ DOCS="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep -Ei
'^(docs?|doc)(\(.+\))?: ' || true)"
+
+ {
+ if [ -n "${PREVIOUS_TAG}" ]; then
+ echo "#
[${CURRENT_VERSION}](https://github.com/${GITHUB_REPOSITORY}/compare/${PREVIOUS_TAG}...${CURRENT_TAG})
(${RELEASE_DATE})"
+ else
+ echo "# ${CURRENT_VERSION} (${RELEASE_DATE})"
+ fi
+ echo
+ if [ -n "${FEATURES}" ]; then
+ echo "## Features"
+ echo
+ printf '%s\n' "${FEATURES}" | sed 's/^/- /'
+ echo
+ fi
+
+ if [ -n "${FIXES}" ]; then
+ echo "## Fixes"
+ echo
+ printf '%s\n' "${FIXES}" | sed 's/^/- /'
+ echo
+ fi
+
+ if [ -n "${DOCS}" ]; then
+ echo "## Docs"
+ echo
+ printf '%s\n' "${DOCS}" | sed 's/^/- /'
+ echo
+ fi
+
+ if [ -z "${FEATURES}${FIXES}${DOCS}" ]; then
+ echo "## Notes"
+ echo
+ echo "- No feat/fix/doc commits were found in this snapshot
range."
+ fi
+ } > SNAPSHOT_RELEASE_NOTES.md
+
+ - name: Create source archives
+ run: |
+ mkdir -p dist
+ git archive --format=tar.gz --prefix="${{
steps.snapshot.outputs.basename }}/" -o "dist/${{
steps.snapshot.outputs.basename }}.tar.gz" HEAD
+ git archive --format=zip --prefix="${{
steps.snapshot.outputs.basename }}/" -o "dist/${{
steps.snapshot.outputs.basename }}.zip" HEAD
+
+ - name: Create snapshot GitHub release
+ uses: softprops/action-gh-release@v2
+ with:
+ tag_name: ${{ steps.snapshot.outputs.version }}
+ target_commitish: ${{ github.sha }}
+ name: ${{ steps.snapshot.outputs.version }}
+ body_path: SNAPSHOT_RELEASE_NOTES.md
+ draft: false
+ prerelease: false
+ files: |
+ dist/${{ steps.snapshot.outputs.basename }}.tar.gz
+ dist/${{ steps.snapshot.outputs.basename }}.zip
diff --git a/.releaserc.json b/.releaserc.json
deleted file mode 100644
index 58cb0bb..0000000
--- a/.releaserc.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "debug": true,
- "branches": [
- "+([0-9])?(.{+([0-9]),x}).x",
- "master",
- {
- "name": "beta",
- "prerelease": true
- }
- ],
- "plugins": [
- "@semantic-release/commit-analyzer",
- "@semantic-release/release-notes-generator",
- "@semantic-release/github"
- ]
-}
diff --git a/Makefile b/Makefile
index 64546af..19868ad 100644
--- a/Makefile
+++ b/Makefile
@@ -11,6 +11,3 @@ benchmark:
lint:
golangci-lint run --verbose
-
-release:
- npx [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]