Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pep 440 and semver #746

Merged
merged 7 commits into from
Jan 28, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 94 additions & 6 deletions .github/workflows/on_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down
26 changes: 26 additions & 0 deletions smver2pypi.py
Original file line number Diff line number Diff line change
@@ -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)
Loading