From 6f4e530b8d35d73487be88a0ac47610fb4b3cadc Mon Sep 17 00:00:00 2001 From: Miyamura80 Date: Sun, 15 Mar 2026 20:07:14 +0000 Subject: [PATCH 1/4] =?UTF-8?q?=F0=9F=90=9B=20fix=20make=20init=20to=20sup?= =?UTF-8?q?port=20re-initialization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The init target used hardcoded default strings so it silently failed when run on an already-renamed project. Now reads current name and description from pyproject.toml dynamically. Co-Authored-By: Claude Opus 4.6 (1M context) --- Makefile | 12 +++++++----- common/global_config.py | 6 +++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 1340ee9..556ce26 100644 --- a/Makefile +++ b/Makefile @@ -43,11 +43,13 @@ init: ## Initialize project (usage: make init name=my-project description="my de echo "Usage: make init name= description="; \ exit 1; \ fi - @echo "$(YELLOW)🚀 Initializing project $(name)...$(RESET)" - @sed -i.bak "s/name = \"python-template\"/name = \"$(name)\"/" pyproject.toml && rm pyproject.toml.bak - @sed -i.bak "s/description = \"Add your description here\"/description = \"$(description)\"/" pyproject.toml && rm pyproject.toml.bak - @sed -i.bak "s/# Python-Template/# $(name)/" README.md && rm README.md.bak - @sed -i.bak "s/Opinionated Python project stack. 🔋 Batteries included. <\/b>/$(description)<\/b>/" README.md && rm README.md.bak + @CURRENT_NAME=$$(sed -n 's/^name = "\(.*\)"/\1/p' pyproject.toml | head -1); \ + CURRENT_DESC=$$(sed -n 's/^description = "\(.*\)"/\1/p' pyproject.toml | head -1); \ + echo "$(YELLOW)🚀 Initializing project $(name)...$(RESET)"; \ + sed -i.bak "s/name = \"$$CURRENT_NAME\"/name = \"$(name)\"/" pyproject.toml && rm pyproject.toml.bak; \ + sed -i.bak "s/description = \"$$CURRENT_DESC\"/description = \"$(description)\"/" pyproject.toml && rm pyproject.toml.bak; \ + sed -i.bak "1s/^# .*/# $(name)/" README.md && rm README.md.bak; \ + sed -i.bak "s|.*|$(description)|" README.md && rm README.md.bak @echo "$(GREEN)✅ Updated project name and description.$(RESET)" banner: check_uv ## Generate project banner image diff --git a/common/global_config.py b/common/global_config.py index f3dedf4..8f8b40b 100644 --- a/common/global_config.py +++ b/common/global_config.py @@ -189,9 +189,9 @@ class Config(BaseSettings): default_factory=lambda: os.getenv("GITHUB_ACTIONS") != "true" ) running_on: str = Field( - default_factory=lambda: "🖥️ local" - if os.getenv("GITHUB_ACTIONS") != "true" - else "☁️ CI" + default_factory=lambda: ( + "🖥️ local" if os.getenv("GITHUB_ACTIONS") != "true" else "☁️ CI" + ) ) @classmethod From 179189d903880b49279253b4c5f269e6757272b0 Mon Sep 17 00:00:00 2001 From: Miyamura80 Date: Sun, 15 Mar 2026 20:11:44 +0000 Subject: [PATCH 2/4] =?UTF-8?q?=F0=9F=90=9B=20escape=20regex=20metacharact?= =?UTF-8?q?ers=20and=20scope=20=20replacement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Address review feedback: - Escape regex special chars in extracted name/description before using them in sed patterns - Restrict tag replacement to first 10 lines of README to avoid clobbering unrelated bold markup Co-Authored-By: Claude Opus 4.6 (1M context) --- Makefile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 556ce26..00fe823 100644 --- a/Makefile +++ b/Makefile @@ -45,11 +45,13 @@ init: ## Initialize project (usage: make init name=my-project description="my de fi @CURRENT_NAME=$$(sed -n 's/^name = "\(.*\)"/\1/p' pyproject.toml | head -1); \ CURRENT_DESC=$$(sed -n 's/^description = "\(.*\)"/\1/p' pyproject.toml | head -1); \ + ESC_NAME=$$(printf '%s\n' "$$CURRENT_NAME" | sed 's/[.[\*^$$\/]/\\&/g'); \ + ESC_DESC=$$(printf '%s\n' "$$CURRENT_DESC" | sed 's/[.[\*^$$\/]/\\&/g'); \ echo "$(YELLOW)🚀 Initializing project $(name)...$(RESET)"; \ - sed -i.bak "s/name = \"$$CURRENT_NAME\"/name = \"$(name)\"/" pyproject.toml && rm pyproject.toml.bak; \ - sed -i.bak "s/description = \"$$CURRENT_DESC\"/description = \"$(description)\"/" pyproject.toml && rm pyproject.toml.bak; \ + sed -i.bak "s/name = \"$$ESC_NAME\"/name = \"$(name)\"/" pyproject.toml && rm pyproject.toml.bak; \ + sed -i.bak "s/description = \"$$ESC_DESC\"/description = \"$(description)\"/" pyproject.toml && rm pyproject.toml.bak; \ sed -i.bak "1s/^# .*/# $(name)/" README.md && rm README.md.bak; \ - sed -i.bak "s|.*|$(description)|" README.md && rm README.md.bak + sed -i.bak "1,10s|.*|$(description)|" README.md && rm README.md.bak @echo "$(GREEN)✅ Updated project name and description.$(RESET)" banner: check_uv ## Generate project banner image From 0c144f3e7dad3c6cac85bf13f121e64f5a4be05c Mon Sep 17 00:00:00 2001 From: Miyamura80 Date: Sun, 15 Mar 2026 20:21:01 +0000 Subject: [PATCH 3/4] =?UTF-8?q?=F0=9F=90=9B=20escape=20new=20values=20in?= =?UTF-8?q?=20sed=20replacement=20strings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New name/description values also need escaping for sed replacement special chars (& / | \) to handle names like "acme/my-project" or descriptions containing "&". Co-Authored-By: Claude Opus 4.6 (1M context) --- Makefile | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 00fe823..6eda8f5 100644 --- a/Makefile +++ b/Makefile @@ -47,11 +47,13 @@ init: ## Initialize project (usage: make init name=my-project description="my de CURRENT_DESC=$$(sed -n 's/^description = "\(.*\)"/\1/p' pyproject.toml | head -1); \ ESC_NAME=$$(printf '%s\n' "$$CURRENT_NAME" | sed 's/[.[\*^$$\/]/\\&/g'); \ ESC_DESC=$$(printf '%s\n' "$$CURRENT_DESC" | sed 's/[.[\*^$$\/]/\\&/g'); \ + ESC_NEW_NAME=$$(printf '%s\n' "$(name)" | sed 's/[&/\\]/\\&/g'); \ + ESC_NEW_DESC=$$(printf '%s\n' "$(description)" | sed 's/[&|\\]/\\&/g'); \ echo "$(YELLOW)🚀 Initializing project $(name)...$(RESET)"; \ - sed -i.bak "s/name = \"$$ESC_NAME\"/name = \"$(name)\"/" pyproject.toml && rm pyproject.toml.bak; \ - sed -i.bak "s/description = \"$$ESC_DESC\"/description = \"$(description)\"/" pyproject.toml && rm pyproject.toml.bak; \ - sed -i.bak "1s/^# .*/# $(name)/" README.md && rm README.md.bak; \ - sed -i.bak "1,10s|.*|$(description)|" README.md && rm README.md.bak + sed -i.bak "s/name = \"$$ESC_NAME\"/name = \"$$ESC_NEW_NAME\"/" pyproject.toml && rm pyproject.toml.bak; \ + sed -i.bak "s/description = \"$$ESC_DESC\"/description = \"$$ESC_NEW_DESC\"/" pyproject.toml && rm pyproject.toml.bak; \ + sed -i.bak "1s/^# .*/# $$ESC_NEW_NAME/" README.md && rm README.md.bak; \ + sed -i.bak "1,10s|.*|$$ESC_NEW_DESC|" README.md && rm README.md.bak @echo "$(GREEN)✅ Updated project name and description.$(RESET)" banner: check_uv ## Generate project banner image From 71cac0541d84417bbcb575e865a383e3f38618f8 Mon Sep 17 00:00:00 2001 From: Miyamura80 Date: Sun, 15 Mar 2026 20:30:45 +0000 Subject: [PATCH 4/4] =?UTF-8?q?=F0=9F=90=9B=20add=20/=20to=20ESC=5FNEW=5FD?= =?UTF-8?q?ESC=20escape=20set?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ESC_NEW_DESC is used in both a /-delimited sed (pyproject.toml) and a |-delimited sed (README), so it needs to escape both delimiters. Co-Authored-By: Claude Opus 4.6 (1M context) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 6eda8f5..e7ee44d 100644 --- a/Makefile +++ b/Makefile @@ -48,7 +48,7 @@ init: ## Initialize project (usage: make init name=my-project description="my de ESC_NAME=$$(printf '%s\n' "$$CURRENT_NAME" | sed 's/[.[\*^$$\/]/\\&/g'); \ ESC_DESC=$$(printf '%s\n' "$$CURRENT_DESC" | sed 's/[.[\*^$$\/]/\\&/g'); \ ESC_NEW_NAME=$$(printf '%s\n' "$(name)" | sed 's/[&/\\]/\\&/g'); \ - ESC_NEW_DESC=$$(printf '%s\n' "$(description)" | sed 's/[&|\\]/\\&/g'); \ + ESC_NEW_DESC=$$(printf '%s\n' "$(description)" | sed 's/[&/|\\]/\\&/g'); \ echo "$(YELLOW)🚀 Initializing project $(name)...$(RESET)"; \ sed -i.bak "s/name = \"$$ESC_NAME\"/name = \"$$ESC_NEW_NAME\"/" pyproject.toml && rm pyproject.toml.bak; \ sed -i.bak "s/description = \"$$ESC_DESC\"/description = \"$$ESC_NEW_DESC\"/" pyproject.toml && rm pyproject.toml.bak; \