Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(release workflows): Improve Release workflows to enable bugfix versions #1543

Merged
92 changes: 92 additions & 0 deletions .github/actions/publish-tag-and-release/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
#################################################################################
# Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
# Copyright (c) 2024 Contributors to the Eclipse Foundation
#
# See the NOTICE file(s) distributed with this work for additional
# information regarding copyright ownership.
#
# This program and the accompanying materials are made available under the
# terms of the Apache License, Version 2.0 which is available at
# https://www.apache.org/licenses/LICENSE-2.0.
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# SPDX-License-Identifier: Apache-2.0
#################################################################################


---
name: "Publish Github release and tag"
description: "Publish Github release and tag"
inputs:
version:
required: true
description: "The version to be used in the tag and release publication"
token:
required: true
description: "Github token"
is_latest:
required: true
description: "Boolean that defines if a release is latest or not"

runs:
using: "composite"
steps:
- uses: actions/checkout@v4
- name: Prepare Git Config
shell: bash
run: |
# Prepare git env
git config user.name "eclipse-tractusx-bot"
git config user.email "[email protected]"
- name: Create Release Tag
id: create_release_tag
shell: bash
run: |
# informative
git branch -a
git tag

# Create & push tag
git tag ${{ inputs.version }}
git push origin ${{ inputs.version }}
- name: Create GitHub Release
uses: ncipollo/release-action@v1
with:
generateReleaseNotes: true
tag: ${{ inputs.version }}
token: ${{ inputs.token }}
makeLatest: ${{ inputs.is_latest }}
removeArtifacts: true
- uses: ./.github/actions/setup-java
- name: Set new snapshot version
if: ${{ inputs.is_latest }}
shell: bash
run: |
# Extract release version
IFS=.- read -r RELEASE_VERSION_MAJOR RELEASE_VERSION_MINOR RELEASE_VERSION_PATCH SNAPSHOT<<<"${{ inputs.version}}"
INC=0
# Compute new snapshot version, do not increment snapshot on non-final releases, e.g. -rc1
if [ -z $SNAPSHOT ]; then
# snapshot
echo "${{ inputs.version }} is a final release version, increase patch for next snapshot"
INC=1
else
echo "${{ inputs.version }} is not a final release version (contains \"$SNAPSHOT\"), will not increase patch"
fi

VERSION="$RELEASE_VERSION_MAJOR.$((RELEASE_VERSION_MINOR+$INC)).0-SNAPSHOT"
SNAPSHOT_VERSION=$VERSION

# Persist the "version" in the gradle.properties
sed -i "s/version=.*/version=$SNAPSHOT_VERSION/g" gradle.properties

# Commit and push to origin main
git add gradle.properties
git commit --message "Introduce new snapshot version $SNAPSHOT_VERSION"

git push
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#################################################################################
# Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
# Copyright (c) 2021,2023 Contributors to the Eclipse Foundation
#
# See the NOTICE file(s) distributed with this work for additional
Expand All @@ -19,28 +20,66 @@


---
name: "Draft new release"
name: "Draft Release"
run-name: "Draft Release ${{ inputs.version }} from ${{ github.ref_name }}"

on:
workflow_dispatch:
inputs:
version:
description: 'The version you want to release.'
description: 'The version you want to release. Ref should be either main for latest releases or a tag for bugfixes. '
required: true

jobs:
validate-and-prepare:
name: "Validate that tag does not already exist and prepare branch"
runs-on: ubuntu-latest
if: ${{ github.ref_name == 'main' || startsWith(github.ref, 'refs/tags/') }}
outputs:
branch_name: ${{ steps.resolve_branch.outputs.branch_name }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- id: check-tag
name: "Check if tag exists"
run: |-

tag=$(git tag -l ${{ inputs.version }})

if [ ! -z $tag ];
then
echo "Tag already exists! Please choose another tag."
exit 1
fi
- id: resolve_branch
name: "Resolve branch prefix (release or bugfix)"
run: |

if [[ ${{ github.ref_name }} == "main"]];
then
echo "branch_name=release/${{ inputs.version }}" >> "$GITHUB_OUTPUT"
elif [[ ${{ github.ref }} == refs/tags/* ]]
then
echo "branch_name=bugfix/${{ inputs.version }}" >> "$GITHUB_OUTPUT"
else
echo "Ref branch does not match required criteria. Should either be "main" or a tag."
exit 1
fi

draft-new-release:
name: "Draft a new release"
runs-on: ubuntu-latest
needs: validate-and-prepare
permissions:
contents: write
packages: write
pages: write
pull-requests: write
steps:
- uses: actions/checkout@v4
- name: Create release branch
run: git checkout -b release/${{ github.event.inputs.version }}
- name: Create Release or Bugfix branch
run: git checkout -b ${{ needs.validate-and-prepare.outputs.branch_name }}
- name: Initialize mandatory git config
run: |
git config user.name "eclipse-tractusx-bot"
Expand All @@ -49,17 +88,17 @@ jobs:
- name: Bump version in gradle.properties
run: |-
# replace the project's (default) version, could be overwritten later with the -Pversion=... flag
sed -i 's/version=.*/version=${{ github.event.inputs.version }}/g' gradle.properties
sed -i 's/version=.*/version=${{ inputs.version }}/g' gradle.properties
# replace the openapi version with the upcoming one
sed -i 's#tractusx-edc/.*/swagger.yaml#tractusx-edc/${{ github.event.inputs.version }}/swagger.yaml#g' .tractusx
sed -i 's#tractusx-edc/.*/swagger.yaml#tractusx-edc/${{ inputs.version }}/swagger.yaml#g' .tractusx
env:
GITHUB_PACKAGE_USERNAME: ${{ github.actor }}
GITHUB_PACKAGE_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
- name: Bump version in /charts
uses: mikefarah/[email protected]
with:
cmd: |-
find charts -name Chart.yaml -maxdepth 3 | xargs -n1 yq -i '.appVersion = "${{ github.event.inputs.version }}" | .version = "${{ github.event.inputs.version }}"'
find charts -name Chart.yaml -maxdepth 3 | xargs -n1 yq -i '.appVersion = "${{ inputs.version }}" | .version = "${{ inputs.version }}"'
- name: Update Chart READMEs
uses: addnab/docker-run-action@v3
with:
Expand All @@ -71,22 +110,23 @@ jobs:
id: make-commit
run: |
git add gradle.properties $(find charts -name Chart.yaml) $(find charts -name README.md)
git commit --message "Prepare release ${{ github.event.inputs.version }}"
git commit --message "Prepare release ${{ inputs.version }}"

echo "commit=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
- name: Push new branch
run: git push origin release/${{ github.event.inputs.version }}
run: git push origin ${{ needs.validate-and-prepare.outputs.branch_name }}
- name: Create pull request
if: ${{ github.ref_name == 'main' }}
uses: thomaseizinger/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
head: release/${{ github.event.inputs.version }}
base: releases
title: Release version ${{ github.event.inputs.version }}
head: ${{ needs.validate-and-prepare.outputs.branch_name }}
base: main
title: Release version ${{ inputs.version }}
reviewers: ${{ github.actor }}
body: |-
This PR was created in response to a manual trigger of the [release workflow](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}).
This PR was created in response to a manual trigger of the [draft release workflow](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}).
Versions have been bumped in [commit ${{ steps.make-commit.outputs.commit }}](${{ steps.make-commit.outputs.commit }}).

Merging this PR will create a GitHub release and upload any assets that are created as part of the release build.
38 changes: 38 additions & 0 deletions .github/workflows/manual-release-bugfix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#################################################################################
# Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
# Copyright (c) 2021,2023 Contributors to the Eclipse Foundation
#
# See the NOTICE file(s) distributed with this work for additional
# information regarding copyright ownership.
#
# This program and the accompanying materials are made available under the
# terms of the Apache License, Version 2.0 which is available at
# https://www.apache.org/licenses/LICENSE-2.0.
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# SPDX-License-Identifier: Apache-2.0
#################################################################################


---
name: "Bugfix Release"
run-name: "Release bugfix from ${{ github.ref_name }}"

on:
workflow_dispatch:

jobs:
# Gate: Skip if base is not bugfix branch
check-head:
name: "Check if head is bugfix and delegate to release workflow"
if: startsWith(github.ref_name, 'bugfix/')
uses: ./.github/workflows/release.yml
permissions:
contents: write
pages: write
secrets: inherit
Loading
Loading