name: CI Publish on: workflow_dispatch: push: tags: - "v*" concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: check_wrapper: name: Validate Gradle Wrapper runs-on: ubuntu-latest steps: - name: Clone repo uses: actions/checkout@v4 - name: Validate Gradle Wrapper uses: gradle/actions/wrapper-validation@v4 build: name: Build Jar needs: check_wrapper runs-on: ubuntu-latest steps: - name: Checkout ${{ github.ref }} uses: actions/checkout@v4 with: ref: ${{ github.ref }} path: master fetch-depth: 0 - name: Set up JDK uses: actions/setup-java@v4 with: java-version: 21 distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@v4 - name: Copy CI gradle.properties run: | cd master mkdir -p ~/.gradle cp .github/runner-files/ci-gradle.properties \ ~/.gradle/gradle.properties - name: Build and copy webUI, Build Jar env: ProductBuildType: "Stable" working-directory: master run: ./gradlew :server:downloadWebUI :server:shadowJar --stacktrace - name: Upload Jar uses: actions/upload-artifact@v4 with: name: jar path: master/server/build/*.jar if-no-files-found: error - name: Upload icons uses: actions/upload-artifact@v4 with: name: icon path: master/server/src/main/resources/icon if-no-files-found: error - name: Tar scripts dir to maintain file permissions run: tar -cvzf scripts.tar.gz -C master/ scripts/ - name: Upload scripts.tar.gz uses: actions/upload-artifact@v4 with: name: scripts path: scripts.tar.gz if-no-files-found: error jlink: runs-on: ${{ matrix.os }} strategy: matrix: include: - os: ubuntu-latest name: linux-x64 - os: windows-latest name: windows-x64 - os: macos-14 name: macOS-arm64 - os: macos-13 name: macOS-x64 os: [ubuntu-latest, windows-latest, macos-14, macos-13] steps: - name: Set up JDK uses: actions/setup-java@v4 with: java-version: 21 distribution: 'temurin' - name: Package JDK run: jlink --add-modules java.base,java.compiler,java.datatransfer,java.desktop,java.instrument,java.logging,java.management,java.naming,java.prefs,java.scripting,java.se,java.security.jgss,java.security.sasl,java.sql,java.transaction.xa,java.xml,jdk.attach,jdk.crypto.ec,jdk.jdi,jdk.management,jdk.net,jdk.random,jdk.unsupported,jdk.unsupported.desktop,jdk.zipfs --output suwa --strip-debug --no-man-pages --no-header-files --compress=2 - name: Upload JDK package uses: actions/upload-artifact@v4 with: name: ${{ matrix.name }}-jre path: suwa bundle: strategy: fail-fast: false matrix: os: - debian-all - linux-assets - linux-x64 - macOS-x64 - macOS-arm64 - windows-x64 name: Make ${{ matrix.os }} release needs: [build, jlink] runs-on: ubuntu-latest steps: - name: Download Jar uses: actions/download-artifact@v4 with: name: jar path: server/build - name: Download JRE uses: actions/download-artifact@v4 if: matrix.os != 'linux-assets' && matrix.os != 'debian-all' with: name: ${{ matrix.os }}-jre path: jre - name: Download icons uses: actions/download-artifact@v4 with: name: icon path: server/src/main/resources/icon - name: Download scripts.tar.gz uses: actions/download-artifact@v4 with: name: scripts - name: Make ${{ matrix.os }} release run: | mkdir upload/ tar -xvpf scripts.tar.gz scripts/bundler.sh -o upload/ ${{ matrix.os }} - name: Upload ${{ matrix.os }} files uses: actions/upload-artifact@v4 with: name: ${{ matrix.os }} path: upload/* if-no-files-found: error release: if: startsWith(github.ref, 'refs/tags/v') needs: bundle runs-on: ubuntu-latest steps: - uses: actions/download-artifact@v4 with: name: jar path: release - uses: actions/download-artifact@v4 with: name: debian-all path: release - uses: actions/download-artifact@v4 with: name: linux-assets path: release - uses: actions/download-artifact@v4 with: name: linux-x64 path: release - uses: actions/download-artifact@v4 with: name: macOS-x64 path: release - uses: actions/download-artifact@v4 with: name: macOS-arm64 path: release - uses: actions/download-artifact@v4 with: name: windows-x64 path: release - name: Generate checksums run: cd release && sha256sum * > Checksums.sha256 - name: Release uses: softprops/action-gh-release@v2 with: token: ${{ secrets.DEPLOY_RELEASE_TOKEN }} draft: true files: release/*