name: Release on: push: tags: - 'v*' permissions: contents: read jobs: build: name: Build ${{ matrix.target }} runs-on: ${{ matrix.os }} strategy: matrix: include: - os: ubuntu-24.04 target: linux-amd64 artifact: tnt-linux-amd64 ctl_artifact: tntctl-linux-amd64 - os: ubuntu-24.04-arm target: linux-arm64 artifact: tnt-linux-arm64 ctl_artifact: tntctl-linux-arm64 - os: macos-15-intel target: darwin-amd64 artifact: tnt-darwin-amd64 ctl_artifact: tntctl-darwin-amd64 - os: macos-15 target: darwin-arm64 artifact: tnt-darwin-arm64 ctl_artifact: tntctl-darwin-arm64 steps: - uses: actions/checkout@v4 - name: Install dependencies (Ubuntu) if: runner.os == 'Linux' run: | sudo apt-get update sudo apt-get install -y libssh-dev - name: Install dependencies (macOS) if: runner.os == 'macOS' run: | brew install libssh - name: Run release preflight run: make release-check - name: Build release binary run: make release - name: Verify artifact architecture run: | file tnt file tntctl case "${{ matrix.target }}" in linux-amd64) file tnt | grep -E 'ELF 64-bit.*x86-64' file tntctl | grep -E 'ELF 64-bit.*x86-64' ;; linux-arm64) file tnt | grep -E 'ELF 64-bit.*(aarch64|ARM aarch64)' file tntctl | grep -E 'ELF 64-bit.*(aarch64|ARM aarch64)' ;; darwin-amd64) file tnt | grep -E 'Mach-O 64-bit.*x86_64' file tntctl | grep -E 'Mach-O 64-bit.*x86_64' ;; darwin-arm64) file tnt | grep -E 'Mach-O 64-bit.*arm64' file tntctl | grep -E 'Mach-O 64-bit.*arm64' ;; esac - name: Rename binary run: | mv tnt ${{ matrix.artifact }} mv tntctl ${{ matrix.ctl_artifact }} - name: Upload artifact uses: actions/upload-artifact@v4 with: name: ${{ matrix.artifact }} path: | ${{ matrix.artifact }} ${{ matrix.ctl_artifact }} release: needs: build runs-on: ubuntu-latest permissions: contents: write steps: - uses: actions/checkout@v4 - name: Download all artifacts uses: actions/download-artifact@v4 with: path: ./artifacts - name: Create checksums run: | cd artifacts : > checksums.txt for artifact in */tnt-* */tntctl-*; do [ -f "$artifact" ] || continue sha256sum "$artifact" | sed "s# $artifact# $(basename "$artifact")#" >> checksums.txt done cat checksums.txt - name: Create Release uses: softprops/action-gh-release@v1 with: files: | artifacts/*/tnt-* artifacts/*/tntctl-* artifacts/checksums.txt body: | ## Installation Download the binary for your platform: **Linux AMD64:** ```bash wget https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/tnt-linux-amd64 wget https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/tntctl-linux-amd64 chmod +x tnt-linux-amd64 chmod +x tntctl-linux-amd64 sudo mv tnt-linux-amd64 /usr/local/bin/tnt sudo mv tntctl-linux-amd64 /usr/local/bin/tntctl ``` **Linux ARM64:** ```bash wget https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/tnt-linux-arm64 wget https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/tntctl-linux-arm64 chmod +x tnt-linux-arm64 chmod +x tntctl-linux-arm64 sudo mv tnt-linux-arm64 /usr/local/bin/tnt sudo mv tntctl-linux-arm64 /usr/local/bin/tntctl ``` **macOS Intel:** ```bash wget https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/tnt-darwin-amd64 wget https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/tntctl-darwin-amd64 chmod +x tnt-darwin-amd64 chmod +x tntctl-darwin-amd64 sudo mv tnt-darwin-amd64 /usr/local/bin/tnt sudo mv tntctl-darwin-amd64 /usr/local/bin/tntctl ``` **macOS Apple Silicon:** ```bash wget https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/tnt-darwin-arm64 wget https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/tntctl-darwin-arm64 chmod +x tnt-darwin-arm64 chmod +x tntctl-darwin-arm64 sudo mv tnt-darwin-arm64 /usr/local/bin/tnt sudo mv tntctl-darwin-arm64 /usr/local/bin/tntctl ``` **Verify checksums:** ```bash sha256sum -c checksums.txt ``` ## What's Changed See [docs/CHANGELOG.md](https://github.com/${{ github.repository }}/blob/${{ github.ref_name }}/docs/CHANGELOG.md) draft: true prerelease: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}