在 GitHub Actions 里运行 geo-score
geo-score 的 Action 在工作流里跑第 1 级打分,写一份含全部检查的任务摘要,并能在分数低于阈值或有门槛项得 0 分时让构建失败。它是 action.yml 里定义的组合 Action,所有输入都通过环境变量传给打分器,从不拼进 shell。
怎么把 geo-score 加进工作流?
name: AI visibility
on: [push]
jobs:
geo-score:
runs-on: ubuntu-latest
steps:
- uses: jianruntech/geo-score@v1
with:
url: https://example.com
fail-under: 40
fail-on-gate: true
门槛项得 0 分会让总分封顶 40,所以本来能得 40 分以上的站会正好显示 40,仍能通过 fail-under: 40;fail-on-gate: true 则让所有被封顶的站失败。在 CI 里,fail-under 请比平时的分数至少低 5 分:页面样本变化时,同一个站两次运行大约有 ±5 的波动。
Action 接受哪些输入?
| 输入 | 默认 | 作用 |
|---|---|---|
url | 必填 | 要打分的网址。 |
fail-under | 无 | 归一化分低于这个值时任务失败。 |
fail-on-gate | false | 任一门槛项得 0 分时任务失败。 |
assert | 无 | 逐项断言,每行一条,例如 g.robots=max。 |
sample | 8 | 抽样页数。 |
json-out | 无 | 把 JSON 报告写到这个路径。 |
urls-from | 无 | 重评之前某份 JSON 报告抽到的页面。 |
baseline | 无 | 和同一批页面上的旧报告比较,并在摘要里加一节「Changes since baseline」。 |
sarif | 无 | 写一份 SARIF 2.1.0,供代码扫描使用。 |
junit | 无 | 写一份 JUnit XML,供测试报告工具使用。 |
annotations | true | 把 0 分的检查项标注到运行页面上(门槛项为 error,其余为 warning)。 |
badge | 无 | 写一枚徽章:路径以 .json 结尾的写 shields.io endpoint JSON,其余写 SVG。 |
Action 输出什么?
score(0–100)、band、gate-capped、report(完整 JSON)、report-path 和 badge-path。设了基线时,还会输出 delta(本次分数减基线分数)和 dropped-checks(掉分或变 0 的检查项,按量表顺序以逗号分隔)。
怎么只在退步时让构建失败?
把一份报告提交为基线,每次 push 重评同一批页面,有检查项掉分时失败。输出要像 Action 处理自己的输入那样,通过 env 传给 shell。
- id: geo
uses: jianruntech/geo-score@v1
with:
url: https://example.com
baseline: geo-score-baseline.json
- if: steps.geo.outputs.dropped-checks != ''
env:
DROPPED: ${{ steps.geo.outputs.dropped-checks }}
run: |
echo "::error title=geo-score::checks that dropped since the baseline: $DROPPED"
exit 1
重评基线的页面,就把抽样这个变量排除了,剩下的差异都来自网站本身。
Action 能每周追踪引用情况吗?
单靠它不行:引用情况属于第 3 级,需要你的服务商 Key 和一组固定问题。仓库里有一个定时工作流示例 examples/ci/watch-weekly.yml,从仓库 secrets 读取 Key,并把每次运行提交进仓库,历史就留在 git 里。运行文件里有你的问题和完整回答,如果内容保密,请放在私有仓库。