208 lines
6.7 KiB
YAML
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/
|