update 吹学拾遗:系鞋带——跨越百余年的百合圣遗物? #107
This file contains 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
# 核心功能:将"../images/"替换为"https://hibikilogy.github.io/images/" | |
name: Update Image Paths in Markdown Files | |
on: | |
push: | |
branches: | |
- master | |
paths: | |
- '_posts/**/*.md' # 仅当 _posts/ 文件夹下的 .md 文件被更改或添加时触发 action | |
pull_request: | |
branches: | |
- master | |
paths: | |
- '_posts/**/*.md' | |
jobs: | |
update-md-files: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Get list of changed files(ALL) | |
id: get-changed-files-all | |
run: | | |
BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) | |
echo "Current branch: $BRANCH_NAME" | |
git config --global core.quotepath false # 汉字编码 | |
CHANGED_FILES=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }}| tr -d '"' | grep '_posts/.*\.md' || true) | |
echo "Changed .md files: $CHANGED_FILES" | |
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) | |
echo "changed_files<<$EOF" >> $GITHUB_OUTPUT | |
echo "$CHANGED_FILES" >> $GITHUB_OUTPUT | |
echo "$EOF" >> $GITHUB_OUTPUT | |
# - name: Get list of changed files(ONLY path2url tagged) | |
# id: get-changed-files-path2url | |
# run: | | |
# # 获取当前 push 中所有 commit 的列表 | |
# COMMITS=$(git log --pretty=format:"%H" --no-merges HEAD@{1}..HEAD) | |
# echo "Commits: $COMMITS" | |
# # 获取所有包含 _path2url 关键字的 commit | |
# MATCHING_COMMITS="" | |
# for COMMIT in $COMMITS; do | |
# MESSAGE=$(git log -1 --pretty=format:"%B" $COMMIT) | |
# if [[ "$MESSAGE" == *"_path2url"* ]]; then | |
# MATCHING_COMMITS="$MATCHING_COMMITS $COMMIT" | |
# fi | |
# done | |
# echo "Matching commits: $MATCHING_COMMITS" | |
# # 获取所有更改或添加的 _post/ 文件夹下的 .md 文件 | |
# FILES="" | |
# for COMMIT in $MATCHING_COMMITS; do | |
# CHANGED_FILES=$(git diff-tree --no-commit-id --name-only -r $COMMIT) | |
# for FILE in $CHANGED_FILES; do | |
# if [[ "$FILE" == _post/*.md ]]; then | |
# FILES="$FILES $FILE" | |
# fi | |
# done | |
# done | |
# # 去重 | |
# UNIQUE_FILES=$(echo $FILES | tr ' ' '\n' | sort -u | tr '\n' ' ') | |
# echo "Changed .md files: $UNIQUE_FILES" | |
# echo "changed_files=$UNIQUE_FILES">> $GITHUB_OUTPUT | |
- name: Replace path in files | |
run: | | |
CHANGED_FILES="${{ steps.get-changed-files-all.outputs.changed_files }}" | |
for FILE in $CHANGED_FILES; do | |
if [ -f "$FILE" ]; then | |
sed -i 's|\.\./images/|https://hibikilogy.github.io/images/|g' "$FILE" # or {{site.url}} | |
fi | |
done | |
# 检查是否有改动 | |
if [ -n "$(git status --porcelain)" ]; then | |
echo "has_changes=true" >> $GITHUB_ENV | |
else | |
echo "No file replaced" | |
echo "has_changes=false" >> $GITHUB_ENV | |
fi | |
- name: Commit and push changes | |
if: env.has_changes == 'true' | |
run: | | |
CHANGED_FILES="${{ steps.get-changed-files-all.outputs.changed_files }}" | |
git config --global user.name 'github-actions[bot]' | |
git config --global user.email 'github-actions[bot]@users.noreply.github.com' | |
git add $CHANGED_FILES | |
git commit -m "Automated update of image paths in .md files under _post/" | |
git push | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |