Skip to content

Commit 5b9d9ca

Browse files
feat: 指定更新网站地图的方式 (直接提交/拉取请求)
1 parent 0f1fcf8 commit 5b9d9ca

File tree

2 files changed

+150
-83
lines changed

2 files changed

+150
-83
lines changed

README.md

+30-8
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,30 @@
77
[![GitHub Release](https://img.shields.io/github/release/DuckDuckStudio/Sitemap_Creator?style=flat)](https://github.com/DuckDuckStudio/Sitemap_Creator/releases/latest)
88
[反馈Bug🐛](https://github.com/DuckDuckStudio/Sitemap_Creator/issues) | [使用示例🚀](#4-使用示例)
99

10-
## 参数
10+
## 为什么选择 Sitemap Creator 🏆
11+
| | Sitemap | Creator | |
12+
|-----|-----|----|----|
13+
| 无需本地操作 || 稳定更新 ||
14+
| 完全免费 || 修改时区 ||
15+
| 指定更新/创建方式 || 不遗漏页面 ||
16+
| 忽略页面 || 指定网站地图存放位置 ||
17+
| 指定页面文件类型 || 中文文档+输出 ||
18+
| 更多 | 优点 | ... ||
19+
20+
## 可用参数
1121
| 参数 | 描述 | 默认值 | 是否必须 | 备注 |
1222
|-----|-----|-----|-----|-----|
1323
| `location` | 网站地图的存放位置 (例如 `docs/sitemap.xml`) | `./sitemap.xml` (即仓库根目录) || / |
1424
| `token` | 用于创建更新网站地图的拉取请求的 Token | `${{ github.token }}` || 您的 Token 至少应该具有 `repo` 权限来创建拉取请求,如果使用默认的 Action Token 则需要在仓库设置中允许 GitHub Action 创建拉取请求<sup>[1](#1-如何允许-github-action-创建拉取请求--推送修改)</sup> |
1525
| `timezone` | 设置生成时使用的时区 | `Asia/Shanghai` (上海,UTF+8,CST) || 遵循 IANA时区数据库(也称为Olson时区数据库)的格式 |
1626
| `basic_link` | 指向你网站的基础链接 | `https://${{ github.event.repository.owner.login }}.github.io/${{ github.event.repository.name }}` || 结尾不要带 `/` |
17-
| `file_type` | 网页文件的类型 (例如使用 docsify 部署的就是 md,不指定则设为 html,可指定多个类型) | `html,md` || 不带`.``md`类型会自动去掉后缀名 |
27+
| `file_type` | 网页文件的类型 (例如使用 docsify 部署的就是 md,可指定多个类型) | `html,md` || 不带`.``md`类型会自动去掉后缀名 |
1828
| `ignore_file` | 指定哪些文件不包含在网站地图中 | `啥都没有` || `,`间隔 |
1929
| `website_path` | 你的网站内容的位置 (例如 `./` (根目录) 或 `docs`) | `./` (根目录) | **** | / |
2030
| `base_branch` | 仓库主分支 (`main``master` 等) | `main` || / |
2131
| `labels` | 创建拉取请求时添加的标签 | / || 会自动移除`'``"`、<code>\`</code>,可以设置`debug: true`来查看运行情况,标签间用`,`分隔 |
2232
| `auto_merge` | 启用自动合并的方式 (不指定则不启用自动合并) | / || [可用的自动合并方式](#3-可用的自动合并方式)[什么是自动合并](https://docs.github.com/zh/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/automatically-merging-a-pull-request) |
33+
| `update` | 指定更新网站地图的方式 (直接提交或拉取请求) | `拉取请求` || [可用的参数值](#4-可用的修改网站地图的方式) |
2334
| `debug` | 控制调试输出的开关 | `false` || 你用`true`还是`1`随便,js里真值<sup>[2](#2-java-script-中有哪些可用真值)</sup>的都行 |
2435

2536
## 帮助
@@ -32,7 +43,7 @@
3243
请见[真值 - MDN Web 文档术语表:Web 相关术语的定义 | MDN](https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy)
3344

3445
### 3. 可用的自动合并方式
35-
处理时会自动去除`'``"`、<code>\`</code>、`-`
46+
处理时会自动去除`'``"`、<code>\`</code>、`-`
3647
| 接收的输入 (去除特殊字符后) | 自动合并方式 |
3748
|-----|-----|
3849
| `s``squash``压缩``压缩合并``压缩自动合并` | [压缩合并](https://docs.github.com/zh/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/about-pull-request-merges#squash-and-merge-your-commits) |
@@ -41,11 +52,18 @@
4152
| 空字符串 | 不启用自动合并 |
4253
| 其他任意值 | 视作错误返回 `1` |
4354

44-
### 4. 使用示例
55+
### 4. 可用的修改网站地图的方式
56+
处理时会自动去除`'``"`、<code>\`</code>、`-`` `
57+
| 接收的输入 (去除特殊字符后) | 修改方式 |
58+
|-----|-----|
59+
| `pr``pullrequest``pullrequests``prs``拉取请求` | 创建拉取请求 (默认) |
60+
| `commit``提交``直接提交``directcommit``commitdirectly` | 直接提交到主分支 |
61+
62+
### 5. 使用示例
4563
```yml
4664
name: 生成 Sitemap
4765

48-
# GitHub Actiion DuckDuckStudio/Sitemap_Creator 版本 1.0.1 示例工作流
66+
# GitHub Actiion DuckDuckStudio/Sitemap_Creator 版本 1.0.2 示例工作流
4967
# https://github.com/marketplace/actions/sitemap-creator-stable
5068
# Under the [GNU Affero General Public License v3.0](https://github.com/DuckDuckStudio/Sitemap_Creator/blob/main/LICENSE)
5169

@@ -65,17 +83,21 @@ jobs:
6583

6684
steps:
6785
- name: 更新网站地图
68-
uses: DuckDuckStudio/[email protected].1
86+
uses: DuckDuckStudio/[email protected].2
6987
with:
7088
location: "docs/sitemap.xml"
7189
basic_link: "https://duckduckstudio.github.io/Articles/#" # docsify 部署的
72-
file_type: "html,md" # 默认值也是这个,爱加不加
7390
ignore_file: "_Footer.md,404.html,某鸭的文章页面模板.html,营销号"
7491
website_path: "docs"
75-
base_branch: "main" # 默认值也是这个,爱加不加
7692
labels: "DEV-已启用自动合并,工作流,DEV-开发分支合并"
7793
auto_merge: "压缩合并"
7894
debug: true # 启用调试输出
95+
# 其他参数默认
96+
# base_branch: "main"
97+
# file_type: "html,md"
98+
# token: ${{ github.token }}
99+
# timezone: "Asia/Shanghai"
100+
# update: "拉取请求"
79101
```
80102

81103
## 星星🌟

action.yml

+120-75
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ inputs:
2727

2828
file_type:
2929
required: false
30-
description: 网页文件的类型 (例如使用 docsify 部署的就是 md,不指定则设为 html,可指定多个类型)
30+
description: 网页文件的类型 (例如使用 docsify 部署的就是 md,可指定多个类型)
3131
default: "html,md"
3232

3333
ignore_file:
@@ -58,6 +58,11 @@ inputs:
5858
required: false
5959
description: 设置启用自动合并的类型 (不指定则不启用自动合并,可以使用 merge、rebase、squash)
6060

61+
update:
62+
required: false
63+
description: 指定更新网站地图的方式 (直接提交或拉取请求)
64+
default: 拉取请求
65+
6166
runs:
6267
using: composite
6368
steps:
@@ -102,57 +107,97 @@ runs:
102107
DEBUG: ${{ inputs.debug }}
103108
AUTO_MERGE: ${{ inputs.auto_merge }}
104109
LOCATION: ${{ inputs.location }}
110+
UPDATE: ${{ inputs.update }}
105111
run: |
106-
# 参数处理
112+
# 后面都要用的
107113
# 获取当前日期和时间
108114
DATE_TIME=$(date '+%Y/%m/%d %H:%M')
109115
110-
# 移除标签参数中的特殊字符
111-
CLEAN_LABELS=$(echo "$LABELS" | sed "s/[\"\'\`]*//g") # 移除 " ' ` 字符
112-
if [[ ("$LABELS" != "$CLEAN_LABELS") && ("$DEBUG") ]]; then
113-
echo "[DEBUG] 标签包含特殊字符,已移除: $LABELS -> $CLEAN_LABELS"
114-
fi
115-
116-
# 如果 AUTO_MERGE 为空字符串,则不做任何操作
117-
if [[ -z "$AUTO_MERGE" ]]; then
118-
if [[ "$DEBUG" ]]; then
119-
echo "[DEBUG] 不启用自动合并,因为自动合并方式为空"
120-
fi
121-
CLEAN_AUTO_MERGE=""
122-
else
123-
# 格式化自动合并方式
124-
CLEAN_AUTO_MERGE=$(echo "$AUTO_MERGE" | tr '[:upper:]' '[:lower:]' | sed "s/[\"\'\`-]//g") # 转为小写并移除 " ' ` -
125-
126-
# 根据输入值设置对应的自动合并方式
127-
case "$CLEAN_AUTO_MERGE" in
128-
"s"|"squash"|"压缩"|"压缩合并"|"压缩自动合并")
129-
CLEAN_AUTO_MERGE="squash"
130-
;;
131-
"m"|"merge"|"合并"|"合并提交"|"提交")
132-
CLEAN_AUTO_MERGE="merge"
133-
;;
134-
"r"|"rebase"|"变基"|"变基合并"|"变基自动合并")
135-
CLEAN_AUTO_MERGE="rebase"
136-
;;
137-
*)
138-
echo "[ERROR] 未知的自动合并方式: $AUTO_MERGE"
139-
echo "[TIP] 可用的自动合并方式: 压缩、合并、变基"
140-
exit 1
141-
;;
142-
esac
143-
fi
144-
145-
# 如果自动合并方式进行了格式化,输出调试信息
146-
if [[ ("$AUTO_MERGE" != "$CLEAN_AUTO_MERGE") && ("$DEBUG") ]]; then
147-
echo "[DEBUG] 已格式化自动合并方式: $AUTO_MERGE -> $CLEAN_AUTO_MERGE"
148-
fi
149-
150-
# ================
151-
152-
# 生成分支名
153-
BRANCH_NAME="sitemap-update-$(date +%Y%m%d%H%M%S)"
154-
git checkout -b $BRANCH_NAME
155-
echo "[INFO] 已创建新分支: $BRANCH_NAME"
116+
# 参数处理
117+
# 格式化更新方式 - 默认 PR
118+
UPDATE_WAY=$(echo "$UPDATE" | tr '[:upper:]' '[:lower:]' | sed "s/[\"\'\`-]//g; s/[[:space:]]//g")
119+
# 根据输入值设置对应的更新方式
120+
case "$UPDATE_WAY" in
121+
"pr"|"pullrequest"|"pullrequests"|"prs"|"拉取请求")
122+
UPDATE_WAY="PR"
123+
if [[ "$DEBUG" ]]; then
124+
echo "[DEBUG] 更新方式: 创建拉取请求"
125+
fi
126+
127+
# 如果 AUTO_MERGE 为空字符串,则不做任何操作
128+
if [[ -z "$AUTO_MERGE" ]]; then
129+
if [[ "$DEBUG" ]]; then
130+
echo "[DEBUG] 不启用自动合并,因为自动合并方式为空"
131+
fi
132+
CLEAN_AUTO_MERGE=""
133+
else
134+
# 格式化自动合并方式
135+
CLEAN_AUTO_MERGE=$(echo "$AUTO_MERGE" | tr '[:upper:]' '[:lower:]' | sed "s/[\"\'\`-]//g")
136+
137+
# 根据输入值设置对应的自动合并方式
138+
case "$CLEAN_AUTO_MERGE" in
139+
"s"|"squash"|"压缩"|"压缩合并"|"压缩自动合并")
140+
CLEAN_AUTO_MERGE="squash"
141+
;;
142+
"m"|"merge"|"合并"|"合并提交"|"提交")
143+
CLEAN_AUTO_MERGE="merge"
144+
;;
145+
"r"|"rebase"|"变基"|"变基合并"|"变基自动合并")
146+
CLEAN_AUTO_MERGE="rebase"
147+
;;
148+
*)
149+
echo "[ERROR] 未知的自动合并方式: $AUTO_MERGE"
150+
echo "[TIP] 可用的自动合并方式: 压缩、合并、变基"
151+
exit 1
152+
;;
153+
esac
154+
fi
155+
156+
# 如果自动合并方式进行了格式化,输出调试信息
157+
if [[ ("$AUTO_MERGE" != "$CLEAN_AUTO_MERGE") && ("$DEBUG") ]]; then
158+
echo "[DEBUG] 已格式化自动合并方式: $AUTO_MERGE -> $CLEAN_AUTO_MERGE"
159+
fi
160+
161+
# 移除标签参数中的特殊字符
162+
CLEAN_LABELS=$(echo "$LABELS" | sed "s/[\"\'\`]*//g") # 移除 " ' ` 字符
163+
if [[ ("$LABELS" != "$CLEAN_LABELS") && ("$DEBUG") ]]; then
164+
echo "[DEBUG] 标签包含特殊字符,已移除: $LABELS -> $CLEAN_LABELS"
165+
fi
166+
167+
# 签出分支
168+
BRANCH_NAME="sitemap-update-$(date +%Y%m%d%H%M%S)"
169+
git checkout -b $BRANCH_NAME
170+
echo "[INFO] 已创建新分支: $BRANCH_NAME"
171+
172+
# 生成工作流 URL
173+
WORKFLOW_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
174+
;;
175+
"commit"|"提交"|"直接提交"|"directcommit"|"commitdirectly")
176+
UPDATE_WAY="Commit"
177+
if [[ "$DEBUG" ]]; then
178+
echo "[DEBUG] 更新方式: 直接提交到主分支"
179+
fi
180+
# 不得同时使用的参数
181+
params=("LABELS" "AUTO_MERGE")
182+
183+
# 遍历参数名称数组,检查冲突
184+
for param_name in "${params[@]}"; do
185+
param_value="${!param_name}"
186+
if [[ -n "$param_value" ]]; then
187+
echo "[ERROR] 错误的参数传递"
188+
echo "[TIP] $param_name 参数不得与更新方式“提交”共存"
189+
exit 1
190+
fi
191+
done
192+
;;
193+
*)
194+
echo "[ERROR] 未知的更新方式: $AUTO_MERGE"
195+
echo "[TIP] 可用的更新方式: 提交、拉取请求"
196+
exit 1
197+
;;
198+
esac
199+
200+
# 前面做完都要做的
156201
157202
# 配置 Git 用户
158203
git config user.name "github-actions[bot]"
@@ -161,32 +206,32 @@ runs:
161206
# 提交并推送 sitemap.xml
162207
git add "$LOCATION"
163208
git commit -m "[${DATE_TIME}] 自动更新网站地图"
164-
git push --set-upstream origin $BRANCH_NAME
165-
166-
# 生成工作流 URL
167-
WORKFLOW_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
168-
169-
# 创建拉取请求
170-
PR_URL=$(gh pr create --title "[${DATE_TIME}] 自动更新网站地图" \
171-
--body "此拉取请求通过 [工作流](${WORKFLOW_URL}) 使用 [Sitemap Creator](https://github.com/DuckDuckStudio/Sitemap_Creator) 创建。" \
172-
--base ${{ inputs.base_branch }} \
173-
--head $BRANCH_NAME)
174-
175-
echo "[INFO] 已创建拉取请求: $PR_URL"
176-
177-
# 判断是否有清理后的标签并添加到 PR
178-
if [[ -n "$CLEAN_LABELS" ]]; then
179-
gh pr edit "$PR_URL" --add-label "$CLEAN_LABELS"
180-
echo "[INFO] 已为创建的拉取请求添加标签: $CLEAN_LABELS"
181-
elif [[ "$DEBUG" ]]; then
182-
echo "[DEBUG] 没有有效标签,跳过添加标签"
183-
fi
209+
git config --global push.autoSetupRemote true
210+
git push
211+
212+
# 拉取请求更新后续还要做的
213+
if [[ "$UPDATE_WAY" == "PR" ]]; then
214+
# 创建拉取请求
215+
PR_URL=$(gh pr create --title "[${DATE_TIME}] 自动更新网站地图" \
216+
--body "此拉取请求通过 [工作流](${WORKFLOW_URL}) 使用 [Sitemap Creator](https://github.com/DuckDuckStudio/Sitemap_Creator) 创建。" \
217+
--base ${{ inputs.base_branch }} \
218+
--head $BRANCH_NAME)
219+
echo "[INFO] 已创建拉取请求: $PR_URL"
220+
221+
# 判断是否有清理后的标签并添加到 PR
222+
if [[ -n "$CLEAN_LABELS" ]]; then
223+
gh pr edit "$PR_URL" --add-label "$CLEAN_LABELS"
224+
echo "[INFO] 已为创建的拉取请求添加标签: $CLEAN_LABELS"
225+
elif [[ "$DEBUG" ]]; then
226+
echo "[DEBUG] 没有有效标签,跳过添加标签"
227+
fi
184228
185-
# 判断是否启用自动合并
186-
# 如果 CLEAN_AUTO_MERGE 有值(即设置了自动合并方式),进行后续处理
187-
if [[ -n "$CLEAN_AUTO_MERGE" ]]; then
188-
gh pr merge "$PR_URL" --$CLEAN_AUTO_MERGE --auto
189-
echo "[INFO] 已为拉取请求启用 $CLEAN_AUTO_MERGE 合并"
190-
elif [[ "$DEBUG" ]]; then
191-
echo "[DEBUG] 没有有效自动合并方式,跳过启用自动合并"
229+
# 判断是否启用自动合并
230+
# 如果 CLEAN_AUTO_MERGE 有值(即设置了自动合并方式),进行后续处理
231+
if [[ -n "$CLEAN_AUTO_MERGE" ]]; then
232+
gh pr merge "$PR_URL" --$CLEAN_AUTO_MERGE --auto
233+
echo "[INFO] 已为拉取请求启用 $CLEAN_AUTO_MERGE 合并"
234+
elif [[ "$DEBUG" ]]; then
235+
echo "[DEBUG] 没有有效自动合并方式,跳过启用自动合并"
236+
fi
192237
fi

0 commit comments

Comments
 (0)