Skip to content

Commit 75c6910

Browse files
committed
fix(ci): version
1 parent e2134f4 commit 75c6910

File tree

2 files changed

+154
-53
lines changed

2 files changed

+154
-53
lines changed

.github/workflows/publish.yml

Lines changed: 73 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -48,42 +48,90 @@ jobs:
4848
else
4949
# Auto-generate alpha version based on commit count
5050
TOTAL_COMMITS=$(git rev-list --count HEAD)
51-
CURRENT_VERSION=$(grep -o 'version = "[^"]*"' pyproject.toml | sed 's/version = "\(.*\)"/\1/')
51+
# Extract version from [project] section, first match only
52+
CURRENT_VERSION=$(grep -m 1 -A 5 '^\[project\]' pyproject.toml | grep 'version = ' | sed 's/version = "\(.*\)"/\1/')
5253
BASE_VERSION=$(echo $CURRENT_VERSION | sed 's/a.*//')
5354
VERSION="${BASE_VERSION}a${TOTAL_COMMITS}"
5455
echo "Auto-generated alpha version: $VERSION"
5556
fi
5657
echo "version=$VERSION" >> $GITHUB_OUTPUT
58+
echo "Calculated version: $VERSION"
5759
5860
- name: Update versions in all files
5961
run: |
6062
VERSION="${{ steps.version.outputs.version }}"
6163
echo "Updating to version: $VERSION"
6264
63-
# Update all pyproject.toml files - match only lines with 'version = "...'
64-
sed -i 's/^version = "[^"]*"/version = "'"$VERSION"'"/' pyproject.toml
65-
sed -i 's/^version = "[^"]*"/version = "'"$VERSION"'"/' packages/myfy-core/pyproject.toml
66-
sed -i 's/^version = "[^"]*"/version = "'"$VERSION"'"/' packages/myfy-web/pyproject.toml
67-
sed -i 's/^version = "[^"]*"/version = "'"$VERSION"'"/' packages/myfy-cli/pyproject.toml
68-
sed -i 's/^version = "[^"]*"/version = "'"$VERSION"'"/' packages/myfy-frontend/pyproject.toml
69-
sed -i 's/^version = "[^"]*"/version = "'"$VERSION"'"/' packages/myfy/pyproject.toml
70-
71-
# Update all version.py files
72-
sed -i 's/__version__ = "[^"]*"/__version__ = "'"$VERSION"'"/' packages/myfy-core/myfy/core/version.py
73-
sed -i 's/__version__ = "[^"]*"/__version__ = "'"$VERSION"'"/' packages/myfy-web/myfy/web/version.py
74-
sed -i 's/__version__ = "[^"]*"/__version__ = "'"$VERSION"'"/' packages/myfy-cli/myfy_cli/version.py
75-
sed -i 's/__version__ = "[^"]*"/__version__ = "'"$VERSION"'"/' packages/myfy-frontend/myfy/frontend/version.py
76-
sed -i 's/__version__ = "[^"]*"/__version__ = "'"$VERSION"'"/' packages/myfy/myfy/version.py
77-
78-
# Update dependency constraints to match new version (only base version, not alpha suffix)
79-
BASE_VERSION=$(echo $VERSION | sed 's/a.*//')
80-
sed -i 's/myfy-core~=[0-9a-z.]*/myfy-core~='"$BASE_VERSION"'/' packages/myfy-web/pyproject.toml
81-
sed -i 's/myfy-core~=[0-9a-z.]*/myfy-core~='"$BASE_VERSION"'/' packages/myfy-cli/pyproject.toml
82-
sed -i 's/myfy-core~=[0-9a-z.]*/myfy-core~='"$BASE_VERSION"'/' packages/myfy-frontend/pyproject.toml
83-
sed -i 's/myfy-web~=[0-9a-z.]*/myfy-web~='"$BASE_VERSION"'/' packages/myfy-frontend/pyproject.toml
84-
sed -i 's/myfy-core~=[0-9a-z.]*/myfy-core~='"$BASE_VERSION"'/' packages/myfy/pyproject.toml
85-
sed -i 's/myfy-cli~=[0-9a-z.]*/myfy-cli~='"$BASE_VERSION"'/' packages/myfy/pyproject.toml
86-
sed -i 's/myfy-web~=[0-9a-z.]*/myfy-web~='"$BASE_VERSION"'/' packages/myfy/pyproject.toml
65+
# Use Python to safely update TOML files
66+
python3 << 'PYTHON_SCRIPT'
67+
import re
68+
import sys
69+
70+
version = "${{ steps.version.outputs.version }}"
71+
base_version = version.split('a')[0] if 'a' in version else version.split('b')[0] if 'b' in version else version.split('rc')[0] if 'rc' in version else version
72+
73+
# Update pyproject.toml files
74+
toml_files = [
75+
'pyproject.toml',
76+
'packages/myfy-core/pyproject.toml',
77+
'packages/myfy-web/pyproject.toml',
78+
'packages/myfy-cli/pyproject.toml',
79+
'packages/myfy-frontend/pyproject.toml',
80+
'packages/myfy/pyproject.toml'
81+
]
82+
83+
for file in toml_files:
84+
with open(file, 'r') as f:
85+
content = f.read()
86+
87+
# Replace version in [project] section only
88+
content = re.sub(
89+
r'(\[project\][^\[]*\nname = [^\n]+\n)version = "[^"]*"',
90+
r'\1version = "' + version + '"',
91+
content,
92+
count=1
93+
)
94+
95+
with open(file, 'w') as f:
96+
f.write(content)
97+
98+
# Update version.py files
99+
version_files = [
100+
'packages/myfy-core/myfy/core/version.py',
101+
'packages/myfy-web/myfy/web/version.py',
102+
'packages/myfy-cli/myfy_cli/version.py',
103+
'packages/myfy-frontend/myfy/frontend/version.py',
104+
'packages/myfy/myfy/version.py'
105+
]
106+
107+
for file in version_files:
108+
with open(file, 'r') as f:
109+
content = f.read()
110+
content = re.sub(r'__version__ = "[^"]*"', f'__version__ = "{version}"', content)
111+
with open(file, 'w') as f:
112+
f.write(content)
113+
114+
# Update dependency constraints in pyproject.toml files
115+
dep_files = [
116+
'packages/myfy-web/pyproject.toml',
117+
'packages/myfy-cli/pyproject.toml',
118+
'packages/myfy-frontend/pyproject.toml',
119+
'packages/myfy/pyproject.toml'
120+
]
121+
122+
for file in dep_files:
123+
with open(file, 'r') as f:
124+
content = f.read()
125+
126+
content = re.sub(r'myfy-core~=[0-9a-z.]+', f'myfy-core~={base_version}', content)
127+
content = re.sub(r'myfy-web~=[0-9a-z.]+', f'myfy-web~={base_version}', content)
128+
content = re.sub(r'myfy-cli~=[0-9a-z.]+', f'myfy-cli~={base_version}', content)
129+
130+
with open(file, 'w') as f:
131+
f.write(content)
132+
133+
print(f"Version updated to {version} in all files")
134+
PYTHON_SCRIPT
87135
88136
echo "Version updated to $VERSION in all files"
89137

.github/workflows/release.yml

Lines changed: 81 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -64,39 +64,92 @@ jobs:
6464
if [ -n "${{ github.event.inputs.prerelease }}" ]; then
6565
NEW_VERSION="${NEW_VERSION}${{ github.event.inputs.prerelease }}"
6666
echo "Adding prerelease suffix: $NEW_VERSION"
67-
68-
# Update all version files with prerelease - match only 'version = "...'
69-
sed -i 's/^version = "[^"]*"/version = "'"$NEW_VERSION"'"/' pyproject.toml
70-
sed -i 's/^version = "[^"]*"/version = "'"$NEW_VERSION"'"/' packages/myfy-core/pyproject.toml
71-
sed -i 's/^version = "[^"]*"/version = "'"$NEW_VERSION"'"/' packages/myfy-web/pyproject.toml
72-
sed -i 's/^version = "[^"]*"/version = "'"$NEW_VERSION"'"/' packages/myfy-cli/pyproject.toml
73-
sed -i 's/^version = "[^"]*"/version = "'"$NEW_VERSION"'"/' packages/myfy-frontend/pyproject.toml
74-
sed -i 's/^version = "[^"]*"/version = "'"$NEW_VERSION"'"/' packages/myfy/pyproject.toml
75-
76-
sed -i 's/__version__ = "[^"]*"/__version__ = "'"$NEW_VERSION"'"/' packages/myfy-core/myfy/core/version.py
77-
sed -i 's/__version__ = "[^"]*"/__version__ = "'"$NEW_VERSION"'"/' packages/myfy-web/myfy/web/version.py
78-
sed -i 's/__version__ = "[^"]*"/__version__ = "'"$NEW_VERSION"'"/' packages/myfy-cli/myfy_cli/version.py
79-
sed -i 's/__version__ = "[^"]*"/__version__ = "'"$NEW_VERSION"'"/' packages/myfy-frontend/myfy/frontend/version.py
80-
sed -i 's/__version__ = "[^"]*"/__version__ = "'"$NEW_VERSION"'"/' packages/myfy/myfy/version.py
8167
fi
8268
8369
echo "version=$NEW_VERSION" >> $GITHUB_OUTPUT
8470
echo "New version: $NEW_VERSION"
8571
86-
- name: Update dependency constraints
87-
run: |
88-
VERSION="${{ steps.bump.outputs.version }}"
89-
# Extract base version without prerelease suffix for dependency constraints
90-
BASE_VERSION=$(echo $VERSION | sed 's/[a-z].*//')
91-
92-
# Update internal dependency constraints
93-
sed -i 's/myfy-core~=[0-9a-z.]*/myfy-core~='"$BASE_VERSION"'/' packages/myfy-web/pyproject.toml
94-
sed -i 's/myfy-core~=[0-9a-z.]*/myfy-core~='"$BASE_VERSION"'/' packages/myfy-cli/pyproject.toml
95-
sed -i 's/myfy-core~=[0-9a-z.]*/myfy-core~='"$BASE_VERSION"'/' packages/myfy-frontend/pyproject.toml
96-
sed -i 's/myfy-web~=[0-9a-z.]*/myfy-web~='"$BASE_VERSION"'/' packages/myfy-frontend/pyproject.toml
97-
sed -i 's/myfy-core~=[0-9a-z.]*/myfy-core~='"$BASE_VERSION"'/' packages/myfy/pyproject.toml
98-
sed -i 's/myfy-cli~=[0-9a-z.]*/myfy-cli~='"$BASE_VERSION"'/' packages/myfy/pyproject.toml
99-
sed -i 's/myfy-web~=[0-9a-z.]*/myfy-web~='"$BASE_VERSION"'/' packages/myfy/pyproject.toml
72+
# Use Python to safely update all version files
73+
python3 << 'PYTHON_SCRIPT'
74+
import re
75+
76+
version = "${{ github.event.inputs.prerelease }}"
77+
if version:
78+
# Extract base version and add prerelease
79+
import subprocess
80+
base = subprocess.check_output(['grep', '-m', '1', '-A', '5', '^\\[project\\]', 'pyproject.toml'], text=True)
81+
base_version = re.search(r'version = "([^"]*)"', base).group(1)
82+
version = base_version + version
83+
else:
84+
# Use commitizen bumped version
85+
with open('pyproject.toml', 'r') as f:
86+
content = f.read()
87+
match = re.search(r'\[project\][^\[]*version = "([^"]*)"', content)
88+
version = match.group(1) if match else None
89+
90+
if not version:
91+
print("Error: Could not determine version")
92+
exit(1)
93+
94+
base_version = version.split('a')[0] if 'a' in version else version.split('b')[0] if 'b' in version else version.split('rc')[0] if 'rc' in version else version
95+
96+
# Update pyproject.toml files
97+
toml_files = [
98+
'pyproject.toml',
99+
'packages/myfy-core/pyproject.toml',
100+
'packages/myfy-web/pyproject.toml',
101+
'packages/myfy-cli/pyproject.toml',
102+
'packages/myfy-frontend/pyproject.toml',
103+
'packages/myfy/pyproject.toml'
104+
]
105+
106+
for file in toml_files:
107+
with open(file, 'r') as f:
108+
content = f.read()
109+
content = re.sub(
110+
r'(\[project\][^\[]*\nname = [^\n]+\n)version = "[^"]*"',
111+
r'\1version = "' + version + '"',
112+
content,
113+
count=1
114+
)
115+
with open(file, 'w') as f:
116+
f.write(content)
117+
118+
# Update version.py files
119+
version_files = [
120+
'packages/myfy-core/myfy/core/version.py',
121+
'packages/myfy-web/myfy/web/version.py',
122+
'packages/myfy-cli/myfy_cli/version.py',
123+
'packages/myfy-frontend/myfy/frontend/version.py',
124+
'packages/myfy/myfy/version.py'
125+
]
126+
127+
for file in version_files:
128+
with open(file, 'r') as f:
129+
content = f.read()
130+
content = re.sub(r'__version__ = "[^"]*"', f'__version__ = "{version}"', content)
131+
with open(file, 'w') as f:
132+
f.write(content)
133+
134+
# Update dependency constraints
135+
dep_files = [
136+
'packages/myfy-web/pyproject.toml',
137+
'packages/myfy-cli/pyproject.toml',
138+
'packages/myfy-frontend/pyproject.toml',
139+
'packages/myfy/pyproject.toml'
140+
]
141+
142+
for file in dep_files:
143+
with open(file, 'r') as f:
144+
content = f.read()
145+
content = re.sub(r'myfy-core~=[0-9a-z.]+', f'myfy-core~={base_version}', content)
146+
content = re.sub(r'myfy-web~=[0-9a-z.]+', f'myfy-web~={base_version}', content)
147+
content = re.sub(r'myfy-cli~=[0-9a-z.]+', f'myfy-cli~={base_version}', content)
148+
with open(file, 'w') as f:
149+
f.write(content)
150+
151+
print(f"Version updated to {version} in all files")
152+
PYTHON_SCRIPT
100153
101154
- name: Commit version bump
102155
run: |

0 commit comments

Comments
 (0)