From 24c09fcc6f8a00ae9586197c8f0986859c247c19 Mon Sep 17 00:00:00 2001 From: jozefbakus Date: Wed, 2 Jul 2025 14:35:10 +0200 Subject: [PATCH 1/4] Create Release --- .github/workflows/create_release.yml | 134 +++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 .github/workflows/create_release.yml diff --git a/.github/workflows/create_release.yml b/.github/workflows/create_release.yml new file mode 100644 index 00000000..7aa49293 --- /dev/null +++ b/.github/workflows/create_release.yml @@ -0,0 +1,134 @@ +# +# Copyright 2018 ABSA Group Limited +# +# 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 +# +# 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. +# + +name: Create a new release + +on: + workflow_dispatch: + inputs: + release-version: + description: "Define the release version (e.g., v4.7.0)" + required: true + default: "" + development-version: + description: "Define the snapshot version (e.g., v4.7.0)" + required: true + default: "" + +jobs: + create-release: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 # Fetch all history for all tags and branches + + - name: Validate format of received tag + uses: actions/github-script@v7 + with: + script: | + const releaseVersion = core.getInput('release-version'); + const developmentVersion = core.getInput('development-version'); + const regex = /^v[0-9]+\.[0-9]+\.[0-9]+$/; + if (!regex.test(releaseVersion)) { + core.setFailed('Release version does not match the required format "v[0-9]+.[0-9]+.[0-9]+". Valid example: v0.5.2'); + return; + } + if (!regex.test(developmentVersion)) { + core.setFailed('Development version does not match the required format "v[0-9]+.[0-9]+.[0-9]+". Valid example: v0.5.2'); + return; + } + release-version: ${{ github.event.inputs.release-version }} + development-version: ${{ github.event.inputs.development-version }} + + - name: Define semantic version number + id: semantic_version + run: | + RELEASE_VERSION="${{ github.event.inputs.release-version }}" + RELEASE_VERSION_WITHOUT_V=${RELEASE_VERSION#v} + + DEVELOPMENT_VERSION="${{ github.event.inputs.development-version }}" + DEVELOPMENT_VERSION_WITHOUT_V=${DEVELOPMENT_VERSION#v} + + echo "RELEASE_VERSION_WITHOUT_V=${RELEASE_VERSION_WITHOUT_V}" >> "${GITHUB_ENV}" + echo "DEVELOPMENT_VERSION_WITHOUT_V=${DEVELOPMENT_VERSION_WITHOUT_V}" >> "${GITHUB_ENV}" + - name: Configure Git + run: | + git config --global user.name "${{ github.actor }}" + git config --global user.email "${{ github.actor }}@users.noreply.github.com" + - name: Create release branch + run: | + git checkout -b release/${RELEASE_VERSION_WITHOUT_V} + git push origin release/${RELEASE_VERSION_WITHOUT_V} + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: '1.8' + + - name: Set Maven project version, create tag + run: | + git pull origin release/${RELEASE_VERSION_WITHOUT_V} + mvn versions:set -DnewVersion=${RELEASE_VERSION_WITHOUT_V} --no-transfer-progress + mvn versions:commit + git commit -am "Set project version to ${RELEASE_VERSION_WITHOUT_V}" + git push origin release/${RELEASE_VERSION_WITHOUT_V} + - name: Create tag + run: | + git tag ${{ github.event.inputs.release-version }} + git push origin ${{ github.event.inputs.release-version }} + - name: Set next development version + run: | + # Assumes semantic versioning and increments the minor version. Adjust the awk command as needed for different versioning schemes. + NEXT_VERSION=$(echo ${DEVELOPMENT_VERSION_WITHOUT_V} | awk -F. '{print $1"."$2"."$3"-SNAPSHOT"}') + mvn versions:set -DnewVersion=$NEXT_VERSION --no-transfer-progress + mvn versions:commit + git commit -am "Set project version to $NEXT_VERSION" + git push origin release/${RELEASE_VERSION_WITHOUT_V} + - name: Get Default Branch + id: get_default_branch + uses: actions/github-script@v7 + with: + script: | + const response = await github.rest.repos.get({ + owner: context.repo.owner, + repo: context.repo.repo + }); + return response.data.default_branch; + - name: Create Pull Request + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const branch = `release/${process.env.RELEASE_VERSION_WITHOUT_V}`; + await github.rest.pulls.create({ + owner: context.repo.owner, + repo: context.repo.repo, + title: 'Release ${{ github.event.inputs.release-version }}', + head: branch, + base: ${{ steps.get_default_branch.outputs.result }}, + body: 'Pull request to merge release ${{ github.event.inputs.release-version }} into default branch', + draft: false + }); + - name: Create Draft Release + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + name: ${{ github.event.inputs.release-version }} + body: ${{ steps.generate_release_notes.outputs.releaseNotes }} + tag_name: ${{ github.event.inputs.release-version }} + draft: true + prerelease: false \ No newline at end of file From e7a4dc823876723dc00bf10d409a1696f6596e3a Mon Sep 17 00:00:00 2001 From: jozefbakus Date: Thu, 3 Jul 2025 10:07:27 +0200 Subject: [PATCH 2/4] Create Deploy --- .github/workflows/deploy.yml | 89 ++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..53b2518a --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,89 @@ +# +# Copyright 2018 ABSA Group Limited +# +# 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 +# +# 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. +# + +name: Deploy + +on: + workflow_dispatch: + inputs: + tag-name: + description: 'Tag for deployment (e.g., v4.7.0)' + required: true + +jobs: + deploy: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + scala: [ 2.11, 2.12 ] + spark: [ 2, 3 ] + exclude: + - scala: 2.11 + spark: 3 + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 # Fetch all history for all tags and branches + + - name: Validate format of received tag + uses: actions/github-script@v7 + with: + script: | + const newTag = core.getInput('tag-name'); + const regex = /^v[0-9]+\.[0-9]+\.[0-9]+$/; + if (!regex.test(newTag)) { + core.setFailed('Tag does not match the required format "v[0-9]+.[0-9]+.[0-9]+". Valid example: v4.7.0'); + return; + } + tag-name: ${{ github.event.inputs.tag-name }} + + - name: Define semantic version number + id: semantic_version + run: | + TAG_NAME="${{ github.event.inputs.tag-name }}" + VERSION=${TAG_NAME#v} + echo "VERSION=${VERSION}" >> "${GITHUB_ENV}" + - name: Checkout to tag + run: | + git checkout ${{ github.event.inputs.tag-name }} + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: '1.8' + + - name: Import GPG keys + run: | + echo "${{ secrets.MAVEN_GPG_PRIVATE_KEY }}" | base64 --decode | gpg --batch --import --keyserver https://keyserver.ubuntu.com/ + echo "${{ secrets.MAVEN_GPG_PASSPHRASE }}" | gpg --passphrase-fd 0 --batch --pinentry-mode loopback --import-ownertrust <<< . + - name: Create settings.xml + run: | + echo " + + + ossrh + ${{ secrets.OSSRH_USERNAME }} + ${{ secrets.OSSRH_TOKEN }} + + + " > $HOME/.m2/settings.xml + - name: Build and deploy artifact + env: + MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} + run: | + mvn scala-cross-build:change-version -Pscala-${{ matrix.scala }},spark-${{ matrix.spark }} + mvn -B -e -DskipTests -Dmanual-release -Pdeploy,scala-${{ matrix.scala }},spark-${{ matrix.spark }} -Dossrh clean deploy -Dossrh.username=${{ secrets.OSSRH_USERNAME }} -Dossrh.password=${{ secrets.OSSRH_TOKEN }} -Dgpg.passphrase=${{ secrets.MAVEN_GPG_PASSPHRASE }} From ee87ec28ec44e0e0c69890e8f0bb7c41a2c0f1c4 Mon Sep 17 00:00:00 2001 From: jozefbakus Date: Thu, 3 Jul 2025 10:41:31 +0200 Subject: [PATCH 3/4] Deployment refactoring --- .github/workflows/deploy.yml | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 53b2518a..72a83840 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -17,10 +17,6 @@ name: Deploy on: workflow_dispatch: - inputs: - tag-name: - description: 'Tag for deployment (e.g., v4.7.0)' - required: true jobs: deploy: @@ -37,29 +33,9 @@ jobs: - name: Checkout repository uses: actions/checkout@v3 with: + fetch-tags: true fetch-depth: 0 # Fetch all history for all tags and branches - - name: Validate format of received tag - uses: actions/github-script@v7 - with: - script: | - const newTag = core.getInput('tag-name'); - const regex = /^v[0-9]+\.[0-9]+\.[0-9]+$/; - if (!regex.test(newTag)) { - core.setFailed('Tag does not match the required format "v[0-9]+.[0-9]+.[0-9]+". Valid example: v4.7.0'); - return; - } - tag-name: ${{ github.event.inputs.tag-name }} - - - name: Define semantic version number - id: semantic_version - run: | - TAG_NAME="${{ github.event.inputs.tag-name }}" - VERSION=${TAG_NAME#v} - echo "VERSION=${VERSION}" >> "${GITHUB_ENV}" - - name: Checkout to tag - run: | - git checkout ${{ github.event.inputs.tag-name }} - name: Set up JDK 1.8 uses: actions/setup-java@v1 with: From d61fa01e35a253c6f74d09cb8ffe9b9cb8c458df Mon Sep 17 00:00:00 2001 From: jozefbakus Date: Fri, 4 Jul 2025 11:15:36 +0200 Subject: [PATCH 4/4] Added correct example --- .github/workflows/create_release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create_release.yml b/.github/workflows/create_release.yml index 7aa49293..4ae79def 100644 --- a/.github/workflows/create_release.yml +++ b/.github/workflows/create_release.yml @@ -23,7 +23,7 @@ on: required: true default: "" development-version: - description: "Define the snapshot version (e.g., v4.7.0)" + description: "Define the snapshot version (e.g., v4.7.1)" required: true default: ""