Update 01_zentai.tex #31
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: 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 }} |