Skip to content

Update 01_zentai.tex #31

Update 01_zentai.tex

Update 01_zentai.tex #31

name: manji-CheckYear
on:
pull_request:
types: [opened, synchronize]
paths: '**.tex'
jobs:
check_year:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Extracting modified .tex files
id: changed-files
run: |
FILES=$(git diff ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }} --diff-filter=AM --name-only -- '*.tex')
echo "対象ファイル: $FILES"
echo "::set-output name=files::$FILES"
- name: Year check
id: year-check
shell: bash
run: |
REPO_FULL="${{ github.repository }}"
REPO_NAME="${REPO_FULL#*/}"
echo "リポジトリ名: $REPO_NAME"
if [[ "$REPO_NAME" =~ ^soukai-([0-9]{4})-([12])$ ]]; then
YEAR="${BASH_REMATCH[1]}"
BATCH="${BASH_REMATCH[2]}"
echo "抽出された年: $YEAR, バッチ: $BATCH"
else
echo "リポジトリ名が予期した形式に一致しません。例: soukai-<year>-<1 or 2>"
echo "message=リポジトリ名の形式が正しくありません: $REPO_NAME" >> $GITHUB_OUTPUT
echo "failed=false" >> $GITHUB_OUTPUT
exit 0
fi
# バッチ番号が 1 の場合は許容される年は YEAR のみ、2 の場合は YEAR および (YEAR+1)
if [ "$BATCH" -eq 1 ]; then
ALLOWED_YEARS=("$YEAR")
else
NEXT_YEAR=$((YEAR + 1))
ALLOWED_YEARS=("$YEAR" "$NEXT_YEAR")
fi
ALLOWED_LIST=$(IFS=", "; echo "${ALLOWED_YEARS[*]}")
echo "許容される年: $ALLOWED_LIST"
FILES="${{ steps.changed-files.outputs.files }}"
if [ -z "$FILES" ]; then
echo "変更された .tex ファイルはありません。"
echo "message=変更された .tex ファイルはありませんでした。" >> $GITHUB_OUTPUT
echo "failed=false" >> $GITHUB_OUTPUT
exit 0
fi
PROBLEM_FILES=()
for file in $FILES; do
if [ ! -f "$file" ]; then
echo "ファイル $file が存在しません。スキップします。"
continue
fi
echo "チェック中のファイル: $file"
FILE_HAS_ERROR=0
while IFS= read -r line; do
for num in $(echo "$line" | grep -oE '[0-9]{4}'); do
ALLOWED=0
for ay in "${ALLOWED_YEARS[@]}"; do
if [ "$num" = "$ay" ]; then
ALLOWED=1
break
fi
done
if [ $ALLOWED -eq 0 ]; then
FILE_HAS_ERROR=1
break 2
fi
done
done < <(grep -nE '[0-9]{4}' "$file" || true)
if [ $FILE_HAS_ERROR -eq 1 ]; then
PROBLEM_FILES+=("$file")
fi
done
if [ ${#PROBLEM_FILES[@]} -gt 0 ]; then
# ヘッダー部分はファイル数に応じて変える
if [ ${#PROBLEM_FILES[@]} -gt 1 ]; then
REPORT="以下のTexファイルに ${ALLOWED_LIST} 以外の年数がありました.もし使用したい場合は \"n年前\" といった表記にしてください:"
else
REPORT="このTexファイルに ${ALLOWED_LIST} 以外の年数がありました.もし使用したい場合は \"n年前\" といった表記にしてください:"
fi
# 各問題のあるファイル名をバッククオートで囲み改行付きで追加
for f in "${PROBLEM_FILES[@]}"; do
REPORT+=$'\n- \`'"$f"'\`'
done
echo -e "$REPORT"
echo "message<<EOF" >> $GITHUB_OUTPUT
echo "$REPORT" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
echo "failed=true" >> $GITHUB_OUTPUT
else
echo "全ての年チェックにPassed!"
echo "message=全ての年チェックにPassed!" >> $GITHUB_OUTPUT
echo "failed=false" >> $GITHUB_OUTPUT
fi
- name: Comment to PR (Year Check)
uses: marocchino/sticky-pull-request-comment@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
header: "[Year Check]"
message: ${{ steps.year-check.outputs.message }}