-
Notifications
You must be signed in to change notification settings - Fork 160
161 lines (144 loc) · 6.63 KB
/
check.yml
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
name: check
on: [push, pull_request_target, workflow_dispatch]
jobs:
check:
runs-on: ubuntu-latest
strategy:
matrix:
item:
- {name: code_qualify}
- {name: defined_word}
- {name: display_error}
- {name: meta_header}
- {name: ngword}
- {name: inner_link, script: link_check.py --check-inner-link}
name: check (${{ matrix.item.name }})
steps:
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install requests
- uses: actions/checkout@v4
with:
repository: ${{ github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.full_name || github.event.repository.full_name }}
ref: ${{ github.event_name == 'pull_request_target' && github.event.pull_request.head.ref || github.ref }}
- uses: actions/checkout@v4
with:
repository: ${{ github.event_name == 'pull_request_target' && github.event.pull_request.base.repo.full_name || github.event.repository.full_name }}
ref: ${{ github.event_name == 'pull_request_target' && 'master' || github.ref }}
sparse-checkout: .github
path: .trusted
- name: check
run: python3 .trusted/.github/workflows/script/${{ matrix.item.script || format('{0}_check.py', matrix.item.name) }}
detect_forbidden_characters:
# 本リポジトリでは、以下に挙げる文字の使用を禁止している:
# U+00AD SOFT HYPHEN (ソフトハイフン)
# U+200B ZERO WIDTH SPACE (ゼロ幅スペース)
#
# 経緯は以下を参照:
# #735 SOFT HYPHENを削除する?
# https://github.com/cpprefjp/site/issues/735
runs-on: ubuntu-latest
env:
RIPGREP_VERSION: 14.1.0
BIN_DIR: ${{ github.workspace }}/bin
REPO_DIR: repo
cache-version: v1
steps:
- id: cache-ripgrep
uses: actions/cache@v3
with:
path: ${{ env.BIN_DIR }}
key: ${{ env.cache-version }}-ripgrep-${{ env.RIPGREP_VERSION }}
- name: install ripgrep
if: steps.cache-ripgrep.outputs.cache-hit != 'true'
run: |
curl -fsSLO https://github.com/BurntSushi/ripgrep/releases/download/$RIPGREP_VERSION/ripgrep-$RIPGREP_VERSION-x86_64-unknown-linux-musl.tar.gz
mkdir -p $BIN_DIR
tar xvf ripgrep-$RIPGREP_VERSION-x86_64-unknown-linux-musl.tar.gz --strip=1 --no-anchor -C $BIN_DIR rg
working-directory: ${{ runner.temp }}
- uses: actions/checkout@v4
with:
path: ${{ env.REPO_DIR }}
- name: check
run: "! $BIN_DIR/rg -t md --vimgrep '[\u00ad\u200b]' $REPO_DIR"
preview_build:
if: github.event_name == 'pull_request_target'
needs: [check, detect_forbidden_characters]
uses: ./.github/workflows/build.yml
with:
arguments: --pull ${{ github.event.number }}
concurrency:
group: cpprefjp.gh-pages.lock
preview_link:
needs: preview_build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
ref: ${{ github.event.pull_request.head.ref }}
fetch-depth: 0
- id: vars
uses: actions/github-script@v7
with:
script: |
const sha0 = context.payload.pull_request.base.sha;
const sha = context.payload.pull_request.head.sha;
const base_url = (() => {
const owner = context.payload.pull_request.base.repo.owner.login;
const repo = context.payload.pull_request.base.repo.name;
const pull = context.payload.number;
return `https://${owner}.github.io/${repo}/gen/pull/${pull}`;
})();
const repo_full = context.payload.pull_request.base.repo.full_name;
const branch = context.payload.pull_request.head.ref;
// https://qiita.com/akko_merry/items/dda3c6b7ae01ac143a8b#comment-e0ecb4abe4d3d6d76054
const now = new Date();
now.setMinutes(now.getMinutes() + 9 * 60); // JST is +0900
const time = now.toJSON()?.replace('T', ' ').slice(0, 19) + ' JST';
core.setOutput('sha0', sha0);
core.setOutput('sha', sha);
core.setOutput('base_url', base_url);
core.setOutput('repo_full', repo_full);
core.setOutput('ubranch', encodeURIComponent(branch));
core.setOutput('time', time);
- id: file_list
shell: bash
run: |
set -ex
git remote add base '${{ github.event.pull_request.base.repo.clone_url }}'
git fetch base '${{ github.event.pull_request.base.ref }}'
content=$(
git diff --name-status --diff-filter=dr ${{ steps.vars.outputs.sha0 }} ${{ steps.vars.outputs.sha }} |
sed -n '
# normalize the line format
s/^[[:space:]]*\([^[:space:]]\{1,\}\)[[:space:]]\{1,\}/\1 /
# exclude filenames containing special characters that may break Markdown
/[][`()]/d
# exclude README.md
/^[^[:space:]]* README\.md$/d
# generate list items
s|^A \(.*\)\.md$|- :memo: [`\1`](${{ steps.vars.outputs.base_url }}/\1.html) :sparkles:|p
s|^[^[:space:]]* \(.*\)\.md$|- :memo: [`\1`](${{ steps.vars.outputs.base_url }}/\1.html)|p
'
)
[[ $content ]] || content='- (内容変更された `.md` ファイルはありません)'
echo 'content<<EOF' >> "$GITHUB_OUTPUT"
echo "$content" >> "$GITHUB_OUTPUT"
echo 'EOF' >> "$GITHUB_OUTPUT"
- uses: thollander/actions-comment-pull-request@v3
with:
message: |
:zap: [**プレビュー (HTML)**](${{ steps.vars.outputs.base_url }}) (更新時刻: ${{ steps.vars.outputs.time }})
- **⫯** Commit: ${{ steps.vars.outputs.sha }}
- プレビューの生成には時間がかかります (3~5分)。進捗状況は[こちら](https://github.com/${{ steps.vars.outputs.repo_full }}/actions?query=event%3Apull_request_target+branch%3A${{ steps.vars.outputs.ubranch }})をご確認ください。
#### 変更記事一覧
${{ steps.file_list.outputs.content }}
※ソース (.md) に直接変更のあった記事を列挙しています。グローバル修飾や変換規則の変更による変化は考慮していません。
comment-tag: cpprefjp-preview_link
github-token: ${{ secrets.GITHUB_TOKEN }}