diff --git a/.github/workflows/auto-testing.yml b/.github/workflows/auto-testing.yml index 3951df9ef..59808e6e0 100644 --- a/.github/workflows/auto-testing.yml +++ b/.github/workflows/auto-testing.yml @@ -33,12 +33,6 @@ jobs: - name: Ensure generate-code.py doesn't throw any error run: | python generate-code.py - - name: Update version in linebot/__about__.py - run: | - VERSION="12.3.0" - VERSION=${VERSION#v} - sed -i "s/__version__ = '__LINE_BOT_SDK_PYTHON_VERSION__'/__version__ = '$VERSION'/g" linebot/__about__.py - cat linebot/__about__.py - name: Test with pytest run: | tox @@ -64,13 +58,6 @@ jobs: uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - - name: Update version in linebot/__about__.py - run: | - VERSION="12.3.0" - VERSION=${VERSION#v} - sed -i "s/__version__ = '__LINE_BOT_SDK_PYTHON_VERSION__'/__version__ = '$VERSION'/g" linebot/__about__.py - cat linebot/__about__.py - - name: Install dependencies & lib run: | python -m pip install --upgrade pip diff --git a/.github/workflows/publish-to-pypi.yml b/.github/workflows/publish-to-pypi.yml index b29e353f2..8c31725f6 100644 --- a/.github/workflows/publish-to-pypi.yml +++ b/.github/workflows/publish-to-pypi.yml @@ -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: @@ -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__ = '__LINE_BOT_SDK_PYTHON_VERSION__'/__version__ = '$VERSION'/g" linebot/__about__.py - cat linebot/__about__.py + python tools/update_version.py $VERSION - name: Build and publish env: TWINE_USERNAME: ${{ secrets.PYPI_API_USER }} diff --git a/linebot/__about__.py b/linebot/__about__.py index dbce609c0..b8ea48d3a 100644 --- a/linebot/__about__.py +++ b/linebot/__about__.py @@ -15,7 +15,7 @@ """Meta data of line-bot-sdk.""" -__version__ = '__LINE_BOT_SDK_PYTHON_VERSION__' +__version__ = '1.0.0a1' __author__ = 'LINE Corporation' __copyright__ = 'Copyright 2016, LINE Corporation' __license__ = 'Apache 2.0' diff --git a/tools/update_version.py b/tools/update_version.py new file mode 100755 index 000000000..ba928ddf7 --- /dev/null +++ b/tools/update_version.py @@ -0,0 +1,70 @@ +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.') + + # Show diff + diff_result = subprocess.run(['git', 'diff', '--color=always', file_path], capture_output=True, text=True, check=True) + print('Git diff output:\n', diff_result.stdout) + + 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_version.py ") + sys.exit(1) + + new_version = sys.argv[1] + + try: + update_and_verify_version(new_version) + except ValueError as e: + print(e) + sys.exit(1)