Skip to content

Workflow file for this run

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