93 lines
5.1 KiB
Markdown
93 lines
5.1 KiB
Markdown
# Test_runner
|
||
|
||
Gitea Actions 自托管 runner 的测试仓库,同时作为其他仓库编写 workflow 的参考。
|
||
|
||
- 实例:https://gitea.docker.antior.cn/
|
||
- 参考 workflow:[.gitea/workflows/build.yaml](.gitea/workflows/build.yaml)(push 到 main → esbuild 编译 → 打包 → 创建 Release 并上传产物)
|
||
- runner 环境说明与人工部署手顺:[docs/add-runner.md](docs/add-runner.md)
|
||
|
||
## 编写 workflow 注意点
|
||
|
||
这台 runner 是一台 Windows 宿主机(host 模式),不是云端标准环境,写 workflow 时务必注意:
|
||
|
||
1. **标签匹配**:`runs-on: windows-latest`(或 `windows` / `windows-amd64`)。写成 `ubuntu-latest` 等未注册标签,任务会永远排队。
|
||
2. **不依赖 github.com**:runner 到 github.com 网络不稳定,禁止使用 `actions/checkout@v4` 等托管在 github.com 的 action。拉代码用实例克隆:
|
||
```powershell
|
||
git clone https://x-access-token:${{ secrets.GITHUB_TOKEN }}@gitea.docker.antior.cn/${{ github.repository }}.git .
|
||
git checkout ${{ github.sha }}
|
||
```
|
||
npm / pypi registry 目前可正常访问。
|
||
3. **Windows 宿主机写法**:workflow 放 `.gitea/workflows/`(不是 `.github/`);shell 是 PowerShell(建议显式 `shell: pwsh`),不要写 bash 语法;打包用 `Compress-Archive`。
|
||
4. **工具链边界**:有 Node 22 / npm、Python 3.10–3.14(用 `py -X.Y` 显式指定版本,勿裸写 `python`)、pwsh、git、curl;没有 gcc / make / go / rust / docker。
|
||
5. **发布方式**:用 Gitea API,token 用自动注入的 `${{ secrets.GITHUB_TOKEN }}`,地址用 `${{ gitea.server_url }}/api/v1`;tag 带 `${{ github.run_number }}` 保证唯一。
|
||
|
||
完整约束见下面的 prompt 模板,可直接发给其他电脑的 agent 使用。
|
||
|
||
## 给其他电脑 Agent 的 Prompt(复制即用)
|
||
|
||
```text
|
||
我的 Gitea 实例:https://gitea.docker.antior.cn/
|
||
仓库已有一台在线的自托管 runner,请为本仓库编写 Gitea Actions workflow,
|
||
实现:push 到 main 分支时自动编译/构建,并创建 Release、上传构建产物。
|
||
|
||
【runner 环境约束 —— workflow 必须遵守】
|
||
- runner 是 Windows 11 x64 宿主机模式(非 Docker),labels:windows-latest / windows / windows-amd64
|
||
→ runs-on 必须用 windows-latest
|
||
- 已安装工具链:
|
||
- Node.js v22 + npm 10(node/npm 直接在 PATH)
|
||
- Python 3.10 / 3.11 / 3.12 / 3.13 / 3.14,通过 py launcher 调用(py -3.12 等,py 默认为 3.14)
|
||
→ workflow 里必须用 py -X.Y 显式指定版本,不要只写 python(PATH 中的 python 是 3.12,可能与预期不符)
|
||
- PowerShell 7 (pwsh)、git、curl
|
||
- 没有:gcc/make/go/rust/docker。不要引用依赖这些工具的步骤
|
||
- workflow 文件放在 .gitea/workflows/ 目录(不是 .github/)
|
||
- 默认 shell 是 PowerShell,写 run 步骤时用 PowerShell 语法,
|
||
或显式声明 shell: pwsh;不要写 bash 语法
|
||
- 路径用 Windows 规则;产物打包用 Compress-Archive
|
||
- runner 到 github.com 的网络不稳定,【禁止使用 actions/checkout@v4 等托管在 github.com 的 action】,
|
||
拉代码必须用下面的实例克隆步骤(npm/pypi registry 可正常访问)
|
||
|
||
【拉取代码(代替 actions/checkout,shell: pwsh)】
|
||
|
||
- name: Checkout
|
||
shell: pwsh
|
||
env:
|
||
GITEA_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||
run: |
|
||
$url = "${{ gitea.server_url }}/${{ github.repository }}.git" -replace '^https://', "https://x-access-token:$env:GITEA_TOKEN@"
|
||
git clone $url .
|
||
git checkout ${{ github.sha }}
|
||
|
||
【Release 发布方式】
|
||
用 Gitea API 发布,token 用自动注入的 ${{ secrets.GITHUB_TOKEN }},
|
||
API 地址用 ${{ gitea.server_url }}/api/v1。参考步骤(shell: pwsh):
|
||
|
||
- name: Create Gitea release with artifact
|
||
shell: pwsh
|
||
env:
|
||
GITEA_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||
run: |
|
||
$repo = "${{ github.repository }}"
|
||
$tag = "v0.1.${{ github.run_number }}"
|
||
$server = "${{ gitea.server_url }}"
|
||
$headers = @{ Authorization = "token $env:GITEA_TOKEN" }
|
||
$body = @{
|
||
tag_name = $tag; name = "Build $tag"
|
||
target_commitish = "${{ github.sha }}"
|
||
draft = $false; prerelease = $true
|
||
} | ConvertTo-Json
|
||
$release = Invoke-RestMethod -Method Post -Uri "$server/api/v1/repos/$repo/releases" `
|
||
-Headers $headers -Body $body -ContentType "application/json"
|
||
Invoke-RestMethod -Method Post `
|
||
-Uri "$server/api/v1/repos/$repo/releases/$($release.id)/assets?name=<产物文件名>" `
|
||
-Headers $headers -Form @{ attachment = Get-Item "<产物文件路径>" }
|
||
|
||
tag 命名建议带 ${{ github.run_number }} 保证唯一,避免重复 tag 导致发布失败。
|
||
也可以直接参考本实例上 antior/Test_runner 仓库的 .gitea/workflows/build.yaml。
|
||
|
||
【本仓库信息】
|
||
- 项目类型:<比如 Node / Python / 纯静态文件>
|
||
- 构建命令:<比如 npm ci && npm run build,或 py -3.12 -m PyInstaller ...>
|
||
- 产物位置:<比如 dist/ 目录>
|
||
请生成 workflow 并提交 push,然后确认 Actions 运行成功、Release 已创建。
|
||
```
|