name: Build and Release Native Binaries on: push: tags: - 'v*' workflow_dispatch: inputs: tag: description: 'Tag to release' required: true jobs: validate-tag: runs-on: ubuntu-latest steps: - name: Check tag run: | if [ -z "${{ github.event.inputs.tag }}" ]; then echo "Error: You must provide a tag to run this workflow." exit 1 fi build: strategy: matrix: include: - os: ubuntu-latest platform: linux-x64 - os: macos-latest platform: macos-arm64 runs-on: ${{ matrix.os }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup GraalVM uses: graalvm/setup-graalvm@v1 with: java-version: '24' distribution: 'graalvm' github-token: ${{ secrets.GITHUB_TOKEN }} - name: Setup Gradle uses: gradle/actions/setup-gradle@v3 - name: Build project run: gradle build - name: Build native binary run: gradle nativeCompile - name: Install UPX (Linux) if: matrix.os == 'ubuntu-latest' run: sudo apt-get update && sudo apt-get install -y upx - name: Compress binary with UPX (Linux only) if: matrix.os == 'ubuntu-latest' run: upx --best --lzma build/native/nativeCompile/notevc - name: Rename binary for platform run: | mv build/native/nativeCompile/notevc notevc-${{ matrix.platform }} - name: Upload binary as artifact uses: actions/upload-artifact@v4 with: name: notevc-${{ matrix.platform }} path: notevc-${{ matrix.platform }} release: needs: build runs-on: ubuntu-latest permissions: contents: write steps: - name: Download all artifacts uses: actions/download-artifact@v4 with: path: binaries - name: Create Release uses: softprops/action-gh-release@v1 with: files: binaries/*/* draft: false prerelease: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}