Files
Test_runner/README.md
T
antior 74dec021be
build-and-release / build (push) Successful in 4s
docs: add workflow authoring checklist to README
2026-07-20 15:02:58 +08:00

93 lines
5.1 KiB
Markdown
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.
# 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.103.14(用 `py -X.Y` 显式指定版本,勿裸写 `python`)、pwsh、git、curl;没有 gcc / make / go / rust / docker。
5. **发布方式**:用 Gitea APItoken 用自动注入的 `${{ 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),labelswindows-latest / windows / windows-amd64
→ runs-on 必须用 windows-latest
- 已安装工具链:
- Node.js v22 + npm 10node/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 显式指定版本,不要只写 pythonPATH 中的 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/checkoutshell: 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 已创建。
```