From f261d58e8f97063d6070c8656aca081b34d7330a Mon Sep 17 00:00:00 2001 From: Matt Pryor Date: Tue, 7 Nov 2023 10:45:23 +0000 Subject: [PATCH 1/8] Changes to support Pydantic v2 --- azimuth_identity/config.py | 41 +++++++++++--------- azimuth_identity/dex.py | 8 ++-- azimuth_identity/models/v1alpha1/platform.py | 13 +++---- azimuth_identity/models/v1alpha1/realm.py | 15 +++---- azimuth_identity/operator.py | 2 +- requirements.txt | 34 ++++++++-------- setup.cfg | 2 +- 7 files changed, 56 insertions(+), 59 deletions(-) diff --git a/azimuth_identity/config.py b/azimuth_identity/config.py index 4c862fc..e701d38 100644 --- a/azimuth_identity/config.py +++ b/azimuth_identity/config.py @@ -1,10 +1,15 @@ import typing as t -from pydantic import Field, AnyHttpUrl, FilePath, conint, constr, root_validator, validator +from pydantic import TypeAdapter, Field, AnyHttpUrl, conint, constr +from pydantic.functional_validators import AfterValidator from configomatic import Configuration as BaseConfiguration, Section, LoggingConfiguration +HttpUrlAdapter = TypeAdapter(AnyHttpUrl) +HttpUrl = t.Annotated[str, AfterValidator(lambda v: str(HttpUrlAdapter.validate_python(v)))] + + class SecretRef(Section): """ A reference to a secret. @@ -20,7 +25,7 @@ class DexConfig(Section): Configuration for the Dex instances that authenticate with Azimuth. """ #: The Helm chart repo, name and version to use for Dex instances - chart_repo: AnyHttpUrl = "https://charts.dexidp.io" + chart_repo: HttpUrl = "https://charts.dexidp.io" chart_name: constr(min_length = 1) = "dex" chart_version: constr(min_length = 1) = "0.13.0" @@ -44,9 +49,9 @@ class DexConfig(Section): #: The default annotations for the ingress resources ingress_default_annotations: t.Dict[str, str] = Field(default_factory = dict) #: The auth URL to use for the ingress auth subrequest - ingress_auth_url: AnyHttpUrl + ingress_auth_url: HttpUrl #: The URL that unauthenticated users should be redirected to to sign in - ingress_auth_signin_url: t.Optional[AnyHttpUrl] = None + ingress_auth_signin_url: t.Optional[HttpUrl] = None #: The HTTP parameter to put the next URL in when redirecting to sign in ingress_auth_signin_redirect_param: str = "next" @@ -56,12 +61,19 @@ class DexConfig(Section): keycloak_client_secret_bytes: conint(gt = 0) = 64 +def strip_trailing_slash(v: str) -> str: + """ + Strips trailing slashes from the given string. + """ + return v.rstrip("/") + + class KeycloakConfig(Section): """ Configuration for the target Keycloak instance. """ #: The base URL of the Keycloak instance - base_url: AnyHttpUrl + base_url: t.Annotated[HttpUrl, AfterValidator(strip_trailing_slash)] #: The client ID to use when authenticating with Keycloak client_id: constr(min_length = 1) @@ -102,13 +114,6 @@ class KeycloakConfig(Section): default_factory = lambda: { "realm-management": ["realm-admin"] } ) - @validator("base_url") - def validate_base_url(cls, v): - """ - Strips trailing slashes from the base URL if present. - """ - return v.rstrip("/") - class HelmClientConfiguration(Section): """ @@ -129,15 +134,15 @@ class HelmClientConfiguration(Section): unpack_directory: t.Optional[str] = None -class Configuration(BaseConfiguration): +class Configuration( + BaseConfiguration, + default_path = "/etc/azimuth/identity-operator.yaml", + path_env_var = "AZIMUTH_IDENTITY_CONFIG", + env_prefix = "AZIMUTH_IDENTITY" +): """ Top-level configuration model. """ - class Config: - default_path = "/etc/azimuth/identity-operator.yaml" - path_env_var = "AZIMUTH_IDENTITY_CONFIG" - env_prefix = "AZIMUTH_IDENTITY" - #: The logging configuration logging: LoggingConfiguration = Field(default_factory = LoggingConfiguration) diff --git a/azimuth_identity/dex.py b/azimuth_identity/dex.py index 68b3973..b341037 100644 --- a/azimuth_identity/dex.py +++ b/azimuth_identity/dex.py @@ -40,7 +40,7 @@ async def ensure_tls_secret(ekclient, realm: api.Realm): }, }, } - kopf.adopt(secret_data, realm.dict()) + kopf.adopt(secret_data, realm.model_dump()) eksecrets = await ekclient.api("v1").resource("secrets") _ = await eksecrets.create_or_patch( secret_name, @@ -134,7 +134,7 @@ async def ensure_config_secret( "config.yaml": yaml.safe_dump(next_config), }, } - kopf.adopt(secret_data, realm.dict()) + kopf.adopt(secret_data, realm.model_dump()) _ = await eksecrets.create_or_patch( secret_name, secret_data, @@ -209,7 +209,7 @@ async def ensure_ingresses( ], }, } - kopf.adopt(ingress_data, realm.dict()) + kopf.adopt(ingress_data, realm.model_dump()) _ = await ekclient.apply_object(ingress_data, force = True) auth_annotations = { "nginx.ingress.kubernetes.io/auth-url": settings.dex.ingress_auth_url, @@ -282,7 +282,7 @@ async def ensure_ingresses( ], }, } - kopf.adopt(ingress_data, realm.dict()) + kopf.adopt(ingress_data, realm.model_dump()) _ = await ekclient.apply_object(ingress_data, force = True) diff --git a/azimuth_identity/models/v1alpha1/platform.py b/azimuth_identity/models/v1alpha1/platform.py index e34b05c..c8f165c 100644 --- a/azimuth_identity/models/v1alpha1/platform.py +++ b/azimuth_identity/models/v1alpha1/platform.py @@ -1,6 +1,6 @@ import typing as t -from pydantic import Extra, Field, constr +from pydantic import Field from kube_custom_resource import CustomResource, schema @@ -9,11 +9,11 @@ class ZenithServiceSpec(schema.BaseModel): """ The spec for a Zenith service. """ - subdomain: constr(regex = r"[a-z0-9]+") = Field( + subdomain: schema.constr(pattern = r"[a-z0-9]+") = Field( ..., description = "The subdomain of the Zenith service." ) - fqdn: constr(regex = r"[a-z0-9\.-]+") = Field( + fqdn: schema.constr(pattern = r"[a-z0-9\.-]+") = Field( ..., description = "The FQDN of the Zenith service." ) @@ -23,7 +23,7 @@ class PlatformSpec(schema.BaseModel): """ The spec for an Azimuth identity platform. """ - realm_name: t.Optional[constr(regex = r"[a-z0-9-]+")] = Field( + realm_name: schema.constr(pattern = r"[a-z0-9-]+") = Field( ..., description = "The name of the realm that the platform belongs to." ) @@ -47,13 +47,10 @@ class PlatformPhase(str, schema.Enum): FAILED = "Failed" -class PlatformStatus(schema.BaseModel): +class PlatformStatus(schema.BaseModel, extra = "allow"): """ The status of an Azimuth identity platform. """ - class Config: - extra = Extra.allow - phase: PlatformPhase = Field( PlatformPhase.UNKNOWN.value, description = "The phase of the platform." diff --git a/azimuth_identity/models/v1alpha1/realm.py b/azimuth_identity/models/v1alpha1/realm.py index 75a1d33..46a619b 100644 --- a/azimuth_identity/models/v1alpha1/realm.py +++ b/azimuth_identity/models/v1alpha1/realm.py @@ -1,6 +1,4 @@ -import typing as t - -from pydantic import Extra, Field, AnyHttpUrl, constr +from pydantic import Field from kube_custom_resource import CustomResource, schema @@ -9,7 +7,7 @@ class RealmSpec(schema.BaseModel): """ The spec for an Azimuth identity realm. """ - tenancy_id: constr(min_length = 1) = Field( + tenancy_id: schema.constr(min_length = 1) = Field( ..., description = "The ID of the Azimuth tenancy that the realm is for." ) @@ -26,22 +24,19 @@ class RealmPhase(str, schema.Enum): FAILED = "Failed" -class RealmStatus(schema.BaseModel): +class RealmStatus(schema.BaseModel, extra = "allow"): """ The status of an Azimuth identity realm. """ - class Config: - extra = Extra.allow - phase: RealmPhase = Field( RealmPhase.UNKNOWN.value, description = "The phase of the realm." ) - oidc_issuer_url: t.Optional[AnyHttpUrl] = Field( + oidc_issuer_url: schema.Optional[schema.AnyHttpUrl] = Field( None, description = "The OIDC issuer URL for the realm." ) - admin_url: t.Optional[AnyHttpUrl] = Field( + admin_url: schema.Optional[schema.AnyHttpUrl] = Field( None, description = "The admin URL for the realm." ) diff --git a/azimuth_identity/operator.py b/azimuth_identity/operator.py index bb8eb3f..bb613cc 100644 --- a/azimuth_identity/operator.py +++ b/azimuth_identity/operator.py @@ -80,7 +80,7 @@ async def save_instance_status(instance): { # Include the resource version for optimistic concurrency "metadata": { "resourceVersion": instance.metadata.resource_version }, - "status": instance.status.dict(exclude_defaults = True), + "status": instance.status.model_dump(exclude_defaults = True), }, namespace = instance.metadata.namespace ) diff --git a/requirements.txt b/requirements.txt index e3d41e7..092e203 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,29 +1,29 @@ -aiohttp==3.8.5 +aiohttp==3.8.6 aiosignal==1.3.1 -annotated-types==0.5.0 -anyio==3.7.1 -async-timeout==4.0.2 +annotated-types==0.6.0 +anyio==4.0.0 +async-timeout==4.0.3 attrs==23.1.0 certifi==2023.7.22 -charset-normalizer==3.2.0 -click==8.1.6 -configomatic @ git+https://github.com/stackhpc/configomatic.git@a53458c00bae1d94ba2fcb6cf14c530de44aa297 -easykube @ git+https://github.com/stackhpc/easykube.git@594e65190e6f13d66f069feaece534f7595c1656 -exceptiongroup==1.1.2 +charset-normalizer==3.3.2 +click==8.1.7 +configomatic @ git+https://github.com/stackhpc/configomatic.git@c485afefb9850430012e1526e5339c31b1ecee33 +easykube==0.1.1 +exceptiongroup==1.1.3 frozenlist==1.4.0 h11==0.14.0 -httpcore==0.17.3 -httpx==0.24.1 +httpcore==1.0.1 +httpx==0.25.1 idna==3.4 -iso8601==2.0.0 +iso8601==2.1.0 kopf==1.36.2 -kube-custom-resource @ git+https://github.com/stackhpc/kube-custom-resource.git@106a72837395ba871c6fcb13992a38478c50ae7a +kube-custom-resource @ git+https://github.com/stackhpc/kube-custom-resource.git@3046bababe66685a5e812586a7124dccd4f63ce9 multidict==6.0.4 -pydantic==1.10.12 -pydantic_core==2.4.0 -pyhelm3 @ git+https://github.com/stackhpc/pyhelm3.git@cacf99d706851b67a57249726e94adedf03c6451 +pydantic==2.4.2 +pydantic_core==2.10.1 +pyhelm3 @ git+https://github.com/stackhpc/pyhelm3.git@e4dd3ab6c12fe861eaab2394556b15816f51785f python-json-logger==2.0.7 PyYAML==6.0.1 sniffio==1.3.0 -typing_extensions==4.7.1 +typing_extensions==4.8.0 yarl==1.9.2 diff --git a/setup.cfg b/setup.cfg index 6831e4c..41c03e1 100755 --- a/setup.cfg +++ b/setup.cfg @@ -17,6 +17,6 @@ install_requires = httpx kopf kube-custom-resource - pydantic<2 + pydantic pyhelm3 pyyaml From 8d11cae451e244f98fa3493f4caab88a8bade292 Mon Sep 17 00:00:00 2001 From: Matt Pryor Date: Tue, 7 Nov 2023 11:33:48 +0000 Subject: [PATCH 2/8] Remove use of deprecated parse_obj --- azimuth_identity/operator.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/azimuth_identity/operator.py b/azimuth_identity/operator.py index bb613cc..1d17976 100644 --- a/azimuth_identity/operator.py +++ b/azimuth_identity/operator.py @@ -97,7 +97,7 @@ def decorator(func): @functools.wraps(func) async def handler(**handler_kwargs): if "instance" not in handler_kwargs: - handler_kwargs["instance"] = model.parse_obj(handler_kwargs["body"]) + handler_kwargs["instance"] = model.model_validate(handler_kwargs["body"]) try: return await func(**handler_kwargs) except ApiError as exc: @@ -185,7 +185,7 @@ async def reconcile_platform(instance: api.Platform, param, **kwargs): ) else: raise - realm: api.Realm = api.Realm.parse_obj(realm) + realm: api.Realm = api.Realm.model_validate(realm) if realm.status.phase != api.RealmPhase.READY: raise kopf.TemporaryError( f"Realm '{instance.spec.realm_name}' is not yet ready", @@ -302,7 +302,7 @@ async def delete_platform(instance: api.Platform, **kwargs): return else: raise - realm: api.Realm = api.Realm.parse_obj(realm) + realm: api.Realm = api.Realm.model_validate(realm) realm_name = keycloak.realm_name(realm) # Remove the clients for all the services await keycloak.prune_platform_service_clients(realm_name, instance, all = True) From 6eb0c15c90ee955142983a33525eb4c36261848b Mon Sep 17 00:00:00 2001 From: Matt Pryor Date: Wed, 8 Nov 2023 16:46:12 +0000 Subject: [PATCH 3/8] Use most recent kube-custom-resource patch --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 092e203..fd15984 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,7 +17,7 @@ httpx==0.25.1 idna==3.4 iso8601==2.1.0 kopf==1.36.2 -kube-custom-resource @ git+https://github.com/stackhpc/kube-custom-resource.git@3046bababe66685a5e812586a7124dccd4f63ce9 +kube-custom-resource @ git+https://github.com/stackhpc/kube-custom-resource.git@1d1ac0d3918729d44e59e5d020effe45821a163f multidict==6.0.4 pydantic==2.4.2 pydantic_core==2.10.1 From 5b0b34c79370260658dc28e574a768c1f2dad999 Mon Sep 17 00:00:00 2001 From: Matt Pryor Date: Wed, 8 Nov 2023 17:16:57 +0000 Subject: [PATCH 4/8] Deal better with long versions (i.e. branch names) --- chart/templates/_helpers.tpl | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/chart/templates/_helpers.tpl b/chart/templates/_helpers.tpl index 5731be7..e76d642 100644 --- a/chart/templates/_helpers.tpl +++ b/chart/templates/_helpers.tpl @@ -30,7 +30,15 @@ app.kubernetes.io/instance: {{ .Release.Name }} Labels for a chart-level resource. */}} {{- define "azimuth-identity-operator.labels" -}} -helm.sh/chart: {{ printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | lower | trunc 63 | trimSuffix "-" }} +helm.sh/chart: {{ + printf "%s-%s" .Chart.Name .Chart.Version | + replace "+" "_" | + lower | + trunc 63 | + trimSuffix "-" | + trimSuffix "." | + trimSuffix "_" +}} app.kubernetes.io/managed-by: {{ .Release.Service }} {{- if .Chart.AppVersion }} app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} From 605f452debdbd4d2d503da9ca80e7cefeafdc306 Mon Sep 17 00:00:00 2001 From: Matt Pryor Date: Thu, 9 Nov 2023 11:14:24 +0000 Subject: [PATCH 5/8] Pick up kube-custom-resource fixes --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index fd15984..551a812 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,7 +17,7 @@ httpx==0.25.1 idna==3.4 iso8601==2.1.0 kopf==1.36.2 -kube-custom-resource @ git+https://github.com/stackhpc/kube-custom-resource.git@1d1ac0d3918729d44e59e5d020effe45821a163f +kube-custom-resource @ git+https://github.com/stackhpc/kube-custom-resource.git@17b18bea9618a6ba55c07852fb594abe89a5c88b multidict==6.0.4 pydantic==2.4.2 pydantic_core==2.10.1 From af0d0c8e8647ce8cc6a35398ad48b0cf3085c067 Mon Sep 17 00:00:00 2001 From: Matt Pryor Date: Thu, 9 Nov 2023 14:19:12 +0000 Subject: [PATCH 6/8] Bump kube-custom-resource to pick up fixes --- azimuth_identity/config.py | 17 ++++++++++------- requirements.txt | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/azimuth_identity/config.py b/azimuth_identity/config.py index e701d38..2b7ed1a 100644 --- a/azimuth_identity/config.py +++ b/azimuth_identity/config.py @@ -1,13 +1,16 @@ import typing as t -from pydantic import TypeAdapter, Field, AnyHttpUrl, conint, constr +from pydantic import TypeAdapter, Field, AnyHttpUrl as PyAnyHttpUrl, conint, constr from pydantic.functional_validators import AfterValidator from configomatic import Configuration as BaseConfiguration, Section, LoggingConfiguration -HttpUrlAdapter = TypeAdapter(AnyHttpUrl) -HttpUrl = t.Annotated[str, AfterValidator(lambda v: str(HttpUrlAdapter.validate_python(v)))] +#: Type for a string that validates as a URL +AnyHttpUrl = t.Annotated[ + str, + AfterValidator(lambda v: str(TypeAdapter(PyAnyHttpUrl).validate_python(v))) +] class SecretRef(Section): @@ -25,7 +28,7 @@ class DexConfig(Section): Configuration for the Dex instances that authenticate with Azimuth. """ #: The Helm chart repo, name and version to use for Dex instances - chart_repo: HttpUrl = "https://charts.dexidp.io" + chart_repo: AnyHttpUrl = "https://charts.dexidp.io" chart_name: constr(min_length = 1) = "dex" chart_version: constr(min_length = 1) = "0.13.0" @@ -49,9 +52,9 @@ class DexConfig(Section): #: The default annotations for the ingress resources ingress_default_annotations: t.Dict[str, str] = Field(default_factory = dict) #: The auth URL to use for the ingress auth subrequest - ingress_auth_url: HttpUrl + ingress_auth_url: AnyHttpUrl #: The URL that unauthenticated users should be redirected to to sign in - ingress_auth_signin_url: t.Optional[HttpUrl] = None + ingress_auth_signin_url: t.Optional[AnyHttpUrl] = None #: The HTTP parameter to put the next URL in when redirecting to sign in ingress_auth_signin_redirect_param: str = "next" @@ -73,7 +76,7 @@ class KeycloakConfig(Section): Configuration for the target Keycloak instance. """ #: The base URL of the Keycloak instance - base_url: t.Annotated[HttpUrl, AfterValidator(strip_trailing_slash)] + base_url: t.Annotated[AnyHttpUrl, AfterValidator(strip_trailing_slash)] #: The client ID to use when authenticating with Keycloak client_id: constr(min_length = 1) diff --git a/requirements.txt b/requirements.txt index 551a812..e3a9fba 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,7 +17,7 @@ httpx==0.25.1 idna==3.4 iso8601==2.1.0 kopf==1.36.2 -kube-custom-resource @ git+https://github.com/stackhpc/kube-custom-resource.git@17b18bea9618a6ba55c07852fb594abe89a5c88b +kube-custom-resource @ git+https://github.com/stackhpc/kube-custom-resource.git@0a15ca86fa820ecbdbb24f726b3583efaffa4ae7 multidict==6.0.4 pydantic==2.4.2 pydantic_core==2.10.1 From ae927e4b64184ee780da49bc0ac93dc024e66f31 Mon Sep 17 00:00:00 2001 From: Matt Pryor Date: Fri, 10 Nov 2023 13:38:01 +0000 Subject: [PATCH 7/8] Changes to libraries merged and tagged + tests added --- .github/workflows/build-push-artifacts.yaml | 20 +++++++- .github/workflows/test-pr.yaml | 53 +++++++++++++++++++++ requirements.txt | 6 +-- 3 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/test-pr.yaml diff --git a/.github/workflows/build-push-artifacts.yaml b/.github/workflows/build-push-artifacts.yaml index c0b240a..4b8c482 100644 --- a/.github/workflows/build-push-artifacts.yaml +++ b/.github/workflows/build-push-artifacts.yaml @@ -1,6 +1,20 @@ name: Publish artifacts -# Run the tasks on every push -on: push + +on: + # Publish artifacts on every push to main and every tag + push: + branches: + - main + tags: + - "*" + # Also allow publication to be done via a workflow call + # In this case, the chart version is returned as an output + workflow_call: + outputs: + chart-version: + description: The chart version that was published + value: ${{ jobs.build_push_chart.outputs.chart-version }} + jobs: build_push_images: name: Build and push images @@ -42,6 +56,8 @@ jobs: runs-on: ubuntu-latest # Only build and push the chart if the images built successfully needs: [build_push_images] + outputs: + chart-version: ${{ steps.semver.outputs.version }} steps: - name: Check out the repository uses: actions/checkout@v3 diff --git a/.github/workflows/test-pr.yaml b/.github/workflows/test-pr.yaml new file mode 100644 index 0000000..bd6c4de --- /dev/null +++ b/.github/workflows/test-pr.yaml @@ -0,0 +1,53 @@ +name: Test Azimuth deployment + +on: + pull_request: + types: + - opened + - synchronize + - ready_for_review + - reopened + branches: + - main + +concurrency: + group: ${{ github.head_ref }} + cancel-in-progress: true + +jobs: + # This job exists so that PRs from outside the main repo are rejected + fail_on_remote: + runs-on: ubuntu-latest + steps: + - name: PR must be from a branch in the stackhpc/azimuth-identity-operator repo + run: exit ${{ github.repository == 'stackhpc/azimuth-identity-operator' && '0' || '1' }} + + publish_artifacts: + needs: [fail_on_remote] + uses: ./.github/workflows/build-push-artifacts.yaml + + run_azimuth_tests: + needs: [publish_artifacts] + runs-on: ubuntu-latest + steps: + # Check out the configuration repository + - name: Set up Azimuth environment + uses: stackhpc/azimuth-config/.github/actions/setup@main + with: + os-clouds: ${{ secrets.OS_CLOUDS }} + environment-prefix: identity-ci + extra-vars: | + azimuth_identity_operator_chart_version: ${{ needs.publish_artifacts.outputs.chart-version }} + + # Provision Azimuth using the azimuth-ops version under test + - name: Provision Azimuth + uses: stackhpc/azimuth-config/.github/actions/provision@main + + # # Run the tests + - name: Run Azimuth tests + uses: stackhpc/azimuth-config/.github/actions/test@main + + # Tear down the environment + - name: Destroy Azimuth + uses: stackhpc/azimuth-config/.github/actions/destroy@main + if: ${{ always() }} diff --git a/requirements.txt b/requirements.txt index e3a9fba..aa418e9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ attrs==23.1.0 certifi==2023.7.22 charset-normalizer==3.3.2 click==8.1.7 -configomatic @ git+https://github.com/stackhpc/configomatic.git@c485afefb9850430012e1526e5339c31b1ecee33 +configomatic==0.2.0 easykube==0.1.1 exceptiongroup==1.1.3 frozenlist==1.4.0 @@ -17,11 +17,11 @@ httpx==0.25.1 idna==3.4 iso8601==2.1.0 kopf==1.36.2 -kube-custom-resource @ git+https://github.com/stackhpc/kube-custom-resource.git@0a15ca86fa820ecbdbb24f726b3583efaffa4ae7 +kube-custom-resource==0.2.0 multidict==6.0.4 pydantic==2.4.2 pydantic_core==2.10.1 -pyhelm3 @ git+https://github.com/stackhpc/pyhelm3.git@e4dd3ab6c12fe861eaab2394556b15816f51785f +pyhelm3==0.2.0 python-json-logger==2.0.7 PyYAML==6.0.1 sniffio==1.3.0 From b5b12b99196c09eb665aec7530e3ca24543ad00d Mon Sep 17 00:00:00 2001 From: Matt Pryor Date: Fri, 10 Nov 2023 15:18:27 +0000 Subject: [PATCH 8/8] We don't need to run a full test suite --- .github/workflows/test-pr.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/test-pr.yaml b/.github/workflows/test-pr.yaml index bd6c4de..0cbbdcd 100644 --- a/.github/workflows/test-pr.yaml +++ b/.github/workflows/test-pr.yaml @@ -36,8 +36,16 @@ jobs: with: os-clouds: ${{ secrets.OS_CLOUDS }} environment-prefix: identity-ci + # Use the version of the chart that we just built + # We also don't need all the tests + # The workstation is sufficient to test that the OIDC discovery is working extra-vars: | azimuth_identity_operator_chart_version: ${{ needs.publish_artifacts.outputs.chart-version }} + generate_tests_caas_test_case_slurm_enabled: false + generate_tests_caas_test_case_repo2docker_enabled: false + generate_tests_caas_test_case_rstudio_enabled: false + generate_tests_kubernetes_suite_enabled: false + generate_tests_kubernetes_apps_suite_enabled: false # Provision Azimuth using the azimuth-ops version under test - name: Provision Azimuth