diff --git a/charts/strapi/Chart.yaml b/charts/strapi/Chart.yaml index 0f44eb1c..157ae843 100644 --- a/charts/strapi/Chart.yaml +++ b/charts/strapi/Chart.yaml @@ -4,7 +4,7 @@ name: strapi description: Strapi headless CMS with SQLite, MySQL, or PostgreSQL support, uploads persistence, and S3 backups type: application version: 2.3.7 -appVersion: "5.47.1" +appVersion: "5.49.0" kubeVersion: ">=1.26.0-0" maintainers: - name: helmforgedev @@ -24,7 +24,7 @@ icon: https://helmforge.dev/icons/charts/strapi.png annotations: artifacthub.io/changes: | - kind: changed - description: "refresh chart subchart dependencies (#587)" + description: "bump strapi base image to 5.49.0 (#704)" artifacthub.io/maintainers: | - name: HelmForge email: berlofa@helmforge.dev diff --git a/charts/strapi/README.md b/charts/strapi/README.md index bb419fd2..93298f33 100644 --- a/charts/strapi/README.md +++ b/charts/strapi/README.md @@ -18,9 +18,9 @@ This chart is designed for a prebuilt Strapi project image. It does not build ap ## HelmForge Base Image -This chart uses the official **HelmForge Strapi base image** (`docker.io/helmforge/strapi-base:5.47.1`) which provides: +This chart uses the official **HelmForge Strapi base image** (`docker.io/helmforge/strapi-base:5.49.0`) which provides: -- **Strapi 5.47.1** with all official plugins pre-installed +- **Strapi 5.49.0** with all official plugins pre-installed - **Multi-database support** — SQLite, PostgreSQL, MySQL ready to use - **Health check endpoint** — HTTP health checks on `/_health` for proper Kubernetes integration - **Security hardened** — Non-root user (UID 1000), minimal attack surface @@ -107,7 +107,7 @@ database: | Key | Default | Description | |-----|---------|-------------| | `image.repository` | `helmforge/strapi-base` | Container image for the Strapi project | -| `image.tag` | `5.47.1` | HelmForge Strapi base image version | +| `image.tag` | `5.49.0` | HelmForge Strapi base image version | | `strapi.url` | `""` | Public URL (auto-detected from ingress if empty) | | `strapi.port` | `1337` | Container port | | `strapi.telemetryDisabled` | `true` | Disable telemetry | @@ -141,11 +141,20 @@ database: ## Notes -- The default image is `helmforge/strapi-base:5.47.1`, HelmForge's production-ready Strapi image. Override it if your deployment uses a custom Strapi build. +- The default image is `helmforge/strapi-base:5.49.0`, HelmForge's production-ready Strapi image. Override it if your deployment uses a custom Strapi build. - SQLite is supported for simple deployments, but server-based databases are recommended for production workloads. - Horizontal scaling is intentionally out of scope for this v1 chart because default local uploads persistence is single-writer oriented. - For ingress, set `ingress.ingressClassName` to the class used in your cluster, such as `traefik`, `nginx`, or another supported controller. +## Upgrade Notes + +Strapi `5.49.0` is a stable release with MCP builder exports, upload provider +enhancements, dashboard/admin fixes, safer large upload MIME detection, and +dependency security updates. Upstream calls out one user-visible behavior change: +in the Content Manager, `Cmd/Ctrl+Enter` now saves a draft, while +`Cmd/Ctrl+Shift+Enter` publishes. Back up the database and uploads PVC before +upgrading production workloads. + ## More Information - [Database configuration](docs/database.md) diff --git a/charts/strapi/templates/NOTES.txt b/charts/strapi/templates/NOTES.txt index 7e431c3b..42aa8297 100644 --- a/charts/strapi/templates/NOTES.txt +++ b/charts/strapi/templates/NOTES.txt @@ -2,7 +2,7 @@ Strapi has been deployed successfully! ============================================================================= -ADMIN PANEL +1. Admin Panel ============================================================================= {{- if .Values.ingress.enabled }} {{- range .Values.ingress.hosts }} @@ -16,7 +16,7 @@ ADMIN PANEL {{- end }} ============================================================================= -API ENDPOINTS +2. API Endpoints ============================================================================= {{- $baseUrl := .Values.strapi.url }} {{- if and (not $baseUrl) .Values.ingress.enabled .Values.ingress.hosts }} @@ -30,7 +30,7 @@ API ENDPOINTS {{- end }} ============================================================================= -DATABASE +3. Database ============================================================================= Mode: {{ include "strapi.databaseMode" . }} {{- if eq (include "strapi.databaseMode" .) "sqlite" }} @@ -46,7 +46,7 @@ DATABASE {{- end }} ============================================================================= -STORAGE & UPLOADS +4. Storage And Uploads ============================================================================= {{- if eq .Values.strapi.upload.provider "aws-s3" }} {{- if .Values.strapi.upload.s3.enabled }} @@ -77,7 +77,7 @@ STORAGE & UPLOADS {{- if ne .Values.strapi.email.provider "none" }} ============================================================================= -EMAIL CONFIGURATION +5. Email Configuration ============================================================================= Provider: {{ .Values.strapi.email.provider }} From: {{ .Values.strapi.email.defaultFrom }} @@ -88,7 +88,7 @@ EMAIL CONFIGURATION {{- if .Values.backup.enabled }} ============================================================================= -BACKUPS +6. Backups ============================================================================= Schedule: {{ .Values.backup.schedule }} Target: {{ .Values.backup.s3.bucket }}{{ if .Values.backup.s3.prefix }}/{{ .Values.backup.s3.prefix }}{{ end }} @@ -97,7 +97,7 @@ BACKUPS {{- end }} ============================================================================= -DEPLOYMENT INFO +7. Deployment Info ============================================================================= Replicas: {{ include "strapi.replicaCount" . }} Environment: {{ .Values.strapi.nodeEnv }} @@ -108,7 +108,7 @@ DEPLOYMENT INFO Telemetry: {{ if .Values.strapi.telemetryDisabled }}Disabled{{ else }}Enabled{{ end }} ============================================================================= -SECURITY +8. Security ============================================================================= Admin JWT Expiration: {{ .Values.strapi.admin.jwtExpiration | default "7d" }} Admin Rate Limiting: {{ if .Values.strapi.admin.rateLimit.enabled }}Enabled ({{ .Values.strapi.admin.rateLimit.max }} attempts/{{ div .Values.strapi.admin.rateLimit.timeWindow 60000 }}min){{ else }}Disabled{{ end }} @@ -120,7 +120,7 @@ SECURITY {{- end }} ============================================================================= -GETTING STARTED +9. Getting Started ============================================================================= 1. Access the admin panel using the URL above 2. Create your first administrator user @@ -129,7 +129,7 @@ GETTING STARTED 5. Test your API endpoints ============================================================================= -TROUBLESHOOTING +10. Troubleshooting ============================================================================= View logs: kubectl logs -f deployment/{{ include "strapi.fullname" . }} -n {{ .Release.Namespace }} @@ -155,7 +155,7 @@ TROUBLESHOOTING kubectl get events -n {{ .Release.Namespace }} --sort-by='.lastTimestamp' ============================================================================= -DOCUMENTATION +11. Documentation ============================================================================= Strapi Documentation: https://docs.strapi.io Chart Documentation: https://helmforge.dev/docs/charts/strapi diff --git a/charts/strapi/templates/_helpers.tpl b/charts/strapi/templates/_helpers.tpl index 6096ed91..a362dacc 100644 --- a/charts/strapi/templates/_helpers.tpl +++ b/charts/strapi/templates/_helpers.tpl @@ -3,6 +3,11 @@ {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} {{- end -}} +{{- define "strapi.validate" -}} +{{- $_ := include "strapi.databaseMode" . -}} +{{- $_ := include "strapi.replicaCount" . -}} +{{- end -}} + {{- define "strapi.fullname" -}} {{- if .Values.fullnameOverride -}} {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} diff --git a/charts/strapi/templates/deployment.yaml b/charts/strapi/templates/deployment.yaml index 82bc6f7a..2872f017 100644 --- a/charts/strapi/templates/deployment.yaml +++ b/charts/strapi/templates/deployment.yaml @@ -1,4 +1,5 @@ {{/* SPDX-License-Identifier: Apache-2.0 */}} +{{- include "strapi.validate" . -}} apiVersion: apps/v1 kind: Deployment metadata: diff --git a/charts/strapi/templates/external-secret.yaml b/charts/strapi/templates/externalsecret.yaml similarity index 100% rename from charts/strapi/templates/external-secret.yaml rename to charts/strapi/templates/externalsecret.yaml diff --git a/charts/strapi/tests/deployment_test.yaml b/charts/strapi/tests/deployment_test.yaml index eb751b68..ce1528a7 100644 --- a/charts/strapi/tests/deployment_test.yaml +++ b/charts/strapi/tests/deployment_test.yaml @@ -22,7 +22,7 @@ tests: asserts: - equal: path: spec.template.spec.containers[0].image - value: "docker.io/helmforge/strapi-base:5.47.1" + value: "docker.io/helmforge/strapi-base:5.49.0" - it: should set container port to 1337 template: templates/deployment.yaml diff --git a/charts/strapi/values.yaml b/charts/strapi/values.yaml index f4bca4b5..81956835 100644 --- a/charts/strapi/values.yaml +++ b/charts/strapi/values.yaml @@ -26,7 +26,7 @@ replicaCount: 1 # Image # ============================================================================= # HelmForge provides a production-ready Strapi base image (helmforge/strapi-base) -# that includes Strapi 5.47.1 with all official plugins, multi-database support, +# that includes Strapi 5.49.0 with all official plugins, multi-database support, # security hardening, and health check endpoints. This image is multi-arch # (amd64/arm64), regularly updated, and optimized for Kubernetes deployments. # @@ -38,7 +38,7 @@ image: # -- Container image repository for your Strapi project repository: docker.io/helmforge/strapi-base # -- Container image tag - tag: "5.47.1" + tag: "5.49.0" # -- Image pull policy pullPolicy: IfNotPresent