This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build AgentExec Distributions | |
on: | |
workflow_dispatch: | |
push: | |
branches: | |
- main | |
tags: | |
- 'v*' | |
pull_request: | |
jobs: | |
source-archive: | |
name: Create Source Archive | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{ steps.version.outputs.version }} | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
fetch-depth: 0 # Needed for proper version detection | |
- name: Set Version Information | |
id: version | |
shell: bash | |
run: | | |
VERSION=$(git describe --tags --abbrev=0 2>/dev/null | sed 's/^v//' || echo "0.0.1") | |
echo "version=${VERSION}" >> $GITHUB_OUTPUT | |
- name: Create Source Archive | |
run: | | |
mkdir -p dist | |
tar --exclude='.git' --exclude='dist' -czf "dist/agentexec${VERSION}.src.tar.gz" . | |
cd dist && sha256sum "agentexec${VERSION}.src.tar.gz" > SHASUMS256.txt | |
echo "# agentexec ${VERSION} checksums" > SHASUMS256.txt.tmp | |
cat SHASUMS256.txt >> SHASUMS256.txt.tmp | |
mv SHASUMS256.txt.tmp SHASUMS256.txt | |
- name: Upload Artifacts | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 | |
with: | |
name: source-archive | |
path: dist/* | |
if-no-files-found: error | |
build-binaries: | |
name: Build Binaries | |
needs: source-archive | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
# Linux builds | |
- os: ubuntu-latest | |
goos: linux | |
architecture: amd64 | |
format: tar.gz | |
- os: ubuntu-latest | |
goos: linux | |
architecture: arm64 | |
format: tar.gz | |
- os: ubuntu-latest | |
goos: linux | |
architecture: 386 | |
format: tar.gz | |
- os: ubuntu-latest | |
goos: linux | |
architecture: arm | |
format: tar.gz | |
arm: 6 | |
# macOS builds | |
- os: macos-latest | |
goos: darwin | |
architecture: amd64 | |
format: tar.gz | |
- os: macos-latest | |
goos: darwin | |
architecture: arm64 | |
format: tar.gz | |
# Windows builds | |
- os: windows-latest | |
goos: windows | |
architecture: amd64 | |
format: zip | |
- os: windows-latest | |
goos: windows | |
architecture: arm64 | |
format: zip | |
- os: windows-latest | |
goos: windows | |
architecture: 386 | |
format: zip | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
fetch-depth: 0 | |
- name: Setup Go | |
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 | |
with: | |
go-version: '1.23.3' | |
check-latest: true | |
- name: Download Source Archive | |
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 | |
with: | |
name: source-archive | |
path: dist/ | |
- name: Build and Package | |
shell: bash | |
env: | |
GOOS: ${{ matrix.goos }} | |
GOARCH: ${{ matrix.architecture }} | |
GOARM: ${{ matrix.arm }} | |
run: | | |
VERSION=$(git describe --tags --abbrev=0 2>/dev/null | sed 's/^v//' || echo "0.0.1") | |
COMMIT=$(git rev-parse --short HEAD) | |
BUILD_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ") | |
# Set binary extension for Windows | |
EXT="" | |
if [[ "$GOOS" == "windows" ]]; then | |
EXT=".exe" | |
fi | |
# Build binary | |
echo "Building for GOOS=$GOOS, GOARCH=$GOARCH" | |
mkdir -p dist | |
go build -v -trimpath -ldflags="-s -w \ | |
-X 'agentexec/pkg/version.Version=${VERSION}' \ | |
-X 'agentexec/pkg/version.Commit=${COMMIT}' \ | |
-X 'agentexec/pkg/version.BuildTime=${BUILD_TIME}'" \ | |
-o "dist/agentexec${EXT}" main.go | |
# Create archive name | |
OUTPUT_NAME="agentexec${VERSION}.${GOOS}" | |
if [[ "$GOARCH" == "arm" ]] && [[ -n "$GOARM" ]]; then | |
OUTPUT_NAME="${OUTPUT_NAME}-armv${GOARM}l" | |
else | |
OUTPUT_NAME="${OUTPUT_NAME}-${GOARCH}" | |
fi | |
# Create archive | |
cd dist | |
if [[ "${{ matrix.format }}" == "zip" ]]; then | |
zip -q "${OUTPUT_NAME}.zip" "agentexec${EXT}" | |
sha256sum "${OUTPUT_NAME}.zip" >> SHASUMS256.txt | |
else | |
tar -czf "${OUTPUT_NAME}.tar.gz" "agentexec${EXT}" | |
sha256sum "${OUTPUT_NAME}.tar.gz" >> SHASUMS256.txt | |
fi | |
# Cleanup binary | |
rm "agentexec${EXT}" | |
# Sort SHASUMS256.txt | |
sort -k2 SHASUMS256.txt > SHASUMS256.txt.sorted | |
head -n1 SHASUMS256.txt > SHASUMS256.txt | |
tail -n +2 SHASUMS256.txt.sorted >> SHASUMS256.txt | |
rm SHASUMS256.txt.sorted | |
- name: Upload Build Artifacts | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 | |
with: | |
name: binary-${{ matrix.goos }}-${{ matrix.architecture }} | |
path: dist/* | |
if-no-files-found: error | |
create-installers: | |
name: Create Installers | |
needs: build-binaries | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: macos-latest | |
goos: darwin | |
architecture: amd64 | |
- os: macos-latest | |
goos: darwin | |
architecture: arm64 | |
- os: windows-latest | |
goos: windows | |
architecture: amd64 | |
- os: windows-latest | |
goos: windows | |
architecture: arm64 | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Download Binary | |
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 | |
with: | |
name: binary-${{ matrix.goos }}-${{ matrix.architecture }} | |
path: dist/ | |
- name: Setup Windows Environment | |
if: matrix.os == 'windows-latest' | |
shell: bash | |
run: | | |
choco install wix --version=3.11.2 -y | |
refreshenv | |
- name: Create Installer | |
shell: bash | |
run: | | |
VERSION=$(git describe --tags --abbrev=0 2>/dev/null | sed 's/^v//' || echo "0.0.1") | |
mkdir -p packages | |
EXT="" | |
if [[ "${{ matrix.goos }}" == "windows" ]]; then | |
EXT=".exe" | |
fi | |
if [[ "${{ matrix.goos }}" == "darwin" ]]; then | |
pkgbuild --identifier com.agentexec.cli \ | |
--install-location /usr/local/bin \ | |
--root dist \ | |
--scripts scripts/macos \ | |
"packages/agentexec${VERSION}.${GOOS}-${GOARCH}.pkg" | |
elif [[ "${{ matrix.goos }}" == "windows" ]]; then | |
export INSTALLER_GUID=$(uuidgen) | |
export COMPONENT_GUID=$(uuidgen) | |
candle.exe -arch x64 \ | |
-o installer.wixobj \ | |
.github/workflows/installer.wix | |
if [ $? -ne 0 ]; then | |
echo "WiX candle.exe failed" | |
exit 1 | |
fi | |
light.exe -o "packages/agentexec${VERSION}.${GOOS}-${GOARCH}.msi" installer.wixobj | |
if [ $? -ne 0 ]; then | |
echo "WiX light.exe failed" | |
exit 1 | |
fi | |
fi | |
cd packages | |
if [[ "${{ matrix.goos }}" == "darwin" ]]; then | |
sha256sum "agentexec${VERSION}.${GOOS}-${GOARCH}.pkg" >> ../dist/SHASUMS256.txt | |
else | |
sha256sum "agentexec${VERSION}.${GOOS}-${GOARCH}.msi" >> ../dist/SHASUMS256.txt | |
fi | |
- name: Upload Installer | |
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 | |
with: | |
name: installer-${{ matrix.goos }}-${{ matrix.architecture }} | |
path: | | |
packages/* | |
dist/SHASUMS256.txt | |
if-no-files-found: error | |
validate-checksums: | |
name: Validate Checksums | |
needs: [source-archive, build-binaries, create-installers] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Download All Artifacts | |
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 | |
with: | |
path: dist | |
merge-multiple: true | |
- name: Validate Checksums | |
shell: bash | |
run: | | |
cd dist | |
echo "Verifying checksums from SHASUMS256.txt..." | |
sha256sum -c SHASUMS256.txt |