Skip to content

Create Tag and Release with Changelog #3

Create Tag and Release with Changelog

Create Tag and Release with Changelog #3

name: Create Tag and Release with Changelog
on:
workflow_dispatch:
inputs:
tag_name:
description: 'Tag name for the new release'
required: true
prev_tag_name:
description: 'Previous Tag name for change log'
required: true
permissions:
contents: write
packages: write
pull-requests: write
jobs:
fetch-tag:
runs-on: ubuntu-latest
outputs:
old_tag: ${{ steps.get_tag.outputs.old_tag_name }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ github.ref }}
fetch-depth: 0
- name: Get latest tag
id: get_tag
run: |
echo "old_tag_name=$(git ls-remote --tags origin | awk -F'/' '{print $3}' | grep -v '{}' | sort -V | tail -n1)" >> $GITHUB_OUTPUT
- name: print tag
id: print_tag
run: |
echo "Old Tag=${{ steps.get_tag.outputs.old_tag_name }}"
echo "NEW_TAG=${{ github.event.inputs.tag_name }}" >> $GITHUB_ENV
echo "$(basename ${{ github.ref }})"
- name: Check if tag exists
id: check_tag
run: |
import sys
import subprocess
tag_name = "${{ github.event.inputs.tag_name }}"
command = ['git', 'tag', '-l', tag_name]
output = subprocess.check_output(command, stderr=subprocess.STDOUT)
if output.decode() != "":
print(f"Error: Tag '{tag_name}' already exists.", file=sys.stderr)
sys.exit(1)
else:
print(f"Tag '{tag_name}' does not exists.")
shell: python
continue-on-error: false
#this works only if params.env contains image:tag_version_number
update-params-env:
runs-on: ubuntu-latest
needs: fetch-tag
outputs:
param_env: ${{ steps.read_params_env.outputs.params_env }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ github.ref }}
- name: Update params.env with new release version
run: |
sed -i 's|:v[0-9.]*.*|:${{ github.event.inputs.tag_name }}|gm' config/overlays/odh/params.env
- name: Commit changes
run: |
git config --global user.email "github-actions@github.com"
git config --global user.name "GitHub Actions"
git add config/overlays/odh/params.env
git commit -m "Update image refs for odh release." || true #hack to not fail when there is nothing to commit
- name: Create Tag
id: create_tag
run: |
git tag -a ${{ github.event.inputs.tag_name }} -m "Prepare for ODH release ${{ github.event.inputs.tag_name }}"
git push origin ${{ github.event.inputs.tag_name }}
changelog:
name: Changelog
needs: [fetch-tag,update-params-env]
runs-on: ubuntu-latest
env:
GH_TOKEN: ${{ github.token }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ github.ref }}
- name: Generate Changelog
run: |
gh pr list --state merged --base ${{ github.event.inputs.prev_tag_name }} --head ${{ github.event.inputs.tag_name }} --json title,author,number | \
jq -r '.[] | "* \(.title) by @\(.author.login) in #\(.number)"' > CHANGELOG.md
- name: Create Release
uses: softprops/action-gh-release@v2
with:
token: ${{ github.token }}
tag_name: ${{ github.event.inputs.tag_name }}
prerelease: false
draft: false
#this takes the path of payload to upload as an asset in the changelog
files: bin/*
generate_release_notes: false
name: ${{ github.event.inputs.tag_name }}
body_path: CHANGELOG.md