Files

208 lines
6.7 KiB
YAML

name: Build and Upload Binary
on:
release:
types: [published]
workflow_dispatch:
jobs:
build:
name: Build Agent Binary
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
arch: [amd64, arm64]
include:
- os: ubuntu-latest
arch: amd64
artifact_name: xugou-agent-linux-amd64
asset_name: xugou-agent-linux-amd64
- os: ubuntu-latest
arch: arm64
artifact_name: xugou-agent-linux-arm64
asset_name: xugou-agent-linux-arm64
- os: macos-latest
arch: amd64
artifact_name: xugou-agent-darwin-amd64
asset_name: xugou-agent-darwin-amd64
- os: macos-latest
arch: arm64
artifact_name: xugou-agent-darwin-arm64
asset_name: xugou-agent-darwin-arm64
- os: windows-latest
arch: amd64
artifact_name: xugou-agent-windows-amd64.exe
asset_name: xugou-agent-windows-amd64
- os: windows-latest
arch: arm64
artifact_name: xugou-agent-windows-arm64.exe
asset_name: xugou-agent-windows-arm64
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0 # 获取完整的 git 历史用于获取提交信息
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: '1.24'
- name: Get version info
id: get_version
shell: bash
run: |
# 从 GitHub 环境获取版本信息
if [[ $GITHUB_REF == refs/tags/* ]]; then
VERSION=${GITHUB_REF#refs/tags/}
else
VERSION="dev-$(git rev-parse --short HEAD)"
fi
COMMIT_HASH=$(git rev-parse --short HEAD)
BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "COMMIT_HASH=$COMMIT_HASH" >> $GITHUB_ENV
echo "BUILD_DATE=$BUILD_DATE" >> $GITHUB_ENV
echo "版本: $VERSION"
echo "提交哈希: $COMMIT_HASH"
echo "构建日期: $BUILD_DATE"
- name: Build Linux
if: matrix.os == 'ubuntu-latest'
env:
GOOS: linux
GOARCH: ${{ matrix.arch }}
run: |
cd agent
go build -v \
-ldflags="-s -w -extldflags=-static \
-X github.com/xugou/agent/cmd/agent.Version=${{ env.VERSION }} \
-X github.com/xugou/agent/cmd/agent.GitCommit=${{ env.COMMIT_HASH }} \
-X github.com/xugou/agent/cmd/agent.BuildDate=${{ env.BUILD_DATE }}" \
-tags netgo,osusergo -o ${{ matrix.artifact_name }} .
- name: Build macOS
if: matrix.os == 'macos-latest'
env:
GOOS: darwin
GOARCH: ${{ matrix.arch }}
run: |
cd agent
go build -v \
-ldflags="-s -w \
-X github.com/xugou/agent/cmd/agent.Version=${{ env.VERSION }} \
-X github.com/xugou/agent/cmd/agent.GitCommit=${{ env.COMMIT_HASH }} \
-X github.com/xugou/agent/cmd/agent.BuildDate=${{ env.BUILD_DATE }}" \
-tags netgo,osusergo -o ${{ matrix.artifact_name }} .
- name: Build Windows
if: matrix.os == 'windows-latest'
env:
GOOS: windows
GOARCH: ${{ matrix.arch }}
run: |
cd agent
go build -v `
-ldflags="-s -w `
-X github.com/xugou/agent/cmd/agent.Version=${{ env.VERSION }} `
-X github.com/xugou/agent/cmd/agent.GitCommit=${{ env.COMMIT_HASH }} `
-X github.com/xugou/agent/cmd/agent.BuildDate=${{ env.BUILD_DATE }}" `
-o ${{ matrix.artifact_name }} .
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.asset_name }}
path: agent/${{ matrix.artifact_name }}
upload-to-r2:
name: Upload to Cloudflare R2
needs: build
runs-on: ubuntu-latest
steps:
- name: Download all workflow artifacts
uses: actions/download-artifact@v4
- name: Get Release version
id: get_version
run: |
VERSION=${GITHUB_REF#refs/tags/}
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "Version: $VERSION"
# Linux AMD64
- name: Upload Linux AMD64 to R2 (latest)
uses: ryand56/r2-upload-action@latest
with:
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
r2-bucket: ${{ secrets.R2_BUCKET_NAME }}
source-dir: ./xugou-agent-linux-amd64/
destination-dir: latest/
# Linux ARM64
- name: Upload Linux ARM64 to R2 (latest)
uses: ryand56/r2-upload-action@latest
with:
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
r2-bucket: ${{ secrets.R2_BUCKET_NAME }}
source-dir: ./xugou-agent-linux-arm64/
destination-dir: latest/
# macOS AMD64
- name: Upload macOS AMD64 to R2 (latest)
uses: ryand56/r2-upload-action@latest
with:
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
r2-bucket: ${{ secrets.R2_BUCKET_NAME }}
source-dir: ./xugou-agent-darwin-amd64/
destination-dir: latest/
# macOS ARM64
- name: Upload macOS ARM64 to R2 (latest)
uses: ryand56/r2-upload-action@latest
with:
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
r2-bucket: ${{ secrets.R2_BUCKET_NAME }}
source-dir: ./xugou-agent-darwin-arm64/
destination-dir: latest/
# Windows AMD64
- name: Upload Windows AMD64 to R2 (latest)
uses: ryand56/r2-upload-action@latest
with:
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
r2-bucket: ${{ secrets.R2_BUCKET_NAME }}
source-dir: ./xugou-agent-windows-amd64/
destination-dir: latest/
# Windows ARM64
- name: Upload Windows ARM64 to R2 (latest)
uses: ryand56/r2-upload-action@latest
with:
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
r2-bucket: ${{ secrets.R2_BUCKET_NAME }}
source-dir: ./xugou-agent-windows-arm64/
destination-dir: latest/