Skip to content
Merged
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
138 changes: 138 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
name: Build and Deploy

on:
push:
branches:
- develop # For snapshot builds
- main # For release builds
paths-ignore:
- '**.md'
- '.gitignore'
- 'LICENSE'
workflow_dispatch:
inputs:
channel:
description: 'Release Channel'
required: true
default: 'snapshot'
type: choice
options:
- snapshot
- rc
- release
version:
description: 'Version (only for release channel)'
required: false
type: string

jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Set up JDK 21
uses: actions/setup-java@v4.7.0
with:
distribution: 'temurin'
java-version: '21'
cache: 'gradle'

- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
with:
build-scan-publish: true
build-scan-terms-of-use-url: 'https://gradle.com/help/legal-terms-of-use'
build-scan-terms-of-use-agree: 'yes'

- name: Make Gradle Wrapper Executable
run: chmod +x ./gradlew

- name: Determine Version and Channel
id: version
run: |
# If triggered manually, use workflow input; otherwise, decide based on branch name
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
CHANNEL="${{ github.event.inputs.channel }}"
if [[ "$CHANNEL" == "release" && -n "${{ github.event.inputs.version }}" ]]; then
VERSION="${{ github.event.inputs.version }}"
fi
elif [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
CHANNEL="release"
else
CHANNEL="snapshot"
fi

# Get the commit hash (short version)
COMMIT_HASH=$(git rev-parse --short HEAD)
echo "COMMIT_HASH=$COMMIT_HASH" >> $GITHUB_ENV

# Read the base version from gradle.properties
BASE_VERSION=$(grep '^baseVersion=' gradle.properties | cut -d'=' -f2)
if [ "$CHANNEL" == "release" ]; then
FINAL_VERSION="$BASE_VERSION"
elif [ "$CHANNEL" == "rc" ]; then
FINAL_VERSION="${BASE_VERSION}-rc.${COMMIT_HASH}"
else
FINAL_VERSION="${BASE_VERSION}-SNAPSHOT.${COMMIT_HASH}"
fi
echo "Determined version: $FINAL_VERSION"

# Set outputs for later steps
echo "CHANNEL=$CHANNEL" >> $GITHUB_OUTPUT
echo "VERSION=$FINAL_VERSION" >> $GITHUB_OUTPUT

- name: Build with Gradle
run: |
./gradlew --parallel --build-cache clean build shadowJar \
-PreleaseType=${{ steps.version.outputs.CHANNEL }} \
-Pversion=${{ steps.version.outputs.VERSION }}
env:
COMMIT_HASH: ${{ env.COMMIT_HASH }}

- name: Publish to SimpleCloud Repository
run: |
./gradlew --parallel --build-cache publishMavenJavaPublicationToSimplecloudRepository \
-PreleaseType=${{ steps.version.outputs.CHANNEL }} \
-Pversion=${{ steps.version.outputs.VERSION }}
env:
COMMIT_HASH: ${{ env.COMMIT_HASH }}
SIMPLECLOUD_USERNAME: ${{ secrets.SIMPLECLOUD_USERNAME }}
SIMPLECLOUD_PASSWORD: ${{ secrets.SIMPLECLOUD_PASSWORD }}

- name: Prepare Artifacts
run: |
mkdir -p release-artifacts
find . -type f -name "*.jar" -path "*/build/libs/*.jar" -not -path "./build/libs/*" \
-not -name "*${{ steps.version.outputs.VERSION }}*" \
-exec cp {} release-artifacts/ \;

- name: Update Channel Tag
run: |
git config user.name "GitHub Actions"
git config user.email "actions@github.com"
# Delete any existing channel tag locally and remotely
git tag -d ${{ steps.version.outputs.CHANNEL }} || true
git push origin :refs/tags/${{ steps.version.outputs.CHANNEL }} || true
# Create a new tag at the current commit
git tag -a ${{ steps.version.outputs.CHANNEL }} -m "Latest ${{ steps.version.outputs.CHANNEL }} build (v${{ steps.version.outputs.VERSION }})"
git push origin ${{ steps.version.outputs.CHANNEL }} --force

- name: Create Channel Release
uses: softprops/action-gh-release@v2
with:
name: "${{ steps.version.outputs.CHANNEL }} channel"
tag_name: ${{ steps.version.outputs.CHANNEL }}
body: |
Latest build in the ${{ steps.version.outputs.CHANNEL }} channel.
Version: ${{ steps.version.outputs.VERSION }}
Commit: ${{ github.sha }}
prerelease: ${{ steps.version.outputs.CHANNEL != 'release' }}
files: release-artifacts/*.jar
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}