@@ -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+
6166runs :
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