2am experimental features be like #28
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Java CI with Gradle | |
on: | |
push: | |
branches: | |
- main | |
jobs: | |
build-and-release: | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write # Needed for creating releases | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Ensure full history is fetched to capture all commits | |
- name: Set up JDK 21 | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '21' | |
distribution: 'temurin' | |
- name: Extract current version from gradle.properties | |
id: get_version | |
run: | | |
version=$(grep -oP '(?<=mod_version = ).*' gradle.properties) | |
echo "mod_version=$version" >> $GITHUB_ENV | |
- name: Get latest release version (including pre-releases) | |
id: get_latest_release_version | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
latest_release_version=$(curl -s -H "Authorization: token $GH_TOKEN" \ | |
https://api.github.com/repos/${{ github.repository }}/releases \ | |
| jq -r 'map(select(.prerelease == false and .draft == false)) | sort_by(.created_at) | last | .tag_name') | |
if [ "$latest_release_version" = "null" ] || [ -z "$latest_release_version" ]; then | |
echo "No previous release found." | |
latest_release_version="none" | |
else | |
echo "Latest release version: $latest_release_version" | |
fi | |
echo "latest_release_version=$latest_release_version" >> $GITHUB_ENV | |
- name: Check if version has changed | |
id: version_check | |
run: | | |
current_version="${{ env.mod_version }}" | |
latest_release_version="${{ env.latest_release_version }}" | |
if [ "$latest_release_version" = "none" ]; then | |
echo "No previous release found. Proceeding with build." | |
echo "build_required=true" >> $GITHUB_ENV | |
elif [ "$current_version" = "$latest_release_version" ]; then | |
echo "Version has not changed. Skipping build." | |
echo "build_required=false" >> $GITHUB_ENV | |
else | |
echo "Version has changed from $latest_release_version to $current_version. Proceeding with build." | |
echo "build_required=true" >> $GITHUB_ENV | |
- name: Build with Gradle | |
if: env.build_required == 'true' | |
run: ./gradlew build --no-daemon | |
- name: Generate Changelog and Contributors List | |
if: env.build_required == 'true' | |
id: generate_changelog_contributors | |
run: | | |
if [ "${{ env.latest_release_version }}" = "none" ]; then | |
changelog=$(git log --pretty=format:"- %h - %s") | |
else | |
last_release_date=$(curl -s -H "Authorization: token $GH_TOKEN" \ | |
https://api.github.com/repos/${{ github.repository }}/releases/tags/${{ env.latest_release_version }} \ | |
| jq -r '.created_at') | |
changelog=$(git log --since="$last_release_date" --pretty=format:"- %h - %s") | |
fi | |
# Generate contributors list | |
contributors=$(git shortlog -sn --since="$last_release_date" | awk '{print NR ". " $2 " (" $1 " commits)"}') | |
echo "changelog<<EOF" >> $GITHUB_ENV | |
echo "$changelog" >> $GITHUB_ENV | |
echo "EOF" >> $GITHUB_ENV | |
echo "contributors<<EOF" >> $GITHUB_ENV | |
echo "$contributors" >> $GITHUB_ENV | |
echo "EOF" >> $GITHUB_ENV | |
- name: Create GitHub Release and Upload Artifacts | |
if: env.build_required == 'true' | |
uses: ncipollo/release-action@v1.14.0 | |
with: | |
tag: ${{ env.mod_version }} | |
name: ${{ env.mod_version }} | |
body: | | |
## Release v${{ env.mod_version }} | |
### Contributors: | |
${{ env.contributors }} | |
### Changelog: | |
${{ env.changelog }} | |
draft: false | |
prerelease: false | |
artifacts: ./build/libs/XAT-${{ env.mod_version }}.jar | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |