From b87e1f1bcbac9a52563bd0272de4531947152ff9 Mon Sep 17 00:00:00 2001 From: Ben Thomasson Date: Fri, 8 Mar 2024 19:25:52 -0500 Subject: [PATCH] chore: automated release --- .bumpversion.cfg | 9 ----- .github/workflows/release.yml | 36 ++++++++++++++++++ Makefile | 5 ++- VERSION | 1 + pyproject.toml | 26 +++++++++++++ requirements_dev.txt | 2 +- tests/unit/test_cli.py | 2 +- tools/ansible/release.yml | 70 +++++++++++++++++++++++++++++++++++ 8 files changed, 139 insertions(+), 12 deletions(-) delete mode 100644 .bumpversion.cfg create mode 100644 .github/workflows/release.yml create mode 100644 VERSION create mode 100644 tools/ansible/release.yml diff --git a/.bumpversion.cfg b/.bumpversion.cfg deleted file mode 100644 index 0890ac06..00000000 --- a/.bumpversion.cfg +++ /dev/null @@ -1,9 +0,0 @@ -[bumpversion] -current_version = 1.0.5 -commit = False -tag = False -search = {current_version} - -[bumpversion:file:setup.cfg] - -[bumpversion:file:ansible_rulebook/__init__.py] diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..25fb1bae --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,36 @@ +--- +name: Release ansible-rulebook + +env: + LC_ALL: "C.UTF-8" # prevent ERROR: Ansible could not initialize the preferred locale: unsupported locale setting + +on: + workflow_dispatch: + +jobs: + stage: + runs-on: ubuntu-latest + timeout-minutes: 90 + permissions: + packages: write + contents: write + steps: + - name: Checkout ansible-rulebook + uses: actions/checkout@v3 + with: + fetch-depth: 0 + fetch-tags: true + + - name: Get python version from Makefile + run: echo py_version=`make PYTHON_VERSION` >> $GITHUB_ENV + + - name: Install python ${{ env.py_version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ env.py_version }} + + - name: Install python deps + run: pip install -r requirements_dev.txt + + - name: Create release + run: ansible-playbook tools/ansible/release.yml -i localhost -e github_token=${{ secrets.GITHUB_TOKEN }} -vvv diff --git a/Makefile b/Makefile index 109059c7..19bd655c 100644 --- a/Makefile +++ b/Makefile @@ -88,4 +88,7 @@ install: clean ## install the package to the active Python's site-packages pip install . minimal-ee: - ansible-builder build -f ./minimal-decision-environment.yml -t minimal-de:latest \ No newline at end of file + ansible-builder build -f ./minimal-decision-environment.yml -t minimal-de:latest + +PYTHON_VERSION: + @echo '3.9' diff --git a/VERSION b/VERSION new file mode 100644 index 00000000..90a27f9c --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.0.5 diff --git a/pyproject.toml b/pyproject.toml index 9329969a..8c42d3e1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,3 +12,29 @@ profile = "black" combine_as_imports = true line_length = 79 extend_skip = ["docs"] + +[tool.bumpver] +current_version = "1.0.5" +version_pattern = "MAJOR.MINOR.PATCH[PYTAGNUM]" +commit_message = "chore: bump version {old_version} -> {new_version}" +tag_message = "{new_version}" +tag_scope = "default" +pre_commit_hook = "" +post_commit_hook = "" +commit = true +tag = true +push = true + +[tool.bumpver.file_patterns] +"pyproject.toml" = [ + 'current_version = "{version}"', +] +"ansible_rulebook/__init__.py" = [ + '__version__ = "{version}"', +] +"setup.cfg" = [ + 'version = {version}', +] +"VERSION" = [ +'{version}' +] diff --git a/requirements_dev.txt b/requirements_dev.txt index aaec948b..760e4939 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -2,7 +2,7 @@ -r requirements_lint.txt -r docs/requirements.txt -bump2version +bumpver # Packaging / distribution twine diff --git a/tests/unit/test_cli.py b/tests/unit/test_cli.py index 5581154a..5baf62cc 100644 --- a/tests/unit/test_cli.py +++ b/tests/unit/test_cli.py @@ -11,7 +11,7 @@ def test_get_version(): output = get_version() pattern = re.compile( - r"""\d+\.\d+\.\d+ + r"""\d+\.\d+\.\d+(.*) Executable location = (.+) Drools_jpy version = \d+\.\d+\.\d+ Java home = (.+) diff --git a/tools/ansible/release.yml b/tools/ansible/release.yml new file mode 100644 index 00000000..8466238b --- /dev/null +++ b/tools/ansible/release.yml @@ -0,0 +1,70 @@ +--- +- name: Release ansible-rulebook + hosts: localhost + connection: local + gather_facts: true + vars: + repo_identifier: "ansible/ansible-rulebook" + api_repo_prefix: "https://api.github.com/repos/{{ repo_identifier }}" + + # Note: + # When this playbook runs it will run in the directory of the playbook so ../../ would be a reference to the ansible-rulebook root + + tasks: + + - name: Get the build number from VERSION file + shell: "cat VERSION" + args: + chdir: '../../' + register: version_file + + - set_fact: + release_number: "{{ version_file.stdout }}" + + - name: Build ansible-rulebook + command: + cmd: make dist + args: + chdir: '../../' + tags: + - build + + - name: Create release in github + uri: + url: "{{ api_repo_prefix }}/releases" + method: POST + body_format: json + body: + tag_name: "{{ release_number }}" + name: "v{{ release_number }}" + draft: False + generate_release_notes: True + status_code: + - 201 + headers: + Accept: 'application/vnd.github.v3+json' + Authorization: 'bearer {{ github_token }}' + register: new_release_response + tags: + - github + + - name: Upload the build files + uri: + # For some reason the upload_url ends with ansible-rulebook/releases/138751035/assets{?name,label} + # We have to strip that off before adding our args to the URLs + url: "{{ new_release_response.json['upload_url'] | regex_replace('{.*}', '') }}?name={{ file_name }}" + method: POST + src: "{{ item }}" + status_code: + - 201 + headers: + Accept: 'application/vnd.github.v3+json' + Authorization: 'bearer {{ github_token }}' + Content-Type: "{{ file_name.endswith('tar.gz') | ternary('application/gzip', 'application/x-wheel+zip') }}" + vars: + file_name: "{{ item | basename }}" + loop: "{{ lookup('ansible.builtin.fileglob', '../../dist/*', wantlist=True) }}" + loop_control: + label: "{{ item | basename }}" + tags: + - github