name: Binaries on: push: branches: - master - dev tags: - 'v*' pull_request: branches: - master - dev jobs: create_release: name: Create release runs-on: ubuntu-latest # Note this. We are going to use that in further jobs. outputs: upload_url: ${{ steps.create_release.outputs.upload_url }} steps: - uses: actions/checkout@v4 - name: Create release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref }} release_name: ${{ github.ref_name }} body_path: CHANGELOG.md draft: false prerelease: false if: startsWith(github.ref, 'refs/tags/') binaries: needs: create_release # we need to know the upload URL runs-on: ${{ matrix.config.os }} strategy: matrix: config: - os: windows-latest asmnasm: C:\Users\runneradmin\nasm\nasm output: sointu-track.exe params: cmd/sointu-track/main.go ldflags: -H=windowsgui - os: windows-latest asmnasm: C:\Users\runneradmin\nasm\nasm output: sointu-compile.exe params: cmd/sointu-compile/main.go - os: windows-latest asmnasm: C:\Users\runneradmin\nasm\nasm output: sointu-track-native.exe params: -tags=native cmd/sointu-track/main.go ldflags: -H=windowsgui - os: windows-latest asmnasm: C:\Users\runneradmin\nasm\nasm output: sointu-vsti.dll params: -buildmode=c-shared -tags=plugin ./cmd/sointu-vsti/ - os: windows-latest asmnasm: C:\Users\runneradmin\nasm\nasm output: sointu-vsti-native.dll params: -buildmode=c-shared -tags="plugin,native" ./cmd/sointu-vsti/ - os: ubuntu-latest asmnasm: /home/runner/nasm/nasm output: sointu-track params: cmd/sointu-track/main.go packages: libegl-dev libvulkan-dev libxkbcommon-x11-dev libwayland-dev libasound2-dev libx11-xcb-dev libxcursor-dev libxfixes-dev - os: ubuntu-latest asmnasm: /home/runner/nasm/nasm output: sointu-compile params: cmd/sointu-compile/main.go packages: libegl-dev libvulkan-dev libxkbcommon-x11-dev libwayland-dev libasound2-dev libx11-xcb-dev libxcursor-dev libxfixes-dev - os: ubuntu-latest asmnasm: /home/runner/nasm/nasm output: sointu-track-native params: -tags=native cmd/sointu-track/main.go packages: libegl-dev libvulkan-dev libxkbcommon-x11-dev libwayland-dev libasound2-dev libx11-xcb-dev libxcursor-dev libxfixes-dev - os: ubuntu-latest asmnasm: /home/runner/nasm/nasm output: sointu-vsti.so params: -buildmode=c-shared -tags=plugin ./cmd/sointu-vsti/ packages: libegl-dev libvulkan-dev libxkbcommon-x11-dev libwayland-dev libasound2-dev libx11-xcb-dev libxcursor-dev libxfixes-dev - os: ubuntu-latest asmnasm: /home/runner/nasm/nasm output: sointu-vsti-native.so params: -buildmode=c-shared -tags="plugin,native" ./cmd/sointu-vsti/ packages: libegl-dev libvulkan-dev libxkbcommon-x11-dev libwayland-dev libasound2-dev libx11-xcb-dev libxcursor-dev libxfixes-dev - os: macos-latest asmnasm: /Users/runner/nasm/nasm output: sointu-track params: cmd/sointu-track/main.go - os: macos-latest asmnasm: /Users/runner/nasm/nasm output: sointu-compile params: cmd/sointu-compile/main.go - os: macos-12 # this is intel still asmnasm: /Users/runner/nasm/nasm output: sointu-track-native params: -tags=native cmd/sointu-track/main.go steps: - uses: benjlevesque/short-sha@v3.0 id: short-sha with: length: 7 - uses: lukka/get-cmake@latest - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/setup-go@v5 # has to be after checkout, see https://medium.com/@s0k0mata/github-actions-and-go-the-new-cache-feature-in-actions-setup-go-v4-and-what-to-watch-out-for-aeea373ed07d with: go-version: '>=1.21.0' - uses: ilammy/setup-nasm@v1.5.1 - uses: awalsh128/cache-apt-pkgs-action@latest with: packages: ${{ matrix.config.packages }} version: 1.0 if: runner.os == 'Linux' - name: Build library env: ASM_NASM: ${{ matrix.config.asmnasm }} run: | mkdir build cd build cmake -GNinja .. ninja sointu - name: Build binary run: | go build -ldflags "-X github.com/vsariola/sointu/version.Version=$(git describe) ${{ matrix.config.ldflags}}" -o ${{ matrix.config.output }} ${{ matrix.config.params }} - name: Upload binary uses: actions/upload-artifact@v4 with: name: ${{ runner.os }}-${{ steps.short-sha.outputs.sha }}-${{ matrix.config.output }} path: ${{ matrix.config.output }} upload_release_asset: needs: [create_release, binaries] runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') strategy: matrix: config: - os: Windows - os: Linux - os: macOS steps: - uses: benjlevesque/short-sha@v2.2 id: short-sha with: length: 7 - name: Download artifacts uses: actions/download-artifact@v4 with: pattern: ${{ matrix.config.os }}-${{ steps.short-sha.outputs.sha }}-* merge-multiple: true path: sointu-${{ matrix.config.os }} - name: Zip binaries run: | zip ./sointu-${{ matrix.config.os }}.zip sointu-${{ matrix.config.os }}/* - name: Upload release assets uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ needs.create_release.outputs.upload_url }} asset_name: sointu-${{ matrix.config.os }}.zip asset_path: ./sointu-${{ matrix.config.os }}.zip asset_content_type: application/octet-stream