diff --git a/.forgejo/workflows/build-deploy-prod.yaml b/.forgejo/workflows/build-deploy-prod.yaml index 36404fd..87f03ae 100644 --- a/.forgejo/workflows/build-deploy-prod.yaml +++ b/.forgejo/workflows/build-deploy-prod.yaml @@ -51,7 +51,7 @@ jobs: esac - name: Build and push Docker image - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v6 with: context: . push: true @@ -87,7 +87,7 @@ jobs: esac - name: Deploy to OpenShift - uses: docker://quay.io/appuio/oc:v4.16 + uses: docker://quay.io/appuio/oc:v4.18 with: entrypoint: /bin/bash args: | @@ -104,7 +104,7 @@ jobs: OPENSHIFT_URL: ${{ secrets.OPENSHIFT_URL }} - name: Verify deployment - uses: docker://quay.io/appuio/oc:v4.16 + uses: docker://quay.io/appuio/oc:v4.18 with: entrypoint: /bin/bash args: | diff --git a/.forgejo/workflows/build-deploy-staging.yaml b/.forgejo/workflows/build-deploy-staging.yaml index f73edae..5f8aba7 100644 --- a/.forgejo/workflows/build-deploy-staging.yaml +++ b/.forgejo/workflows/build-deploy-staging.yaml @@ -35,7 +35,7 @@ jobs: password: ${{ secrets.CONTAINER_REGISTRY_TOKEN }} - name: Build and push Docker image - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v6 with: context: . push: true @@ -56,7 +56,7 @@ jobs: uses: actions/checkout@v4 - name: Deploy to OpenShift - uses: docker://quay.io/appuio/oc:v4.16 + uses: docker://quay.io/appuio/oc:v4.18 with: entrypoint: /bin/bash args: | diff --git a/.forgejo/workflows/docs.yaml b/.forgejo/workflows/docs.yaml index 418bc92..5a17adc 100644 --- a/.forgejo/workflows/docs.yaml +++ b/.forgejo/workflows/docs.yaml @@ -30,7 +30,7 @@ jobs: password: ${{ secrets.CONTAINER_REGISTRY_TOKEN }} - name: Build and push Docker image - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v6 with: context: . file: docs/Dockerfile @@ -52,7 +52,7 @@ jobs: uses: actions/checkout@v4 - name: Deploy to OpenShift - uses: docker://quay.io/appuio/oc:v4.16 + uses: docker://quay.io/appuio/oc:v4.18 with: entrypoint: /bin/bash args: | diff --git a/.forgejo/workflows/renovate.yaml b/.forgejo/workflows/renovate.yaml index 2f9d7d5..2bb35e8 100644 --- a/.forgejo/workflows/renovate.yaml +++ b/.forgejo/workflows/renovate.yaml @@ -16,7 +16,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: "18" + node-version: "22" - name: Renovate uses: https://github.com/renovatebot/github-action@v42.0.4 diff --git a/.forgejo/workflows/tests.yaml b/.forgejo/workflows/tests.yaml index d766820..79afa42 100644 --- a/.forgejo/workflows/tests.yaml +++ b/.forgejo/workflows/tests.yaml @@ -21,7 +21,7 @@ jobs: uses: actions/checkout@v4 - name: Install uv - uses: https://github.com/astral-sh/setup-uv@v5 + uses: https://github.com/astral-sh/setup-uv@v6 - name: Run tests run: uv run --env-file=.env.example pytest diff --git a/pyproject.toml b/pyproject.toml index 740bb70..fca6a2d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,15 +7,15 @@ requires-python = ">=3.12" dependencies = [ "argon2-cffi>=23.1.0", "cryptography>=44.0.2", - "django==5.2", - "django-allauth>=65.5.0", + "django==5.2.1", + "django-allauth>=65.9.0", "django-fernet-encrypted-fields>=0.3.0", "django-scopes>=2.0.0", "django-storages>=1.14.6", "django-template-partials>=24.4", - "jsonschema>=4.23.0", + "jsonschema>=4.24.0", "kubernetes>=32.0.1", - "pillow>=11.1.0", + "pillow>=11.2.1", "psycopg2-binary>=2.9.10", "pyjwt>=2.10.1", "requests>=2.32.3", @@ -27,15 +27,15 @@ dependencies = [ dev = [ "black>=25.1.0", "bumpver>=2024.1130", - "coverage>=7.7.0", + "coverage>=7.8.2", "djlint>=1.36.4", - "flake8>=7.1.2", + "flake8>=7.2.0", "flake8-bugbear>=24.12.12", "flake8-pyproject>=1.2.3", "isort>=6.0.1", "pytest>=8.3.5", "pytest-cov>=6.0.0", - "pytest-django>=4.10.0", + "pytest-django>=4.11.1", ] [tool.isort] diff --git a/src/servala/frontend/forms/service.py b/src/servala/frontend/forms/service.py index 04fe2df..189f9d5 100644 --- a/src/servala/frontend/forms/service.py +++ b/src/servala/frontend/forms/service.py @@ -1,4 +1,5 @@ from django import forms +from django.db.models import Q from django.utils.translation import gettext_lazy as _ from servala.core.models import ( @@ -18,13 +19,17 @@ class ServiceFilterForm(forms.Form): cloud_provider = forms.ModelChoiceField( queryset=CloudProvider.objects.all(), required=False ) - q = forms.CharField(required=False) + q = forms.CharField(label=_("Search"), required=False) def filter_queryset(self, queryset): if category := self.cleaned_data.get("category"): queryset = queryset.filter(category=category) if cloud_provider := self.cleaned_data.get("cloud_provider"): queryset = queryset.filter(offerings__provider=cloud_provider) + if search := self.cleaned_data.get("q"): + queryset = queryset.filter( + Q(name__icontains=search) | Q(category__name__icontains=search) + ) return queryset diff --git a/src/servala/frontend/templates/frontend/organizations/service_detail.html b/src/servala/frontend/templates/frontend/organizations/service_detail.html index c3962eb..a118539 100644 --- a/src/servala/frontend/templates/frontend/organizations/service_detail.html +++ b/src/servala/frontend/templates/frontend/organizations/service_detail.html @@ -28,38 +28,42 @@ - {% for offering in service.offerings.all %} -
{{ offering.description }}
+ {% elif offering.provider.description %} +{{ offering.provider.description }}
+ {% endif %} +{{ offering.description }}
- {% elif offering.provider.description %} -{{ offering.provider.description }}
- {% endif %} + {% empty %} +{% translate "No offerings found." %}
+{% translate "No offerings found." %}
-{{ service.description }}
{% endif %} +{{ service.description }}
{% endif %} + {% empty %} +{% translate "No services found." %}
+{% translate "No services found." %}
-