release_tool β ΡΡΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅Π»ΠΈΠ·ΠΎΠ² Π΄Π»Ρ UV workspace ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ. ΠΠ½ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ Π΄ΠΎΠ»Π³ΠΈΠΉ ΡΡΡΠ½ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ΅Π»ΠΈΠ·Π° Π² π 7-ΡΡΠ°ΠΏΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠ΅ΠΉ LLM Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ commit- ΠΈ tag-ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
- π― ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ: ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠ΅Ρ Π²Π΅ΡΡ ΡΠΈΠΊΠ» ΡΠ΅Π»ΠΈΠ·Π° ΠΎΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄ΠΎ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΅Π³ΠΎΠ²
- π§ LLM-ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΠ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΡΡ commit ΠΈ tag ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
- π¦ UV Workspace ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°: Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ UV workspace ΡΡΡΡΠΊΡΡΡΠΎΠΉ
- π 7-ΡΡΠ°ΠΏΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ: Π§ΡΡΠΊΠΎΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ°Π³ΠΈ β ΠΎΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ dev-ΡΠΈΠΊΠ»Π°
- β‘ ΠΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ: Π‘ΠΎΠΊΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ ΡΠ΅Π»ΠΈΠ·Π° Π΄ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄
- π‘οΈ ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ: Dry-run ΡΠ΅ΠΆΠΈΠΌ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ + Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- π§ ΠΠΈΠ±ΠΊΠ°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ: ΠΠ΄ΠΈΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ» Ρ ΡΠΌΠ½ΡΠΌ ΠΏΠΎΠΈΡΠΊΠΎΠΌ Π½Π°ΡΡΡΠΎΠ΅ΠΊ
- π CΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅: ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΡΠΌΠΈ (patch/minor/major/dev)
- π Git Submodule: ΠΠ΅Π³ΠΊΠ°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ ΡΠ΅ΡΠ΅Π· submodule
- π ΠΠΎΠ΄ΡΠΎΠ±Π½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ: ΠΡΡΠ΅ΡΠΏΡΠ²Π°ΡΡΠΈΠ΅ Π»ΠΎΠ³ΠΈ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
- ΠΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ workspace
- ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π΄Π΅ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΎΡΡΠ΅ΡΡ ΠΎ Π½Π΅Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΠ΅Π½Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ ΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ°Ρ
- ΠΠ½ΡΠ΅Π³ΡΠΈΡΡΠ΅ΡΡΡ Ρ LLM Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠ΅Ρ git-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (commit, tag, push)
- Π£ΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π²Π΅ΡΡΠΈΡΠΌΠΈ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
- ΠΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠ΅ΡΠ΅Π· dry-run ΡΠ΅ΠΆΠΈΠΌ ΠΈ ΠΏΠΎΡΡΠ°ΠΏΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ Python-ΡΠΊΡΠΈΠΏΡΠΎΠ², ΡΠΏΡΠΎΡΠ°ΡΡΠΈΡ ΡΠ΅Π»ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π²Π½ΡΡΡΠΈ UV workspace-ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Π Π°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠ΅ΠΌΡ ΡΡΠ°ΠΏΠΎΠ² (Stage 0 β β¦ β Stage 6) ΠΈ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ
release_tool.toml
.
# 0οΈβ£ ΠΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°Π΅ΠΌ dev-Π²Π΅ΡΠΊΠΈ ΠΎΡ main
uv run release-tool-stage0 --branch dev_branch --base-branch main --push
# 1οΈβ£ ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π½Π΅Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ
uv run release-tool-stage1 # ΡΠΎΠ·Π΄Π°ΡΡ *changes_uncommitted.txt*
# 2οΈβ£ ΠΡΠ΄Π°ΡΠΌ ΡΠ°ΠΉΠ»Ρ LLM β Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ *commit_message.txt*
uv run release-tool-stage2 --commit --push # ΠΊΠΎΠΌΠΌΠΈΡΠΈΠΌ (ΠΈ ΠΏΡΡΠΈΠΌ) Π²ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ
# 3οΈβ£ Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ diff ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ΅Π³Π°
uv run release-tool-stage3 # ΡΠΎΠ·Π΄Π°ΡΡ *changes_since_tag.txt*
# 4οΈβ£ ΠΡΠ΄Π°ΡΠΌ Π² LLM β Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ *tag_message.txt*, Π·Π°ΡΠ΅ΠΌ *prepare*-ΠΊΠΎΠΌΠΌΠΈΡ
uv run release-tool-stage4 --bump patch --push # bump + commit Π² dev_branch
# 5οΈβ£ ΠΡΠΊΡΡΠ²Π°Π΅ΠΌ Pull-Request dev_branch β main, ΡΠ΅Π²ΡΡ ΠΈ merge (Π²ΡΡ
ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ²)
# 6οΈβ£ ΠΠΎΡΠ»Π΅ merge Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΠ΅Π»ΠΈΠ·-ΡΠ°Π³ΠΈ:
uv run release-tool-stage5 --push # ΡΠ΅Π³
uv run release-tool-stage6 --push # Π½ΠΎΠ²ΡΠΉ dev-ΡΠΈΠΊΠ»
ΠΡΠΈΡΡΠΊΠ° ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:
uv run release-tool-clear # ΠΎΡΠΈΡΠ°Π΅Ρ release_tool/changes
--dry-run
ΠΈΠ»ΠΈ dry_run=true
Π² ΠΊΠΎΠ½ΡΠΈΠ³Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠ°Π³ΠΈ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ β ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ.
# ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ release_tool ΠΊΠ°ΠΊ git submodule
git submodule add https://github.com/VLMHyperBenchTeam/release_tool.git release_tool
# ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ release_tool Π² workspace (ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ pyproject.toml)
# [tool.uv.workspace]
# members = ["packages/*", "release_tool"]
# ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° (ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ)
# [project]
# dependencies = [
# "release_tool",
# ...
# ]
# ΠΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Ρ submodules
git clone --recursive https://github.com/your-username/your-project.git
# ΠΠ»ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ submodules Π² ΡΠΆΠ΅ ΡΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅
git submodule update --init --recursive
your-project/
βββ release_tool/ # β Git submodule
β βββ stage1.py
β βββ stage2.py
β βββ stage3.py
β βββ stage4.py
β βββ config.py
β βββ git_utils.py
β βββ release_tool.toml # β ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
β βββ README.md
βββ packages/ # β ΠΠ°ΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ
β βββ package1/
β βββ package2/
βββ .gitmodules # β ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ submodules
# ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΡ submodule ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ
cd release_tool
git pull origin main
# ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ ΡΠΈΠΊΡΠΈΡΡΠ΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅
cd ..
git add release_tool
git commit -m "update: ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ release_tool Π΄ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ"
git push
ΠΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ: ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π² Π²ΡΠ²ΠΎΠ΄Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΠΊΠ°ΠΊΠ°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ:
[stage1] ΠΠΎΠΈΡΠΊ Π½Π΅Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΠ΅Π½Π½ΡΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ
...
[stage1] ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ: release_tool.toml # β ΠΊΠΎΡΠ½Π΅Π²Π°Ρ (ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ)
[stage1] ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ: release_tool/release_tool.toml # β ΠΈΠ· submodule
pip install tomlkit packaging # Π΅ΡΠ»ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ workspace-ΡΠ΅ΠΆΠΈΠΌ
(ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΡ tomlkit
ΠΈ packaging
; ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π²Ρ
ΠΎΠ΄ΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Python)
release_tool
Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΡΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°:
release_tool.toml
Π² ΠΊΠΎΡΠ½Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° β Π΄Π»Ρ ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡrelease_tool/release_tool.toml
Π² submodule β Π΄Π΅ΡΠΎΠ»ΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ- ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ β Π΅ΡΠ»ΠΈ ΡΠ°ΠΉΠ»Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Ρ
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°:
- β ΠΠΈΠ±ΠΊΠΎΡΡΡ: ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°
- β ΠΡΠΎΡΡΠΎΡΠ°: ΡΠ°Π±ΠΎΡΠ°Π΅Ρ "ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ" Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
- β Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ: ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ
- β ΠΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ: submodule ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°Π±ΠΎΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
[tool.release_tool]
# ΠΠ°ΡΠ°Π»ΠΎΠ³, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π»Π΅ΠΆΠ°Ρ ΠΏΠΎΠ΄ΠΏΠ°ΠΊΠ΅ΡΡ (Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ)
packages_dir = "packages"
# Π€Π°ΠΉΠ»Ρ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ
changes_uncommitted_filename = "changes_uncommitted.txt"
changes_since_tag_filename = "changes_since_tag.txt"
# ΠΠ°ΡΠ°Π»ΠΎΠ³, ΠΊΡΠ΄Π° ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ ΡΠ°ΠΉΠ»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
changes_output_dir = "release_tool/changes"
# ΠΡΡΡ ΠΊ prod/pyproject.toml Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠ΅Π³ΠΎΠ² ΡΠ΅Π»ΠΈΠ·ΠΎΠ²
prod_pyproject_path = "prod/pyproject.toml"
# Π€Π°ΠΉΠ»Ρ Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ LLM
commit_message_filename = "commit_message.txt"
tag_message_filename = "tag_message.txt"
# ΠΡΠ΅ΡΠΈΠΊΡ ΡΠ΅Π³Π° (ΠΈΡΠΎΠ³ΠΎΠ²ΡΠΉ ΡΠ΅Π³ = "<tag_prefix><version>")
tag_prefix = "v"
# ΠΠΌΡ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ (git push <remote>)
git_remote = "origin"
# "Π‘ΡΡ
ΠΎΠΉ" ΡΠ΅ΠΆΠΈΠΌ: ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠ²ΠΎΠ΄ ΡΠ°Π³ΠΎΠ², Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
# (ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΈΠ· CLI ΠΊΠ»ΡΡΠΎΠΌ --dry-run)
dry_run = false
Π§ΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ release_tool.toml
Π² ΠΊΠΎΡΠ½Π΅:
# ΠΠΎΠΏΠΈΡΡΠ΅ΠΌ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
cp release_tool/release_tool.toml .
# Π Π΅Π΄Π°ΠΊΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠ΄ ΡΠ²ΠΎΠΈ Π½ΡΠΆΠ΄Ρ
# ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ΅Π½ΡΠ΅ΠΌ packages_dir = "my_packages"
# ΠΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΈΠΌΡ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ,
# ΡΡΠΎΠ±Ρ ΠΏΡΡΠΈΡΡ Π½Π΅ Π² origin, Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² github (ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ remote):
# git_remote = "github"
# ΠΡΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡ ΠΎΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΠΈΠ΄Π° Β«fatal: 'origin' does not appear to be a git repositoryΒ»
# ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ² Π² ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΌ ΡΠ΅ΠΏΠΎ Π±Π΅Π· remote Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ origin.
βΉοΈ
release_tool
ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ Ρ CLI-entrypoints.
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π²Π΅ ΡΠΎΡΠΌΡ Π²ΡΠ·ΠΎΠ²Π°:
β’ ΠΠΎΡΠΎΡΠΊΠ°Ρ:uv run release-tool-stageN
β’ ΠΠΎΠ»Π½Π°Ρ:uv run python -m release_tool.stageN
ΠΠΎ Π²ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Π½ΠΈΠΆΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΡΠ±ΡΡ ΠΈΠ· Π½ΠΈΡ ; ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ ΠΊΠΎΡΠΎΡΠΊΡΡ.
uv run release-tool-stage0 \
[--branch dev_branch] # ΠΈΠΌΡ dev-Π²Π΅ΡΠΊΠΈ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ dev_branch) \
[--base-branch main] # Π±Π°Π·ΠΎΠ²Π°Ρ Π²Π΅ΡΠΊΠ°, ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΎΠ·Π΄Π°ΡΡΡΡ dev-Π²Π΅ΡΠΊΠ° (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ main)
[--push] # ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΏΡΡΠΈΡ Π²Π΅ΡΠΊΡ (Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΠΊΠΎΠΌΠΌΠΈΡΡ)
[--dry-run] # ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π½ΠΎ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΈΡ
# Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅, ΡΠΌ. Π½ΠΈΠΆΠ΅
Π§ΡΠΎ Π΄Π΅Π»Π°Π΅Ρ:
git fetch <remote>
β ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅Ρ refs.- ΠΡΠ»ΠΈ
<remote>/dev_branch
ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ: β’ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡdev_branch
(ΡΠΎΠ·Π΄Π°ΡΡ, Π΅ΡΠ»ΠΈ Π½Π΅Ρ); β’ Π΄Π΅Π»Π°Π΅Ρ fast-forward Π΄ΠΎ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠΉ Π²Π΅ΡΠΊΠΈ. - ΠΡΠ»ΠΈ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠΉ Π²Π΅ΡΠΊΠΈ Π½Π΅Ρ β ΡΠΎΠ·Π΄Π°ΡΡ
dev_branch
ΠΎΡ<base_branch>
(ΠΈΠ»ΠΈ fallback-Π²Π΅ΡΠΊΠΈ, ΡΠΌ. ΠΎΠΏΡΠΈΠΈ). - ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ±ΠΈΡΠ°Π΅Ρ Π½Π΅Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΠ΅Π½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² stash (ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ
temporary_stash
). - ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ upstream
dev_branch β <remote>/dev_branch
. - (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ
--push
) ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠΌΠΌΠΈΡΡ. - ΠΠ΅ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΡΡΡ (ahead/behind, Π½Π°Π»ΠΈΡΠΈΠ΅ stash, uncommitted ΠΈ Ρ.Π΄.).
Π€Π»Π°Π³ | Π§ΡΠΎ Π΄Π΅Π»Π°Π΅Ρ |
---|---|
--no-stash |
ΠΡΠ»ΠΈ Π΅ΡΡΡ Π½Π΅Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΠ΅Π½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ β Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ Π²ΠΌΠ΅ΡΡΠΎ auto-stash. |
--stash-name NAME |
ΠΠΌΡ Π΄Π»Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ stash (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ stage0-auto-<branch> ). |
--keep-stash |
ΠΠ΅ ΡΠ΄Π°Π»ΡΡΡ stash ΠΏΠΎΡΠ»Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ stash pop Π±Π΅Π· ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ². |
--fallback-head / --no-fallback-head |
ΠΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ <remote>/<base_branch> ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ <remote>/HEAD ΠΊΠ°ΠΊ ΡΡΠ°ΡΡΠΎΠ²ΡΡ Π²Π΅ΡΠΊΡ. |
--fallback-local / --no-fallback-local |
ΠΡΠ»ΠΈ remote-Π²Π΅ΡΠΊΠ° <base_branch> ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ Π²Π΅ΡΠΊΡ <base_branch> . |
[stage0] ΠΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ: hello_world
[stage0] β
hello_world: ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π° Π²Π΅ΡΠΊΠ° dev_branch (ΠΎΡ main)
[stage0] β
ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΎ. ΠΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²: 5
[stage0] ΠΡΠΎΠ³:
β’ hello_world β Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ; ok
β’ bench_utils β Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ; ok
β¦
ΠΠΎΡΠ»Π΅ Stage 0 ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΠΊ Stage 1.
uv run python -m release_tool.stage1 [--dry-run]
- ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ
git status --porcelain
. - ΠΡΠ»ΠΈ Π΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ β ΡΠ°ΠΉΠ»
<changes_output_dir>/<package>/<changes_uncommitted_filename>
Ρ:- ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΠΉΠ»ΠΎΠ² (
git status --porcelain
) - ΠΊΡΠ°ΡΠΊΠ°Ρ ΡΠ²ΠΎΠ΄ΠΊΠ° (
git diff --stat
) - ΠΏΠΎΠ»Π½ΡΠΉ diff (
git diff
) β Π²ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎ.
- ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΠΉΠ»ΠΎΠ² (
Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ»Ρ:
<changes_output_dir>/<package_name>/<changes_uncommitted_filename>
β ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ<changes_output_dir>/<package_name>/<commit_message_filename>
β ΠΏΡΡΡΠΎΠΉ ΡΠ°ΠΉΠ» Π΄Π»Ρ LLM
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: release_tool/changes/<package_name>/changes_uncommitted.txt
ΠΈ release_tool/changes/<package_name>/commit_message.txt
)
ΠΠΎΠ³Π΄Π° Π΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ:
[stage1] ΠΠΎΠΈΡΠΊ Π½Π΅Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΠ΅Π½Π½ΡΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ
...
[stage1] ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³: packages
[stage1] ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ: hello_world
[stage1] β
hello_world: ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΡ
ΡΠ°Π½Π΅Π½Ρ Π² release_tool/changes/hello_world/changes_uncommitted.txt
[stage1] π hello_world: ΡΠΎΠ·Π΄Π°Π½ ΠΏΡΡΡΠΎΠΉ ΡΠ°ΠΉΠ» release_tool/changes/hello_world/commit_message.txt
[stage1] β
ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΎ. ΠΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ: 1
ΠΠΎΠ³Π΄Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π΅Ρ:
[stage1] ΠΠΎΠΈΡΠΊ Π½Π΅Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΠ΅Π½Π½ΡΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ
...
[stage1] ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³: packages
[stage1] ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ: hello_world
[stage1] hello_world: Π½Π΅Ρ Π½Π΅Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΠ΅Π½Π½ΡΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
[stage1] β
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΎ β ΡΠ°ΠΉΠ»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π΅ ΡΠΎΠ·Π΄Π°Π½Ρ
uv run python -m release_tool.stage2 [--dry-run] [--commit] [--push]
ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠΎΠΌΠΌΠΈΡ ΠΈ/ΠΈΠ»ΠΈ push ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ --commit
ΠΈ --push
Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
--commit
β ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠΌΠΌΠΈΡ ΠΏΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌ--push
β Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ git push Π΄Π»Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²- ΠΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ
--commit
Π§ΠΈΡΠ°Π΅Ρ ΡΠ°ΠΉΠ»Ρ: <changes_output_dir>/<package_name>/<commit_message_filename>
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: release_tool/changes/<package_name>/commit_message.txt
)
ΠΠΎΠ³Π΄Π° Π΅ΡΡΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ:
[stage2] ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ ΠΈ push Π΄Π»Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ...
[stage2] ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ: hello_world
[stage2] β
hello_world: commit ΡΠΎΠ·Π΄Π°Π½ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½
[stage2] β
ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΎ. ΠΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²: 1
ΠΡΠΈ push ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΡΠ°ΡΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°:
[stage2] ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ push Π΄Π»Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²...
[stage2] ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ: hello_world
[stage2] β
hello_world: ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Ρ
[stage2] ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ: bench_utils
[stage2] π bench_utils: ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π΅Ρ
uv run python -m release_tool.stage3 [--dry-run] [--tag TAG_NAME]
Π‘ΠΎΠ±ΠΈΡΠ°Π΅Ρ ΠΏΠΎΠ»Π½ΡΠΉ diff ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π³ΠΎΠΌ ΠΈ HEAD β <changes_output_dir>/<package>/<changes_since_tag_filename>
.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
--tag TAG_NAME
β ΡΠΎΠ±ΡΠ°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅Π³Π° (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ β ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ΅Π³)--dry-run
β ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΎ, Π±Π΅Π· ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²
Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ»Ρ:
<changes_output_dir>/<package_name>/<changes_since_tag_filename>
β ΡΠΎΠ»ΡΠΊΠΎ diff<changes_output_dir>/<package_name>/<tag_message_filename>
β ΠΏΡΡΡΠΎΠΉ ΡΠ°ΠΉΠ» Π΄Π»Ρ LLM
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
# ΠΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ΅Π³Π°
uv run python -m release_tool.stage3
# ΠΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³Π°
uv run python -m release_tool.stage3 --tag v1.0.0
# ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π±Π΅Π· ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²
uv run python -m release_tool.stage3 --tag v0.5.0 --dry-run
uv run python -m release_tool.stage4 --bump patch|minor|major|dev [--push] [--dry-run]
- Π£Π²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ Π²Π΅ΡΡΠΈΡ (
--bump β¦
) ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρpyproject.toml
Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅. - Π§ΠΈΡΠ°Π΅Ρ
<tag_message_filename>
ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠΌΠΌΠΈΡ Ρ ΡΡΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ. - ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ Π²
staging/pyproject.toml
, ΡΠΈΠΊΡΠΈΡΡΡ dev-Π²Π΅ΡΡΠΈΡ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» Β«Π’ΡΠΈ workspaceΒ» Π½ΠΈΠΆΠ΅). - ΠΠ΅ ΡΡΠ°Π²ΠΈΡ ΡΠ΅Π³, Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ dev-ΡΠΈΠΊΠ».
- Optionally
--push
β ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠΌΠΌΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²dev_branch
).
ΠΠ°Π»Π΅Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Pull Request ΠΈΠ· dev_branch
β main
ΠΈ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ review.
uv run python -m release_tool.stage5 [--push] [--dry-run]
ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ merge PR Π² main
:
β’ ΠΠ°Ρ
ΠΎΠ΄ΠΈΡ Π²Π΅ΡΡΠΈΡ Π² pyproject.toml
.
β’ Π‘ΡΠ°Π²ΠΈΡ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ΅Π³ v<version>
Π½Π° ΡΡΠΎΠΌ ΠΆΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΠ΅.
β’ ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ Π² prod/pyproject.toml
, ΡΠΊΠ°Π·ΡΠ²Π°Ρ Π½Π° ΡΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠ΅Π³ (ΠΊΠ»ΡΡ prod_pyproject_path
Π² ΠΊΠΎΠ½ΡΠΈΠ³Π΅).
β’ ΠΡΡΠΈΡ ΡΠ΅Π³ (Π΅ΡΠ»ΠΈ --push
ΠΈΠ»ΠΈ cfg.dry_run = false
).
uv run python -m release_tool.stage6 [--branch dev_branch] [--push] [--dry-run]
- Π‘ΠΎΠ·Π΄Π°ΡΡ (ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ) Π²Π΅ΡΠΊΡ
dev_branch
ΠΎΡmain
. - ΠΠ΅Π½ΡΠ΅Ρ Π²Π΅ΡΡΠΈΡ β
patch+1.dev0
ΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠΈΡchore: start β¦dev0 development
. - ΠΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ ΠΏΡΡΠΈΡ Π²Π΅ΡΠΊΡ.
# 0. ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° dev-Π²Π΅ΡΠΎΠΊ (ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠΎΠ·Π΄Π°ΡΠΌ ΠΎΡ main)
uv run python -m release_tool.stage0 --branch dev_branch --base-branch main --push
# 1. ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
uv run python -m release_tool.stage1
uv run python -m release_tool.stage2 --commit --push
# 2. ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΡΠ΅Π»ΠΈΠ·Π°
uv run python -m release_tool.stage3
uv run python -m release_tool.stage4 --bump patch --push # ΠΊΠΎΠΌΠΌΠΈΡ Π² dev_branch
# β PR dev_branch β main, review, merge
# 3. Π’Π΅Π³ + Π½ΠΎΠ²ΡΠΉ dev-ΡΠΈΠΊΠ» (Π²ΡΡΡΠ½ΡΡ)
uv run python -m release_tool.stage5 --sync --base-branch main --delete-branch dev_branch --push # ΡΠ΅Π³ + prod
uv run python -m release_tool.stage6 --push # Π½ΠΎΠ²ΡΠΉ dev-ΡΠΈΠΊΠ»
ΠΠ»Ρ dry-run ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ° Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ --dry-run
.
uv run python -m release_tool.stage1
# ΠΠ°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ commit_message.txt
uv run python -m release_tool.stage2 --commit # ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠΌΠΈΡ
uv run python -m release_tool.stage2 --push # ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠΏΡΠ°Π²ΠΊΠ°
# Π£Π΄Π°Π»ΡΠ΅Ρ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² release_tool/changes
uv run python -m release_tool.clear
# ΠΠΎΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»Π΅Π½ΠΎ
uv run python -m release_tool.clear --dry-run
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Stage 4 Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ:
β’ ΡΠ΄Π°Π»ΡΠ΅Ρ ΡΡΡΠΎΠΊΠΈ workspace = true
ΠΈΠ· ΡΠ΅ΠΊΡΠΈΠΈ [tool.uv.sources]
Π² pyproject.toml
, ΡΡΠΎΠ±Ρ ΡΠ΅Π»ΠΈΠ·-ΠΊΠΎΠΌΠΌΠΈΡ ΡΡΡΠ»Π°Π»ΡΡ Π½Π° Β«ΡΠΈΡΡΡΡΒ» Π²Π΅ΡΡΠΈΡ Π±Π΅Π· workspace-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ;
β’ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠ΅Π³ ΠΏΠ°ΠΊΠ΅ΡΠ° Π² ΡΠ°ΠΉΠ»Π΅ staging/pyproject.toml
(ΠΏΡΡΡ Π·Π°Π΄Π°ΡΡΡΡ ΠΊΠ»ΡΡΠΎΠΌ staging_pyproject_path
Π² ΠΊΠΎΠ½ΡΠΈΠ³Π΅).
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Stage 5 Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ:
β’ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠ΅Π³ ΠΏΠ°ΠΊΠ΅ΡΠ° Π² ΡΠ°ΠΉΠ»Π΅ prod/pyproject.toml
(ΠΏΡΡΡ Π·Π°Π΄Π°ΡΡΡΡ ΠΊΠ»ΡΡΠΎΠΌ prod_pyproject_path
Π² ΠΊΠΎΠ½ΡΠΈΠ³Π΅).
main
ββ prod/pyproject.toml # ΡΠ΅Π»ΠΈΠ·Π½ΡΠ΅ (ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠ΅) Π²Π΅ΡΡΠΈΠΈ, ΡΠ΅Π³ΠΈ
ββ staging/pyproject.toml # dev-ΡΠ΅Π³ΠΈ, Π³ΠΎΡΠΎΠ²ΡΠ΅ ΠΊ ΡΡΡΠ½ΠΎΠΌΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
dev_branch
ββ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² (workspace=true)
- dev β ΡΠ΅ΠΊΡΡΠ°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°; Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΡΠ΅ΡΠ΅Π·
workspace = true
. - staging β ΡΠΈΠΊΡΠ°ΡΠΈΡ dev-ΡΠ΅Π³ΠΎΠ², ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ Π½Π° Stage 4. ΠΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ UV-workspace ΠΈΠ· GitHub-ΡΠ΅Π³ΠΎΠ² Π΄ΠΎ merge.
- prod β ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅Π»ΠΈΠ·Π½ΡΠ΅ ΡΠ΅Π³ΠΈ, Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π½Π° Stage 5.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: β’ Stage 4 ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΡΠ΅Π»ΠΈΠ·-ΠΊΠΎΠΌΠΌΠΈΡ Ρ dev-Π²Π΅ΡΡΠΈΠ΅ΠΉ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ staging-ΡΠΏΠΈΡΠΎΠΊ. β’ ΠΠΎΡΠ»Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ PR Stage 5 Π½Π°Π²Π΅ΡΠΈΠ²Π°Π΅Ρ ΡΠ΅Π³ ΠΈ ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ Π΅Π³ΠΎ Π² prod-ΡΠΏΠΈΡΠΊΠ΅.
Π€Π°ΠΉΠ» ΠΏΡΠΈΠΌΠ΅ΡΠ° workflow Π»Π΅ΠΆΠΈΡ Π² release_tool/ci/release_flow.yml
.
Π§ΡΠΎΠ±Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Stage 5/6 Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ merge Π² main
:
# ΠΠΎΠΏΠΈΡΡΠ΅ΠΌ (ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ) ΡΠ°ΠΉΠ» Π² Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ
mkdir -p .github/workflows
cp release_tool/ci/release_flow.yml .github/workflows/
# ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΡΠΎ Π²Π°ΠΌ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ ΠΈΠΌΡ Π²Π΅ΡΠΊΠΈ ΠΈ Π²Π΅ΡΡΠΈΡ Python Π²Π½ΡΡΡΠΈ workflow.
# ΠΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠΌΠΈΡΠ° GitHub Π·Π°ΠΏΡΡΡΠΈΡ workflow ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ push Π² main.
β οΈ ΠΡΠ»ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²ΡΠΊΠ»ΡΡΠΈΡΡ CI β Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΡΠΉΡΠ΅ Π±Π»ΠΎΠΊpush:
Π².github/workflows/release_flow.yml
ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΠ΅ ΡΠ°ΠΉΠ».
uv run python -m release_tool.clear [--dry-run]
ΠΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΠΈΡΠ°Π΅Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ changes_output_dir
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ release_tool/changes
).
ΠΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ:
- ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ΅Π»ΠΈΠ·Π° Π΄Π»Ρ ΠΎΡΠΈΡΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²
- ΠΡΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π½ΡΠΌΠΈ Π²Π΅ΡΠΊΠ°ΠΌΠΈ/ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ
- ΠΠ»Ρ "ΡΠΈΡΡΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠ°" ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ΅Π»ΠΈΠ·Π°
ΠΡΠΈΠΌΠ΅Ρ Π²ΡΠ²ΠΎΠ΄Π°:
[clear] β
ΠΠ°ΡΠ°Π»ΠΎΠ³ release_tool/changes ΠΎΡΠΈΡΠ΅Π½
Π‘ --dry-run:
[clear] --dry-run: Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»ΡΠ½ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ release_tool/changes
release_tool/changes/hello_world/changes_uncommitted.txt
release_tool/changes/hello_world/commit_message.txt
β’ Git-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π· subprocess
(ΡΠΌ. release_tool/git_utils.py
).
β’ ΠΡΠΎΠ²Π΅ΡΠΊΠ° Β«Π΅ΡΡΡ Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΒ» β git rev-list <last_tag>..HEAD --count
(>0 β Π΅ΡΡΡ).
β’ ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½Ρ Π²Π΅ΡΡΠΈΠΉ β packaging.version.Version
+ RegExp; ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΡΠΎΠ²Π½ΠΈ patch
/minor
/major
ΠΈ dev
.
# ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π²ΡΠ΅ ΡΡΠ°ΠΏΡ Π±Π΅Π· ΡΠ΅Π°Π»ΡΠ½ΡΡ
Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ
uv run python -m release_tool.stage1 --dry-run
uv run python -m release_tool.stage2 --dry-run
uv run python -m release_tool.stage3 --dry-run
uv run python -m release_tool.stage4 --dry-run --bump patch
# 1. Π€ΠΈΠΊΡΠΈΡΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ
uv run python -m release_tool.stage1
# ΠΠ°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ commit_message.txt Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ΅
uv run python -m release_tool.stage2 --commit --push
# 2. ΠΠΎΡΠΎΠ²ΠΈΠΌ ΡΠ΅Π»ΠΈΠ·
uv run python -m release_tool.stage3
# ΠΠ°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ tag_message.txt Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ΅
uv run python -m release_tool.stage4 --bump patch --push
uv run python -m release_tool.stage1
# ΠΠ°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ commit_message.txt
uv run python -m release_tool.stage2 --commit # ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠΌΠΈΡ
uv run python -m release_tool.stage3
# ΠΠ°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ tag_message.txt
uv run python -m release_tool.stage4 --bump minor --push # bump + push
# ΠΠ΅ΡΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ, Π½Π°Ρ
ΠΎΠ΄ΡΡΡ ΠΎΡΠ»Π°ΠΉΠ½; push ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΏΠΎΠ·ΠΆΠ΅
uv run python -m release_tool.stage4 --bump patch
# ΠΠ°ΡΡ-ΡΠ΅Π»ΠΈΠ· (ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ)
uv run python -m release_tool.stage4 --bump patch --push
# ΠΠΈΠ½ΠΎΡΠ½ΡΠΉ ΡΠ΅Π»ΠΈΠ· (Π½ΠΎΠ²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ)
uv run python -m release_tool.stage4 --bump minor --push
# ΠΠ°ΠΆΠΎΡΠ½ΡΠΉ ΡΠ΅Π»ΠΈΠ· (breaking changes)
uv run python -m release_tool.stage4 --bump major --push
# Dev-ΡΠ΅Π»ΠΈΠ· (ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°)
uv run python -m release_tool.stage4 --bump dev --push
ΠΠΎΠΏΡΠΎΡ | ΠΡΠ²Π΅Ρ |
---|---|
ΠΡΠΆΠ΅Π½ Π»ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ env? | ΠΠ΅Ρ. ΠΡΠ»ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· UV-workspace β Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ release_tool Π±ΡΠ΄ΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. Π ΠΎΠ±ΡΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ pip install tomlkit packaging . |
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π΅Π· LLM? | ΠΠ° β Π²ΡΡΡΠ½ΡΡ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅ release_commit_message.txt . |
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ bump Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΡΡ Π²Π΅ΡΡΠΈΠΉ? | ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΡΠΈ ΡΡΠΎΠ²Π½Ρ: patch, minor, major. |
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ bump Π΄Π»Ρ dev-Π²Π΅ΡΡΠΈΠΉ? | ΠΡΠ»ΠΈ Π²Π΅ΡΡΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ .devN β ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ N ; Π΅ΡΠ»ΠΈ .dev Π½Π΅Ρ β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ .dev1 . |
MIT Β© 2025