From 25eb7b16db1552c4b0b57d6f88efad4189d94b52 Mon Sep 17 00:00:00 2001 From: rpancham <95687211+rpancham@users.noreply.github.com> Date: Fri, 19 Apr 2024 11:41:14 +0530 Subject: [PATCH] Create Workflow for release and tag with Changelog (#287) --- .github/workflows/create-release-tag.yml | 103 +++++++++++++++++++ .github/workflows/odh-create-release-tag.yml | 103 +++++++++++++++++++ 2 files changed, 206 insertions(+) create mode 100644 .github/workflows/create-release-tag.yml create mode 100644 .github/workflows/odh-create-release-tag.yml diff --git a/.github/workflows/create-release-tag.yml b/.github/workflows/create-release-tag.yml new file mode 100644 index 00000000000..5a9be9586de --- /dev/null +++ b/.github/workflows/create-release-tag.yml @@ -0,0 +1,103 @@ +name: Create Tag and Release with Changelog + +on: + workflow_dispatch: + inputs: + tag_name: + description: 'Tag name for the new release' + 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.]*\b|:${{ 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." + + - 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 + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + ref: ${{ github.ref }} + + - 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: true + name: ${{ github.event.inputs.tag_name }} \ No newline at end of file diff --git a/.github/workflows/odh-create-release-tag.yml b/.github/workflows/odh-create-release-tag.yml new file mode 100644 index 00000000000..5a9be9586de --- /dev/null +++ b/.github/workflows/odh-create-release-tag.yml @@ -0,0 +1,103 @@ +name: Create Tag and Release with Changelog + +on: + workflow_dispatch: + inputs: + tag_name: + description: 'Tag name for the new release' + 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.]*\b|:${{ 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." + + - 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 + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + ref: ${{ github.ref }} + + - 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: true + name: ${{ github.event.inputs.tag_name }} \ No newline at end of file