From 7dae0810ae1f5d5dce7880272dcaaddb222fcd73 Mon Sep 17 00:00:00 2001 From: eli Date: Tue, 28 Jan 2025 12:55:48 -0800 Subject: [PATCH 1/5] pep 440 and semver --- .github/workflows/on_release.yml | 100 +++++++++++++++++++++++++++++-- 1 file changed, 94 insertions(+), 6 deletions(-) diff --git a/.github/workflows/on_release.yml b/.github/workflows/on_release.yml index fb4ad0d17..f26d02315 100644 --- a/.github/workflows/on_release.yml +++ b/.github/workflows/on_release.yml @@ -101,7 +101,8 @@ jobs: # pushes the *same* docker images that were previously tested as part of e2e sanity test. # each image is pushed with the versioned tag first, if it succeeds the image is pushed with the latest tag as well. - name: Build & Push client - id: build_push_client + if: ${{ github.event.release.prerelease == false }} + id: build_push_client_regular uses: docker/build-push-action@v4 with: file: docker/Dockerfile @@ -114,8 +115,24 @@ jobs: permitio/opal-client:latest permitio/opal-client:${{ github.event.release.tag_name }} + - name: Build & Push client (prerelease) + if: ${{ github.event.release.prerelease == true }} + id: build_push_client_prerelease + uses: docker/build-push-action@v4 + with: + file: docker/Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + target: client + cache-from: type=registry,ref=permitio/opal-client:latest + cache-to: type=inline + tags: | + permitio/opal-client:${{ github.event.release.tag_name }} + + - name: Build client-standalone - id: build_push_client_standalone + if: ${{ github.event.release.prerelease == false }} + id: build_push_client_standalone_regular uses: docker/build-push-action@v4 with: file: docker/Dockerfile @@ -128,8 +145,23 @@ jobs: permitio/opal-client-standalone:latest permitio/opal-client-standalone:${{ github.event.release.tag_name }} + - name: Build client-standalone (prerelease) + if: ${{ github.event.release.prerelease == true }} + id: build_push_client_standalone_prerelease + uses: docker/build-push-action@v4 + with: + file: docker/Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + target: client-standalone + cache-from: type=registry,ref=permitio/opal-client-standalone:latest + cache-to: type=inline + tags: | + permitio/opal-client-standalone:${{ github.event.release.tag_name }} + - name: Build server - id: build_push_server + if: ${{ github.event.release.prerelease == false }} + id: build_push_server_regular uses: docker/build-push-action@v4 with: file: docker/Dockerfile @@ -142,6 +174,50 @@ jobs: permitio/opal-server:latest permitio/opal-server:${{ github.event.release.tag_name }} + - name: Build server (prerelease) + if: ${{ github.event.release.prerelease == true }} + id: build_push_server_prerelease + uses: docker/build-push-action@v4 + with: + file: docker/Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + target: server + cache-from: type=registry,ref=permitio/opal-server:latest + cache-to: type=inline + tags: | + permitio/opal-server:${{ github.event.release.tag_name }} + + - name: Build & Push client cedar + if: ${{ github.event.release.prerelease == false }} + id: build_push_client_cedar_regular + uses: docker/build-push-action@v4 + with: + file: docker/Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + target: client-cedar + cache-from: type=registry,ref=permitio/opal-client-cedar:latest + cache-to: type=inline + tags: | + permitio/opal-client-cedar:latest + permitio/opal-client-cedar:${{ github.event.release.tag_name }} + + - name: Build & Push client cedar (prerelease) + if: ${{ github.event.release.prerelease == true }} + id: build_push_client_cedar_prerelease + uses: docker/build-push-action@v4 + with: + file: docker/Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + target: client-cedar + cache-from: type=registry,ref=permitio/opal-client-cedar:latest + cache-to: type=inline + tags: | + permitio/opal-client-cedar:${{ github.event.release.tag_name }} + + - name: Build & Push client cedar id: build_push_client_cedar uses: docker/build-push-action@v4 @@ -165,10 +241,22 @@ jobs: - name: Bump version - packaging__.py run: | version_tag=${{ github.event.release.tag_name }} - version_tag=${version_tag#v} # Remove the leading 'v' - version_tuple=$(echo $version_tag | sed 's/\./, /g') + version_tag=${version_tag#v} # Remove the leading 'v' + + # Handle RC versions + if [[ $version_tag =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)[-.]?rc([0-9]+)$ ]]; then + # For RC versions (PEP 440 format) + major="${BASH_REMATCH[1]}" + minor="${BASH_REMATCH[2]}" + patch="${BASH_REMATCH[3]}" + rc_num="${BASH_REMATCH[4]}" + version_tuple="$major, $minor, $patch, 'rc', $rc_num" # Will become "1.2.3rc1" + else + # Regular versions + version_tuple=$(echo $version_tag | sed 's/\./, /g') + fi + sed -i "s/VERSION = (.*/VERSION = (${version_tuple})/" packages/__packaging__.py - cat packages/__packaging__.py - name: Cleanup setup.py and Build every sub-packages run: | From a3c8557419d72a4d5f987031ba21e35c7b353ceb Mon Sep 17 00:00:00 2001 From: eli Date: Tue, 28 Jan 2025 12:57:36 -0800 Subject: [PATCH 2/5] pre-commit fix --- .github/workflows/on_release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/on_release.yml b/.github/workflows/on_release.yml index f26d02315..121a2cbbf 100644 --- a/.github/workflows/on_release.yml +++ b/.github/workflows/on_release.yml @@ -242,7 +242,7 @@ jobs: run: | version_tag=${{ github.event.release.tag_name }} version_tag=${version_tag#v} # Remove the leading 'v' - + # Handle RC versions if [[ $version_tag =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)[-.]?rc([0-9]+)$ ]]; then # For RC versions (PEP 440 format) @@ -255,7 +255,7 @@ jobs: # Regular versions version_tuple=$(echo $version_tag | sed 's/\./, /g') fi - + sed -i "s/VERSION = (.*/VERSION = (${version_tuple})/" packages/__packaging__.py - name: Cleanup setup.py and Build every sub-packages From 8af3884e8ebb577809374c2fec71f621051cd118 Mon Sep 17 00:00:00 2001 From: eli Date: Tue, 28 Jan 2025 13:23:53 -0800 Subject: [PATCH 3/5] semver convertor to pep440 added --- .github/workflows/on_release.yml | 32 ++++++++++++++++---------------- smver2pypi.py | 26 ++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 16 deletions(-) create mode 100755 smver2pypi.py diff --git a/.github/workflows/on_release.yml b/.github/workflows/on_release.yml index 121a2cbbf..ba41981db 100644 --- a/.github/workflows/on_release.yml +++ b/.github/workflows/on_release.yml @@ -240,23 +240,23 @@ jobs: # This is the root file representing the package for all the sub-packages. - name: Bump version - packaging__.py run: | + # Install required packages + pip install semver + + # Get version tag and remove 'v' prefix version_tag=${{ github.event.release.tag_name }} - version_tag=${version_tag#v} # Remove the leading 'v' - - # Handle RC versions - if [[ $version_tag =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)[-.]?rc([0-9]+)$ ]]; then - # For RC versions (PEP 440 format) - major="${BASH_REMATCH[1]}" - minor="${BASH_REMATCH[2]}" - patch="${BASH_REMATCH[3]}" - rc_num="${BASH_REMATCH[4]}" - version_tuple="$major, $minor, $patch, 'rc', $rc_num" # Will become "1.2.3rc1" - else - # Regular versions - version_tuple=$(echo $version_tag | sed 's/\./, /g') - fi - - sed -i "s/VERSION = (.*/VERSION = (${version_tuple})/" packages/__packaging__.py + version_tag=${version_tag#v} + + # Convert semver to PyPI version using the script + pypi_version=$(python smver2pypi.py $version_tag) + + # Update only the __version__ in __packaging__.py + sed -i "s/__version__ = VERSION_STRING/__version__ = \"$pypi_version\"/" packages/__packaging__.py + + # Print the result for verification + echo "Original version tag: $version_tag" + echo "PyPI version: $pypi_version" + cat packages/__packaging__.py - name: Cleanup setup.py and Build every sub-packages run: | diff --git a/smver2pypi.py b/smver2pypi.py new file mode 100755 index 000000000..904a43941 --- /dev/null +++ b/smver2pypi.py @@ -0,0 +1,26 @@ +"""Converts a semver version into a version for PyPI package +https://peps.python.org/pep-0440/ + +A semver prerelease will be converted into prerelease of PyPI. +A semver build will be converted into a development part of PyPI + +Usage: + python smver2pypi.py 0.1.0-rc1 + 0.1.0rc1 + python smver2pypi.py 0.1.0-dev1 + 0.1.0.dev1 + python smver2pypi.py 0.1.0 + 0.1.0 +""" + +import sys + +from semver import Version as SemVerVersion +from packaging.version import Version as PyPIVersion + +semver_version = SemVerVersion.parse(sys.argv[1]) +finalized_version = semver_version.finalize_version() +prerelease = semver_version.prerelease or "" +build = semver_version.build or "" +pypi_version = PyPIVersion(f"{finalized_version}{prerelease}{build}") +print(pypi_version) \ No newline at end of file From 2a852d59fae1efaa46412a30b00f9b69e9d6fec4 Mon Sep 17 00:00:00 2001 From: eli Date: Tue, 28 Jan 2025 13:57:37 -0800 Subject: [PATCH 4/5] pre-commit fix --- .github/workflows/on_release.yml | 8 ++++---- smver2pypi.py | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/on_release.yml b/.github/workflows/on_release.yml index ba41981db..1acf338cc 100644 --- a/.github/workflows/on_release.yml +++ b/.github/workflows/on_release.yml @@ -242,17 +242,17 @@ jobs: run: | # Install required packages pip install semver - + # Get version tag and remove 'v' prefix version_tag=${{ github.event.release.tag_name }} version_tag=${version_tag#v} - + # Convert semver to PyPI version using the script pypi_version=$(python smver2pypi.py $version_tag) - + # Update only the __version__ in __packaging__.py sed -i "s/__version__ = VERSION_STRING/__version__ = \"$pypi_version\"/" packages/__packaging__.py - + # Print the result for verification echo "Original version tag: $version_tag" echo "PyPI version: $pypi_version" diff --git a/smver2pypi.py b/smver2pypi.py index 904a43941..0ceda7ed9 100755 --- a/smver2pypi.py +++ b/smver2pypi.py @@ -15,12 +15,12 @@ import sys -from semver import Version as SemVerVersion from packaging.version import Version as PyPIVersion +from semver import Version as SemVerVersion semver_version = SemVerVersion.parse(sys.argv[1]) finalized_version = semver_version.finalize_version() prerelease = semver_version.prerelease or "" build = semver_version.build or "" pypi_version = PyPIVersion(f"{finalized_version}{prerelease}{build}") -print(pypi_version) \ No newline at end of file +print(pypi_version) From eabcbd1402f78ee4f5698a7df858a3f331b66612 Mon Sep 17 00:00:00 2001 From: eli Date: Tue, 28 Jan 2025 14:06:56 -0800 Subject: [PATCH 5/5] packaging added --- .github/workflows/on_release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/on_release.yml b/.github/workflows/on_release.yml index 1acf338cc..40221a2ee 100644 --- a/.github/workflows/on_release.yml +++ b/.github/workflows/on_release.yml @@ -241,7 +241,7 @@ jobs: - name: Bump version - packaging__.py run: | # Install required packages - pip install semver + pip install semver packaging # Get version tag and remove 'v' prefix version_tag=${{ github.event.release.tag_name }}