Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 81 additions & 17 deletions .github/workflows/maven-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,6 @@ jobs:
uses: actions/setup-java@v1
with:
java-version: 1.8
server-id: ossrh
server-username: OSSRH_JIRA_USERNAME
server-password: OSSRH_JIRA_PASSWORD
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
gpg-passphrase: GPG_PASSPHRASE

- name: Build with Maven
run: mvn clean test cobertura:cobertura
Expand All @@ -36,18 +31,87 @@ jobs:
with:
token: ${{ secrets.CODECOV_TOKEN }}

- name: Set up Node.js
uses: actions/setup-node@v2
prepare_snapshot_version:
name: Prepare Snapshot Version
needs: build
if: ${{ github.repository == 'apache/casbin-jcasbin' && github.event_name == 'push' && github.ref == 'refs/heads/master' }}
runs-on: ubuntu-latest
outputs:
version: ${{ steps.snapshot.outputs.version }}
maven_version: ${{ steps.snapshot.outputs.maven_version }}
basename: ${{ steps.snapshot.outputs.basename }}
previous_tag: ${{ steps.snapshot.outputs.previous_tag }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
node-version: 20
fetch-depth: 0

- name: Semantic Release
- name: Compute snapshot version
id: snapshot
run: |
npm install -g @conveyal/maven-semantic-release semantic-release
semantic-release --prepare @conveyal/maven-semantic-release --publish @semantic-release/github,@conveyal/maven-semantic-release --verify-conditions @semantic-release/github,@conveyal/maven-semantic-release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GPG_KEY_NAME: ${{ secrets.GPG_KEY_NAME }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
OSSRH_JIRA_USERNAME: ${{ secrets.OSSRH_JIRA_USERNAME }}
OSSRH_JIRA_PASSWORD: ${{ secrets.OSSRH_JIRA_PASSWORD }}
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}"
MAJOR="${RELEASE_VERSION%%.*}"
REST="${RELEASE_VERSION#*.}"
MINOR="${REST%%.*}"
NEXT_MINOR="$((MINOR + 1))"
BASE_VERSION="${MAJOR}.${NEXT_MINOR}.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}"
MAVEN_VERSION="${SNAPSHOT_VERSION#v}"
BASENAME="jcasbin-${MAVEN_VERSION}-src"

echo "version=${SNAPSHOT_VERSION}" >> "${GITHUB_OUTPUT}"
echo "maven_version=${MAVEN_VERSION}" >> "${GITHUB_OUTPUT}"
echo "basename=${BASENAME}" >> "${GITHUB_OUTPUT}"
if [ "${LAST_SNAPSHOT_NUMBER}" -gt 0 ]; then
echo "previous_tag=v${BASE_VERSION}-snapshot.${LAST_SNAPSHOT_NUMBER}" >> "${GITHUB_OUTPUT}"
else
echo "previous_tag=${LATEST_RELEASE_TAG}" >> "${GITHUB_OUTPUT}"
fi

echo "Computed snapshot version: ${SNAPSHOT_VERSION}"
echo "Computed Maven version: ${MAVEN_VERSION}"

publish-maven:
name: Publish Maven
needs: prepare_snapshot_version
if: ${{ github.repository == 'apache/casbin-jcasbin' && github.event_name == 'push' && github.ref == 'refs/heads/master' }}
uses: ./.github/workflows/maven-snapshot.yml
with:
maven_version: ${{ needs.prepare_snapshot_version.outputs.maven_version }}
secrets: inherit

semantic-release:
name: Semantic Release
needs:
- prepare_snapshot_version
- publish-maven
if: ${{ github.repository == 'apache/casbin-jcasbin' && github.event_name == 'push' && github.ref == 'refs/heads/master' }}
permissions:
contents: write
uses: ./.github/workflows/source-snapshot.yml
with:
version: ${{ needs.prepare_snapshot_version.outputs.version }}
basename: ${{ needs.prepare_snapshot_version.outputs.basename }}
previous_tag: ${{ needs.prepare_snapshot_version.outputs.previous_tag }}
49 changes: 49 additions & 0 deletions .github/workflows/maven-snapshot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Publish Maven

on:
workflow_call:
inputs:
maven_version:
required: true
type: string
workflow_dispatch:
inputs:
maven_version:
description: Maven release version to publish, for example 1.2.3-snapshot.1
required: true
type: string

permissions:
contents: read

jobs:
publish-maven:
name: Publish Maven
if: ${{ github.repository == 'apache/casbin-jcasbin' }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Set up JDK 1.8
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 8
server-id: ossrh
server-username: OSSRH_JIRA_USERNAME
server-password: OSSRH_JIRA_PASSWORD
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
gpg-passphrase: GPG_PASSPHRASE

- name: Publish Maven
run: |
mvn -B org.codehaus.mojo:versions-maven-plugin:2.16.2:set -DnewVersion="${{ inputs.maven_version }}" -DgenerateBackupPoms=false
mvn -B deploy -DskipTests
env:
GPG_KEY_NAME: ${{ secrets.GPG_KEY_NAME }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
OSSRH_JIRA_USERNAME: ${{ secrets.OSSRH_JIRA_USERNAME }}
OSSRH_JIRA_PASSWORD: ${{ secrets.OSSRH_JIRA_PASSWORD }}
125 changes: 125 additions & 0 deletions .github/workflows/source-release-draft.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
name: Build Source Release Draft

on:
push:
tags:
- "v*"

permissions:
contents: write

jobs:
build-source-release-draft:
if: ${{ github.repository == 'apache/casbin-jcasbin' && !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="jcasbin-${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="${{ steps.release.outputs.version }}"
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 "${PREVIOUS_TAG}" ]; then
echo "Changes since ${PREVIOUS_TAG}."
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 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: JCasbin ${{ 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
Loading
Loading