2222 uses : actions/setup-java@v1
2323 with :
2424 java-version : 1.8
25- server-id : ossrh
26- server-username : OSSRH_JIRA_USERNAME
27- server-password : OSSRH_JIRA_PASSWORD
28- gpg-private-key : ${{ secrets.GPG_PRIVATE_KEY }}
29- gpg-passphrase : GPG_PASSPHRASE
3025
3126 - name : Build with Maven
3227 run : mvn clean test cobertura:cobertura
@@ -36,18 +31,87 @@ jobs:
3631 with :
3732 token : ${{ secrets.CODECOV_TOKEN }}
3833
39- - name : Set up Node.js
40- uses : actions/setup-node@v2
34+ prepare_snapshot_version :
35+ name : Prepare Snapshot Version
36+ needs : build
37+ if : ${{ github.repository == 'apache/casbin-jcasbin' && github.event_name == 'push' && github.ref == 'refs/heads/master' }}
38+ runs-on : ubuntu-latest
39+ outputs :
40+ version : ${{ steps.snapshot.outputs.version }}
41+ maven_version : ${{ steps.snapshot.outputs.maven_version }}
42+ basename : ${{ steps.snapshot.outputs.basename }}
43+ previous_tag : ${{ steps.snapshot.outputs.previous_tag }}
44+ steps :
45+ - name : Checkout
46+ uses : actions/checkout@v4
4147 with :
42- node-version : 20
48+ fetch-depth : 0
4349
44- - name : Semantic Release
50+ - name : Compute snapshot version
51+ id : snapshot
4552 run : |
46- npm install -g @conveyal/maven-semantic-release semantic-release
47- semantic-release --prepare @conveyal/maven-semantic-release --publish @semantic-release/github,@conveyal/maven-semantic-release --verify-conditions @semantic-release/github,@conveyal/maven-semantic-release
48- env :
49- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
50- GPG_KEY_NAME : ${{ secrets.GPG_KEY_NAME }}
51- GPG_PASSPHRASE : ${{ secrets.GPG_PASSPHRASE }}
52- OSSRH_JIRA_USERNAME : ${{ secrets.OSSRH_JIRA_USERNAME }}
53- OSSRH_JIRA_PASSWORD : ${{ secrets.OSSRH_JIRA_PASSWORD }}
53+ LATEST_RELEASE_TAG="$(
54+ git tag --list 'v*' |
55+ grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' |
56+ sort -V |
57+ tail -n 1
58+ )"
59+
60+ if [ -z "${LATEST_RELEASE_TAG}" ]; then
61+ BASE_VERSION="0.1.0"
62+ else
63+ RELEASE_VERSION="${LATEST_RELEASE_TAG#v}"
64+ MAJOR="${RELEASE_VERSION%%.*}"
65+ REST="${RELEASE_VERSION#*.}"
66+ MINOR="${REST%%.*}"
67+ NEXT_MINOR="$((MINOR + 1))"
68+ BASE_VERSION="${MAJOR}.${NEXT_MINOR}.0"
69+ fi
70+
71+ ESCAPED_BASE_VERSION="${BASE_VERSION//./\\.}"
72+ LAST_SNAPSHOT_NUMBER="$(
73+ git tag --list "v${BASE_VERSION}-snapshot.*" |
74+ sed -nE "s/^v${ESCAPED_BASE_VERSION}-snapshot\\.([0-9]+)$/\\1/p" |
75+ sort -n |
76+ tail -n 1
77+ )"
78+ LAST_SNAPSHOT_NUMBER="${LAST_SNAPSHOT_NUMBER:-0}"
79+ NEXT_SNAPSHOT_NUMBER="$((LAST_SNAPSHOT_NUMBER + 1))"
80+ SNAPSHOT_VERSION="v${BASE_VERSION}-snapshot.${NEXT_SNAPSHOT_NUMBER}"
81+ MAVEN_VERSION="${SNAPSHOT_VERSION#v}"
82+ BASENAME="jcasbin-${MAVEN_VERSION}-src"
83+
84+ echo "version=${SNAPSHOT_VERSION}" >> "${GITHUB_OUTPUT}"
85+ echo "maven_version=${MAVEN_VERSION}" >> "${GITHUB_OUTPUT}"
86+ echo "basename=${BASENAME}" >> "${GITHUB_OUTPUT}"
87+ if [ "${LAST_SNAPSHOT_NUMBER}" -gt 0 ]; then
88+ echo "previous_tag=v${BASE_VERSION}-snapshot.${LAST_SNAPSHOT_NUMBER}" >> "${GITHUB_OUTPUT}"
89+ else
90+ echo "previous_tag=${LATEST_RELEASE_TAG}" >> "${GITHUB_OUTPUT}"
91+ fi
92+
93+ echo "Computed snapshot version: ${SNAPSHOT_VERSION}"
94+ echo "Computed Maven version: ${MAVEN_VERSION}"
95+
96+ publish-maven :
97+ name : Publish Maven
98+ needs : prepare_snapshot_version
99+ if : ${{ github.repository == 'apache/casbin-jcasbin' && github.event_name == 'push' && github.ref == 'refs/heads/master' }}
100+ uses : ./.github/workflows/maven-snapshot.yml
101+ with :
102+ maven_version : ${{ needs.prepare_snapshot_version.outputs.maven_version }}
103+ secrets : inherit
104+
105+ semantic-release :
106+ name : Semantic Release
107+ needs :
108+ - prepare_snapshot_version
109+ - publish-maven
110+ if : ${{ github.repository == 'apache/casbin-jcasbin' && github.event_name == 'push' && github.ref == 'refs/heads/master' }}
111+ permissions :
112+ contents : write
113+ uses : ./.github/workflows/source-snapshot.yml
114+ with :
115+ version : ${{ needs.prepare_snapshot_version.outputs.version }}
116+ basename : ${{ needs.prepare_snapshot_version.outputs.basename }}
117+ previous_tag : ${{ needs.prepare_snapshot_version.outputs.previous_tag }}
0 commit comments