add image version update workflow #2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Copyright (c) 2024 Dell Inc., or its subsidiaries. All Rights Reserved. | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# This workflow is a reusable one for creating tag and release. | ||
name: Update image versions | ||
# Invocable as a reusable workflow | ||
on: | ||
workflow_call: | ||
inputs: | ||
version: | ||
description: 'Version to release (major, minor, patch)' | ||
required: true | ||
type: string | ||
jobs: | ||
update-image-version: | ||
name: image-version-update | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout the code | ||
uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 # Fetch the full history including tags | ||
- name: Set environment variables | ||
env: | ||
release_pattern: 'release="([0-9]+)\.([0-9]+)\.([0-9]+)"' | ||
version_pattern: 'version="([0-9]+)\.([0-9]+)\.([0-9]+)"' | ||
run: | | ||
release_value=$(grep -oP '^LABEL release="\K([0-9]+)\.([0-9]+)\.([0-9]+)' Dockerfile) | ||
version_value=$(grep -oP '^LABEL version="\K([0-9]+)\.([0-9]+)\.([0-9]+)' Dockerfile) | ||
echo "release_value=$release_value" >> $GITHUB_ENV | ||
echo "version_value=$version_value" >> $GITHUB_ENV | ||
- name: Increment version | ||
env: | ||
MY_VAR1: ${{ env.release_value }} | ||
MY_VAR2: ${{ env.version_value }} | ||
run: | | ||
current_version=$MY_VAR2 | ||
current_version=(${current_version#v}) # remove 'v' prefix from $current_version" | ||
current_release=$MY_VAR1 | ||
current_release=(${current_release#v}) # remove 'v' prefix from $current_release" | ||
IFS='.' read -r -a version_parts <<< "$current_version" | ||
IFS='.' read -r -a release_parts <<< "$current_release" | ||
if "${{ inputs.version == 'major' }}"; then | ||
# major version bump up | ||
version_parts[0]=$(expr ${version_parts[0]} + 1) | ||
new_version="${version_parts[0]}.0.0" | ||
release_parts[0]=$(expr ${release_parts[0]} + 1) | ||
new_release="${release_parts[0]}.0.0" | ||
fi | ||
if "${{ inputs.version == 'minor' }}"; then | ||
# minor version bump up | ||
version_parts[1]=$(expr ${version_parts[1]} + 1) | ||
new_version="${version_parts[0]}.${version_parts[1]}.0" | ||
release_parts[0]=$(expr ${release_parts[0]} + 1) | ||
new_release="${release_parts[0]}.0.0" | ||
fi | ||
if "${{ inputs.version == 'patch' }}"; then | ||
# patch version bump up | ||
version_parts[2]=$(expr ${version_parts[2]} + 1) | ||
new_version="${version_parts[0]}.${version_parts[1]}.${version_parts[2]}" | ||
release_parts[0]=$(expr ${release_parts[0]} + 1) | ||
new_release="${release_parts[0]}.0.0" | ||
fi | ||
echo "New version to be released:v$new_version" | ||
echo "NEW_VERSION=v${new_version}" >> $GITHUB_ENV | ||
echo "New release will be:v$new_release" | ||
echo "NEW_RELEASE=v${new_release}" >> $GITHUB_ENV | ||
- name: Update Dockerfile with new versions | ||
run: | | ||
sed -i "s/release=\"$release_value\"/release=\"$NEW_RELEASE\"/" Dockerfile | ||
sed -i "s/version=\"$version_value\"/version=\"$NEW_VERSION\"/" Dockerfile | ||
# Needed for signing commits using Github App tokens | ||
# See: https://github.com/peter-evans/create-pull-request/blob/main/docs/concepts-guidelines.md#commit-signing | ||
- uses: actions/[email protected] | ||
id: generate-token | ||
with: | ||
app-id: ${{ vars.CSM_RELEASE_APP_ID }} | ||
private-key: ${{ secrets.CSM_RELEASE_APP_PRIVATE_KEY }} | ||
# Must enable "allow GitHub Actions to create pull requests" setting | ||
# Author defaults to the user who triggered the workflow run | ||
- name: Create pull request | ||
uses: peter-evans/create-pull-request@v7 | ||
with: | ||
token: ${{ steps.generate-token.outputs.token }} | ||
branch: "updateImage-${{ env.version_value }}" | ||
commit-message: "Update image version to ${{ env.version_value }} and release version to ${{ env.release_value }}" | ||
title: "Update image version to ${{ env.version_value }} and release version to ${{ env.release_value }}" | ||
body: | | ||
Image version updated to ${{ env.version_value }} | ||
Auto-generated by [common-github-actions](https://github.com/dell/common-github-actions) | ||
sign-commits: true | ||
delete-branch: true |