From ce97603580c13b50540a79156fecce9c69e49441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20Mata?= Date: Fri, 26 Dec 2025 22:48:01 +0000 Subject: [PATCH 01/52] Update brakeman gem to 7.1.2 --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index aaebedec1..7a4f3959e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -126,7 +126,7 @@ GEM bindex (0.8.1) bootsnap (1.18.6) msgpack (~> 1.2) - brakeman (7.1.1) + brakeman (7.1.2) racc builder (3.3.0) capybara (3.40.0) From 836bf665ac44e8aa554c86c74a2aa6ed6400bbfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Dular?= <22869613+xBlaz3kx@users.noreply.github.com> Date: Sun, 28 Dec 2025 12:23:45 +0100 Subject: [PATCH 02/52] feat: add compose example with local LLM (#489) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add ai compose example * Rename for consistency * Small edits * Update brakeman gem to 7.1.2 * Update volume and port configuration for ollama-webui Signed-off-by: Blaž Dular <22869613+xBlaz3kx@users.noreply.github.com> --------- Signed-off-by: Blaž Dular <22869613+xBlaz3kx@users.noreply.github.com> Co-authored-by: Juan José Mata Co-authored-by: Juan José Mata --- compose.example.ai.yml | 170 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 compose.example.ai.yml diff --git a/compose.example.ai.yml b/compose.example.ai.yml new file mode 100644 index 000000000..d62d04031 --- /dev/null +++ b/compose.example.ai.yml @@ -0,0 +1,170 @@ +# =========================================================================== +# Example Docker Compose file with additional Ollama service for LLM tools +# =========================================================================== +# +# Purpose: +# -------- +# +# This file is an example Docker Compose configuration for self hosting +# Sure with Ollama on your local machine or on a cloud VPS. +# +# The configuration below is a "standard" setup that works out of the box, +# but if you're running this outside of a local network, it is recommended +# to set the environment variables for extra security. +# +# Setup: +# ------ +# +# To run this, you should read the setup guide: +# +# https://github.com/we-promise/sure/blob/main/docs/hosting/docker.md +# +# Troubleshooting: +# ---------------- +# +# If you run into problems, you should open a Discussion here: +# +# https://github.com/we-promise/sure/discussions/categories/general +# + +x-db-env: &db_env + POSTGRES_USER: ${POSTGRES_USER:-sure_user} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-sure_password} + POSTGRES_DB: ${POSTGRES_DB:-sure_production} + +x-rails-env: &rails_env + <<: *db_env + SECRET_KEY_BASE: ${SECRET_KEY_BASE:-a7523c3d0ae56415046ad8abae168d71074a79534a7062258f8d1d51ac2f76d3c3bc86d86b6b0b307df30d9a6a90a2066a3fa9e67c5e6f374dbd7dd4e0778e13} + SELF_HOSTED: "true" + RAILS_FORCE_SSL: "false" + RAILS_ASSUME_SSL: "false" + DB_HOST: db + DB_PORT: 5432 + REDIS_URL: redis://redis:6379/1 + AI_DEBUG_MODE: "true" # Useful for debugging, set to "false" in production +# Ollama using OpenAI API compatible endpoints + OPENAI_ACCESS_TOKEN: token-can-be-any-value-for-ollama + OPENAI_MODEL: llama3.1:8b # Note: Use tool-enabled model + OPENAI_URI_BASE: http://ollama:11434/v1 +# NOTE: enabling OpenAI will incur costs when you use AI-related features in the app (chat, rules). Make sure you have set appropriate spend limits on your account before adding this. +# OPENAI_ACCESS_TOKEN: ${OPENAI_ACCESS_TOKEN} + +services: + # Note: You still have to download models manually using the ollama CLI or via Open WebUI + ollama: + volumes: + - ollama:/root/.ollama + container_name: ollama + hostname: ollama + restart: unless-stopped + image: docker.io/ollama/ollama:latest + ports: + - "11434:11434" + environment: + - OLLAMA_KEEP_ALIVE=1h + - OLLAMA_MODELS=deepseek-r1:8b,llama3.1:8b # Pre-load model on startup, you can change this to your preferred model + networks: + - sure_net + # Recommended: Enable GPU support + # deploy: + # resources: + # reservations: + # devices: + # - driver: nvidia + # count: all + # capabilities: [ gpu ] + + ollama-webui: + image: ghcr.io/open-webui/open-webui + container_name: ollama-webui + volumes: + - ollama-webui:/app/backend/data + depends_on: + - ollama + ports: + - "8080:8080" + environment: # https://docs.openwebui.com/getting-started/env-configuration#default_models + - OLLAMA_BASE_URLS=http://host.docker.internal:11434 #comma separated ollama hosts + - ENV=dev + - WEBUI_AUTH=False + - WEBUI_NAME=AI + - WEBUI_URL=http://localhost:8080 + - WEBUI_SECRET_KEY=t0p-s3cr3t + - NO_PROXY=host.docker.internal + extra_hosts: + - host.docker.internal:host-gateway + restart: unless-stopped + networks: + - sure_net + + web: + image: ghcr.io/we-promise/sure:latest + volumes: + - app-storage:/rails/storage + ports: + - "3000:3000" + restart: unless-stopped + environment: + <<: *rails_env + depends_on: + db: + condition: service_healthy + redis: + condition: service_healthy + networks: + - sure_net + + worker: + image: ghcr.io/we-promise/sure:latest + command: bundle exec sidekiq + volumes: + - app-storage:/rails/storage + restart: unless-stopped + depends_on: + db: + condition: service_healthy + redis: + condition: service_healthy + environment: + <<: *rails_env + networks: + - sure_net + + db: + image: postgres:16 + restart: unless-stopped + volumes: + - postgres-data:/var/lib/postgresql/data + environment: + <<: *db_env + healthcheck: + test: [ "CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB" ] + interval: 5s + timeout: 5s + retries: 5 + networks: + - sure_net + + redis: + image: redis:latest + restart: unless-stopped + volumes: + - redis-data:/data + healthcheck: + test: [ "CMD", "redis-cli", "ping" ] + interval: 5s + timeout: 5s + retries: 5 + networks: + - sure_net + +volumes: + app-storage: + postgres-data: + redis-data: + ollama: + ollama-webui: + +networks: + sure_net: + driver: bridge From 528597c21713d5a898be63a31f4e1d8661e8e7c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20Mata?= Date: Mon, 29 Dec 2025 01:36:11 +0100 Subject: [PATCH 03/52] Revert "Fix GPU artifacts bug (#498)" (#510) This reverts commit 7c524f2d74de17bfe428969d56ae85f1905201e3. --- app/views/layouts/shared/_htmldoc.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/shared/_htmldoc.html.erb b/app/views/layouts/shared/_htmldoc.html.erb index 8960e99f2..25b0ba773 100644 --- a/app/views/layouts/shared/_htmldoc.html.erb +++ b/app/views/layouts/shared/_htmldoc.html.erb @@ -13,7 +13,7 @@ <%= yield :head %> - + <% if Rails.env.development? %> <% end %> From 1028dc3c1e2be8c2c3b98ceb587e08dea9f7e2bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20Mata?= Date: Mon, 29 Dec 2025 01:39:58 +0100 Subject: [PATCH 04/52] Scope Plaid Link script to Plaid flows --- app/views/layouts/shared/_head.html.erb | 2 +- app/views/plaid_items/_auto_link_opener.html.erb | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/views/layouts/shared/_head.html.erb b/app/views/layouts/shared/_head.html.erb index 8dd683d4b..a878b66a9 100644 --- a/app/views/layouts/shared/_head.html.erb +++ b/app/views/layouts/shared/_head.html.erb @@ -6,9 +6,9 @@ <%= stylesheet_link_tag "tailwind", "data-turbo-track": "reload" %> - <%= javascript_include_tag "https://cdn.plaid.com/link/v2/stable/link-initialize.js" %> <%= combobox_style_tag %> + <%= yield :plaid_link %> <%= javascript_importmap_tags %> <%= render "layouts/dark_mode_check" %> <%= turbo_refreshes_with method: :morph, scroll: :preserve %> diff --git a/app/views/plaid_items/_auto_link_opener.html.erb b/app/views/plaid_items/_auto_link_opener.html.erb index 7e9c76950..b25884954 100644 --- a/app/views/plaid_items/_auto_link_opener.html.erb +++ b/app/views/plaid_items/_auto_link_opener.html.erb @@ -1,5 +1,9 @@ <%# locals: (link_token:, region:, item_id:, is_update: false) %> +<% content_for :plaid_link, flush: true do %> + <%= javascript_include_tag "https://cdn.plaid.com/link/v2/stable/link-initialize.js" %> +<% end %> + <%= tag.div data: { controller: "plaid", plaid_link_token_value: link_token, From 614c8d455f2b486049da2c6e3dfea744ede867f3 Mon Sep 17 00:00:00 2001 From: LPW Date: Tue, 30 Dec 2025 12:36:13 -0500 Subject: [PATCH 05/52] Helm chart: render CNPG spec.backup + method inference for volume snapshots (and support spec.plugins) (#504) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add backup rendering logic and tests for CNPG Cluster CR - Implemented logic in `cnpg-cluster.yaml` to render `.spec.backup` based on `cnpg.cluster.backup` values. - Introduced validation for required fields and unsupported keys (e.g., `ttl`, `volumeSnapshot.enabled`) to avoid CRD warnings. - Added Helm unit tests to validate backup rendering for various scenarios: missing/invalid fields, inferred `method`, and unsupported keys. - Updated `README.md` and `values.yaml` with examples and documentation for backup configuration options. * Add plugin rendering logic and tests for CNPG Cluster CR - Implemented logic in `cnpg-cluster.yaml` to render `.spec.plugins` based on `cnpg.cluster.plugins` values. - Added Helm unit tests to validate plugin rendering scenarios: unset plugins and configured plugin values. - Updated `values.yaml` with examples and documentation for configuring CNPG plugins. * Update chart to v1.0.1 with CNPG backup and plugin enhancements - Add rendering logic for `Cluster.spec.backup`, inferring `method: volumeSnapshot` when applicable and validating required fields. - Add support for `Cluster.spec.plugins`, enabling barman-cloud plugin and WAL archiver configuration. - Strip unsupported keys (e.g., `backup.ttl`, `volumeSnapshot.enabled`) to prevent CRD warnings. - Update examples and documentation in `README.md` and `values.yaml`. * Keep Helm chart on same major version as app? * Versioning with monorepo * MD is tricky --------- Co-authored-by: Josh Waldrep Co-authored-by: Juan José Mata --- charts/sure/CHANGELOG.md | 12 ++++ charts/sure/Chart.yaml | 2 +- charts/sure/README.md | 25 ++++++++ charts/sure/templates/cnpg-cluster.yaml | 48 +++++++++++++++- charts/sure/tests/cnpg-backup_test.yaml | 73 ++++++++++++++++++++++++ charts/sure/tests/cnpg-plugins_test.yaml | 34 +++++++++++ charts/sure/values.yaml | 47 +++++++++++++++ 7 files changed, 238 insertions(+), 3 deletions(-) create mode 100644 charts/sure/CHANGELOG.md create mode 100644 charts/sure/tests/cnpg-backup_test.yaml create mode 100644 charts/sure/tests/cnpg-plugins_test.yaml diff --git a/charts/sure/CHANGELOG.md b/charts/sure/CHANGELOG.md new file mode 100644 index 000000000..3e5d6f603 --- /dev/null +++ b/charts/sure/CHANGELOG.md @@ -0,0 +1,12 @@ +### 0.0.0 + +- First (nightly/test) releases via + +### 0.6.5 + +- First version/release that aligns versions with monorepo +- CNPG: render `Cluster.spec.backup` from `cnpg.cluster.backup`. + - If `backup.method` is omitted and `backup.volumeSnapshot` is present, the chart will infer `method: volumeSnapshot`. + - For snapshot backups, `backup.volumeSnapshot.className` is required (template fails early if missing). + - Example-only keys like `backup.ttl` and `backup.volumeSnapshot.enabled` are stripped to avoid CRD warnings. +- CNPG: render `Cluster.spec.plugins` from `cnpg.cluster.plugins` (enables barman-cloud plugin / WAL archiver configuration). diff --git a/charts/sure/Chart.yaml b/charts/sure/Chart.yaml index 1208c08b5..fe8f98dcc 100644 --- a/charts/sure/Chart.yaml +++ b/charts/sure/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: sure description: Official Helm chart for deploying the Sure Rails app (web + Sidekiq) on Kubernetes with optional HA PostgreSQL (CloudNativePG) and Redis. type: application -version: 1.0.0 +version: 0.6.5 appVersion: "0.6.5" kubeVersion: ">=1.25.0-0" diff --git a/charts/sure/README.md b/charts/sure/README.md index 0f2c105ba..3182e39bd 100644 --- a/charts/sure/README.md +++ b/charts/sure/README.md @@ -144,6 +144,11 @@ cnpg: storage: size: 20Gi storageClassName: longhorn + # Optional: enable CNPG volume snapshot backups (requires a VolumeSnapshotClass) + backup: + method: volumeSnapshot + volumeSnapshot: + className: longhorn # Synchronous replication for stronger durability minSyncReplicas: 1 maxSyncReplicas: 2 @@ -187,6 +192,26 @@ simplefin: - The chart configures credentials via `spec.bootstrap.initdb.secret` rather than `managed.roles`. The operator expects the referenced Secret to contain `username` and `password` keys (configurable via values). - This chart generates the application DB Secret when `cnpg.cluster.secret.enabled=true` using the keys defined at `cnpg.cluster.secret.usernameKey` (default `username`) and `cnpg.cluster.secret.passwordKey` (default `password`). If you use an existing Secret (`cnpg.cluster.existingSecret`), ensure it contains these keys. The Cluster CR references the Secret by name and maps the keys accordingly. - If the CNPG operator is already installed cluster‑wide, you may set `cnpg.enabled=false` and keep `cnpg.cluster.enabled=true`. The chart will still render the `Cluster` CR and compute the in‑cluster `DATABASE_URL`. +- For backups, CNPG requires `spec.backup.method` to be explicit (for example `volumeSnapshot` or `barmanObjectStore`). This chart will infer `method: volumeSnapshot` if a `backup.volumeSnapshot` block is present. + - For snapshot backups, `backup.volumeSnapshot.className` must be set (the chart will fail the render if it is missing). + - The CNPG `spec.backup` schema does not support keys like `ttl` or `volumeSnapshot.enabled`; this chart strips those keys to avoid CRD warnings. + - Unknown `backup.method` values are passed through and left for CNPG to validate. + +Example (barman-cloud plugin for WAL archiving + snapshot backups): + +```yaml +cnpg: + cluster: + plugins: + - name: barman-cloud.cloudnative-pg.io + isWALArchiver: true + parameters: + barmanObjectName: minio-backups # references an ObjectStore CR + backup: + method: volumeSnapshot + volumeSnapshot: + className: longhorn +``` Additional default hardening: diff --git a/charts/sure/templates/cnpg-cluster.yaml b/charts/sure/templates/cnpg-cluster.yaml index 574858546..a19c789be 100644 --- a/charts/sure/templates/cnpg-cluster.yaml +++ b/charts/sure/templates/cnpg-cluster.yaml @@ -15,9 +15,53 @@ spec: {{- end }} storage: size: {{ .Values.cnpg.cluster.storage.size | default "10Gi" }} - {{- if .Values.cnpg.cluster.storage.storageClassName }} + {{ if .Values.cnpg.cluster.storage.storageClassName }} storageClass: {{ .Values.cnpg.cluster.storage.storageClassName }} - {{- end }} + {{ end }} + {{ with .Values.cnpg.cluster.backup }} + {{- $backup := deepCopy . }} + {{- /* CNPG `spec.backup` does not support these historical/example keys */ -}} + {{- $_ := unset $backup "ttl" -}} + {{- if and (hasKey $backup "volumeSnapshot") (kindIs "map" $backup.volumeSnapshot) -}} + {{- $_ := unset $backup.volumeSnapshot "enabled" -}} + {{- end -}} + + {{- $method := (get $backup "method") -}} + {{- if not $method -}} + {{- if hasKey $backup "volumeSnapshot" -}} + {{- $_ := set $backup "method" "volumeSnapshot" -}} + {{- $method = "volumeSnapshot" -}} + {{- else if hasKey $backup "barmanObjectStore" -}} + {{- $_ := set $backup "method" "barmanObjectStore" -}} + {{- $method = "barmanObjectStore" -}} + {{- end -}} + {{- end -}} + + {{- if not $method -}} + {{- fail "cnpg.cluster.backup is set but no backup method could be inferred. Set cnpg.cluster.backup.method explicitly (e.g. volumeSnapshot or barmanObjectStore)." -}} + {{- end -}} + + {{- if and (eq $method "volumeSnapshot") (not (hasKey $backup "volumeSnapshot")) -}} + {{- fail "cnpg.cluster.backup.method=volumeSnapshot requires cnpg.cluster.backup.volumeSnapshot to be set" -}} + {{- end -}} + {{- if and (eq $method "barmanObjectStore") (not (hasKey $backup "barmanObjectStore")) -}} + {{- fail "cnpg.cluster.backup.method=barmanObjectStore requires cnpg.cluster.backup.barmanObjectStore to be set" -}} + {{- end -}} + {{- if eq $method "volumeSnapshot" -}} + {{- if kindIs "map" $backup.volumeSnapshot -}} + {{- $_ := required "cnpg.cluster.backup.volumeSnapshot.className is required for volumeSnapshot backups" $backup.volumeSnapshot.className -}} + {{- else -}} + {{- fail "cnpg.cluster.backup.volumeSnapshot must be a map/object" -}} + {{- end -}} + {{- end -}} + + backup: + {{- toYaml $backup | nindent 4 }} + {{- end }} + {{ with .Values.cnpg.cluster.plugins }} + plugins: + {{- toYaml . | nindent 4 }} + {{ end }} {{- with .Values.cnpg.cluster.nodeSelector }} nodeSelector: {{- toYaml . | nindent 4 }} diff --git a/charts/sure/tests/cnpg-backup_test.yaml b/charts/sure/tests/cnpg-backup_test.yaml new file mode 100644 index 000000000..242413fa7 --- /dev/null +++ b/charts/sure/tests/cnpg-backup_test.yaml @@ -0,0 +1,73 @@ +suite: CNPG Cluster backup rendering +templates: + - templates/cnpg-cluster.yaml + +tests: + - it: renders no spec.backup when cnpg.cluster.backup is unset + set: + cnpg: + cluster: + enabled: true + asserts: + - notExists: + path: spec.backup + + - it: defaults method to volumeSnapshot when volumeSnapshot is present + set: + cnpg: + cluster: + enabled: true + backup: + volumeSnapshot: + className: longhorn + asserts: + - equal: + path: spec.backup.method + value: volumeSnapshot + - equal: + path: spec.backup.volumeSnapshot.className + value: longhorn + + - it: strips unsupported keys (ttl and volumeSnapshot.enabled) + set: + cnpg: + cluster: + enabled: true + backup: + method: volumeSnapshot + ttl: 168h + volumeSnapshot: + enabled: true + className: longhorn + asserts: + - equal: + path: spec.backup.method + value: volumeSnapshot + - notExists: + path: spec.backup.ttl + - notExists: + path: spec.backup.volumeSnapshot.enabled + + - it: fails when volumeSnapshot backups are enabled without className + set: + cnpg: + cluster: + enabled: true + backup: + method: volumeSnapshot + volumeSnapshot: {} + asserts: + - failedTemplate: + errorMessage: cnpg.cluster.backup.volumeSnapshot.className is required for volumeSnapshot backups + + - it: renders unknown backup method as-is (CNPG will validate) + set: + cnpg: + cluster: + enabled: true + backup: + method: madeUpMethod + asserts: + - equal: + path: spec.backup.method + value: madeUpMethod diff --git a/charts/sure/tests/cnpg-plugins_test.yaml b/charts/sure/tests/cnpg-plugins_test.yaml new file mode 100644 index 000000000..79dc0d3b3 --- /dev/null +++ b/charts/sure/tests/cnpg-plugins_test.yaml @@ -0,0 +1,34 @@ +suite: CNPG Cluster plugins rendering +templates: + - templates/cnpg-cluster.yaml + +tests: + - it: renders no spec.plugins when cnpg.cluster.plugins is unset + set: + cnpg: + cluster: + enabled: true + asserts: + - notExists: + path: spec.plugins + + - it: renders spec.plugins when cnpg.cluster.plugins is set + set: + cnpg: + cluster: + enabled: true + plugins: + - name: barman-cloud.cloudnative-pg.io + isWALArchiver: true + parameters: + barmanObjectName: minio-backups + asserts: + - equal: + path: spec.plugins[0].name + value: barman-cloud.cloudnative-pg.io + - equal: + path: spec.plugins[0].isWALArchiver + value: true + - equal: + path: spec.plugins[0].parameters.barmanObjectName + value: minio-backups diff --git a/charts/sure/values.yaml b/charts/sure/values.yaml index 87faec82a..aea5de0c1 100644 --- a/charts/sure/values.yaml +++ b/charts/sure/values.yaml @@ -65,6 +65,53 @@ cnpg: storage: size: 10Gi storageClassName: "" + # Optional CNPG backup configuration (rendered as `.spec.backup` on the Cluster CR) + # Example (CNPG volume snapshots): + # backup: + # method: volumeSnapshot + # volumeSnapshot: + # className: longhorn + # + # Example (CNPG barmanObjectStore backups): + # backup: + # method: barmanObjectStore + # barmanObjectStore: + # destinationPath: s3://my-bucket/cnpg + # endpointURL: https://s3.us-east-1.amazonaws.com + # s3Credentials: + # accessKeyId: + # name: my-s3-creds + # key: ACCESS_KEY_ID + # secretAccessKey: + # name: my-s3-creds + # key: SECRET_ACCESS_KEY + # + # NOTE: + # - The CNPG Cluster `spec.backup` schema does not support `enabled` or `ttl` keys. + # If you add them, this chart will ignore them to avoid CRD warnings. + # - This chart only hard-validates required fields for supported methods; unknown `method` values + # are passed through for CNPG to validate. + backup: {} + + # Optional CNPG plugin configuration (rendered as `.spec.plugins` on the Cluster CR) + # Example (barman-cloud plugin as WAL archiver): + # plugins: + # - name: barman-cloud.cloudnative-pg.io + # isWALArchiver: true + # parameters: + # barmanObjectName: minio-backups + # + # Example (complete setup: WAL archiving via barman-cloud plugin + snapshot backups): + # plugins: + # - name: barman-cloud.cloudnative-pg.io + # isWALArchiver: true + # parameters: + # barmanObjectName: minio-backups # references an ObjectStore CR + # backup: + # method: volumeSnapshot + # volumeSnapshot: + # className: longhorn + plugins: [] # auth config for application user appUser: sure appDatabase: sure From 7b91de50830fd06f140a40298e63c3df9a23a6a3 Mon Sep 17 00:00:00 2001 From: LPW Date: Tue, 30 Dec 2025 12:46:13 -0500 Subject: [PATCH 06/52] Ensure redisSimple service port is cast to integer in helpers template (#517) Co-authored-by: Josh Waldrep --- charts/sure/templates/_helpers.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/sure/templates/_helpers.tpl b/charts/sure/templates/_helpers.tpl index 2b183d102..2b202bc90 100644 --- a/charts/sure/templates/_helpers.tpl +++ b/charts/sure/templates/_helpers.tpl @@ -69,7 +69,7 @@ app.kubernetes.io/instance: {{ .Release.Name }} {{- printf "redis://default:$(REDIS_PASSWORD)@%s:6379/0" $host -}} {{- else if .Values.redisSimple.enabled -}} {{- $host := printf "%s-redis.%s.svc.cluster.local" (include "sure.fullname" .) .Release.Namespace -}} - {{- printf "redis://default:$(REDIS_PASSWORD)@%s:%d/0" $host (.Values.redisSimple.service.port | default 6379) -}} + {{- printf "redis://default:$(REDIS_PASSWORD)@%s:%d/0" $host (int (.Values.redisSimple.service.port | default 6379)) -}} {{- else -}} {{- "" -}} {{- end -}} From cf15ef4d268111420e58969372d13c68d4ffdf09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20Mata?= Date: Tue, 30 Dec 2025 18:54:43 +0100 Subject: [PATCH 07/52] Bump version to 0.6.6-alpha in Chart.yaml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Monorepo Helm chart versioning, here we come! Signed-off-by: Juan José Mata --- charts/sure/Chart.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/sure/Chart.yaml b/charts/sure/Chart.yaml index fe8f98dcc..b2afd55fc 100644 --- a/charts/sure/Chart.yaml +++ b/charts/sure/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: sure description: Official Helm chart for deploying the Sure Rails app (web + Sidekiq) on Kubernetes with optional HA PostgreSQL (CloudNativePG) and Redis. type: application -version: 0.6.5 -appVersion: "0.6.5" +version: 0.6.6-alpha +appVersion: "0.6.6-alpha" kubeVersion: ">=1.25.0-0" From 7915fee62c31deca4bef9c2a963d0ea74a09b49e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20Mata?= Date: Tue, 30 Dec 2025 18:59:45 +0100 Subject: [PATCH 08/52] Add print stylesheet for reports page (#499) * Add print stylesheet for reports page * Polish reports print layout * Make sure all pages are printed * Use design system tokens --- app/views/layouts/application.html.erb | 13 ++- .../reports/_transactions_breakdown.html.erb | 2 +- app/views/reports/index.html.erb | 106 +++++++++++++++++- 3 files changed, 110 insertions(+), 11 deletions(-) diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 5741ff241..3f19d50ed 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -19,7 +19,8 @@ data-app-layout-user-id-value="<%= Current.user.id %>"> <%# MOBILE - Top nav %> -