diff --git a/.github/workflows/on_release.yml b/.github/workflows/on_release.yml index fb4ad0d17..40221a2ee 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 @@ -164,10 +240,22 @@ 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 packaging + + # Get version tag and remove 'v' prefix version_tag=${{ github.event.release.tag_name }} - version_tag=${version_tag#v} # Remove the leading 'v' - version_tuple=$(echo $version_tag | sed 's/\./, /g') - 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 diff --git a/smver2pypi.py b/smver2pypi.py new file mode 100755 index 000000000..0ceda7ed9 --- /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 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)