Skip to content

Commit

Permalink
Add script to update and verify version
Browse files Browse the repository at this point in the history
  • Loading branch information
Yang-33 committed Nov 21, 2024
1 parent eae415f commit f4ebfe5
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 5 deletions.
3 changes: 1 addition & 2 deletions .github/workflows/auto-testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,7 @@ jobs:
- name: Update version in linebot/__about__.py
run: |
VERSION="123.456.789"
sed -i "s/__version__ = '.*'/__version__ = '$VERSION'/g" linebot/__about__.py
cat linebot/__about__.py
python tools/update_version.py $VERSION
check-import:
runs-on: ubuntu-latest
Expand Down
15 changes: 12 additions & 3 deletions .github/workflows/publish-to-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ name: Upload Python Package
on:
release:
types: [published]
workflow_dispatch:
inputs:
version:
description: 'The version to release'
required: true

jobs:
deploy:
Expand All @@ -26,10 +31,14 @@ jobs:
pip install setuptools wheel twine
- name: Update version in linebot/__about__.py
run: |
VERSION=${{ github.event.release.tag_name }}
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
VERSION=${{ github.event.inputs.version }}
else
VERSION=${{ github.event.release.tag_name }}
fi
VERSION=${VERSION#v}
sed -i "s/__version__ = '.*'/__version__ = '$VERSION'/g" linebot/__about__.py
cat linebot/__about__.py
python tools/update_and_verify_version.py $VERSION
- name: Build and publish
env:
TWINE_USERNAME: ${{ secrets.PYPI_API_USER }}
Expand Down
66 changes: 66 additions & 0 deletions tools/update_version.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import sys
import re
import subprocess

def update_and_verify_version(new_version):
file_path = 'linebot/__about__.py'

# Update version
with open(file_path, 'r') as file:
content = file.read()

new_content = re.sub(
r"__version__ = '.*?'",
f"__version__ = '{new_version}'",
content
)

with open(file_path, 'w') as file:
file.write(new_content)

print(f"Updated version to {new_version} in {file_path}")

# verify version
match = re.search(r"__version__ = '(.*?)'", new_content)
if not match:
raise ValueError("Version string not found in the file.")

actual_version = match.group(1)
if actual_version != new_version:
raise ValueError(f"Version mismatch: expected {new_version}, found {actual_version}")

print(f"Version verified: {actual_version}")

# diff check just in case
try:
result = subprocess.run(['git', 'diff', '--numstat', file_path], capture_output=True, text=True, check=True)
changed_lines = result.stdout.strip().split('\n')
added_lines = 0
deleted_lines = 0

for line in changed_lines:
added, deleted = map(int, line.split('\t')[:2])
added_lines += added
deleted_lines += deleted

if added_lines != 1 or deleted_lines != 1:
raise ValueError(f"Unexpected number of changed lines: expected 1 added and 1 deleted, found {added_lines} added and {deleted_lines} deleted")

print('Git diff verification passed: 1 line added and 1 line deleted.')

except subprocess.CalledProcessError as e:
print(f"Error during git diff verification: {e}")
sys.exit(1)

if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python update_and_verify_version.py <new_version>")
sys.exit(1)

new_version = sys.argv[1]

try:
update_and_verify_version(new_version)
except ValueError as e:
print(e)
sys.exit(1)

0 comments on commit f4ebfe5

Please sign in to comment.