Skip to content

Commit

Permalink
Move release logic to a new workflow
Browse files Browse the repository at this point in the history
- remove steps creating the GitHub release from "build.yaml" workflow.
- add steps to tag the main branch with the version tag after an
  automerge in the "build.yaml" workflow.
- create a new GitHub Action for handling GitHub release on new tags on
  main.
- modify the python script handling the release to be able to get the
  release body directly.

fixes #380
  • Loading branch information
mgoerens committed Jul 20, 2023
1 parent 75e9e31 commit bcfda51
Show file tree
Hide file tree
Showing 7 changed files with 100 additions and 56 deletions.
28 changes: 15 additions & 13 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Build, Test and Release
name: Build, Test, Automerge and Tag

on:
pull_request_target:
Expand Down Expand Up @@ -118,7 +118,7 @@ jobs:
id: create-tarfile
working-directory: ./chart-verifier
run: |
# check if release file only is included in PR
# create test tarball for the tests
ve1/bin/tar-file --release="test"
Expand Down Expand Up @@ -187,7 +187,7 @@ jobs:
- name: Approve PR
id: approve_pr
if: ${{ steps.check_version_updated.outputs.updated == 'true'}}
uses: hmarr/auto-approve-action@v2
uses: hmarr/auto-approve-action@v3
with:
github-token: ${{ secrets.GITHUB_TOKEN }}

Expand All @@ -200,21 +200,23 @@ jobs:
MERGE_METHOD: squash
MERGE_LABELS: ""

- name: Check for PR merge
- name: Get master branch sha
id: master_sha
if: ${{ steps.check_version_updated.outputs.updated == 'true'}}
run: |
ve1/bin/check-auto-merge --api-url=${{ github.event.pull_request._links.self.href }}
git fetch
export ORIGIN_MASTER_SHA=$(git rev-parse origin/master)
echo "origin_master_sha=$ORIGIN_MASTER_SHA" >> $GITHUB_OUTPUT
- name: Create the the release
id: create_release
- name: Tag master
id: tag_version
if: ${{ steps.check_version_updated.outputs.updated == 'true'}}
uses: softprops/action-gh-release@v1
uses: mathieudutour/[email protected]
with:
tag_name: ${{ steps.check_version_in_PR.outputs.PR_version }}
body: ${{ steps.check_version_in_PR.outputs.PR_release_body }}
files: ${{ steps.check_version_in_PR.outputs.PR_tarball_name }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
github_token: ${{ secrets.GITHUB_TOKEN }}
custom_tag: ${{ steps.check_version_in_PR.outputs.PR_version }}
tag_prefix: ""
commit_sha: ${{ steps.master_sha.outputs.origin_master_sha }}

- name: Wait for image build to complete
# Quay is configured to automatically build our image. This waits
Expand Down
56 changes: 56 additions & 0 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: create release on new tags

on:
push:
# Publish semver tags as releases.
tags: [ '*.*.*' ]
# [0-9]+.[0-9]+.[0-9]+

jobs:
build-and-push:

runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Build binary and make tarball
id: build_bin
run: |
make bin
tar -zcvf chart-verifier.tgz -C out/ chart-verifier
export TARBALL_PATH=$(realpath chart-verifier.tgz)
echo "tarball_path=$TARBALL_PATH"
- name: Print tag to GITHUB_OUTPUT
id: get_tag
run: |
echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT
- name: Set up Python 3.x
uses: actions/setup-python@v2
with:
python-version: '3.9'

- name: Set up Python scripts
run: |
# set up python requirements and scripts on PR branch
python3 -m venv ve1
cd scripts && ../ve1/bin/pip3 install -r requirements.txt && cd ..
cd scripts && ../ve1/bin/python3 setup.py install && cd ..
- name: Generate release body
id: release_body
run: ve1/bin/print-release-body

- name: Create the the release
id: create_release
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ steps.get_tag.outputs.RELEASE_VERSION }}
body: ${{ steps.release_body.outputs.PR_release_body }}
files: ${{ steps.build_bin.outputs.tarball_path }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

4 changes: 2 additions & 2 deletions scripts/setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ where = src
[options.entry_points]
console_scripts =
release-checker = release.releasechecker:main
check-auto-merge = checkautomerge.checkautomerge:main
print-release-body = release.releasebody:main
build-and-test = buildandtest.buildandtest:main
check-user = owners.checkuser:main
sa-for-chart-testing = saforcharttesting.saforcharttesting:main
tar-file = release.tarfile_asset:main
tar-file = release.tarfile_asset:main
Empty file.
27 changes: 0 additions & 27 deletions scripts/src/checkautomerge/checkautomerge.py

This file was deleted.

25 changes: 25 additions & 0 deletions scripts/src/release/releasebody.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import sys

sys.path.append('./scripts/src/')
from release import releasechecker
from utils import utils

def make_release_body(version, image_name, release_info):
body = f"Chart verifier version {version} <br><br>Docker Image:<br>- {image_name}:{version}<br><br>"
body += "This version includes:<br>"
for info in release_info:
if info.startswith("<"):
body += info
else:
body += f"- {info}<br>"

print(f"[INFO] Release body: {body}")
utils.add_output("PR_release_body",body)

def main():
version_info = releasechecker.get_version_info()
make_release_body(version_info["version"],version_info["quay-image"],version_info["release-info"])
# tarfile = create(args.release)
# print(f'[INFO] Verifier tarball created : {tarfile}.')
# utils.add_output("tarball_full_name",tarfile)

16 changes: 2 additions & 14 deletions scripts/src/release/releasechecker.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
import semver
import sys
sys.path.append('./scripts/src/')
from release import tarfile_asset
from release import tarfile_asset, releasebody
from utils import utils

VERSION_FILE = 'pkg/chartverifier/version/version_info.json'
Expand Down Expand Up @@ -64,18 +64,6 @@ def check_if_only_version_file_is_modified(api_url):

return version_file_found

def make_release_body(version, image_name, release_info):
body = f"Chart verifier version {version} <br><br>Docker Image:<br>- {image_name}:{version}<br><br>"
body += "This version includes:<br>"
for info in release_info:
if info.startswith("<"):
body += info
else:
body += f"- {info}<br>"

print(f"[INFO] Release body: {body}")
utils.add_output("PR_release_body",body)

def get_version_info():
data = {}
with open(VERSION_FILE) as json_file:
Expand Down Expand Up @@ -111,7 +99,7 @@ def main():
utils.add_output("PR_release_image",version_info["quay-image"])
utils.add_output("PR_release_info",version_info["release-info"])
utils.add_output("PR_includes_release","true")
make_release_body(version_info["version"],version_info["quay-image"],version_info["release-info"])
releasebody.make_release_body(version_info["version"],version_info["quay-image"],version_info["release-info"])
else:
version_info = get_version_info()
if args.version:
Expand Down

0 comments on commit bcfda51

Please sign in to comment.