Repository navigation
71 lines (64 loc) · 3.79 KB
/
Copy pathexpectation-change.yml
File metadata and controls
71 lines (64 loc) · 3.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# PR のコミットに、トレーラーの無い期待値の変更が無いかを確かめる(#640 の段 3。QUALITY.md 3 節)。
#
# <位置づけ>
# 段 1(Claude Code の PreToolUse フック)と段 2(commit-msg フック)は、手元の設定に頼る。
# フックを有効にしていない、--no-verify で迂回した、別のエージェントを使った、を最終的に塞ぐのがここ。
# 何を期待値の変更と数えるかの正は root/programs/CheckExpectationChange.ps1 にある。ここには判定を書かない。
#
# <検出器は、ベース側の版を使う>
# PR の側の CheckExpectationChange.ps1 を使うと、PR が検出器を緩めれば素通りになる。
# そこでベースのコミットを別のフォルダへ取り出し、その版で PR のコミットを調べる。
# PR のコミットは git のオブジェクトとして読むだけで、PR の側のスクリプトは実行しない。
# **ベースに検出器が無いとき(導入する PR)だけ、PR の側の版を使う。**
# なお、このワークフロー自体は pull_request なので PR の側の定義で動く。
# 書き換えれば検出器の「仕組みの変更」として数えられ(ベース側の版が見る)、人のレビューにも現れる。
# pull_request_target にはしない(書き込み権限の文脈で PR を扱うことになる。GitHubUsage.md 3 節)。
#
# <対象>
# develop・master 宛の PR。数秒で終わる(ビルドしない)。
# ブランチ保護の必須のチェックにするかは人が決める(GitHubUsage.md 2 節)。チェック名はジョブ名の expectation-change。
#
# <Windows で動かす理由>
# 検出器は 2_RunAllTests.ps1 -List からテストの定義(正規化のオプション)を受け取る。
# 2_RunAllTests.ps1 は Windows 前提であり、利用者と同じ Windows PowerShell 5.1 で動かす。
name: Expectation change
on:
pull_request:
branches: [develop, master]
permissions:
contents: read
jobs:
expectation-change:
runs-on: windows-latest
timeout-minutes: 15
steps:
# PR のコミットを範囲で辿るので、履歴をすべて取る。
- name: Checkout (PR)
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
persist-credentials: false
# 検出器はベース側の版を使う(上の<検出器は、ベース側の版を使う>)。
- name: Checkout (base, for the checker)
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: ${{ github.event.pull_request.base.sha }}
path: _base
persist-credentials: false
# **run: の中は ASCII だけにする。** Windows PowerShell 5.1 は、Actions が書き出す BOM 無しの一時ファイルを
# ANSI(Shift_JIS)として読み、日本語の文字列で構文エラーになる(CODING.md 5 節。#640 の最初の実行で踏んだ)。
- name: Check expectation changes
shell: powershell
env:
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: |
$checker = Join-Path $env:GITHUB_WORKSPACE "_base\root\programs\CheckExpectationChange.ps1"
if (-not (Test-Path $checker))
{
Write-Host "::warning::CheckExpectationChange.ps1 is not in the base; using the PR's version (introducing PR)."
$checker = Join-Path $env:GITHUB_WORKSPACE "root\programs\CheckExpectationChange.ps1"
}
& $checker -Range "$env:BASE_SHA..$env:HEAD_SHA"
exit $LASTEXITCODE