From 265dbacc7e3006fa55d248d83fc0b30304928de9 Mon Sep 17 00:00:00 2001 From: Mirza Karacic Date: Sat, 4 Jan 2025 11:26:00 -0800 Subject: [PATCH] Added versioning from CI --- .github/workflows/create-release.yaml | 24 ++++++++++++ .github/workflows/push-to-stage.yaml | 3 +- .github/workflows/release-stage.yaml | 20 ++++++++-- .github/workflows/release.yaml | 45 +++++++++++++++++++-- set_version | 56 +++++++++++++++++++++++++++ 5 files changed, 139 insertions(+), 9 deletions(-) create mode 100644 .github/workflows/create-release.yaml create mode 100755 set_version diff --git a/.github/workflows/create-release.yaml b/.github/workflows/create-release.yaml new file mode 100644 index 000000000..f3275b581 --- /dev/null +++ b/.github/workflows/create-release.yaml @@ -0,0 +1,24 @@ +name: create-new-release + +on: + workflow_dispatch: + inputs: + version: + type: string + required: true + description: New version to set + commit: + type: string + required: false + description: Commit of of which to build new version. If not provided will use HEAD + default: dev/dev-ci-fixes-stage # todo: Update this for after demo + +jobs: + build-stage: + name: Build stage + uses: ./.github/workflows/release-stage.yaml + with: + ref: ${{ inputs.commit }} + version: ${{ inputs.version }} + build-number: ${{ github.run_number }} + secrets: inherit diff --git a/.github/workflows/push-to-stage.yaml b/.github/workflows/push-to-stage.yaml index 5448b1646..e5c908554 100644 --- a/.github/workflows/push-to-stage.yaml +++ b/.github/workflows/push-to-stage.yaml @@ -11,5 +11,6 @@ jobs: name: Build stage uses: ./.github/workflows/release-stage.yaml with: - branch: ${{ github.ref }} + ref: ${{ github.ref }} + build-number: ${{ github.run_number }} secrets: inherit diff --git a/.github/workflows/release-stage.yaml b/.github/workflows/release-stage.yaml index 7420c2707..88881c561 100644 --- a/.github/workflows/release-stage.yaml +++ b/.github/workflows/release-stage.yaml @@ -1,9 +1,19 @@ on: workflow_call: inputs: - branch: + ref: type: string required: true + version: + type: string + required: false + build-number: + type: string + required: true + is-snapshot: + type: boolean + required: false + default: true jobs: debug-job: @@ -11,7 +21,7 @@ jobs: steps: - name: debug run: | - echo "${{ inputs.branch }}" + echo "${{ inputs.ref }}" echo "${{ github.base_ref }}" java-version: @@ -23,7 +33,7 @@ jobs: - name: Checkout client uses: actions/checkout@v4 with: - ref: ${{ inputs.branch }} + ref: ${{ inputs.ref }} - name: Get java version id: get-java-version @@ -41,9 +51,11 @@ jobs: matrix: crypto-type: [bouncycastle, gnu] with: + ref: ${{ inputs.ref }} java-version: ${{ needs.java-version.outputs.java-version }} - branch: ${{ inputs.branch }} crypto-type: ${{ matrix.crypto-type }} + version: ${{ inputs.version }} + is-snapshot: ${{ inputs.is-snapshot }} secrets: inherit aggregate-published-artifacts: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 2e6e45c9d..8fb2444e8 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -5,7 +5,7 @@ permissions: on: workflow_call: inputs: - branch: + ref: type: string required: true java-version: @@ -14,6 +14,12 @@ on: crypto-type: type: string required: true + version: + type: string + required: true + is-snapshot: + type: boolean + required: true secrets: GPG_SECRET_KEY_ORG: required: true @@ -31,8 +37,8 @@ jobs: - name: Checkout code uses: actions/checkout@v4 with: - ref: ${{ inputs.branch }} - + ref: ${{ inputs.ref }} + # Java plugin will setup gpg but we are not using maven to deploy do JFrog. # - jf mvn clean install on publish does not publish POM we would like to publish - name: Setup Java @@ -43,9 +49,25 @@ jobs: gpg-private-key: ${{ secrets.GPG_SECRET_KEY_ORG }} gpg-passphrase: GPG_PASS + - name: Get release or snapshot-version + id: get-release-version + shell: bash + run: | + IS_SNAPSHOT='${{ inputs.is-snapshot }}' + if [ $IS_SNAPSHOT == 'true' ];then + echo release-version="$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)_$GITHUB_SHA" >> $GITHUB_OUTPUT + else + echo release-version="${{ inputs.version }}" + fi + + - name: Set version + shell: bash + run: | + ./set_version ${{ steps.get-release-version.outputs.release-version }} ${{ inputs.crypto-type }} + - name: Build all modules shell: bash - run: mvn clean install -P ${{ inputs.crypto-type }} # The crypto profile is usually set with set_crypto but since we need to toggle multiple prfiles set_crypto option is not being picked up + run: mvn clean install -P ${{ inputs.crypto-type }} # The crypto profile is usually set with set_crypto but since we need to toggle multiple profiles set_crypto option is not being picked up - name: Stage artifacts for publish working-directory: client @@ -72,6 +94,21 @@ jobs: run: | echo artifact-version=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) >> $GITHUB_OUTPUT + - name: Debug + if: ${{ inputs.is-snapshot != true }} + run: | + echo "should commit" + + #- name: Commit new version + # # Only committing version if this is a release and not snapshot build + # if: ${{ inputs.is-snapshot != true }} + # uses: stefanzweifel/git-auto-commit-action@v4 + # with: + # commit_message: 'Bumping version to ${{ inputs.version }} [skip ci]' + # commit_author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> + # tagging_message: Bumping version ${{ inputs.version }} + # branch: ${{ inputs.ref }} + - name: Publish to JFrog uses: ./.github/actions/publish-to-jfrog with: diff --git a/set_version b/set_version new file mode 100755 index 000000000..3bb1aec4c --- /dev/null +++ b/set_version @@ -0,0 +1,56 @@ +#!/usr/bin/env bash + +# +# Function definitions +# +function update_version() { + VERSION="$1" + BUILD_TYPE=$2 + PARENT_POM="pom.xml" + PUBLIC_POM="client/deploy-resources/${BUILD_TYPE}_pom.xml" + + # Detecting host type. `sed` on bsd and linux are not the same + if [[ "$(uname)" == "Darwin" ]]; then + sed -i "" "s#[^<]*#${VERSION}#g" "$PARENT_POM" + sed -i "" "1,/[^<]*<\/version>/ s#[^<]*#${VERSION}#" "$PUBLIC_POM" + else + sed -i "s#[^<]*#${VERSION}#g" "$PARENT_POM" + sed -i "0,/[^<]*<\/version>/ s//${VERSION}<\/version>/" "$PUBLIC_POM" + fi +} + +function main() { + VERSION=$1 + BUILD_TYPE=$2 + + # If version has been set using set_crypto we are honoring that setting + if [ -f "bouncycastle.config" ];then + BUILD_TYPE="bouncycastle" + elif [ -f "gnu.config" ];then + BUILD_TYPE="gnu" + fi + + update_version $VERSION $BUILD_TYPE +} + +# +# Main entry +# +VERSION=$1 +BUILD_TYPE=${2:-"gnu"} +REGEX="^[0-9]+\.[0-9]+\.[0-9]+(_[a-zA-Z0-9]+)?$" + +if [ -z $VERSION ];then + printf "Missing version ..." + + exit 1 +elif [[ ! "$1" =~ $REGEX ]];then + printf "Version format not valid. Valid format are [0 - 9].[0 - 9].[0 - 9] | [0 - 9].[0 - 9].[0 - 9]_[git_sha]" + + exit 1 +else + # Call main + main $VERSION $BUILD_TYPE + + exit 0 +fi \ No newline at end of file