Files
p2p/.github/workflows/release.yml
乔焰阳 7b16777411 Enhance release workflow with caching steps
Added caching for Go installation and GF CLI in the release workflow.
2025-11-06 16:03:04 +08:00

133 lines
4.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# This workflow will build a golang project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go
name: Release
on:
push:
tags:
- 'v*.*.*'
workflow_dispatch:
permissions:
contents: write
jobs:
build:
# runs-on指定了运行作业的虚拟机环境类型
# 即使使用containerruns-on仍然是必要的配置
runs-on: ubuntu-latest
# 移除容器配置以避免Docker Hub拉取超时问题
# 直接在GitHub托管的runner环境中执行任务
steps:
- name: Checkout
uses: actions/checkout@v4 # 使用最新稳定的v4版本
- name: Cache Go installation
uses: actions/cache@v4
id: cache-go
with:
path: |
~/.go
/usr/local/go
key: go-installation-${{ runner.os }}-${{ hashFiles('.github/workflows/release.yml') }}
restore-keys: |
go-installation-${{ runner.os }}-
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: 'stable' # 使用最新稳定版本的Go无需手动更新版本号
cache: true # 启用Go模块缓存
cache-dependency-path: go.sum # 使用go.sum作为缓存键的一部分
- name: Cache GF CLI
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/gf
key: gf-cli-${{ hashFiles('**/go.mod') }}
restore-keys: gf-cli-
- name: Install gf CLI
run: |
# 如果缓存中已有gf CLI直接复制到bin目录否则下载
if [ -f "${{ github.workspace }}/gf" ]; then
echo "Using cached GF CLI"
chmod +x "${{ github.workspace }}/gf"
else
echo "Downloading GF CLI"
curl -L -o gf https://github.com/gogf/gf/releases/latest/download/gf_linux_amd64
chmod +x gf
fi
mkdir -p "$HOME/bin"
mv gf "$HOME/bin/gf"
echo "$HOME/bin" >> $GITHUB_PATH
- name: Verify gf
run: gf -v
- name: Build with gf
run: gf build -ew -v "${{ github.ref_name }}"
- name: Upload build artifacts
# 使用main分支以获取最新版本的action无需手动更新版本号
uses: actions/upload-artifact@main
with:
name: p2p-${{ github.ref_name }}
path: |
bin/**
release:
needs: build
# runs-on指定了运行作业的虚拟机环境类型
# 即使使用containerruns-on仍然是必要的配置
runs-on: ubuntu-latest
# 移除容器配置以避免Docker Hub拉取超时问题
# 直接在GitHub托管的runner环境中执行任务
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download artifacts
# 使用main分支以获取最新版本的action无需手动更新版本号
uses: actions/download-artifact@main
with:
name: p2p-${{ github.ref_name }}
path: bin
- name: Package artifacts
run: |
set -euo pipefail
mkdir -p dist
# Find all built binaries recursively and package with unique names per platform/arch
mapfile -t files < <(find bin -type f \( -name 'p2p' -o -name 'p2p.exe' \))
for f in "${files[@]}"; do
dir="$(dirname "$f")"
base="$(basename "$f")"
plat_arch="$(basename "$dir")" # expects linux_amd64, windows_amd64, etc.
case "$plat_arch" in
windows_*)
zip_name="p2p_${{ github.ref_name }}_${plat_arch}.zip"
(cd "$dir" && zip -9 "${GITHUB_WORKSPACE}/dist/${zip_name}" "$base")
;;
*)
tar_name="p2p_${{ github.ref_name }}_${plat_arch}.tar.gz"
(cd "$dir" && tar -czf "${GITHUB_WORKSPACE}/dist/${tar_name}" "$base")
;;
esac
done
# Checksums
(cd dist && sha256sum * > SHA256SUMS.txt)
ls -al dist
- name: Create GitHub Release
uses: softprops/action-gh-release@v2 # 更新到最新稳定的v2版本
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag_name: ${{ github.ref_name }}
name: ${{ github.ref_name }}
draft: false
prerelease: false
files: |
dist/*