From a9a4bcff99d9337669d436e9fb2106b681ffa9ad Mon Sep 17 00:00:00 2001 From: Vantz Stockwell Date: Sun, 15 Feb 2026 14:07:18 -0500 Subject: [PATCH] ci: Add companion agent release workflow Production build pipeline for companion agent: - Triggers on version tags (v*.*.*) - Cross-compiles for Linux and Windows (AMD64) - Generates SHA256 checksums for verification - Creates Gitea release with auto-generated notes - Uploads binaries and checksums as release assets - Provides build summary in workflow output Built artifacts: - corrosion-companion-linux-amd64 - corrosion-companion-windows-amd64.exe - checksums.txt Usage: git tag v1.0.0 && git push origin v1.0.0 Co-Authored-By: Claude Sonnet 4.5 --- .gitea/workflows/build-companion.yml | 126 +++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 .gitea/workflows/build-companion.yml diff --git a/.gitea/workflows/build-companion.yml b/.gitea/workflows/build-companion.yml new file mode 100644 index 0000000..c14cbbf --- /dev/null +++ b/.gitea/workflows/build-companion.yml @@ -0,0 +1,126 @@ +name: Build Companion Agent + +on: + push: + tags: + - 'v*.*.*' # Trigger on version tags (v1.0.0, v1.2.3, etc.) + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: '1.21' + + - name: Get version from tag + id: version + run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT + + - name: Build Linux AMD64 + run: | + cd companion-agent + mkdir -p bin + GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o bin/corrosion-companion-linux-amd64 ./cmd/agent + chmod +x bin/corrosion-companion-linux-amd64 + + - name: Build Windows AMD64 + run: | + cd companion-agent + GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o bin/corrosion-companion-windows-amd64.exe ./cmd/agent + + - name: Generate checksums + run: | + cd companion-agent/bin + sha256sum corrosion-companion-linux-amd64 > checksums.txt + sha256sum corrosion-companion-windows-amd64.exe >> checksums.txt + cat checksums.txt + + - name: Create Release + uses: actions/github-script@v6 + env: + VERSION: ${{ steps.version.outputs.VERSION }} + with: + script: | + const fs = require('fs').promises; + const path = require('path'); + + // Create release + const release = await github.rest.repos.createRelease({ + owner: context.repo.owner, + repo: context.repo.repo, + tag_name: process.env.VERSION, + name: `Companion Agent ${process.env.VERSION}`, + body: `## Corrosion Companion Agent ${process.env.VERSION} + + ### Installation + + **Linux:** + \`\`\`bash + wget https://git.corrosionmgmt.com/vantzs/corrosion-admin-panel/releases/download/${process.env.VERSION}/corrosion-companion-linux-amd64 + chmod +x corrosion-companion-linux-amd64 + sudo mv corrosion-companion-linux-amd64 /usr/local/bin/corrosion-companion + \`\`\` + + **Windows:** + Download \`corrosion-companion-windows-amd64.exe\` and run as administrator. + + ### Checksums + See \`checksums.txt\` for SHA256 verification. + + ### What's New + - Built from commit: ${context.sha.substring(0, 7)} + - Go version: 1.21 + - Platforms: Linux AMD64, Windows AMD64 + `, + draft: false, + prerelease: false + }); + + console.log(`Created release: ${release.data.html_url}`); + + // Upload Linux binary + await github.rest.repos.uploadReleaseAsset({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: release.data.id, + name: 'corrosion-companion-linux-amd64', + data: await fs.readFile('companion-agent/bin/corrosion-companion-linux-amd64') + }); + + // Upload Windows binary + await github.rest.repos.uploadReleaseAsset({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: release.data.id, + name: 'corrosion-companion-windows-amd64.exe', + data: await fs.readFile('companion-agent/bin/corrosion-companion-windows-amd64.exe') + }); + + // Upload checksums + await github.rest.repos.uploadReleaseAsset({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: release.data.id, + name: 'checksums.txt', + data: await fs.readFile('companion-agent/bin/checksums.txt') + }); + + console.log('Uploaded all release assets'); + + - name: Build Summary + run: | + echo "## 🚀 Companion Agent Build Complete" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Version:** ${{ steps.version.outputs.VERSION }}" >> $GITHUB_STEP_SUMMARY + echo "**Commit:** ${GITHUB_SHA:0:7}" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "### Built Artifacts:" >> $GITHUB_STEP_SUMMARY + echo "- ✅ Linux AMD64 ($(stat -f%z companion-agent/bin/corrosion-companion-linux-amd64 2>/dev/null || stat -c%s companion-agent/bin/corrosion-companion-linux-amd64) bytes)" >> $GITHUB_STEP_SUMMARY + echo "- ✅ Windows AMD64 ($(stat -f%z companion-agent/bin/corrosion-companion-windows-amd64.exe 2>/dev/null || stat -c%s companion-agent/bin/corrosion-companion-windows-amd64.exe) bytes)" >> $GITHUB_STEP_SUMMARY + echo "- ✅ SHA256 checksums" >> $GITHUB_STEP_SUMMARY