faf-taf-git
用于测试的收据打印机。
每次在CI中运行测试时,fatf - taff -git都会写一个小收据:当它们运行时,通过、失败和跳过的数量。收据保存在你的回购中,一个接一个,在他们自己的分支上。随着时间的推移,它们会显示你的测试是否真的一直通过。
任何人都可以变绿一次。收据显示了时间的变化。
npm: faf-taf-git · GitHub Action: Wolfe-Jam/faf-taf-git ·MIT,免费
为什么
- 测试结果通常会消失。 CI显示今天的运行,然后日志过期。收据。
- 你可以回头看。 测试什么时候开始失败的?在上次发布之前main是绿色的吗?
- 其他人可以检查一下。 用户、评论者、审计员和人工智能代理可以自己阅读历史,而不是相信你的话。
收据长什么样啊
收据保存在一个名为 .taf,在一个叫做 taf-receipts:
- timestamp: 2026-10-29T20:28:58.090Z
result: PASSED
tests:
total: 628
passed: 621
failed: 0
skipped: 7
trigger: github-actions
result 是 PASSED 或 FAILED. 完整的格式是 RECEIPT-FORMAT.md。
设置它(GitHub动作)
例如,将其添加到工作流中 .github/workflows/tests.yml. 将安装和测试行交换为您自己的行。
name: Tests
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-latest
permissions:
contents: write # lets the action save receipts
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: '24.x'
- run: npm ci
- name: Run tests
id: tests
continue-on-error: true # keep going, so a failed run still gets a receipt
run: |
set -o pipefail
npm test 2>&1 | tee test-output.txt
- name: Print the receipt
if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request'
uses: Wolfe-Jam/[email protected]
with:
test-output-file: test-output.txt
target-branch: taf-receipts
- name: Fail the job if the tests failed
if: steps.tests.outcome == 'failure'
run: exit 1
就是这样。第一次运行创建 taf-receipts 给你分支。
这个食谱有四点是正确的:
- 失败的运行也会得到收据。 一次红跑记录为
FAILED我没有被遗漏。只有绿色奔跑的历史证明了这一点。 - 只有
main得到收据。 拉取请求和其他分支仍然运行测试,但记录是关于main。 - 这项工作仍然很困难 当测试失败时,你的检查保持诚实。
- 测试只运行一次。 收据读取刚刚发生的运行的输出。
如果测试在多个操作系统上运行,则从运行测试最多的操作系统打印收据。
与您的测试运行器一起工作
| 跑步者 | 什么给行动 |
|---|---|
| Python (pytest) | pytest --junitxml=report.xml,然后 test-output-file: report.xml |
| 任何编写JUnit XML的运行程序 | XML报告文件(Rust with cargo nextest与…一起去 gotestsum --junitfile, Java与Maven或Gradle;. NET, PHPUnit, Jest with jest-junit) |
| 开玩笑 | 控制台输出(npm test 2>&1 | tee test-output.txt) |
| 轻快地 | 控制台输出 |
| 包子 | 的控制台输出 bun test |
| WJTTC | 控制台输出 |
JUnit XML是大多数测试运行者可以编写的常见报告格式。如果您的运行程序不在表中,请检查它是否可以编写JUnit XML。
其他CI系统
命令行工具在任何Node.js运行的地方做同样的工作(GitLab, Jenkins, CircleCI, Bitbucket, Azure,你自己的机器):
npm test 2>&1 | tee test-output.txt
npx faf-taf-git --file test-output.txt --commit
--commit 提交更新后的 .taf 给你。把它关掉,只更新文件。
阅读收据
git fetch origin taf-receipts
git show origin/taf-receipts:.taf
为你的自述文件制作一个徽章:
npx faf-taf-git badge --output badge.svg
设置
操作的输入
| 输入 | 它是做什么的 | 默认的 |
|---|---|---|
test-output-file | 包含测试输出或JUnit XML报告的文件 | 要求 |
target-branch | 分行的收据存到。使用 taf-receipts。 | 当前分支 |
auto-commit | 提交并推送收据 | true |
commit-message | 提交消息 | chore(taf): update .taf receipt [skip ci] |
动作输出: result, passed, failed, skipped, total, taf-updated. 例如, ${{ steps.taf.outputs.passed }}。
命令行选项: --file, --commit, --message, --cwd, --verbose。运行 npx faf-taf-git --help 查看完整列表。
伪装有多难?
收据由CI根据实际测试输出写入,并保存在git中。编辑或删除旧收据会更改git历史记录,因此任何人都可以比较历史记录。这个 taf-receipts 分支只会增长:永远不要重写、压缩或强行推动它。
收据证明该提交通过了测试。它不能证明发布的包是根据那个提交构建的。
使用FAF(可选)
fatf - taff -git适用于任何git回购;你不需要其他任何东西。如果您的项目还使用 快 (一个 project.faf (描述AI项目的文件),两者结合在一起: project.faf 说项目是什么,然后 .taf 显示它的测试一直通过。
从v1升级
V1在行动中进行了测试。V2读取您自己的测试步骤编写的文件。取代 test-command: 与一个测试步骤,保存其输出,并点 test-output-file: 在该文件中(参见上面的设置)。
开发
npm ci
npm test # the test suite
npm run build # rebuilds dist/, which the action runs
看到 CONTRIBUTING.md 和 CHANGELOG.md。
许可证
麻省理工学院。永远免费。
如果fat - taff -git对你有用,星星会帮助别人找到它。