Skip to content

Commit

Permalink
Automate release process
Browse files Browse the repository at this point in the history
  • Loading branch information
hkad98 committed Nov 15, 2023
1 parent ecde876 commit 97a8445
Show file tree
Hide file tree
Showing 3 changed files with 134 additions and 0 deletions.
96 changes: 96 additions & 0 deletions .github/workflows/bump-version.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# (C) 2023 GoodData Corporation
name: Bump version & trigger release

on:
workflow_dispatch:
inputs:
bump_type:
description: 'Type of version bump to perform (following semver).'
type: choice
required: true
default: 'minor'
options:
- major
- minor
- patch

permissions:
contents: write

jobs:
bump-version:
runs-on: ubuntu-latest
outputs:
new_version: ${{ steps.bump.outputs.new_version }}
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version-file: '.python-version'
cache: 'pip'
- name: Bump version
id: bump
run: |
NEW_VERSION=$(python ./scripts/bump_version.py ${{ github.event.inputs.bump_type }})
echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT
- name: Bump version in documentation
run: |
python scripts/bump_doc_dependencies.py ${{ steps.bump.outputs.new_version }}
- name: Bump version in codebase
run: |
make release-ci VERSION=${{ steps.bump.outputs.new_version }}
- name: Commit version bump and push to custom branch
id: commit
uses: EndBug/add-and-commit@v9
with:
message: "Bump to ${{ steps.bump.outputs.new_version }}"
committer_name: GitHub Actions
committer_email: [email protected]
new_branch: "release/${{ steps.bump.outputs.new_version }}"
- name: Create PR with the version bump
id: pr
if: ${{ steps.commit.outputs.pushed == 'true' }}
run: |
PR_URL=$(gh pr create \
--title "[bot] bump to ${{ steps.bump.outputs.new_version }}" \
--body ":rocket: Automated PR to bump to ${{ steps.bump.outputs.new_version }}." \
--base master --head "release/${{ steps.bump.outputs.new_version }}")
PR_NUMBER=$(basename $PR_URL)
echo "pr_number=$PR_NUMBER" >> $GITHUB_OUTPUT
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Approve the PR as yenkins-admin
if: ${{ steps.commit.outputs.pushed == 'true' }}
run: |
gh pr review ${{ steps.bump.outputs.pr_number }} --approve
gh issue update ${{ steps.bump.outputs.pr_number }} --add-label "merge"
env:
GH_TOKEN: ${{ secrets.TOKEN_GITHUB_YENKINS_ADMIN }}
# create-release-branch:
# needs:
# - bump-version
# runs-on: ubuntu-latest
# steps:
# - name: Checkout
# uses: actions/checkout@v3
# - name: Create documentation rel/${{ github.event.inputs.bump_type }} branch
# run: |
# git config user.name GitHub Actions
# git config user.email [email protected]
# git checkout -b rel/${{ needs.bump-version.outputs.new_version }}
# git push origin rel/${{ needs.bump-version.outputs.new_version }}
# trigger-release:
# needs:
# - bump-version
# - create-release-branch
# runs-on: ubuntu-latest
# steps:
# - name: Checkout
# uses: actions/checkout@v4
# - name: Push new tag – v${{ needs.bump-version.outputs.new_version }}
# run: |
# git config user.name GitHub Actions
# git config user.email [email protected]
# git tag v${{ needs.bump-version.outputs.new_version }}
# git push origin v${{ needs.bump-version.outputs.new_version }}
5 changes: 5 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,11 @@ release:
if [ -z "$(VERSION)" ]; then echo "Usage: 'make release VERSION=X.Y.Z'"; false; else \
tbump $(VERSION) --no-tag --no-push ; fi

.PHONY: release-ci
release-ci:
if [ -z "$(VERSION)" ]; then echo "Usage: 'make release-ci VERSION=X.Y.Z'"; false; else \
tbump $(VERSION) --only-patch --non-interactive ; fi

.PHONY: check-copyright
check-copyright:
./scripts/check_copyright.py FOLDER
Expand Down
33 changes: 33 additions & 0 deletions scripts/bump_version.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# (C) 2023 GoodData Corporation
import sys
import tomllib
from pathlib import Path

_ROOT_DIR = Path(__file__).resolve().parent.parent


def get_version(content: dict) -> list[int]:
current_version = content.get("tool", {}).get("tbump", {}).get("version", {}).get("current")
if current_version is None:
raise ValueError("No current version found while reading from pyproject.toml")
return list(map(int, current_version.split(".")))


if __name__ == "__main__":
bump_type = sys.argv[1]
with open(_ROOT_DIR / "pyproject.toml", "rb") as f:
data = tomllib.load(f)
version = get_version(data)
match bump_type:
case "patch":
version[2] += 1
case "minor":
version[1] += 1
version[2] = 0
case "major":
version[0] += 1
version[1] = 0
version[2] = 0
case _:
raise ValueError("Invalid bump type")
print(".".join(list(map(str, version))))

0 comments on commit 97a8445

Please sign in to comment.