name: Build and Release on: push: tags: - '*' jobs: build: name: Build runs-on: self-hosted permissions: contents: read packages: write steps: - name: Set version id: version run: echo "::set-output name=version::$(echo ${GITHUB_REF#refs/tags/})" - name: Set up Go uses: actions/setup-go@v4 with: go-version: '1.21' - name: Check out code uses: actions/checkout@v4 - name: Cross-compile with xgo uses: crazy-max/ghaction-xgo@v3 with: xgo_version: latest go_version: 1.21 pkg: ./cmd/zurg dest: artifacts prefix: zurg targets: windows/amd64,linux/amd64,linux/arm64,darwin/arm64 v: true x: false race: false ldflags: > -s -w -X 'version.BuiltAt=$(date +%Y-%m-%dT%H:%M:%S)' -X 'version.GoVersion=$(go version)' -X 'version.GitCommit=$(git rev-parse HEAD)' -X 'version.Version=${{ steps.version.outputs.version }}' buildmode: default trimpath: true - name: Compress artifacts run: | mkdir -p compressed_artifacts for platform in windows-amd64.exe linux-amd64 linux-arm64 darwin-arm64; do # check if windows if [[ $platform == *".exe" ]]; then platform=$(echo $platform | sed 's/.exe//g') extension=".exe" fi zip -r "compressed_artifacts/zurg-${{ steps.version.outputs.version }}-$platform.zip" "artifacts/zurg-$platform$extension" done - name: Upload artifacts to workflow uses: actions/upload-artifact@v3 with: name: compiled-binaries path: compressed_artifacts/*.zip release: name: Release needs: build runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Set version id: version run: echo "::set-output name=version::$(echo ${GITHUB_REF#refs/tags/})" - name: Download artifacts uses: actions/download-artifact@v3 with: name: compiled-binaries - name: Create Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.PAT }} with: tag_name: ${{ steps.version.outputs.version }} release_name: Release ${{ steps.version.outputs.version }} draft: false prerelease: false - name: Upload binaries to release env: GITHUB_TOKEN: ${{ secrets.PAT }} run: | for platform in windows/amd64 linux/amd64 linux/arm64 darwin/arm64; do asset_path="./compressed_artifacts/zurg-$platform-${{ steps.version.outputs.version }}.zip" if [[ -f "$asset_path" ]]; then echo "Uploading $asset_path" gh release upload ${{ steps.version.outputs.version }} "$asset_path" --c ${{ secrets.PAT }} else echo "File not found: $asset_path" fi done