diff --git a/scripts/release.sh b/scripts/release.sh index 936f278..fcc9be8 100644 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -6,6 +6,7 @@ cd "$ROOT_DIR" ABOUT_FILE="$ROOT_DIR/iti/__about__.py" COPIER_FILE="$ROOT_DIR/copier.yml" +COPIER_TEMPLATE_FILE="$ROOT_DIR/copier-template/pyproject.toml.jinja" README_FILE="$ROOT_DIR/README.md" die() { @@ -83,22 +84,20 @@ read_current_version() { printf '%s\n' "$current_version" } -replace_first_exact_line() { +replace_first_line_with_prefix() { file=$1 - old_line=$2 + prefix=$2 new_line=$3 tmp_file=$(mktemp) - if awk -v old="$old_line" -v new="$new_line" ' + if awk -v prefix="$prefix" -v new="$new_line" ' BEGIN { done = 0 } - { - if (!done && $0 == old) { - print new - done = 1 - } else { - print - } + index($0, prefix) == 1 && !done { + print new + done = 1 + next } + { print } END { if (!done) exit 1 } ' "$file" >"$tmp_file"; then mv "$tmp_file" "$file" @@ -108,42 +107,61 @@ replace_first_exact_line() { fi } -write_about_version() { - current_version=$1 - target_version=$2 - replace_first_exact_line "$ABOUT_FILE" "__version__ = \"$current_version\"" "__version__ = \"$target_version\"" -} - -write_copier_tag() { - current_version=$1 - target_version=$2 +replace_first_line_in_section_with_prefix() { + file=$1 + section_header=$2 + prefix=$3 + new_line=$4 tmp_file=$(mktemp) - if awk -v current="$current_version" -v target="$target_version" ' - BEGIN { in_framework = 0; done = 0 } - /^framework_tag:[[:space:]]*$/ { in_framework = 1; print; next } - in_framework && /^[^[:space:]]/ { in_framework = 0 } - in_framework && !done && $0 == " default: v" current { - print " default: v" target + if awk -v section="$section_header" -v prefix="$prefix" -v new="$new_line" ' + BEGIN { in_section = 0; done = 0 } + $0 == section { in_section = 1; print; next } + in_section && /^[^[:space:]]/ { in_section = 0 } + in_section && !done && index($0, prefix) == 1 { + print new done = 1 next } { print } END { if (!done) exit 1 } - ' "$COPIER_FILE" >"$tmp_file"; then - mv "$tmp_file" "$COPIER_FILE" + ' "$file" >"$tmp_file"; then + mv "$tmp_file" "$file" else rm -f "$tmp_file" - die "framework_tag default not updated in $COPIER_FILE" + die "line not updated in $file" fi } -write_readme_tag() { - current_version=$1 - target_version=$2 - old_line=' "iti-flask @ git+https://git.noahlan.cn/iti-framework/iTi-Flask.git@v'"$current_version"'",' - new_line=' "iti-flask @ git+https://git.noahlan.cn/iti-framework/iTi-Flask.git@v'"$target_version"'",' - replace_first_exact_line "$README_FILE" "$old_line" "$new_line" +write_about_version() { + target_version=$1 + replace_first_line_with_prefix "$ABOUT_FILE" "__version__ = " "__version__ = \"$target_version\"" +} + +write_copier_framework_tag() { + target_version=$1 + replace_first_line_in_section_with_prefix "$COPIER_FILE" "framework_tag:" " default: v" " default: v$target_version" +} + +write_copier_system_tag() { + target_version=$1 + replace_first_line_in_section_with_prefix "$COPIER_FILE" "system_tag:" " default: v" " default: v$target_version" +} + +write_copier_template_version() { + target_version=$1 + replace_first_line_with_prefix "$COPIER_TEMPLATE_FILE" "version = " "version = \"$target_version\"" +} + +write_readme_dependency_tag() { + target_version=$1 + replace_first_line_with_prefix "$README_FILE" ' "iti-flask @ git+https://git.noahlan.cn/iti-framework/iTi-Flask.git@v' ' "iti-flask @ git+https://git.noahlan.cn/iti-framework/iTi-Flask.git@v'"$target_version"'",' +} + +write_readme_release_examples() { + target_version=$1 + replace_first_line_with_prefix "$README_FILE" './iti.sh release v' "./iti.sh release v$target_version" + replace_first_line_with_prefix "$README_FILE" 'iti.cmd release v' "iti.cmd release v$target_version" } ensure_clean_tree() { @@ -190,11 +208,14 @@ main() { ensure_tag_absent "$target_tag" uv run pytest -q - write_about_version "$current_version" "$target_version" - write_copier_tag "$current_version" "$target_version" - write_readme_tag "$current_version" "$target_version" + write_about_version "$target_version" + write_copier_framework_tag "$target_version" + write_copier_system_tag "$target_version" + write_copier_template_version "$target_version" + write_readme_dependency_tag "$target_version" + write_readme_release_examples "$target_version" - git add iti/__about__.py copier.yml README.md + git add iti/__about__.py copier.yml copier-template/pyproject.toml.jinja README.md git commit -m "chore: release $target_tag" git tag -a "$target_tag" -m "release $target_tag" git push origin "$branch" "$target_tag"