リンクミスを修正 (close #1526) #901
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: check | |
on: [push, pull_request_target, workflow_dispatch] | |
jobs: | |
check: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
item: | |
- {name: code_qualify} | |
- {name: global_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); | |
- name: Run script to generate a Markdown list of changed files | |
id: file_list | |
shell: bash | |
run: | | |
set -ex | |
# config | |
threshold_nitem=100 # コメントの変更記事一覧内の最大ファイル数 | |
threshold_details=20 # <details> を使って折りたたむ閾値 | |
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 | |
' | awk 'NR <= '"$threshold_nitem"' {print} END {print "nitem=" NR}' | |
) | |
nitem=$(sed -n 's/^nitem=//p' <<< "$content") | |
content=$(grep -v '^nitem=' <<< "$content" || echo '- (内容変更された `.md` ファイルはありません)') | |
if ((nitem > threshold_nitem)); then | |
content_prologue=$nitem'件の記事が変更されました。多いため一部を表示しています。完全なリストについては[こちら](${{ steps.vars.outputs.base_url }}/PREVIEW.html)をご参照ください。 | |
<details><summary>(ファイル一覧)</summary> | |
' | |
content_epilogue=' | |
- … (以下省略) | |
</details>' | |
elif ((nitem > threshold_details)); then | |
content_prologue=$nitem'件の記事が変更されました。 | |
<details><summary>(ファイル一覧)</summary> | |
' | |
content_epilogue=' | |
</details>' | |
else | |
content_prologue=$nitem'件の記事が変更されました。 | |
' | |
content_epilogue= | |
fi | |
echo 'content<<EOF' >> "$GITHUB_OUTPUT" | |
echo "$content_prologue$content$content_epilogue" >> "$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 }} |