ci: 添加 Gitea Actions 示例工作流

- 新增 ci.yaml 文件,定义 Gitea Actions 示例
This commit is contained in:
hu xiaotong
2025-06-26 14:20:00 +08:00
parent 027a22bede
commit c19ae59133

View File

@@ -1,6 +1,6 @@
name: Epic Go Build & Deploy name: Epic Go Build & Deploy
run-name: ${{ gitea.actor }} 正在构建 Epic Go 项目 🚀 run-name: ${{ gitea.actor }} 正在构建 Epic Go 项目 🚀
on: on:
push: push:
branches: [ main, master, develop ] branches: [ main, master, develop ]
pull_request: pull_request:
@@ -14,64 +14,46 @@ jobs:
run: | run: |
echo "📥 检出代码到工作目录..." echo "📥 检出代码到工作目录..."
echo "当前目录: $(pwd)" echo "当前目录: $(pwd)"
echo "工作目录: ${{ gitea.workspace }}"
echo "仓库: ${{ gitea.repository }}" echo "仓库: ${{ gitea.repository }}"
echo "分支: ${{ gitea.ref }}" echo "分支: ${{ gitea.ref }}"
echo "提交: ${{ gitea.sha }}" echo "提交: ${{ gitea.sha }}"
# 检查是否已经有代码 # 解析分支名
if [ -f "go.mod" ]; then BRANCH_NAME=$(echo "${{ gitea.ref }}" | sed 's#refs/heads/##')
echo "✅ 代码已存在go.mod文件找到"
else # 拉取代码使用token鉴权
echo "📥 需要检出代码..." git clone --depth=1 -b "$BRANCH_NAME" "http://1c18ee1ab9a9cb291506d0c5c016a33be7d59e8c:x-oauth-basic@gitea.htoop.cn/${{ gitea.repository }}.git" .
if [ $? -ne 0 ]; then
# 如果工作目录存在使用它 echo "❌ 代码检出失败"
if [ -n "${{ gitea.workspace }}" ] && [ -d "${{ gitea.workspace }}" ]; then exit 1
echo "切换到工作目录: ${{ gitea.workspace }}"
cd "${{ gitea.workspace }}"
else
echo "工作目录不存在,尝试检出到当前目录"
# 尝试从git仓库检出
if [ -n "${{ gitea.repository }}" ]; then
echo "检出仓库: ${{ gitea.repository }}"
git clone "https://gitea.com/${{ gitea.repository }}.git" .
# 切换到指定分支
if [ -n "${{ gitea.ref }}" ]; then
BRANCH_NAME=$(echo "${{ gitea.ref }}" | sed 's/refs\/heads\///')
echo "切换到分支: $BRANCH_NAME"
git checkout "$BRANCH_NAME"
fi
fi
fi
# 再次检查
if [ -f "go.mod" ]; then
echo "✅ 代码检出成功"
else
echo "❌ 代码检出失败"
echo "当前目录内容:"
ls -la
exit 1
fi
fi fi
echo "最终工作目录: $(pwd)"
echo "目录内容:" # 校验分支
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$CURRENT_BRANCH" != "$BRANCH_NAME" ]; then
echo "❌ 检出分支与预期不符: $CURRENT_BRANCH != $BRANCH_NAME"
exit 1
fi
# 校验提交
CURRENT_COMMIT=$(git rev-parse HEAD)
if [ -n "${{ gitea.sha }}" ] && [ "$CURRENT_COMMIT" != "${{ gitea.sha }}" ]; then
echo "❌ 检出提交与预期不符: $CURRENT_COMMIT != ${{ gitea.sha }}"
exit 1
fi
echo "✅ 代码检出成功,分支和提交校验通过"
ls -la ls -la
- name: 安装Go环境 - name: 安装Go环境
run: | run: |
echo "🔧 安装Go 1.22环境..." echo "🔧 安装Go 1.22环境..."
# 检查是否已安装Go
if command -v go &> /dev/null; then if command -v go &> /dev/null; then
echo "✅ Go已安装: $(go version)" echo "✅ Go已安装: $(go version)"
else else
echo "📥 下载并安装Go..." echo "📥 下载并安装Go..."
# 下载Go 1.22 - 使用国内镜像
GO_VERSION="1.22.0" GO_VERSION="1.22.0"
GO_ARCH="linux-amd64" GO_ARCH="linux-amd64"
# 尝试多个国内镜像源
MIRRORS=( MIRRORS=(
"https://golang.google.cn/dl/go${GO_VERSION}.${GO_ARCH}.tar.gz" "https://golang.google.cn/dl/go${GO_VERSION}.${GO_ARCH}.tar.gz"
"https://mirrors.aliyun.com/golang/go${GO_VERSION}.${GO_ARCH}.tar.gz" "https://mirrors.aliyun.com/golang/go${GO_VERSION}.${GO_ARCH}.tar.gz"
@@ -79,9 +61,7 @@ jobs:
"https://mirrors.tencent.com/go/go${GO_VERSION}.${GO_ARCH}.tar.gz" "https://mirrors.tencent.com/go/go${GO_VERSION}.${GO_ARCH}.tar.gz"
"https://go.dev/dl/go${GO_VERSION}.${GO_ARCH}.tar.gz" "https://go.dev/dl/go${GO_VERSION}.${GO_ARCH}.tar.gz"
) )
DOWNLOAD_SUCCESS=false DOWNLOAD_SUCCESS=false
for mirror in "${MIRRORS[@]}"; do for mirror in "${MIRRORS[@]}"; do
echo "尝试从镜像下载: $mirror" echo "尝试从镜像下载: $mirror"
if wget -q --timeout=30 --tries=3 "$mirror" -O go.tar.gz; then if wget -q --timeout=30 --tries=3 "$mirror" -O go.tar.gz; then
@@ -93,31 +73,21 @@ jobs:
continue continue
fi fi
done done
if [ "$DOWNLOAD_SUCCESS" = false ]; then if [ "$DOWNLOAD_SUCCESS" = false ]; then
echo "❌ 所有镜像源下载失败" echo "❌ 所有镜像源下载失败"
exit 1 exit 1
fi fi
# 解压到/usr/local
echo "解压Go到/usr/local..." echo "解压Go到/usr/local..."
tar -C /usr/local -xzf go.tar.gz tar -C /usr/local -xzf go.tar.gz
# 设置环境变量
export PATH=$PATH:/usr/local/go/bin export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go export GOROOT=/usr/local/go
export GOPATH=$HOME/go export GOPATH=$HOME/go
# 验证安装
echo "验证Go安装..." echo "验证Go安装..."
/usr/local/go/bin/go version /usr/local/go/bin/go version
# 清理下载文件
rm go.tar.gz rm go.tar.gz
echo "✅ Go安装完成" echo "✅ Go安装完成"
fi fi
- name: 检查Go环境 - name: 检查Go环境
run: | run: |
echo "🔍 检查Go环境..." echo "🔍 检查Go环境..."
@@ -125,18 +95,14 @@ jobs:
go version go version
go env GOPATH go env GOPATH
go env GOROOT go env GOROOT
- name: 下载依赖 - name: 下载依赖
run: | run: |
echo "📦 下载Go模块依赖..." echo "📦 下载Go模块依赖..."
export PATH=$PATH:/usr/local/go/bin export PATH=$PATH:/usr/local/go/bin
# 显示当前目录和文件
echo "当前工作目录: $(pwd)" echo "当前工作目录: $(pwd)"
echo "目录内容:" echo "目录内容:"
ls -la ls -la
# 检查go.mod文件
if [ -f "go.mod" ]; then if [ -f "go.mod" ]; then
echo "✅ 找到go.mod文件" echo "✅ 找到go.mod文件"
cat go.mod | head -5 cat go.mod | head -5
@@ -144,44 +110,37 @@ jobs:
echo "❌ 未找到go.mod文件" echo "❌ 未找到go.mod文件"
exit 1 exit 1
fi fi
# 设置Go模块环境
export GO111MODULE=on export GO111MODULE=on
export GOPROXY=https://goproxy.cn,direct export GOPROXY=https://goproxy.cn,direct
echo "Go环境变量:" echo "Go环境变量:"
echo "GOPROXY: $GOPROXY" echo "GOPROXY: $GOPROXY"
echo "GO111MODULE: $GO111MODULE" echo "GO111MODULE: $GO111MODULE"
# 下载依赖
go mod download go mod download
echo "✅ 依赖下载完成" echo "✅ 依赖下载完成"
# 显示下载的模块
echo "已下载的模块:" echo "已下载的模块:"
go list -m all | head -10 go list -m all | head -10
- name: 验证依赖 - name: 验证依赖
run: | run: |
echo "🔍 验证Go模块..." echo "🔍 验证Go模块..."
export PATH=$PATH:/usr/local/go/bin export PATH=$PATH:/usr/local/go/bin
go mod verify go mod verify
echo "✅ 模块验证完成" echo "✅ 模块验证完成"
- name: 构建项目 - name: 构建项目
run: | run: |
echo "🔨 开始构建 Epic Go 项目..." echo "🔨 开始构建 Epic Go 项目..."
export PATH=$PATH:/usr/local/go/bin export PATH=$PATH:/usr/local/go/bin
go build -v -o epic-game-service main.go go build -v -o epic-game-service main.go
echo "✅ 构建完成" echo "✅ 构建完成"
- name: 检查构建产物 - name: 检查构建产物
run: | run: |
echo "📦 构建产物信息:" echo "📦 构建产物信息:"
ls -la epic-game-service ls -la epic-game-service
file epic-game-service file epic-game-service
echo "文件大小: $(du -h epic-game-service | cut -f1)" echo "文件大小: $(du -h epic-game-service | cut -f1)"
- name: 显示项目信息 - name: 显示项目信息
run: | run: |
echo "📋 项目信息:" echo "📋 项目信息:"
@@ -191,15 +150,13 @@ jobs:
echo "构建时间: $(date)" echo "构建时间: $(date)"
echo "分支: ${{ gitea.ref }}" echo "分支: ${{ gitea.ref }}"
echo "提交: ${{ gitea.sha }}" echo "提交: ${{ gitea.sha }}"
- name: 准备部署 - name: 准备部署
run: | run: |
echo "🚀 准备部署..." echo "🚀 准备部署..."
echo "运行器操作系统: ${{ runner.os }}" echo "运行器操作系统: ${{ runner.os }}"
echo "工作目录: ${{ gitea.workspace }}" echo "工作目录: ${{ gitea.workspace }}"
echo "任务状态: ${{ job.status }}" echo "任务状态: ${{ job.status }}"
# 创建部署包
mkdir -p deploy mkdir -p deploy
cp epic-game-service deploy/ cp epic-game-service deploy/
cp -r manifest deploy/ cp -r manifest deploy/