From 675038acb5b71e320e4721de07d0d80366828b55 Mon Sep 17 00:00:00 2001 From: Artur Souza Date: Mon, 27 Jan 2025 10:57:40 -0800 Subject: [PATCH 1/6] Workflow to update Dapr. Signed-off-by: Artur Souza --- .github/workflows/version-update.yml | 77 ++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 .github/workflows/version-update.yml diff --git a/.github/workflows/version-update.yml b/.github/workflows/version-update.yml new file mode 100644 index 00000000..6884c697 --- /dev/null +++ b/.github/workflows/version-update.yml @@ -0,0 +1,77 @@ +# +# Copyright 2025 The Dapr Authors +# 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: update-dapr-version + +on: + workflow_dispatch: + inputs: + rel_version: + description: 'Dapr release version (examples: 1.9.0-rc.1, 1.9.1)' + required: true + type: string + +jobs: + update-longhauls: + name: Update the dapr version in longhaul tests + runs-on: ubuntu-latest + permissions: + contents: write + env: + LONG_HAUL_REPO: test-infra + steps: + - name: Check out code into the Go module directory + uses: actions/checkout@v4 + - name: Checkout the dapr repo + uses: actions/checkout@v4 + with: + repository: dapr/dapr + path: .dapr_repo + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install pcre2-utils + pip install packaging + - name: Parse release version and set REL_VERSION and LATEST_RELEASE + run: python .dapr_repo/.github/scripts/get_release_version.py ${{ github.event_name }} + - name: Compare versions and determine if update of long haul tests is required + id: compare_versions + run: | + # Thanks to https://ihateregex.io/expr/semver/ + SEMVER_REGEX='^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$' + REL_VERSION=`echo "${{ inputs.rel_version }}" | sed -r 's/^[vV]?([0-9].+)$/\1/'` + if [ `echo $REL_VERSION | pcre2grep "$SEMVER_REGEX"` ]; then + echo "$REL_VERSION is a valid semantic version." + else + echo "$REL_VERSION is not a valid semantic version." + exit 1 + fi + echo "REL_VERSION=${REL_VERSION,,}" >>${GITHUB_ENV} + + EXISTING_VERSION=$(cat "config/dapr_runtime.version") + echo "Existing version in longhaul tests: $EXISTING_VERSION" + echo "New version: $REL_VERSION" + python .dapr_repo/.github/scripts/compare_versions.py "$REL_VERSION" "$EXISTING_VERSION" + + - name: Update dapr runtime version in the longhaul tests repo + if: env.VERSION_UPDATE_REQUIRED == 'true' + run: | + echo "${REL_VERSION}" > config/dapr_runtime.version + - name: Commit and push changes + if: env.VERSION_UPDATE_REQUIRED == 'true' + run: | + git config --global user.name "github-actions" + git config --global user.email "github-actions@github.com" + git add config/dapr_runtime.version + git commit -m "Updates dapr runtime version to ${REL_VERSION}" + git push \ No newline at end of file From 4036bcbc791e6e9107bd3240465b54bc74abfdbf Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Fri, 7 Feb 2025 15:39:20 +0000 Subject: [PATCH 2/6] Moves compare_versions.py to test-infra Signed-off-by: Elena Kolevska --- .github/scripts/compare_versions.py | 59 ++++++++++++++++++++++++++++ .github/workflows/dapr-deploy.yml | 1 + .github/workflows/version-update.yml | 8 ++-- 3 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 .github/scripts/compare_versions.py diff --git a/.github/scripts/compare_versions.py b/.github/scripts/compare_versions.py new file mode 100644 index 00000000..ac03e0d6 --- /dev/null +++ b/.github/scripts/compare_versions.py @@ -0,0 +1,59 @@ +# +# Copyright 2025 The Dapr Authors +# 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. +# +# This script parses release version from Git tag and set the parsed version to +# environment variable, REL_VERSION. If the tag is the final version, it sets +# LATEST_RELEASE to true to add 'latest' tag to docker image. +import os +import sys +import semver + +# compare_versions returns True if the comparison is successful. +# It returns False if the versions are invalid. +# The result of the comparison is written to the VERSION_UPDATE_REQUIRED GitHub environment variable. +def compare_versions(new_version, existing_version) -> bool: + try: + new_ver = semver.VersionInfo.parse(new_version) + existing_ver = semver.VersionInfo.parse(existing_version) + except ValueError: + print("Invalid version format") + set_github_env("VERSION_UPDATE_REQUIRED", "false") + return False + + update_required = new_ver > existing_ver + status_message = "New version is greater than existing version." if update_required else "New version is not greater. Skipping update." + print(status_message) + + # Write the update requirement status to GITHUB_ENV + github_env_path = os.getenv("GITHUB_ENV") + if github_env_path: + with open(github_env_path, "a") as github_env: + set_github_env("VERSION_UPDATE_REQUIRED", str(update_required).lower()) + return True + +def set_github_env(name: str, value: str): + github_env_path = os.getenv("GITHUB_ENV") + if github_env_path: + with open(github_env_path, "a") as github_env: + github_env.write(f"{name}={value}\n") + +if len(sys.argv) != 3: + print("Usage: compare_versions.py ") + sys.exit(1) + +new_version = sys.argv[1] +existing_version = sys.argv[2] + +if compare_versions(new_version, existing_version): + sys.exit(0) +else: + sys.exit(1) \ No newline at end of file diff --git a/.github/workflows/dapr-deploy.yml b/.github/workflows/dapr-deploy.yml index 79304458..db9bc3f6 100644 --- a/.github/workflows/dapr-deploy.yml +++ b/.github/workflows/dapr-deploy.yml @@ -11,6 +11,7 @@ on: - master paths: - 'config/dapr_runtime.version' + - 'config/dapr_cli.version' workflow_dispatch: jobs: diff --git a/.github/workflows/version-update.yml b/.github/workflows/version-update.yml index 6884c697..3abdf941 100644 --- a/.github/workflows/version-update.yml +++ b/.github/workflows/version-update.yml @@ -41,15 +41,16 @@ jobs: run: | sudo apt-get update sudo apt-get install pcre2-utils - pip install packaging + pip install semver - name: Parse release version and set REL_VERSION and LATEST_RELEASE run: python .dapr_repo/.github/scripts/get_release_version.py ${{ github.event_name }} - name: Compare versions and determine if update of long haul tests is required id: compare_versions run: | + REL_VERSION=`echo "${{ inputs.rel_version }}" | sed -r 's/^[vV]?([0-9].+)$/\1/'` + # Thanks to https://ihateregex.io/expr/semver/ SEMVER_REGEX='^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$' - REL_VERSION=`echo "${{ inputs.rel_version }}" | sed -r 's/^[vV]?([0-9].+)$/\1/'` if [ `echo $REL_VERSION | pcre2grep "$SEMVER_REGEX"` ]; then echo "$REL_VERSION is a valid semantic version." else @@ -61,8 +62,7 @@ jobs: EXISTING_VERSION=$(cat "config/dapr_runtime.version") echo "Existing version in longhaul tests: $EXISTING_VERSION" echo "New version: $REL_VERSION" - python .dapr_repo/.github/scripts/compare_versions.py "$REL_VERSION" "$EXISTING_VERSION" - + python .github/scripts/compare_versions.py "$REL_VERSION" "$EXISTING_VERSION" - name: Update dapr runtime version in the longhaul tests repo if: env.VERSION_UPDATE_REQUIRED == 'true' run: | From 9c6e2fbd9067619d75104deecfeb4c4b43c2d739 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Fri, 7 Feb 2025 15:52:07 +0000 Subject: [PATCH 3/6] Adds version update for cli. Signs off commits. Signed-off-by: Elena Kolevska --- .github/workflows/version-update-cli.yml | 77 +++++++++++++++++++ ...ion-update.yml => version-update-dapr.yml} | 2 +- 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/version-update-cli.yml rename .github/workflows/{version-update.yml => version-update-dapr.yml} (97%) diff --git a/.github/workflows/version-update-cli.yml b/.github/workflows/version-update-cli.yml new file mode 100644 index 00000000..d5181bce --- /dev/null +++ b/.github/workflows/version-update-cli.yml @@ -0,0 +1,77 @@ +# +# Copyright 2025 The Dapr Authors +# 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: update-cli-version + +on: + workflow_dispatch: + inputs: + rel_version: + description: 'Dapr release version (examples: 1.9.0-rc.1, 1.9.1)' + required: true + type: string + +jobs: + update-longhauls: + name: Update the dapr version in longhaul tests + runs-on: ubuntu-latest + permissions: + contents: write + env: + LONG_HAUL_REPO: test-infra + steps: + - name: Check out code into the Go module directory + uses: actions/checkout@v4 + - name: Checkout the dapr repo + uses: actions/checkout@v4 + with: + repository: dapr/cli + path: .dapr_cli + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install pcre2-utils + pip install semver + - name: Parse release version and set REL_VERSION and LATEST_RELEASE + run: python .dapr_cli/.github/scripts/get_release_version.py ${{ github.event_name }} + - name: Compare versions and determine if update of long haul tests is required + id: compare_versions + run: | + REL_VERSION=`echo "${{ inputs.rel_version }}" | sed -r 's/^[vV]?([0-9].+)$/\1/'` + + # Thanks to https://ihateregex.io/expr/semver/ + SEMVER_REGEX='^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$' + if [ `echo $REL_VERSION | pcre2grep "$SEMVER_REGEX"` ]; then + echo "$REL_VERSION is a valid semantic version." + else + echo "$REL_VERSION is not a valid semantic version." + exit 1 + fi + echo "REL_VERSION=${REL_VERSION,,}" >>${GITHUB_ENV} + + EXISTING_VERSION=$(cat "config/dapr_runtime.version") + echo "Existing version in longhaul tests: $EXISTING_VERSION" + echo "New version: $REL_VERSION" + python .github/scripts/compare_versions.py "$REL_VERSION" "$EXISTING_VERSION" + - name: Update dapr cli version in the longhaul tests repo + if: env.VERSION_UPDATE_REQUIRED == 'true' + run: | + echo "${REL_VERSION}" > config/dapr_cli.version + - name: Commit and push changes + if: env.VERSION_UPDATE_REQUIRED == 'true' + run: | + git config --global user.name "github-actions" + git config --global user.email "github-actions@github.com" + git add config/dapr_cli.version + git commit -s -m "Updates dapr cli version to ${REL_VERSION}" + git push \ No newline at end of file diff --git a/.github/workflows/version-update.yml b/.github/workflows/version-update-dapr.yml similarity index 97% rename from .github/workflows/version-update.yml rename to .github/workflows/version-update-dapr.yml index 3abdf941..3f3690e0 100644 --- a/.github/workflows/version-update.yml +++ b/.github/workflows/version-update-dapr.yml @@ -73,5 +73,5 @@ jobs: git config --global user.name "github-actions" git config --global user.email "github-actions@github.com" git add config/dapr_runtime.version - git commit -m "Updates dapr runtime version to ${REL_VERSION}" + git commit -s -m "Updates dapr runtime version to ${REL_VERSION}" git push \ No newline at end of file From e98a233d04dcfdb019639d3d90942f9299e18212 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Tue, 11 Feb 2025 00:08:08 +0000 Subject: [PATCH 4/6] Apply suggestions from code review Co-authored-by: Mike Nguyen Signed-off-by: Elena Kolevska --- .github/workflows/version-update-cli.yml | 13 +++++++++++-- .github/workflows/version-update-dapr.yml | 12 ++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/.github/workflows/version-update-cli.yml b/.github/workflows/version-update-cli.yml index d5181bce..26c662cb 100644 --- a/.github/workflows/version-update-cli.yml +++ b/.github/workflows/version-update-cli.yml @@ -14,6 +14,11 @@ name: update-cli-version on: + pull: + paths: + - '.github/workflows/version-update-cli.yml' + - '.github/scripts/compare_versions.py' + workflow_dispatch: inputs: rel_version: @@ -29,6 +34,7 @@ jobs: contents: write env: LONG_HAUL_REPO: test-infra + REL_VERSION: ${{ github.event.inputs.rel_version || '99.99.99' }} steps: - name: Check out code into the Go module directory uses: actions/checkout@v4 @@ -47,7 +53,7 @@ jobs: - name: Compare versions and determine if update of long haul tests is required id: compare_versions run: | - REL_VERSION=`echo "${{ inputs.rel_version }}" | sed -r 's/^[vV]?([0-9].+)$/\1/'` + REL_VERSION=`echo "${{ env.REL_VERSION }}" | sed -r 's/^[vV]?([0-9].+)$/\1/'` # Thanks to https://ihateregex.io/expr/semver/ SEMVER_REGEX='^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$' @@ -67,8 +73,11 @@ jobs: if: env.VERSION_UPDATE_REQUIRED == 'true' run: | echo "${REL_VERSION}" > config/dapr_cli.version + - name: Show Diff + run: | + git diff - name: Commit and push changes - if: env.VERSION_UPDATE_REQUIRED == 'true' + if: github.event_name == 'workflow_dispatch' && env.VERSION_UPDATE_REQUIRED == 'true' run: | git config --global user.name "github-actions" git config --global user.email "github-actions@github.com" diff --git a/.github/workflows/version-update-dapr.yml b/.github/workflows/version-update-dapr.yml index 3f3690e0..8adf9cc5 100644 --- a/.github/workflows/version-update-dapr.yml +++ b/.github/workflows/version-update-dapr.yml @@ -14,6 +14,10 @@ name: update-dapr-version on: + pull: + paths: + - '.github/workflows/version-update-dapr.yml' + - '.github/scripts/compare_versions.py' workflow_dispatch: inputs: rel_version: @@ -29,6 +33,7 @@ jobs: contents: write env: LONG_HAUL_REPO: test-infra + REL_VERSION: ${{ github.event.inputs.rel_version || '99.99.99' }} steps: - name: Check out code into the Go module directory uses: actions/checkout@v4 @@ -47,7 +52,7 @@ jobs: - name: Compare versions and determine if update of long haul tests is required id: compare_versions run: | - REL_VERSION=`echo "${{ inputs.rel_version }}" | sed -r 's/^[vV]?([0-9].+)$/\1/'` + REL_VERSION=`echo "${{ env.REL_VERSION }}" | sed -r 's/^[vV]?([0-9].+)$/\1/'` # Thanks to https://ihateregex.io/expr/semver/ SEMVER_REGEX='^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$' @@ -67,8 +72,11 @@ jobs: if: env.VERSION_UPDATE_REQUIRED == 'true' run: | echo "${REL_VERSION}" > config/dapr_runtime.version + - name: Show Diff + run: | + git diff - name: Commit and push changes - if: env.VERSION_UPDATE_REQUIRED == 'true' + if: github.event_name == 'workflow_dispatch' && env.VERSION_UPDATE_REQUIRED == 'true' run: | git config --global user.name "github-actions" git config --global user.email "github-actions@github.com" From 9c013718b3a73a53218926f8b964e2af2fe37cf3 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Tue, 11 Feb 2025 00:27:06 +0000 Subject: [PATCH 5/6] Apply suggestions from code review Co-authored-by: Mike Nguyen Signed-off-by: Elena Kolevska --- .github/workflows/version-update-cli.yml | 4 ++-- .github/workflows/version-update-dapr.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/version-update-cli.yml b/.github/workflows/version-update-cli.yml index 26c662cb..45bfa14f 100644 --- a/.github/workflows/version-update-cli.yml +++ b/.github/workflows/version-update-cli.yml @@ -74,8 +74,8 @@ jobs: run: | echo "${REL_VERSION}" > config/dapr_cli.version - name: Show Diff - run: | - git diff + run: | + git diff - name: Commit and push changes if: github.event_name == 'workflow_dispatch' && env.VERSION_UPDATE_REQUIRED == 'true' run: | diff --git a/.github/workflows/version-update-dapr.yml b/.github/workflows/version-update-dapr.yml index 8adf9cc5..3cdb5e66 100644 --- a/.github/workflows/version-update-dapr.yml +++ b/.github/workflows/version-update-dapr.yml @@ -73,8 +73,8 @@ jobs: run: | echo "${REL_VERSION}" > config/dapr_runtime.version - name: Show Diff - run: | - git diff + run: | + git diff - name: Commit and push changes if: github.event_name == 'workflow_dispatch' && env.VERSION_UPDATE_REQUIRED == 'true' run: | From 363ff007a3c54c35bdc6b246385a693c1e35bac8 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Tue, 11 Feb 2025 13:55:44 +0000 Subject: [PATCH 6/6] Apply suggestions from code review Co-authored-by: Mike Nguyen Signed-off-by: Elena Kolevska --- .github/workflows/version-update-cli.yml | 2 +- .github/workflows/version-update-dapr.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/version-update-cli.yml b/.github/workflows/version-update-cli.yml index 45bfa14f..c97533d2 100644 --- a/.github/workflows/version-update-cli.yml +++ b/.github/workflows/version-update-cli.yml @@ -14,7 +14,7 @@ name: update-cli-version on: - pull: + pull_request: paths: - '.github/workflows/version-update-cli.yml' - '.github/scripts/compare_versions.py' diff --git a/.github/workflows/version-update-dapr.yml b/.github/workflows/version-update-dapr.yml index 3cdb5e66..d314ded3 100644 --- a/.github/workflows/version-update-dapr.yml +++ b/.github/workflows/version-update-dapr.yml @@ -14,7 +14,7 @@ name: update-dapr-version on: - pull: + pull_request: paths: - '.github/workflows/version-update-dapr.yml' - '.github/scripts/compare_versions.py'