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