Build and Deploy #6
Workflow file for this run
This file contains hidden or 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: Build and Deploy | |
| on: | |
| push: | |
| branches: | |
| - develop | |
| - main | |
| 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: | | |
| if [[ "${{ steps.version.outputs.CHANNEL }}" == "release" ]]; then | |
| export GPG_TTY=$(tty) | |
| export GRADLE_OPTS="-Dorg.gradle.daemon=false" | |
| ./gradlew --no-daemon --parallel --build-cache publishMavenJavaPublicationToSimplecloudRepository \ | |
| -PreleaseType=${{ steps.version.outputs.CHANNEL }} \ | |
| -Pversion=${{ steps.version.outputs.VERSION }} \ | |
| -Psigning.gnupg.keyName="${{ secrets.GPG_KEY_ID }}" \ | |
| -Psigning.gnupg.passphrase="${{ secrets.GPG_PASSPHRASE }}" | |
| else | |
| ./gradlew --parallel --build-cache publishMavenJavaPublicationToSimplecloudRepository \ | |
| -PreleaseType=${{ steps.version.outputs.CHANNEL }} \ | |
| -Pversion=${{ steps.version.outputs.VERSION }} | |
| fi | |
| env: | |
| COMMIT_HASH: ${{ env.COMMIT_HASH }} | |
| SIMPLECLOUD_USERNAME: ${{ secrets.SIMPLECLOUD_USERNAME }} | |
| SIMPLECLOUD_PASSWORD: ${{ secrets.SIMPLECLOUD_PASSWORD }} | |
| ORG_GRADLE_PROJECT_signingKey: ${{ secrets.GPG_PRIVATE_KEY }} | |
| ORG_GRADLE_PROJECT_signingPassphrase: ${{ secrets.GPG_PASSPHRASE }} | |
| - 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 }} |