This is an automated email from the ASF dual-hosted git repository. liuhongyu pushed a commit to branch release/release_note_2.7.1 in repository https://gitbox.apache.org/repos/asf/shenyu.git
The following commit(s) were added to refs/heads/release/release_note_2.7.1 by this push: new 04c0c071f9 [type:release] revert changelog.sh 04c0c071f9 is described below commit 04c0c071f93289f2b759f444e8a3654416daf6a5 Author: liuhy <liuhon...@apache.org> AuthorDate: Tue Dec 24 10:06:33 2024 +0800 [type:release] revert changelog.sh --- changelog.sh | 207 ----------------------------------------------------------- 1 file changed, 207 deletions(-) diff --git a/changelog.sh b/changelog.sh deleted file mode 100644 index 2e78d5c09f..0000000000 --- a/changelog.sh +++ /dev/null @@ -1,207 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# 配置 -FROM_TAG="" -TO_TAG="HEAD" -OUTPUT_FILE="CHANGELOG.md" -IGNORE_TYPES=("sync frontend" "merge") # 使用数组更清晰地管理忽略类型 -DATE_FORMAT="%Y-%m-%d" - -# 函数:处理错误并退出 -handle_error() { - echo "Error: $1" >&2 - exit 1 -} - -# 检查 git 是否安装 -command -v git >/dev/null 2>&1 || handle_error "git is not installed." - -# 生成类型标题 -generate_type_header() { - local type="$1" - case "$type" in - feat) echo "### ✨ New Features";; - fix) echo "### Bug Fixes";; # 修改标题为更常见的 "Bug Fixes" - improve) echo "### ⚡ Improvements";; - chore) echo "### Chore";; - refactor) echo "### ♻️ Refactor";; - docs) echo "### Documentation";; - style) echo "### Styles";; - perf) echo "### ⚡ Performance";; - test) echo "### ✅ Tests";; - build) echo "### Build";; - ci) echo "### CI";; - issue) echo "### Issues";; - task) echo "### Tasks";; - other) echo "### Other Changes";; - *) echo "### ❓ Unknown Type: $type";; - esac -} - -# 初始化变更日志 -initialize_changelog() { - local from="$1" - local to="$2" - local date=$(date +"$DATE_FORMAT") - - echo "# Changelog" > "$OUTPUT_FILE" - echo "" >> "$OUTPUT_FILE" - echo "## [$to] - $date" >> "$OUTPUT_FILE" - echo "" >> "$OUTPUT_FILE" -} - -# 规范化类型 -normalize_type() { - local type="$1" - type=$(echo "$type" | tr '[:upper:]' '[:lower:]') - case "$type" in - feature|feat) echo "feat";; - bugfix|fix) echo "fix";; # 将 bugfix 映射到 fix - improve|improvement) echo "improve";; - *) echo "$type";; - esac -} - -# 是否应该忽略类型 -should_ignore_type() { - local message="$1" - - # 精确匹配忽略的提交信息 - for ignore_message in "${IGNORE_TYPES[@]}"; do - if [[ "$message" == "$ignore_message" ]]; then - return 0 - fi - done - - # 忽略以 "Bump" 开头的提交(不区分大小写) - if echo "$message" | grep -qi "^bump"; then - return 0 - fi - return 1 -} - -# 提取类型 -extract_type() { - local message="$1" - local lower_message=$(echo "$message" | tr '[:upper:]' '[:lower:]') - local type=$(echo "$lower_message" | grep -oE '^\[type:([a-zA-Z]+)\]|^type:([a-zA-Z]+)|^\[([a-zA-Z]+)\]|^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert|feature|bugfix|improve|task|issue):?' | sed -E 's/^\[type://; s/\]//g; s/^type://; s/^\[//; s/\]//; s/://') - if [ -z "$type" ]; then - echo "other" - else - normalize_type "$type" - fi -} - -# 清理提交信息 -clean_commit_message() { - local message="$1" - echo "$message" | sed -E 's/^\[type:[a-zA-Z]+\]//; s/^type:[a-zA-Z]+//; s/^\[[a-zA-Z]+\]//; s/^[a-zA-Z]+://; s/^ *//' -} - -# 生成变更日志 -generate_changelog() { - local from="$1" - local to="$2" - local tmp_file - - initialize_changelog "$from" "$to" - - git log "$from..$to" --pretty=format:'%s|%h|%an' | while IFS='|' read -r message hash author; do - type=$(extract_type "$message") - - if should_ignore_type "$message"; then # 传递完整的message给should_ignore_type - continue - fi - - clean_message=$(clean_commit_message "$message") - - tmp_file=$(mktemp) || handle_error "Failed to create temporary file." - echo "- ${clean_message} (${hash}) by ${author}" > "$tmp_file" - - if [ ! -f "tmp_${type}.txt" ]; then - mv "$tmp_file" "tmp_${type}.txt" - else - cat "$tmp_file" >> "tmp_${type}.txt" - rm "$tmp_file" - fi - done - - # 合并所有类型的变更 - for type in feat fix improve chore refactor docs style perf test build ci issue task other; do - if [ -f "tmp_${type}.txt" ]; then - generate_type_header "$type" >> "$OUTPUT_FILE" - echo "" >> "$OUTPUT_FILE" - cat "tmp_${type}.txt" >> "$OUTPUT_FILE" - echo "" >> "$OUTPUT_FILE" - rm "tmp_${type}.txt" - fi - done -} - -# 从最近的标签生成 -generate_from_latest_tag() { - local latest_tag - latest_tag=$(git describe --tags --abbrev=0 2>/dev/null) - - if [ -z "$latest_tag" ]; then - echo "No tags found. Generating changelog for all commits." - generate_changelog "" "$TO_TAG" - else - generate_changelog "$latest_tag" "$TO_TAG" - fi -} - -# 使用方法 -usage() { - echo "Usage: $0 [-f from_tag] [-t to_tag] [-o output_file]" - echo " -f: Starting tag (default: latest tag)" - echo " -t: Ending tag (default: HEAD)" - echo " -o: Output file (default: $OUTPUT_FILE)" - exit 1 -} - -# 解析命令行参数 -while getopts "f:t:o:h" opt; do - case "$opt" in - f) FROM_TAG="$OPTARG";; - t) TO_TAG="$OPTARG";; - o) OUTPUT_FILE="$OPTARG";; - h) usage;; - \?) usage;; - esac -done - -# 验证标签是否存在 -if [ ! -z "$FROM_TAG" ] && ! git rev-parse --verify "$FROM_TAG" > /dev/null 2>&1 ; then - handle_error "Invalid from tag: $FROM_TAG" -fi - -if [ ! -z "$TO_TAG" ] && ! git rev-parse --verify "$TO_TAG" > /dev/null 2>&1 ; then - handle_error "Invalid to tag: $TO_TAG" -fi - -# 执行生成 -if [ -z "$FROM_TAG" ]; then - generate_from_latest_tag -else - generate_changelog "$FROM_TAG" "$TO_TAG" -fi - -echo "Changelog has been generated in $OUTPUT_FILE" \ No newline at end of file