Files
epic-go/.gitea/workflows/ci.yaml
hu xiaotong 76dfd3335c ci: 添加 Gitea Actions 示例工作流
- 新增 ci.yaml 文件,定义 Gitea Actions 示例
2025-06-26 14:43:43 +08:00

178 lines
6.1 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.

name: Epic Go Build & Deploy
run-name: ${{ gitea.actor }} 正在构建 Epic Go 项目 🚀
on:
push:
branches: [ main, master, develop ]
pull_request:
branches: [ main, master ]
jobs:
build:
runs-on: gitea_labels
steps:
- name: 检出代码
run: |
echo "📥 检出代码到工作目录..."
echo "当前目录: $(pwd)"
echo "仓库: ${{ gitea.repository }}"
echo "分支: ${{ gitea.ref }}"
echo "提交: ${{ gitea.sha }}"
# 解析分支名
BRANCH_NAME=$(echo "${{ gitea.ref }}" | sed 's#refs/heads/##')
# 拉取代码使用token鉴权
git clone --depth=1 -b "$BRANCH_NAME" "http://1c18ee1ab9a9cb291506d0c5c016a33be7d59e8c:x-oauth-basic@gitea.htoop.cn/${{ gitea.repository }}.git" .
if [ $? -ne 0 ]; then
echo "❌ 代码检出失败"
exit 1
fi
# 校验分支
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
- name: 安装Go环境
run: |
echo "🔧 安装Go 1.22环境..."
if [ -x /usr/local/go/bin/go ]; then
echo "✅ Go已安装: $(/usr/local/go/bin/go version)"
export PATH=$PATH:/usr/local/go/bin
else
echo "📥 下载并安装Go..."
GO_VERSION="1.22.0"
GO_ARCH="linux-amd64"
MIRRORS=(
"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.huaweicloud.com/golang/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"
)
DOWNLOAD_SUCCESS=false
for mirror in "${MIRRORS[@]}"; do
echo "尝试从镜像下载: $mirror"
if wget -q --timeout=30 --tries=3 "$mirror" -O go.tar.gz; then
echo "✅ 下载成功: $mirror"
DOWNLOAD_SUCCESS=true
break
else
echo "❌ 下载失败: $mirror"
continue
fi
done
if [ "$DOWNLOAD_SUCCESS" = false ]; then
echo "❌ 所有镜像源下载失败"
exit 1
fi
echo "解压Go到/usr/local..."
tar -C /usr/local -xzf go.tar.gz
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
echo "验证Go安装..."
/usr/local/go/bin/go version
rm go.tar.gz
echo "✅ Go安装完成"
fi
- name: 检查Go环境
run: |
echo "🔍 检查Go环境..."
export PATH=$PATH:/usr/local/go/bin
go version
go env GOPATH
go env GOROOT
- name: 下载依赖
run: |
echo "📦 下载Go模块依赖..."
export PATH=$PATH:/usr/local/go/bin
echo "当前工作目录: $(pwd)"
echo "目录内容:"
ls -la
if [ -f "go.mod" ]; then
echo "✅ 找到go.mod文件"
cat go.mod | head -5
else
echo "❌ 未找到go.mod文件"
exit 1
fi
export GO111MODULE=on
export GOPROXY=https://goproxy.cn,direct
echo "Go环境变量:"
echo "GOPROXY: $GOPROXY"
echo "GO111MODULE: $GO111MODULE"
go mod download
echo "✅ 依赖下载完成"
echo "已下载的模块:"
go list -m all | head -10
- name: 验证依赖
run: |
echo "🔍 验证Go模块..."
export PATH=$PATH:/usr/local/go/bin
go mod verify
echo "✅ 模块验证完成"
- name: 构建项目
run: |
echo "🔨 开始构建 Epic Go 项目..."
export PATH=$PATH:/usr/local/go/bin
go build -v -o epic-game-service main.go
echo "✅ 构建完成"
- name: 检查构建产物
run: |
echo "📦 构建产物信息:"
ls -la epic-game-service
# 自动安装 file 命令
if command -v apk &> /dev/null; then
apk add --no-cache file
elif command -v apt-get &> /dev/null; then
apt-get update && apt-get install -y file
fi
file epic-game-service
echo "文件大小: $(du -h epic-game-service | cut -f1)"
- name: 显示项目信息
run: |
echo "📋 项目信息:"
export PATH=$PATH:/usr/local/go/bin
echo "Go 版本: $(go version)"
echo "模块名称: $(go list -m)"
echo "构建时间: $(date)"
echo "分支: ${{ gitea.ref }}"
echo "提交: ${{ gitea.sha }}"
- name: 准备部署
run: |
echo "🚀 准备部署..."
echo "运行器操作系统: ${{ runner.os }}"
echo "工作目录: ${{ gitea.workspace }}"
echo "任务状态: ${{ job.status }}"
mkdir -p deploy
cp epic-game-service deploy/
cp -r manifest deploy/
echo "📦 部署包已准备完成"
- name: 复制构建产物到目标目录并重命名
run: |
echo "📤 复制构建产物到 /opt/dockeropt/epic-go 并重命名为 main ..."
mkdir -p /opt/dockeropt/epic-go
cp epic-game-service /opt/dockeropt/epic-go/main
echo "✅ 构建产物已复制并重命名为 /opt/dockeropt/epic-go/main"
ls -l /opt/dockeropt/epic-go