Merge "Add GitHub release workflow for version tag pushes"
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..c57bad9
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,72 @@
+name: Release
+
+on:
+ push:
+ tags:
+ - 'v*'
+
+jobs:
+ release:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Set up JDK 21
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'temurin'
+ java-version: '21'
+ cache: 'maven'
+
+ - name: Build Indexer jar
+ run: mvn -B -DskipTests package
+
+ - name: Get version and pre-release status
+ id: get_version
+ run: |
+ TAG_NAME=${GITHUB_REF#refs/tags/}
+ echo "tag_name=$TAG_NAME" >> $GITHUB_OUTPUT
+ # Changes file headings have no leading "v" (e.g. "0.65 2026-05-12").
+ echo "version=${TAG_NAME#v}" >> $GITHUB_OUTPUT
+ if [[ "$TAG_NAME" =~ (alpha|beta|rc) ]]; then
+ echo "prerelease=true" >> $GITHUB_OUTPUT
+ else
+ echo "prerelease=false" >> $GITHUB_OUTPUT
+ fi
+
+ - name: Extract release notes from Changes
+ id: changelog
+ run: |
+ VERSION="${{ steps.get_version.outputs.version }}"
+ # Pull the section for this version: everything between the heading
+ # line that starts with "<version> " and the next version heading.
+ # The Changes file is authored by hand (Gerrit workflow, no PRs to
+ # mine for notes).
+ NOTES=$(awk -v ver="$VERSION" '
+ /^[0-9]+\.[0-9]/ {
+ if ($1 == ver) { flag=1; next }
+ else if (flag) { exit }
+ }
+ flag { print }
+ ' Changes)
+ if [ -z "$(echo "$NOTES" | tr -d '[:space:]')" ]; then
+ echo "No Changes section found for $VERSION; falling back to a generic body." >&2
+ NOTES="Release ${{ steps.get_version.outputs.tag_name }}"
+ fi
+ {
+ echo "notes<<__CHANGELOG_EOF__"
+ echo "$NOTES"
+ echo "__CHANGELOG_EOF__"
+ } >> "$GITHUB_OUTPUT"
+
+ - name: Create Release
+ uses: softprops/action-gh-release@v2
+ with:
+ body: ${{ steps.changelog.outputs.notes }}
+ tag_name: ${{ steps.get_version.outputs.tag_name }}
+ name: Release ${{ steps.get_version.outputs.tag_name }}
+ prerelease: ${{ steps.get_version.outputs.prerelease }}
+ files: |
+ target/Krill-Indexer.jar
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}