From 75ba60c65782c322523cb4ed4427b446e9057008 Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Tue, 28 Oct 2025 06:18:37 -0400 Subject: [PATCH 01/14] Trimming unused freelancing services. --- docker-compose.yml | 506 --------------------------------------------- 1 file changed, 506 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index a9cf3577..8646962c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -43,16 +43,6 @@ x-maxun: &maxun-env CHROMIUM_FLAGS: "--disable-gpu --no-sandbox --headless=new" #DEBUG: pw:api #PWDEBUG: 1 -x-penpot-flags: &penpot-flags - PENPOT_FLAGS: enable-smtp enable-prepl-server login-with-password webhooks -x-penpot-uri: &penpot-public-uri - PENPOT_PUBLIC_URI: https://penpot.${MY_TLD} -x-penpot-body-size: &penpot-http-body-size - # Max body size (30MiB); Used for plain requests, should never be - # greater than multi-part size - PENPOT_HTTP_SERVER_MAX_BODY_SIZE: 31457280 - # Max multipart body size (350MiB) - PENPOT_HTTP_SERVER_MAX_MULTIPART_BODY_SIZE: 367001600 x-signoz-common: &signoz-common profiles: ["rinoa-apps"] restart: unless-stopped @@ -121,66 +111,6 @@ x-valkey-params: &valkey-params - 6379 profiles: ["rinoa-apps"] restart: unless-stopped -x-zammad: - zammad-service: &zammad-service - environment: &zammad-environment - MEMCACHE_SERVERS: ${ZAMMAD_MEMCACHE_SERVERS:-zammad-memcached:11211} - POSTGRESQL_DB: ${ZAMMAD_POSTGRES_DB:-zammad_production} - POSTGRESQL_HOST: ${ZAMMAD_POSTGRES_HOST:-zammad-postgresql} - POSTGRESQL_USER: ${ZAMMAD_POSTGRES_USER:-zammad} - POSTGRESQL_PASS: ${ZAMMAD_POSTGRES_PASS:-zammad} - POSTGRESQL_PORT: ${ZAMMAD_POSTGRES_PORT:-5432} - POSTGRESQL_OPTIONS: ${ZAMMAD_POSTGRESQL_OPTIONS:-?pool=50} - POSTGRESQL_DB_CREATE: - REDIS_URL: ${ZAMMAD_REDIS_URL:-redis://zammad-redis:6379} - S3_URL: http://${ZAMMAD_S3_ACCESS_KEY}:${ZAMMAD_S3_SECRET_KEY}@minio:9000/zammad-storage-bucket?region=us-east-fh-pln&force_path_style=true - # Backup settings - BACKUP_DIR: "${BACKUP_DIR:-/var/tmp/zammad}" - BACKUP_TIME: "${BACKUP_TIME:-03:00}" - HOLD_DAYS: "${HOLD_DAYS:-7}" - TZ: "${TZ:-Europe/Berlin}" - # Allow passing in these variables via .env: - AUTOWIZARD_JSON: - AUTOWIZARD_RELATIVE_PATH: - ELASTICSEARCH_ENABLED: false - ELASTICSEARCH_SCHEMA: - ELASTICSEARCH_HOST: - ELASTICSEARCH_PORT: - ELASTICSEARCH_USER: ${ELASTICSEARCH_USER:-elastic} - ELASTICSEARCH_PASS: ${ELASTICSEARCH_PASS:-zammad} - ELASTICSEARCH_NAMESPACE: - ELASTICSEARCH_REINDEX: - NGINX_PORT: - NGINX_EXPOSE_PORT: 15257 - NGINX_CLIENT_MAX_BODY_SIZE: - NGINX_SERVER_NAME: - NGINX_SERVER_SCHEME: - RAILS_TRUSTED_PROXIES: 172.18.0.0/16 - ZAMMAD_HTTP_TYPE: - ZAMMAD_FQDN: - ZAMMAD_WEB_CONCURRENCY: - ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS: - ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS: - ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS: - # ZAMMAD_SESSION_JOBS_CONCURRENT is deprecated, please use ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS instead. - ZAMMAD_SESSION_JOBS_CONCURRENT: - # Variables used by ngingx-proxy container for reverse proxy creations - # for docs refer to https://github.com/nginx-proxy/nginx-proxy - VIRTUAL_HOST: - VIRTUAL_PORT: - # Variables used by acme-companion for retrieval of LetsEncrypt certificate - # for docs refer to https://github.com/nginx-proxy/acme-companion - LETSENCRYPT_HOST: - LETSENCRYPT_EMAIL: - image: ${IMAGE_REPO:-ghcr.io/zammad/zammad}:${VERSION:-6.5.0-15} - profiles: ["rinoa-apps"] - restart: ${RESTART:-always} - volumes: - - zammad-storage:/opt/zammad/storage - depends_on: - - zammad-memcached - - zammad-postgresql - - zammad-redis services: 13ft: container_name: 13ft @@ -1770,53 +1700,6 @@ services: source: /home/charish/.config/appdata target: /source type: bind - easyappointments: - container_name: easyappointments - depends_on: - mariadb: - condition: service_healthy - required: true - image: alextselegidis/easyappointments:1.5.2@sha256:484f183a7f5bcc9c0486674de4af01c785ab73fc2ee962dc35db7d0ba69d2825 - environment: - BASE_URL: http://localhost - DEBUG_MODE: TRUE - DB_HOST: mariadb:3306 - DB_NAME: easyappointments - DB_USERNAME: easyappt - DB_PASSWORD: ${EASYAPPOINTMENTS_DB_PASSWORD} - MAIL_PROTOCOL: mail - MAIL_SMTP_DEBUG: 0 - MAIL_SMTP_AUTH: 0 - MAIL_SMTP_HOST: postal-smtp - MAIL_SMTP_USER: ${POSTAL_SMTP_AUTH_USER} - MAIL_SMTP_PASS: ${POSTAL_SMTP_AUTH_PASSWORD} - MAIL_SMTP_CRYPTO: tls - MAIL_SMTP_PORT: 25 - MAIL_FROM_ADDRESS: noreply@${MY_TLD} - MAIL_FROM_NAME: "Trez" - MAIL_REPLY_TO_ADDRESS: it-services@${MY_TLD} - labels: - homepage.group: Professional Services - homepage.name: "Easy!Appointments" - homepage.href: https://appt.${MY_TLD} - homepage.icon: sh-easy-appointments.png - homepage.description: Highly customizable appointment scheduler - swag: enable - swag_proto: http - swag_url: appt.${MY_TLD} - swag.uptime-kuma.enabled: true - swag.uptime-kuma.monitor.parent: Rinoa - swag.uptime-kuma.name: "Easy!Appointments" - swag.uptime-kuma.monitor.url: https://appt.${MY_TLD} - swag.uptime-kuma.monitor.interval: 300 - swag.uptime-kuma.monitor.retryInterval: 60 - swag.uptime-kuma.monitor.maxretries: 5 - ports: - - 8362:80 - profiles: ["rinoa-apps"] - restart: unless-stopped - # volumes: - # - easyappointments:/var/www/html excalidraw: container_name: excalidraw image: "excalidraw/excalidraw:latest@sha256:ddcc677525fd796fa871bdf2b2ffae8f3bc311e19037ab29abfc735b7dc415f7" @@ -2601,112 +2484,6 @@ services: type: bind bind: create_host_path: true - invoice-ninja: - container_name: invoice-ninja - depends_on: - mariadb: - condition: service_healthy - required: true - restart: true - environment: - APP_DEBUG: true - APP_KEY: ${IN_APP_KEY} - APP_URL: http://invoice-ninja:8005 - APP_ENV: production - DB_DATABASE: invoice_ninja - DB_HOST: mariadb - DB_PASSWORD: ${IN_MYSQL_PASSWORD} - DB_PORT: 3306 - DB_USERNAME: ininja - IN_PASSWORD: ${IN_PASSWORD} - IN_USER_EMAIL: charish.patel@${MY_TLD} - IS_DOCKER: true - MAIL_ENCRYPTION: null - MAIL_FROM_ADDRESS: noreply@${MY_TLD} - MAIL_FROM_NAME: null - MAIL_HOST: postal-smtp - MAIL_MAILER: log - MAIL_PASSWORD: ${POSTAL_SMTP_AUTH_PASSWORD} - MAIL_PORT: 25 - MAIL_USERNAME: ${POSTAL_SMTP_AUTH_USER} - MYSQL_DATABASE: invoice_ninja - MYSQL_PASSWORD: ${IN_MYSQL_PASSWORD} - MYSQL_ROOT_PASSWORD: ${MARIADB_ENVIRONMENT_MYSQL_ROOT_PASSWORD} - MYSQL_USER: ininja - PDF_GENERATOR: snappdf - PHANTOMJS_PDF_GENERATION: false - QUEUE_CONNECTION: database - REQUIRE_HTTPS: false - TRUSTED_PROXIES: 172.18.0.0/16 - expose: - - 9000 - image: invoiceninja/invoiceninja-debian:5@sha256:2b53df31b3055965c02ecf109ec36ac9edb270e8830f551e237c8c7027369bdd - profiles: ["rinoa-apps"] - restart: unless-stopped - volumes: - - invoice-ninja_cache:/var/www/html/bootstrap/cache - - invoice-ninja_public:/var/www/html/public - - invoice-ninja_storage:/var/www/html/storage - invoice-ninja_proxy: - container_name: invoice-ninja_proxy - depends_on: - invoice-ninja: - condition: service_started - required: true - restart: true - environment: - APP_DEBUG: true - APP_KEY: ${IN_APP_KEY} - APP_URL: http://invoice-ninja:9000 - DB_DATABASE: invoice_ninja - DB_HOST: mariadb - DB_PASSWORD: ${IN_MYSQL_PASSWORD} - DB_PORT: 3306 - DB_USERNAME: ininja - IN_PASSWORD: ${IN_PASSWORD} - IN_USER_EMAIL: charish.patel@${MY_TLD} - MAIL_ENCRYPTION: null - MAIL_FROM_ADDRESS: noreply@${MY_TLD} - MAIL_FROM_NAME: null - MAIL_HOST: postal-smtp - MAIL_MAILER: log - MAIL_PASSWORD: ${POSTAL_SMTP_AUTH_PASSWORD} - MAIL_PORT: 25 - MAIL_USERNAME: ${POSTAL_SMTP_AUTH_USER} - MYSQL_DATABASE: invoice_ninja - MYSQL_PASSWORD: ${IN_MYSQL_PASSWORD} - MYSQL_ROOT_PASSWORD: ${MARIADB_ENVIRONMENT_MYSQL_ROOT_PASSWORD} - MYSQL_USER: ininja - PDF_GENERATOR: snappdf - PHANTOMJS_PDF_GENERATION: false - QUEUE_CONNECTION: database - REQUIRE_HTTPS: false - TRUSTED_PROXIES: 172.18.0.0/16 - image: nginx@sha256:029d4461bd98f124e531380505ceea2072418fdf28752aa73b7b273ba3048903 - labels: - swag: enable - swag_proto: http - swag_url: biz.${MY_TLD} - swag.uptime-kuma.enabled: true - swag.uptime-kuma.monitor.parent: Rinoa - swag.uptime-kuma.name: Invoice Ninja - swag.uptime-kuma.monitor.url: https://biz.${MY_TLD} - swag.uptime-kuma.monitor.interval: 300 - swag.uptime-kuma.monitor.retryInterval: 60 - swag.uptime-kuma.monitor.maxretries: 5 - homepage.group: Professional Services - homepage.name: Invoice Ninja - homepage.href: https://biz.${MY_TLD} - homepage.icon: invoice-ninja.svg - homepage.description: Simple invoicing, multiple payment options, expense and vendor management, and more! - ports: - - 8005:80 - profiles: ["rinoa-apps"] - restart: always - volumes: - - ${DOCKER_VOLUME_CONFIG}/invoice-ninja/nginx:/etc/nginx/conf.d:ro - - invoice-ninja_public:/var/www/html/public - - invoice-ninja_storage:/var/www/html/storage it-tools: container_name: it-tools image: ghcr.io/corentinth/it-tools:latest@sha256:8b8128748339583ca951af03dfe02a9a4d7363f61a216226fc28030731a5a61f @@ -4764,112 +4541,6 @@ services: <<: *valkey-params volumes: - paperless-valkey-data:/data/valkey - penpot-frontend: - container_name: penpot-frontend - depends_on: - - penpot-backend - - penpot-exporter - image: penpotapp/frontend:latest@sha256:c016a77555da6f004cf16d0640b71f1ffdde11908fa6037562a977b83d24c3da - environment: - <<: [*penpot-flags, *penpot-http-body-size] - labels: - homepage.group: Professional Services - homepage.name: Penpot - homepage.href: https://penpot.${MY_TLD} - homepage.icon: penpot.svg - homepage.description: Open-source design and prototyping platform - swag: enable - swag_port: 8080 - swag_proto: http - swag_url: penpot.${MY_TLD} - swag.uptime-kuma.enabled: true - swag.uptime-kuma.monitor.parent: Rinoa - swag.uptime-kuma.name: Penpot - swag.uptime-kuma.monitor.url: https://penpot.${MY_TLD} - swag.uptime-kuma.monitor.interval: 300 - swag.uptime-kuma.monitor.retryInterval: 60 - swag.uptime-kuma.monitor.maxretries: 5 - ports: - - 17503:8080 - profiles: ["rinoa-apps"] - restart: always - volumes: - - penpot-assets:/opt/data/assets - penpot-backend: - container_name: penpot-backend - depends_on: - penpot-pg-db: - condition: service_healthy - penpot-redis: - condition: service_healthy - environment: - <<: [*penpot-flags, *penpot-public-uri, *penpot-http-body-size] - PENPOT_SECRET_KEY: ${PENPOT_SECRET_KEY} - PENPOT_PREPL_HOST: 0.0.0.0 - PENPOT_DATABASE_URI: postgresql://penpot-pg-db/penpot - PENPOT_DATABASE_USERNAME: penpot - PENPOT_DATABASE_PASSWORD: ${PENPOT_PG_DB_PASSWORD} - PENPOT_REDIS_URI: redis://penpot-redis/0 - PENPOT_ASSETS_STORAGE_BACKEND: assets-fs - PENPOT_STORAGE_ASSETS_FS_DIRECTORY: /opt/data/assets - PENPOT_TELEMETRY_ENABLED: true - PENPOT_TELEMETRY_REFERER: compose - PENPOT_SMTP_DEFAULT_FROM: noreply@${MY_TLD} - PENPOT_SMTP_DEFAULT_REPLY_TO: noreply@${MY_TLD} - PENPOT_SMTP_HOST: postal-smtp - PENPOT_SMTP_PORT: 25 - PENPOT_SMTP_USERNAME: ${POSTAL_SMTP_AUTH_USER} - PENPOT_SMTP_PASSWORD: ${POSTAL_SMTP_AUTH_PASSWORD} - PENPOT_SMTP_TLS: false - PENPOT_SMTP_SSL: false - image: penpotapp/backend:latest@sha256:48d13681ebc76672c6e7715ea03229fe77512037fde26072f8b93f57849ca598 - profiles: ["rinoa-apps"] - restart: always - volumes: - - penpot-assets:/opt/data/assets - penpot-exporter: - container_name: penpot-exporter - depends_on: - penpot-redis: - condition: service_healthy - environment: - PENPOT_PUBLIC_URI: http://penpot-frontend:8080 - PENPOT_REDIS_URI: redis://penpot-redis/0 - image: penpotapp/exporter:latest@sha256:79d8f979764f3cf73da16e6b65f5a3113a6936343a5146d650cdebf070474a7a - profiles: ["rinoa-apps"] - restart: unless-stopped - penpot-pg-db: - container_name: penpot-pg-db - environment: - POSTGRES_INITDB_ARGS: --data-checksums - POSTGRES_DB: penpot - POSTGRES_USER: penpot - POSTGRES_PASSWORD: ${PENPOT_PG_DB_PASSWORD} - expose: - - 5432 - healthcheck: - test: ["CMD-SHELL", "pg_isready -U penpot"] - interval: 2s - timeout: 10s - retries: 5 - start_period: 2s - image: postgres:15-alpine@sha256:64583b3cb4f2010277bdd9749456de78e5c36f8956466ba14b0b96922e510950 - profiles: ["rinoa-apps"] - restart: always - stop_signal: SIGINT - volumes: - - penpot-pg-data:/var/lib/postgresql/data - penpot-redis: - container_name: penpot-redis - image: redis:8.2@sha256:4521b581dbddea6e7d81f8fe95ede93f5648aaa66a9dacd581611bf6fe7527bd - healthcheck: - test: ["CMD-SHELL", "redis-cli ping | grep PONG"] - interval: 1s - timeout: 3s - retries: 5 - start_period: 3s - profiles: ["rinoa-apps"] - restart: always pgbackweb: container_name: pgbackweb depends_on: @@ -6726,62 +6397,6 @@ services: target: /var/lib/postgresql/data type: volume volume: {} - umami: - container_name: umami - depends_on: - umami-pg-db: - required: true - condition: service_healthy - environment: - DATABASE_URL: postgresql://umami:${UMAMI_PG_DB_PASSWORD}@umami-pg-db:5432/umami - DATABASE_TYPE: postgresql - APP_SECRET: ${UMAMI_APP_SECRET} - healthcheck: - test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"] - interval: 5s - timeout: 5s - retries: 5 - image: ghcr.io/umami-software/umami:postgresql-latest@sha256:77264ce6951c6b131a91d99f1cfd720d9efac1eaaa12e104f21cf49408dd77e0 - init: true - labels: - homepage.group: Professional Services - homepage.name: Umami - homepage.href: https://analytics.${MY_TLD} - homepage.icon: umami.svg - homepage.description: Simple, fast, privacy-focused alternative to Google Analytics - swag: enable - swag_port: 3000 - swag_proto: http - swag_url: analytics.${MY_TLD} - swag.uptime-kuma.enabled: true - swag.uptime-kuma.monitor.parent: Rinoa - swag.uptime-kuma.name: Umami - swag.uptime-kuma.monitor.url: https://analytics.${MY_TLD} - swag.uptime-kuma.monitor.interval: 300 - swag.uptime-kuma.monitor.retryInterval: 60 - swag.uptime-kuma.monitor.maxretries: 5 - ports: - - 17382:3000 - profiles: ["rinoa-apps"] - restart: unless-stopped - umami-pg-db: - container_name: umami-pg-db - environment: - POSTGRES_DB: umami - POSTGRES_USER: umami - POSTGRES_PASSWORD: ${UMAMI_PG_DB_PASSWORD} - expose: - - 5432 - healthcheck: - test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] - interval: 5s - timeout: 5s - retries: 5 - image: postgres:15-alpine@sha256:64583b3cb4f2010277bdd9749456de78e5c36f8956466ba14b0b96922e510950 - volumes: - - umami-db-data:/var/lib/postgresql/data - profiles: ["rinoa-apps"] - restart: unless-stopped unmanic: container_name: unmanic environment: @@ -7221,101 +6836,6 @@ services: source: /rinoa-storage target: /storage type: bind - zammad-backup: - <<: *zammad-service - command: ["zammad-backup"] - container_name: zammad-backup - volumes: - - zammad-backup:/var/tmp/zammad - - zammad-storage:/opt/zammad/storage:ro - user: 0:0 - zammad-elasticsearch: - container_name: zammad-elasticsearch - image: elasticsearch:${ELASTICSEARCH_VERSION:-8.18.0} - restart: ${RESTART:-always} - profiles: - - do-not-start - volumes: - - zammad-elasticsearch-data:/usr/share/elasticsearch/data - environment: - # Enable authorization without HTTPS. For external access with - # SSL termination, use solutions like nginx-proxy-manager. - ELASTICSEARCH_ENABLE_SECURITY: "true" - ELASTICSEARCH_SKIP_TRANSPORT_TLS: "true" - ELASTICSEARCH_ENABLE_REST_TLS: "false" - # ELASTICSEARCH_USER is hardcoded to 'elastic' in the container. - ELASTICSEARCH_PASSWORD: ${ELASTICSEARCH_PASS:-zammad} - zammad-init: - <<: *zammad-service - command: ["zammad-init"] - container_name: zammad-init - depends_on: - - zammad-postgresql - restart: on-failure - user: 0:0 - zammad-memcached: - command: memcached -m 256M - container_name: zammad-memcached - image: memcached:${MEMCACHE_VERSION:-1.6.38-alpine} - profiles: ["rinoa-apps"] - restart: ${RESTART:-always} - zammad-nginx: - <<: *zammad-service - command: ["zammad-nginx"] - container_name: zammad-nginx - expose: - - 8080 - ports: - - 15257:8080 - labels: - swag: enable - swag_proto: http - swag_port: 8080 - swag_url: support.${MY_TLD} - swag.uptime-kuma.enabled: true - swag.uptime-kuma.monitor.parent: Rinoa - swag.uptime-kuma.name: Zammad - swag.uptime-kuma.monitor.url: https://support.${MY_TLD} - swag.uptime-kuma.monitor.interval: 300 - swag.uptime-kuma.monitor.retryInterval: 60 - swag.uptime-kuma.monitor.maxretries: 5 - homepage.group: Professional Services - homepage.name: Zammad - homepage.href: https://support.${MY_TLD} - homepage.icon: zammad.svg - homepage.description: Open-source helpdesk/customer support system - depends_on: - - zammad-railsserver - zammad-postgresql: - container_name: zammad-postgresql - environment: - POSTGRES_DB: ${ZAMMAD_POSTGRES_DB:-zammad_production} - POSTGRES_USER: ${ZAMMAD_POSTGRES_USER:-zammad} - POSTGRES_PASSWORD: ${ZAMMAD_POSTGRES_PASS:-zammad} - image: postgres:${ZAMMAD_POSTGRES_VERSION:-17.5-alpine} - profiles: ["rinoa-apps"] - restart: ${RESTART:-always} - volumes: - - zammad-postgresql-data:/var/lib/postgresql/data - zammad-railsserver: - <<: *zammad-service - command: ["zammad-railsserver"] - container_name: zammad-railsserver - zammad-redis: - container_name: zammad-redis - image: redis:${REDIS_VERSION:-7.4.2-alpine} - profiles: ["rinoa-apps"] - restart: ${RESTART:-always} - volumes: - - zammad-redis-data:/data - zammad-scheduler: - <<: *zammad-service - command: ["zammad-scheduler"] - container_name: zammad-scheduler - zammad-websocket: - <<: *zammad-service - command: ["zammad-websocket"] - container_name: zammad-websocket volumes: asciinema-data: name: asciinema-data @@ -7357,8 +6877,6 @@ volumes: name: dawarich_watched dockflare_data: name: dockflare_data - easyappointments: - name: easyappointments fastenhealth-cache: name: fastenhealth-cache fastenhealth-db: @@ -7377,12 +6895,6 @@ volumes: name: invidious-companion-cache invidious-postgres: name: invidious-postgres - invoice-ninja_cache: - name: invoice-ninja_cache - invoice-ninja_public: - name: invoice-ninja_public - invoice-ninja_storage: - name: invoice-ninja_storage jitsi-web-admin-theme: name: jitsi-web-admin-theme jitsi-web-admin-upload: @@ -7447,12 +6959,6 @@ volumes: name: paperless-ngx-pg paperless-valkey-data: name: paperless-valkey-data - patchman-valkey-data: - name: patchman-valkey-data - penpot-assets: - name: penpot-assets - penpot-pg-data: - name: penpot-pg-data pgbackweb-data: name: pgbackweb-data planka-favicons: @@ -7505,21 +7011,9 @@ volumes: name: sonarqube-temp tandoor-pg: name: tandoor-pg - umami-db-data: - name: umami-db-data unmanic-cache: name: unmanic-cache wallos-db: name: wallos-db wallos-logos: name: wallos-logos - zammad-backup: - name: zammad-backup - zammad-storage: - name: zammad-storage - zammad-elasticsearch-data: - name: zammad-elasticsearch-data - zammad-postgresql-data: - name: zammad-postgresql-data - zammad-redis-data: - name: zammad-redis-data -- 2.52.0 From 604c5b34cc0ef11c599decc3a3f062a942441c6b Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Tue, 28 Oct 2025 06:40:36 -0400 Subject: [PATCH 02/14] Change detection modification. --- .../workflows/pr-cloudflare-docker-deploy.yml | 87 ++++++++++++------- 1 file changed, 57 insertions(+), 30 deletions(-) diff --git a/.gitea/workflows/pr-cloudflare-docker-deploy.yml b/.gitea/workflows/pr-cloudflare-docker-deploy.yml index 055e7210..444b7f9c 100644 --- a/.gitea/workflows/pr-cloudflare-docker-deploy.yml +++ b/.gitea/workflows/pr-cloudflare-docker-deploy.yml @@ -82,7 +82,7 @@ jobs: yq '.services | keys | .[]' docker-compose-main.yml | sort > services_main.txt yq '.services | keys | .[]' docker-compose-head.yml | sort > services_head.txt - echo "Creating list of modified services..." + echo "Creating list of service changes..." touch service_changes.txt # Detect newly added services @@ -90,6 +90,11 @@ jobs: [ -n "$service" ] && echo "$service: added" >> service_changes.txt done + # Detect removed services + comm -23 services_main.txt services_head.txt | while read service; do + [ -n "$service" ] && echo "$service: removed" >> service_changes.txt + done + # Detect modified services comm -12 services_main.txt services_head.txt | while read service; do yq ".services[\"$service\"]" docker-compose-main.yml > tmp_main.yml @@ -102,44 +107,66 @@ jobs: echo "Detected service changes:" cat service_changes.txt || echo "None" - # Gather list of modified/added services - mod_svcs=$(cut -d':' -f1 service_changes.txt | sort | uniq) + # Separate categories + added_svcs=$(grep -E ': added' service_changes.txt | cut -d':' -f1 | sort | uniq) + modified_svcs=$(grep -E ': modified' service_changes.txt | cut -d':' -f1 | sort | uniq) + removed_svcs=$(grep -E ': removed' service_changes.txt | cut -d':' -f1 | sort | uniq) + + # Gather list of modified/added services (ignore removed for build/test) + mod_svcs=$( (echo "$added_svcs"; echo "$modified_svcs") | tr ' ' '\n' | sort -u | grep -v '^$' || true) + if [ -z "$mod_svcs" ]; then echo "No modified or added services detected." echo "docker_svc_list<> "$GITHUB_OUTPUT" echo "" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - exit 0 + else + echo "Modified/added services:" + echo "$mod_svcs" + + # Include direct dependencies + echo "Resolving direct dependencies..." + deps_list="" + for svc in $mod_svcs; do + deps=$(yq -r ".services[\"$svc\"].depends_on | keys | .[]" docker-compose-head.yml 2>/dev/null || true) + if [ -n "$deps" ]; then + echo "$svc depends on:" + echo "$deps" + deps_list="$deps_list $deps" + fi + done + + all_svcs=$( (echo "$mod_svcs"; echo "$deps_list") | tr ' ' '\n' | sort -u) + + echo "Final service list (including direct dependencies):" + echo "$all_svcs" + + # Expose to workflow output + echo "docker_svc_list<> "$GITHUB_OUTPUT" + echo "$all_svcs" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" fi - echo "Modified/added services:" - echo "$mod_svcs" - - # Include direct dependencies - echo "Resolving direct dependencies..." - deps_list="" - for svc in $mod_svcs; do - deps=$(yq -r ".services[\"$svc\"].depends_on | keys | .[]" docker-compose-head.yml 2>/dev/null || true) - if [ -n "$deps" ]; then - echo "$svc depends on:" - echo "$deps" - deps_list="$deps_list $deps" - fi - done - - all_svcs=$( (echo "$mod_svcs"; echo "$deps_list") | tr ' ' '\n' | sort -u) - - echo "Final service list (including direct dependencies):" - echo "$all_svcs" - - # Expose to workflow output - echo "docker_svc_list<> "$GITHUB_OUTPUT" - echo "$all_svcs" >> "$GITHUB_OUTPUT" + # Output removed services separately + echo "Removed services:" + echo "${removed_svcs:-None}" + echo "removed_svc_list<> "$GITHUB_OUTPUT" + echo "$removed_svcs" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - - name: List of Services for (Re)Deployment - run: | - echo -e "${{ steps.detect_services.outputs.docker_svc_list }}" + # Generate Markdown summary + { + echo "## 🧩 Service Change Summary" + echo "" + echo "| Change Type | Services |" + echo "|--------------|-----------|" + echo "| 🟢 **Added** | ${added_svcs:-None} |" + echo "| 🟡 **Modified** | ${modified_svcs:-None} |" + echo "| 🔴 **Removed** | ${removed_svcs:-None} |" + echo "" + echo "**Detected in:** \`${{ github.ref_name }}\` vs \`main\`" + } >> "$GITHUB_STEP_SUMMARY" + docker-compose-dry-run: name: Docker Compose Dry Run -- 2.52.0 From 938f0efd5e418d8203dece5106c9b1c06627e050 Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Tue, 28 Oct 2025 06:43:57 -0400 Subject: [PATCH 03/14] Removing step summary. --- .gitea/workflows/pr-cloudflare-docker-deploy.yml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/.gitea/workflows/pr-cloudflare-docker-deploy.yml b/.gitea/workflows/pr-cloudflare-docker-deploy.yml index 444b7f9c..cf606469 100644 --- a/.gitea/workflows/pr-cloudflare-docker-deploy.yml +++ b/.gitea/workflows/pr-cloudflare-docker-deploy.yml @@ -154,19 +154,6 @@ jobs: echo "$removed_svcs" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - # Generate Markdown summary - { - echo "## 🧩 Service Change Summary" - echo "" - echo "| Change Type | Services |" - echo "|--------------|-----------|" - echo "| 🟢 **Added** | ${added_svcs:-None} |" - echo "| 🟡 **Modified** | ${modified_svcs:-None} |" - echo "| 🔴 **Removed** | ${removed_svcs:-None} |" - echo "" - echo "**Detected in:** \`${{ github.ref_name }}\` vs \`main\`" - } >> "$GITHUB_STEP_SUMMARY" - docker-compose-dry-run: name: Docker Compose Dry Run -- 2.52.0 From 62573938655bb39fe6596b2828eb15aa2a2b9ef5 Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Tue, 28 Oct 2025 06:48:52 -0400 Subject: [PATCH 04/14] Removing step summary. --- .gitea/workflows/pr-cloudflare-docker-deploy.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/pr-cloudflare-docker-deploy.yml b/.gitea/workflows/pr-cloudflare-docker-deploy.yml index cf606469..52392688 100644 --- a/.gitea/workflows/pr-cloudflare-docker-deploy.yml +++ b/.gitea/workflows/pr-cloudflare-docker-deploy.yml @@ -112,7 +112,7 @@ jobs: modified_svcs=$(grep -E ': modified' service_changes.txt | cut -d':' -f1 | sort | uniq) removed_svcs=$(grep -E ': removed' service_changes.txt | cut -d':' -f1 | sort | uniq) - # Gather list of modified/added services (ignore removed for build/test) + # Gather list of modified/added services mod_svcs=$( (echo "$added_svcs"; echo "$modified_svcs") | tr ' ' '\n' | sort -u | grep -v '^$' || true) if [ -z "$mod_svcs" ]; then @@ -154,6 +154,8 @@ jobs: echo "$removed_svcs" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" + # Always exit cleanly + exit 0 docker-compose-dry-run: name: Docker Compose Dry Run -- 2.52.0 From 8f871bf2b4948a544e9604a9d65bc4faa1becedb Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Tue, 28 Oct 2025 06:54:50 -0400 Subject: [PATCH 05/14] ... --- .../workflows/pr-cloudflare-docker-deploy.yml | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/.gitea/workflows/pr-cloudflare-docker-deploy.yml b/.gitea/workflows/pr-cloudflare-docker-deploy.yml index 52392688..ee4f4b23 100644 --- a/.gitea/workflows/pr-cloudflare-docker-deploy.yml +++ b/.gitea/workflows/pr-cloudflare-docker-deploy.yml @@ -78,6 +78,8 @@ jobs: - name: Detect added, deleted, and modified services id: detect_services run: | + set +e # prevent failure on non-zero exit codes + echo "Getting services from main and ${{ github.ref_name }}" yq '.services | keys | .[]' docker-compose-main.yml | sort > services_main.txt yq '.services | keys | .[]' docker-compose-head.yml | sort > services_head.txt @@ -86,17 +88,17 @@ jobs: touch service_changes.txt # Detect newly added services - comm -13 services_main.txt services_head.txt | while read service; do + comm -13 services_main.txt services_head.txt 2>/dev/null | while read service; do [ -n "$service" ] && echo "$service: added" >> service_changes.txt done # Detect removed services - comm -23 services_main.txt services_head.txt | while read service; do + comm -23 services_main.txt services_head.txt 2>/dev/null | while read service; do [ -n "$service" ] && echo "$service: removed" >> service_changes.txt done # Detect modified services - comm -12 services_main.txt services_head.txt | while read service; do + comm -12 services_main.txt services_head.txt 2>/dev/null | while read service; do yq ".services[\"$service\"]" docker-compose-main.yml > tmp_main.yml yq ".services[\"$service\"]" docker-compose-head.yml > tmp_head.yml if ! diff -q tmp_main.yml tmp_head.yml > /dev/null; then @@ -107,10 +109,10 @@ jobs: echo "Detected service changes:" cat service_changes.txt || echo "None" - # Separate categories - added_svcs=$(grep -E ': added' service_changes.txt | cut -d':' -f1 | sort | uniq) - modified_svcs=$(grep -E ': modified' service_changes.txt | cut -d':' -f1 | sort | uniq) - removed_svcs=$(grep -E ': removed' service_changes.txt | cut -d':' -f1 | sort | uniq) + # Separate categories safely + added_svcs=$(grep -E ': added' service_changes.txt 2>/dev/null | cut -d':' -f1 | sort | uniq) + modified_svcs=$(grep -E ': modified' service_changes.txt 2>/dev/null | cut -d':' -f1 | sort | uniq) + removed_svcs=$(grep -E ': removed' service_changes.txt 2>/dev/null | cut -d':' -f1 | sort | uniq) # Gather list of modified/added services mod_svcs=$( (echo "$added_svcs"; echo "$modified_svcs") | tr ' ' '\n' | sort -u | grep -v '^$' || true) @@ -124,24 +126,27 @@ jobs: echo "Modified/added services:" echo "$mod_svcs" - # Include direct dependencies - echo "Resolving direct dependencies..." - deps_list="" - for svc in $mod_svcs; do - deps=$(yq -r ".services[\"$svc\"].depends_on | keys | .[]" docker-compose-head.yml 2>/dev/null || true) - if [ -n "$deps" ]; then - echo "$svc depends on:" - echo "$deps" - deps_list="$deps_list $deps" - fi - done + # Include direct dependencies (only if head file exists) + if [ -f docker-compose-head.yml ]; then + echo "Resolving direct dependencies..." + deps_list="" + for svc in $mod_svcs; do + deps=$(yq -r ".services[\"$svc\"].depends_on | keys | .[]" docker-compose-head.yml 2>/dev/null || true) + if [ -n "$deps" ]; then + echo "$svc depends on:" + echo "$deps" + deps_list="$deps_list $deps" + fi + done - all_svcs=$( (echo "$mod_svcs"; echo "$deps_list") | tr ' ' '\n' | sort -u) + all_svcs=$( (echo "$mod_svcs"; echo "$deps_list") | tr ' ' '\n' | sort -u) + else + all_svcs="$mod_svcs" + fi echo "Final service list (including direct dependencies):" echo "$all_svcs" - # Expose to workflow output echo "docker_svc_list<> "$GITHUB_OUTPUT" echo "$all_svcs" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" @@ -157,6 +162,7 @@ jobs: # Always exit cleanly exit 0 + docker-compose-dry-run: name: Docker Compose Dry Run needs: [generate-service-list] -- 2.52.0 From 46a5efab5455e3f9861f3f4649a2bc30a542e8cb Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Tue, 28 Oct 2025 07:05:11 -0400 Subject: [PATCH 06/14] ... --- .gitea/workflows/pr-cloudflare-docker-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/pr-cloudflare-docker-deploy.yml b/.gitea/workflows/pr-cloudflare-docker-deploy.yml index ee4f4b23..15014f2a 100644 --- a/.gitea/workflows/pr-cloudflare-docker-deploy.yml +++ b/.gitea/workflows/pr-cloudflare-docker-deploy.yml @@ -162,7 +162,6 @@ jobs: # Always exit cleanly exit 0 - docker-compose-dry-run: name: Docker Compose Dry Run needs: [generate-service-list] @@ -215,6 +214,7 @@ jobs: HC_VAULT_SECRETS_PATH: rinoa-docker/env - name: Pre-pull/build service images in parallel + if: ${{ env.DOCKER_SVC_LIST && env.DOCKER_SVC_LIST != '' }} uses: https://git.trez.wtf/Trez/docker-select-image-pull@main env: DOCKER_HOST: tcp://dockerproxy:2375 -- 2.52.0 From fee1344b4815daadad812d7a12ad294d57b18287 Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Tue, 28 Oct 2025 09:02:00 -0400 Subject: [PATCH 07/14] Add'l check. --- .gitea/workflows/pr-cloudflare-docker-deploy.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/pr-cloudflare-docker-deploy.yml b/.gitea/workflows/pr-cloudflare-docker-deploy.yml index 15014f2a..91259a28 100644 --- a/.gitea/workflows/pr-cloudflare-docker-deploy.yml +++ b/.gitea/workflows/pr-cloudflare-docker-deploy.yml @@ -213,8 +213,18 @@ jobs: HC_VAULT_TOKEN: ${{ secrets.VAULT_GITEA_TOKEN }} HC_VAULT_SECRETS_PATH: rinoa-docker/env + - name: Check services + env: + DSLIST: ${{ env.DOCKER_SVC_LIST }} + run: | + if [ -z ${DSLIST} ]; then + echo "DOCKER_SVC_LIST=" >> $GITHUB_ENV + else + echo "${DLIST}" + fi + - name: Pre-pull/build service images in parallel - if: ${{ env.DOCKER_SVC_LIST && env.DOCKER_SVC_LIST != '' }} + continue-on-error: true uses: https://git.trez.wtf/Trez/docker-select-image-pull@main env: DOCKER_HOST: tcp://dockerproxy:2375 -- 2.52.0 From 7e6446d47e194003c334088962d79b68a3585b80 Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Tue, 28 Oct 2025 06:18:37 -0400 Subject: [PATCH 08/14] Trimming unused freelancing services. --- docker-compose.yml | 506 --------------------------------------------- 1 file changed, 506 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 65f267c3..3d193426 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -43,16 +43,6 @@ x-maxun: &maxun-env CHROMIUM_FLAGS: "--disable-gpu --no-sandbox --headless=new" #DEBUG: pw:api #PWDEBUG: 1 -x-penpot-flags: &penpot-flags - PENPOT_FLAGS: enable-smtp enable-prepl-server login-with-password webhooks -x-penpot-uri: &penpot-public-uri - PENPOT_PUBLIC_URI: https://penpot.${MY_TLD} -x-penpot-body-size: &penpot-http-body-size - # Max body size (30MiB); Used for plain requests, should never be - # greater than multi-part size - PENPOT_HTTP_SERVER_MAX_BODY_SIZE: 31457280 - # Max multipart body size (350MiB) - PENPOT_HTTP_SERVER_MAX_MULTIPART_BODY_SIZE: 367001600 x-signoz-common: &signoz-common profiles: ["rinoa-apps"] restart: unless-stopped @@ -121,66 +111,6 @@ x-valkey-params: &valkey-params - 6379 profiles: ["rinoa-apps"] restart: unless-stopped -x-zammad: - zammad-service: &zammad-service - environment: &zammad-environment - MEMCACHE_SERVERS: ${ZAMMAD_MEMCACHE_SERVERS:-zammad-memcached:11211} - POSTGRESQL_DB: ${ZAMMAD_POSTGRES_DB:-zammad_production} - POSTGRESQL_HOST: ${ZAMMAD_POSTGRES_HOST:-zammad-postgresql} - POSTGRESQL_USER: ${ZAMMAD_POSTGRES_USER:-zammad} - POSTGRESQL_PASS: ${ZAMMAD_POSTGRES_PASS:-zammad} - POSTGRESQL_PORT: ${ZAMMAD_POSTGRES_PORT:-5432} - POSTGRESQL_OPTIONS: ${ZAMMAD_POSTGRESQL_OPTIONS:-?pool=50} - POSTGRESQL_DB_CREATE: - REDIS_URL: ${ZAMMAD_REDIS_URL:-redis://zammad-redis:6379} - S3_URL: http://${ZAMMAD_S3_ACCESS_KEY}:${ZAMMAD_S3_SECRET_KEY}@minio:9000/zammad-storage-bucket?region=us-east-fh-pln&force_path_style=true - # Backup settings - BACKUP_DIR: "${BACKUP_DIR:-/var/tmp/zammad}" - BACKUP_TIME: "${BACKUP_TIME:-03:00}" - HOLD_DAYS: "${HOLD_DAYS:-7}" - TZ: "${TZ:-Europe/Berlin}" - # Allow passing in these variables via .env: - AUTOWIZARD_JSON: - AUTOWIZARD_RELATIVE_PATH: - ELASTICSEARCH_ENABLED: false - ELASTICSEARCH_SCHEMA: - ELASTICSEARCH_HOST: - ELASTICSEARCH_PORT: - ELASTICSEARCH_USER: ${ELASTICSEARCH_USER:-elastic} - ELASTICSEARCH_PASS: ${ELASTICSEARCH_PASS:-zammad} - ELASTICSEARCH_NAMESPACE: - ELASTICSEARCH_REINDEX: - NGINX_PORT: - NGINX_EXPOSE_PORT: 15257 - NGINX_CLIENT_MAX_BODY_SIZE: - NGINX_SERVER_NAME: - NGINX_SERVER_SCHEME: - RAILS_TRUSTED_PROXIES: 172.18.0.0/16 - ZAMMAD_HTTP_TYPE: - ZAMMAD_FQDN: - ZAMMAD_WEB_CONCURRENCY: - ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS: - ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS: - ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS: - # ZAMMAD_SESSION_JOBS_CONCURRENT is deprecated, please use ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS instead. - ZAMMAD_SESSION_JOBS_CONCURRENT: - # Variables used by ngingx-proxy container for reverse proxy creations - # for docs refer to https://github.com/nginx-proxy/nginx-proxy - VIRTUAL_HOST: - VIRTUAL_PORT: - # Variables used by acme-companion for retrieval of LetsEncrypt certificate - # for docs refer to https://github.com/nginx-proxy/acme-companion - LETSENCRYPT_HOST: - LETSENCRYPT_EMAIL: - image: ${IMAGE_REPO:-ghcr.io/zammad/zammad}:${VERSION:-6.5.0-15} - profiles: ["rinoa-apps"] - restart: ${RESTART:-always} - volumes: - - zammad-storage:/opt/zammad/storage - depends_on: - - zammad-memcached - - zammad-postgresql - - zammad-redis services: 13ft: container_name: 13ft @@ -1770,53 +1700,6 @@ services: source: /home/charish/.config/appdata target: /source type: bind - easyappointments: - container_name: easyappointments - depends_on: - mariadb: - condition: service_healthy - required: true - image: alextselegidis/easyappointments:1.5.2@sha256:484f183a7f5bcc9c0486674de4af01c785ab73fc2ee962dc35db7d0ba69d2825 - environment: - BASE_URL: http://localhost - DEBUG_MODE: TRUE - DB_HOST: mariadb:3306 - DB_NAME: easyappointments - DB_USERNAME: easyappt - DB_PASSWORD: ${EASYAPPOINTMENTS_DB_PASSWORD} - MAIL_PROTOCOL: mail - MAIL_SMTP_DEBUG: 0 - MAIL_SMTP_AUTH: 0 - MAIL_SMTP_HOST: postal-smtp - MAIL_SMTP_USER: ${POSTAL_SMTP_AUTH_USER} - MAIL_SMTP_PASS: ${POSTAL_SMTP_AUTH_PASSWORD} - MAIL_SMTP_CRYPTO: tls - MAIL_SMTP_PORT: 25 - MAIL_FROM_ADDRESS: noreply@${MY_TLD} - MAIL_FROM_NAME: "Trez" - MAIL_REPLY_TO_ADDRESS: it-services@${MY_TLD} - labels: - homepage.group: Professional Services - homepage.name: "Easy!Appointments" - homepage.href: https://appt.${MY_TLD} - homepage.icon: sh-easy-appointments.png - homepage.description: Highly customizable appointment scheduler - swag: enable - swag_proto: http - swag_url: appt.${MY_TLD} - swag.uptime-kuma.enabled: true - swag.uptime-kuma.monitor.parent: Rinoa - swag.uptime-kuma.name: "Easy!Appointments" - swag.uptime-kuma.monitor.url: https://appt.${MY_TLD} - swag.uptime-kuma.monitor.interval: 300 - swag.uptime-kuma.monitor.retryInterval: 60 - swag.uptime-kuma.monitor.maxretries: 5 - ports: - - 8362:80 - profiles: ["rinoa-apps"] - restart: unless-stopped - # volumes: - # - easyappointments:/var/www/html excalidraw: container_name: excalidraw image: "excalidraw/excalidraw:latest@sha256:ddcc677525fd796fa871bdf2b2ffae8f3bc311e19037ab29abfc735b7dc415f7" @@ -2601,112 +2484,6 @@ services: type: bind bind: create_host_path: true - invoice-ninja: - container_name: invoice-ninja - depends_on: - mariadb: - condition: service_healthy - required: true - restart: true - environment: - APP_DEBUG: true - APP_KEY: ${IN_APP_KEY} - APP_URL: http://invoice-ninja:8005 - APP_ENV: production - DB_DATABASE: invoice_ninja - DB_HOST: mariadb - DB_PASSWORD: ${IN_MYSQL_PASSWORD} - DB_PORT: 3306 - DB_USERNAME: ininja - IN_PASSWORD: ${IN_PASSWORD} - IN_USER_EMAIL: charish.patel@${MY_TLD} - IS_DOCKER: true - MAIL_ENCRYPTION: null - MAIL_FROM_ADDRESS: noreply@${MY_TLD} - MAIL_FROM_NAME: null - MAIL_HOST: postal-smtp - MAIL_MAILER: log - MAIL_PASSWORD: ${POSTAL_SMTP_AUTH_PASSWORD} - MAIL_PORT: 25 - MAIL_USERNAME: ${POSTAL_SMTP_AUTH_USER} - MYSQL_DATABASE: invoice_ninja - MYSQL_PASSWORD: ${IN_MYSQL_PASSWORD} - MYSQL_ROOT_PASSWORD: ${MARIADB_ENVIRONMENT_MYSQL_ROOT_PASSWORD} - MYSQL_USER: ininja - PDF_GENERATOR: snappdf - PHANTOMJS_PDF_GENERATION: false - QUEUE_CONNECTION: database - REQUIRE_HTTPS: false - TRUSTED_PROXIES: 172.18.0.0/16 - expose: - - 9000 - image: invoiceninja/invoiceninja-debian:5@sha256:2b53df31b3055965c02ecf109ec36ac9edb270e8830f551e237c8c7027369bdd - profiles: ["rinoa-apps"] - restart: unless-stopped - volumes: - - invoice-ninja_cache:/var/www/html/bootstrap/cache - - invoice-ninja_public:/var/www/html/public - - invoice-ninja_storage:/var/www/html/storage - invoice-ninja_proxy: - container_name: invoice-ninja_proxy - depends_on: - invoice-ninja: - condition: service_started - required: true - restart: true - environment: - APP_DEBUG: true - APP_KEY: ${IN_APP_KEY} - APP_URL: http://invoice-ninja:9000 - DB_DATABASE: invoice_ninja - DB_HOST: mariadb - DB_PASSWORD: ${IN_MYSQL_PASSWORD} - DB_PORT: 3306 - DB_USERNAME: ininja - IN_PASSWORD: ${IN_PASSWORD} - IN_USER_EMAIL: charish.patel@${MY_TLD} - MAIL_ENCRYPTION: null - MAIL_FROM_ADDRESS: noreply@${MY_TLD} - MAIL_FROM_NAME: null - MAIL_HOST: postal-smtp - MAIL_MAILER: log - MAIL_PASSWORD: ${POSTAL_SMTP_AUTH_PASSWORD} - MAIL_PORT: 25 - MAIL_USERNAME: ${POSTAL_SMTP_AUTH_USER} - MYSQL_DATABASE: invoice_ninja - MYSQL_PASSWORD: ${IN_MYSQL_PASSWORD} - MYSQL_ROOT_PASSWORD: ${MARIADB_ENVIRONMENT_MYSQL_ROOT_PASSWORD} - MYSQL_USER: ininja - PDF_GENERATOR: snappdf - PHANTOMJS_PDF_GENERATION: false - QUEUE_CONNECTION: database - REQUIRE_HTTPS: false - TRUSTED_PROXIES: 172.18.0.0/16 - image: nginx@sha256:b619c34a163ac12f68c1982568a122c4953dbf3126b8dbf0cc2f6fdbfd85de27 - labels: - swag: enable - swag_proto: http - swag_url: biz.${MY_TLD} - swag.uptime-kuma.enabled: true - swag.uptime-kuma.monitor.parent: Rinoa - swag.uptime-kuma.name: Invoice Ninja - swag.uptime-kuma.monitor.url: https://biz.${MY_TLD} - swag.uptime-kuma.monitor.interval: 300 - swag.uptime-kuma.monitor.retryInterval: 60 - swag.uptime-kuma.monitor.maxretries: 5 - homepage.group: Professional Services - homepage.name: Invoice Ninja - homepage.href: https://biz.${MY_TLD} - homepage.icon: invoice-ninja.svg - homepage.description: Simple invoicing, multiple payment options, expense and vendor management, and more! - ports: - - 8005:80 - profiles: ["rinoa-apps"] - restart: always - volumes: - - ${DOCKER_VOLUME_CONFIG}/invoice-ninja/nginx:/etc/nginx/conf.d:ro - - invoice-ninja_public:/var/www/html/public - - invoice-ninja_storage:/var/www/html/storage it-tools: container_name: it-tools image: ghcr.io/corentinth/it-tools:latest@sha256:8b8128748339583ca951af03dfe02a9a4d7363f61a216226fc28030731a5a61f @@ -4764,112 +4541,6 @@ services: <<: *valkey-params volumes: - paperless-valkey-data:/data/valkey - penpot-frontend: - container_name: penpot-frontend - depends_on: - - penpot-backend - - penpot-exporter - image: penpotapp/frontend:latest@sha256:c016a77555da6f004cf16d0640b71f1ffdde11908fa6037562a977b83d24c3da - environment: - <<: [*penpot-flags, *penpot-http-body-size] - labels: - homepage.group: Professional Services - homepage.name: Penpot - homepage.href: https://penpot.${MY_TLD} - homepage.icon: penpot.svg - homepage.description: Open-source design and prototyping platform - swag: enable - swag_port: 8080 - swag_proto: http - swag_url: penpot.${MY_TLD} - swag.uptime-kuma.enabled: true - swag.uptime-kuma.monitor.parent: Rinoa - swag.uptime-kuma.name: Penpot - swag.uptime-kuma.monitor.url: https://penpot.${MY_TLD} - swag.uptime-kuma.monitor.interval: 300 - swag.uptime-kuma.monitor.retryInterval: 60 - swag.uptime-kuma.monitor.maxretries: 5 - ports: - - 17503:8080 - profiles: ["rinoa-apps"] - restart: always - volumes: - - penpot-assets:/opt/data/assets - penpot-backend: - container_name: penpot-backend - depends_on: - penpot-pg-db: - condition: service_healthy - penpot-redis: - condition: service_healthy - environment: - <<: [*penpot-flags, *penpot-public-uri, *penpot-http-body-size] - PENPOT_SECRET_KEY: ${PENPOT_SECRET_KEY} - PENPOT_PREPL_HOST: 0.0.0.0 - PENPOT_DATABASE_URI: postgresql://penpot-pg-db/penpot - PENPOT_DATABASE_USERNAME: penpot - PENPOT_DATABASE_PASSWORD: ${PENPOT_PG_DB_PASSWORD} - PENPOT_REDIS_URI: redis://penpot-redis/0 - PENPOT_ASSETS_STORAGE_BACKEND: assets-fs - PENPOT_STORAGE_ASSETS_FS_DIRECTORY: /opt/data/assets - PENPOT_TELEMETRY_ENABLED: true - PENPOT_TELEMETRY_REFERER: compose - PENPOT_SMTP_DEFAULT_FROM: noreply@${MY_TLD} - PENPOT_SMTP_DEFAULT_REPLY_TO: noreply@${MY_TLD} - PENPOT_SMTP_HOST: postal-smtp - PENPOT_SMTP_PORT: 25 - PENPOT_SMTP_USERNAME: ${POSTAL_SMTP_AUTH_USER} - PENPOT_SMTP_PASSWORD: ${POSTAL_SMTP_AUTH_PASSWORD} - PENPOT_SMTP_TLS: false - PENPOT_SMTP_SSL: false - image: penpotapp/backend:latest@sha256:48d13681ebc76672c6e7715ea03229fe77512037fde26072f8b93f57849ca598 - profiles: ["rinoa-apps"] - restart: always - volumes: - - penpot-assets:/opt/data/assets - penpot-exporter: - container_name: penpot-exporter - depends_on: - penpot-redis: - condition: service_healthy - environment: - PENPOT_PUBLIC_URI: http://penpot-frontend:8080 - PENPOT_REDIS_URI: redis://penpot-redis/0 - image: penpotapp/exporter:latest@sha256:79d8f979764f3cf73da16e6b65f5a3113a6936343a5146d650cdebf070474a7a - profiles: ["rinoa-apps"] - restart: unless-stopped - penpot-pg-db: - container_name: penpot-pg-db - environment: - POSTGRES_INITDB_ARGS: --data-checksums - POSTGRES_DB: penpot - POSTGRES_USER: penpot - POSTGRES_PASSWORD: ${PENPOT_PG_DB_PASSWORD} - expose: - - 5432 - healthcheck: - test: ["CMD-SHELL", "pg_isready -U penpot"] - interval: 2s - timeout: 10s - retries: 5 - start_period: 2s - image: postgres:15-alpine@sha256:64583b3cb4f2010277bdd9749456de78e5c36f8956466ba14b0b96922e510950 - profiles: ["rinoa-apps"] - restart: always - stop_signal: SIGINT - volumes: - - penpot-pg-data:/var/lib/postgresql/data - penpot-redis: - container_name: penpot-redis - image: redis:8.2@sha256:4521b581dbddea6e7d81f8fe95ede93f5648aaa66a9dacd581611bf6fe7527bd - healthcheck: - test: ["CMD-SHELL", "redis-cli ping | grep PONG"] - interval: 1s - timeout: 3s - retries: 5 - start_period: 3s - profiles: ["rinoa-apps"] - restart: always pgbackweb: container_name: pgbackweb depends_on: @@ -6726,62 +6397,6 @@ services: target: /var/lib/postgresql/data type: volume volume: {} - umami: - container_name: umami - depends_on: - umami-pg-db: - required: true - condition: service_healthy - environment: - DATABASE_URL: postgresql://umami:${UMAMI_PG_DB_PASSWORD}@umami-pg-db:5432/umami - DATABASE_TYPE: postgresql - APP_SECRET: ${UMAMI_APP_SECRET} - healthcheck: - test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"] - interval: 5s - timeout: 5s - retries: 5 - image: ghcr.io/umami-software/umami:postgresql-latest@sha256:77264ce6951c6b131a91d99f1cfd720d9efac1eaaa12e104f21cf49408dd77e0 - init: true - labels: - homepage.group: Professional Services - homepage.name: Umami - homepage.href: https://analytics.${MY_TLD} - homepage.icon: umami.svg - homepage.description: Simple, fast, privacy-focused alternative to Google Analytics - swag: enable - swag_port: 3000 - swag_proto: http - swag_url: analytics.${MY_TLD} - swag.uptime-kuma.enabled: true - swag.uptime-kuma.monitor.parent: Rinoa - swag.uptime-kuma.name: Umami - swag.uptime-kuma.monitor.url: https://analytics.${MY_TLD} - swag.uptime-kuma.monitor.interval: 300 - swag.uptime-kuma.monitor.retryInterval: 60 - swag.uptime-kuma.monitor.maxretries: 5 - ports: - - 17382:3000 - profiles: ["rinoa-apps"] - restart: unless-stopped - umami-pg-db: - container_name: umami-pg-db - environment: - POSTGRES_DB: umami - POSTGRES_USER: umami - POSTGRES_PASSWORD: ${UMAMI_PG_DB_PASSWORD} - expose: - - 5432 - healthcheck: - test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] - interval: 5s - timeout: 5s - retries: 5 - image: postgres:15-alpine@sha256:64583b3cb4f2010277bdd9749456de78e5c36f8956466ba14b0b96922e510950 - volumes: - - umami-db-data:/var/lib/postgresql/data - profiles: ["rinoa-apps"] - restart: unless-stopped unmanic: container_name: unmanic environment: @@ -7221,101 +6836,6 @@ services: source: /rinoa-storage target: /storage type: bind - zammad-backup: - <<: *zammad-service - command: ["zammad-backup"] - container_name: zammad-backup - volumes: - - zammad-backup:/var/tmp/zammad - - zammad-storage:/opt/zammad/storage:ro - user: 0:0 - zammad-elasticsearch: - container_name: zammad-elasticsearch - image: elasticsearch:${ELASTICSEARCH_VERSION:-8.18.0} - restart: ${RESTART:-always} - profiles: - - do-not-start - volumes: - - zammad-elasticsearch-data:/usr/share/elasticsearch/data - environment: - # Enable authorization without HTTPS. For external access with - # SSL termination, use solutions like nginx-proxy-manager. - ELASTICSEARCH_ENABLE_SECURITY: "true" - ELASTICSEARCH_SKIP_TRANSPORT_TLS: "true" - ELASTICSEARCH_ENABLE_REST_TLS: "false" - # ELASTICSEARCH_USER is hardcoded to 'elastic' in the container. - ELASTICSEARCH_PASSWORD: ${ELASTICSEARCH_PASS:-zammad} - zammad-init: - <<: *zammad-service - command: ["zammad-init"] - container_name: zammad-init - depends_on: - - zammad-postgresql - restart: on-failure - user: 0:0 - zammad-memcached: - command: memcached -m 256M - container_name: zammad-memcached - image: memcached:${MEMCACHE_VERSION:-1.6.38-alpine} - profiles: ["rinoa-apps"] - restart: ${RESTART:-always} - zammad-nginx: - <<: *zammad-service - command: ["zammad-nginx"] - container_name: zammad-nginx - expose: - - 8080 - ports: - - 15257:8080 - labels: - swag: enable - swag_proto: http - swag_port: 8080 - swag_url: support.${MY_TLD} - swag.uptime-kuma.enabled: true - swag.uptime-kuma.monitor.parent: Rinoa - swag.uptime-kuma.name: Zammad - swag.uptime-kuma.monitor.url: https://support.${MY_TLD} - swag.uptime-kuma.monitor.interval: 300 - swag.uptime-kuma.monitor.retryInterval: 60 - swag.uptime-kuma.monitor.maxretries: 5 - homepage.group: Professional Services - homepage.name: Zammad - homepage.href: https://support.${MY_TLD} - homepage.icon: zammad.svg - homepage.description: Open-source helpdesk/customer support system - depends_on: - - zammad-railsserver - zammad-postgresql: - container_name: zammad-postgresql - environment: - POSTGRES_DB: ${ZAMMAD_POSTGRES_DB:-zammad_production} - POSTGRES_USER: ${ZAMMAD_POSTGRES_USER:-zammad} - POSTGRES_PASSWORD: ${ZAMMAD_POSTGRES_PASS:-zammad} - image: postgres:${ZAMMAD_POSTGRES_VERSION:-17.5-alpine} - profiles: ["rinoa-apps"] - restart: ${RESTART:-always} - volumes: - - zammad-postgresql-data:/var/lib/postgresql/data - zammad-railsserver: - <<: *zammad-service - command: ["zammad-railsserver"] - container_name: zammad-railsserver - zammad-redis: - container_name: zammad-redis - image: redis:${REDIS_VERSION:-7.4.2-alpine} - profiles: ["rinoa-apps"] - restart: ${RESTART:-always} - volumes: - - zammad-redis-data:/data - zammad-scheduler: - <<: *zammad-service - command: ["zammad-scheduler"] - container_name: zammad-scheduler - zammad-websocket: - <<: *zammad-service - command: ["zammad-websocket"] - container_name: zammad-websocket volumes: asciinema-data: name: asciinema-data @@ -7357,8 +6877,6 @@ volumes: name: dawarich_watched dockflare_data: name: dockflare_data - easyappointments: - name: easyappointments fastenhealth-cache: name: fastenhealth-cache fastenhealth-db: @@ -7377,12 +6895,6 @@ volumes: name: invidious-companion-cache invidious-postgres: name: invidious-postgres - invoice-ninja_cache: - name: invoice-ninja_cache - invoice-ninja_public: - name: invoice-ninja_public - invoice-ninja_storage: - name: invoice-ninja_storage jitsi-web-admin-theme: name: jitsi-web-admin-theme jitsi-web-admin-upload: @@ -7447,12 +6959,6 @@ volumes: name: paperless-ngx-pg paperless-valkey-data: name: paperless-valkey-data - patchman-valkey-data: - name: patchman-valkey-data - penpot-assets: - name: penpot-assets - penpot-pg-data: - name: penpot-pg-data pgbackweb-data: name: pgbackweb-data planka-favicons: @@ -7505,21 +7011,9 @@ volumes: name: sonarqube-temp tandoor-pg: name: tandoor-pg - umami-db-data: - name: umami-db-data unmanic-cache: name: unmanic-cache wallos-db: name: wallos-db wallos-logos: name: wallos-logos - zammad-backup: - name: zammad-backup - zammad-storage: - name: zammad-storage - zammad-elasticsearch-data: - name: zammad-elasticsearch-data - zammad-postgresql-data: - name: zammad-postgresql-data - zammad-redis-data: - name: zammad-redis-data -- 2.52.0 From 009bf0af5911ac50242c46229c496b9428c1e87f Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Tue, 28 Oct 2025 06:40:36 -0400 Subject: [PATCH 09/14] Change detection modification. --- .../workflows/pr-cloudflare-docker-deploy.yml | 87 ++++++++++++------- 1 file changed, 57 insertions(+), 30 deletions(-) diff --git a/.gitea/workflows/pr-cloudflare-docker-deploy.yml b/.gitea/workflows/pr-cloudflare-docker-deploy.yml index 055e7210..444b7f9c 100644 --- a/.gitea/workflows/pr-cloudflare-docker-deploy.yml +++ b/.gitea/workflows/pr-cloudflare-docker-deploy.yml @@ -82,7 +82,7 @@ jobs: yq '.services | keys | .[]' docker-compose-main.yml | sort > services_main.txt yq '.services | keys | .[]' docker-compose-head.yml | sort > services_head.txt - echo "Creating list of modified services..." + echo "Creating list of service changes..." touch service_changes.txt # Detect newly added services @@ -90,6 +90,11 @@ jobs: [ -n "$service" ] && echo "$service: added" >> service_changes.txt done + # Detect removed services + comm -23 services_main.txt services_head.txt | while read service; do + [ -n "$service" ] && echo "$service: removed" >> service_changes.txt + done + # Detect modified services comm -12 services_main.txt services_head.txt | while read service; do yq ".services[\"$service\"]" docker-compose-main.yml > tmp_main.yml @@ -102,44 +107,66 @@ jobs: echo "Detected service changes:" cat service_changes.txt || echo "None" - # Gather list of modified/added services - mod_svcs=$(cut -d':' -f1 service_changes.txt | sort | uniq) + # Separate categories + added_svcs=$(grep -E ': added' service_changes.txt | cut -d':' -f1 | sort | uniq) + modified_svcs=$(grep -E ': modified' service_changes.txt | cut -d':' -f1 | sort | uniq) + removed_svcs=$(grep -E ': removed' service_changes.txt | cut -d':' -f1 | sort | uniq) + + # Gather list of modified/added services (ignore removed for build/test) + mod_svcs=$( (echo "$added_svcs"; echo "$modified_svcs") | tr ' ' '\n' | sort -u | grep -v '^$' || true) + if [ -z "$mod_svcs" ]; then echo "No modified or added services detected." echo "docker_svc_list<> "$GITHUB_OUTPUT" echo "" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - exit 0 + else + echo "Modified/added services:" + echo "$mod_svcs" + + # Include direct dependencies + echo "Resolving direct dependencies..." + deps_list="" + for svc in $mod_svcs; do + deps=$(yq -r ".services[\"$svc\"].depends_on | keys | .[]" docker-compose-head.yml 2>/dev/null || true) + if [ -n "$deps" ]; then + echo "$svc depends on:" + echo "$deps" + deps_list="$deps_list $deps" + fi + done + + all_svcs=$( (echo "$mod_svcs"; echo "$deps_list") | tr ' ' '\n' | sort -u) + + echo "Final service list (including direct dependencies):" + echo "$all_svcs" + + # Expose to workflow output + echo "docker_svc_list<> "$GITHUB_OUTPUT" + echo "$all_svcs" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" fi - echo "Modified/added services:" - echo "$mod_svcs" - - # Include direct dependencies - echo "Resolving direct dependencies..." - deps_list="" - for svc in $mod_svcs; do - deps=$(yq -r ".services[\"$svc\"].depends_on | keys | .[]" docker-compose-head.yml 2>/dev/null || true) - if [ -n "$deps" ]; then - echo "$svc depends on:" - echo "$deps" - deps_list="$deps_list $deps" - fi - done - - all_svcs=$( (echo "$mod_svcs"; echo "$deps_list") | tr ' ' '\n' | sort -u) - - echo "Final service list (including direct dependencies):" - echo "$all_svcs" - - # Expose to workflow output - echo "docker_svc_list<> "$GITHUB_OUTPUT" - echo "$all_svcs" >> "$GITHUB_OUTPUT" + # Output removed services separately + echo "Removed services:" + echo "${removed_svcs:-None}" + echo "removed_svc_list<> "$GITHUB_OUTPUT" + echo "$removed_svcs" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - - name: List of Services for (Re)Deployment - run: | - echo -e "${{ steps.detect_services.outputs.docker_svc_list }}" + # Generate Markdown summary + { + echo "## 🧩 Service Change Summary" + echo "" + echo "| Change Type | Services |" + echo "|--------------|-----------|" + echo "| 🟢 **Added** | ${added_svcs:-None} |" + echo "| 🟡 **Modified** | ${modified_svcs:-None} |" + echo "| 🔴 **Removed** | ${removed_svcs:-None} |" + echo "" + echo "**Detected in:** \`${{ github.ref_name }}\` vs \`main\`" + } >> "$GITHUB_STEP_SUMMARY" + docker-compose-dry-run: name: Docker Compose Dry Run -- 2.52.0 From 0fdec9cd231a906759aa302d7c03cc8905ff3d4f Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Tue, 28 Oct 2025 06:43:57 -0400 Subject: [PATCH 10/14] Removing step summary. --- .gitea/workflows/pr-cloudflare-docker-deploy.yml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/.gitea/workflows/pr-cloudflare-docker-deploy.yml b/.gitea/workflows/pr-cloudflare-docker-deploy.yml index 444b7f9c..cf606469 100644 --- a/.gitea/workflows/pr-cloudflare-docker-deploy.yml +++ b/.gitea/workflows/pr-cloudflare-docker-deploy.yml @@ -154,19 +154,6 @@ jobs: echo "$removed_svcs" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - # Generate Markdown summary - { - echo "## 🧩 Service Change Summary" - echo "" - echo "| Change Type | Services |" - echo "|--------------|-----------|" - echo "| 🟢 **Added** | ${added_svcs:-None} |" - echo "| 🟡 **Modified** | ${modified_svcs:-None} |" - echo "| 🔴 **Removed** | ${removed_svcs:-None} |" - echo "" - echo "**Detected in:** \`${{ github.ref_name }}\` vs \`main\`" - } >> "$GITHUB_STEP_SUMMARY" - docker-compose-dry-run: name: Docker Compose Dry Run -- 2.52.0 From f88c107ccb9c0d7281802691e160acb61b538394 Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Tue, 28 Oct 2025 06:48:52 -0400 Subject: [PATCH 11/14] Removing step summary. --- .gitea/workflows/pr-cloudflare-docker-deploy.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/pr-cloudflare-docker-deploy.yml b/.gitea/workflows/pr-cloudflare-docker-deploy.yml index cf606469..52392688 100644 --- a/.gitea/workflows/pr-cloudflare-docker-deploy.yml +++ b/.gitea/workflows/pr-cloudflare-docker-deploy.yml @@ -112,7 +112,7 @@ jobs: modified_svcs=$(grep -E ': modified' service_changes.txt | cut -d':' -f1 | sort | uniq) removed_svcs=$(grep -E ': removed' service_changes.txt | cut -d':' -f1 | sort | uniq) - # Gather list of modified/added services (ignore removed for build/test) + # Gather list of modified/added services mod_svcs=$( (echo "$added_svcs"; echo "$modified_svcs") | tr ' ' '\n' | sort -u | grep -v '^$' || true) if [ -z "$mod_svcs" ]; then @@ -154,6 +154,8 @@ jobs: echo "$removed_svcs" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" + # Always exit cleanly + exit 0 docker-compose-dry-run: name: Docker Compose Dry Run -- 2.52.0 From f2fe86a30a3233e483b5585b4cd69f8db2913c23 Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Tue, 28 Oct 2025 06:54:50 -0400 Subject: [PATCH 12/14] ... --- .../workflows/pr-cloudflare-docker-deploy.yml | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/.gitea/workflows/pr-cloudflare-docker-deploy.yml b/.gitea/workflows/pr-cloudflare-docker-deploy.yml index 52392688..ee4f4b23 100644 --- a/.gitea/workflows/pr-cloudflare-docker-deploy.yml +++ b/.gitea/workflows/pr-cloudflare-docker-deploy.yml @@ -78,6 +78,8 @@ jobs: - name: Detect added, deleted, and modified services id: detect_services run: | + set +e # prevent failure on non-zero exit codes + echo "Getting services from main and ${{ github.ref_name }}" yq '.services | keys | .[]' docker-compose-main.yml | sort > services_main.txt yq '.services | keys | .[]' docker-compose-head.yml | sort > services_head.txt @@ -86,17 +88,17 @@ jobs: touch service_changes.txt # Detect newly added services - comm -13 services_main.txt services_head.txt | while read service; do + comm -13 services_main.txt services_head.txt 2>/dev/null | while read service; do [ -n "$service" ] && echo "$service: added" >> service_changes.txt done # Detect removed services - comm -23 services_main.txt services_head.txt | while read service; do + comm -23 services_main.txt services_head.txt 2>/dev/null | while read service; do [ -n "$service" ] && echo "$service: removed" >> service_changes.txt done # Detect modified services - comm -12 services_main.txt services_head.txt | while read service; do + comm -12 services_main.txt services_head.txt 2>/dev/null | while read service; do yq ".services[\"$service\"]" docker-compose-main.yml > tmp_main.yml yq ".services[\"$service\"]" docker-compose-head.yml > tmp_head.yml if ! diff -q tmp_main.yml tmp_head.yml > /dev/null; then @@ -107,10 +109,10 @@ jobs: echo "Detected service changes:" cat service_changes.txt || echo "None" - # Separate categories - added_svcs=$(grep -E ': added' service_changes.txt | cut -d':' -f1 | sort | uniq) - modified_svcs=$(grep -E ': modified' service_changes.txt | cut -d':' -f1 | sort | uniq) - removed_svcs=$(grep -E ': removed' service_changes.txt | cut -d':' -f1 | sort | uniq) + # Separate categories safely + added_svcs=$(grep -E ': added' service_changes.txt 2>/dev/null | cut -d':' -f1 | sort | uniq) + modified_svcs=$(grep -E ': modified' service_changes.txt 2>/dev/null | cut -d':' -f1 | sort | uniq) + removed_svcs=$(grep -E ': removed' service_changes.txt 2>/dev/null | cut -d':' -f1 | sort | uniq) # Gather list of modified/added services mod_svcs=$( (echo "$added_svcs"; echo "$modified_svcs") | tr ' ' '\n' | sort -u | grep -v '^$' || true) @@ -124,24 +126,27 @@ jobs: echo "Modified/added services:" echo "$mod_svcs" - # Include direct dependencies - echo "Resolving direct dependencies..." - deps_list="" - for svc in $mod_svcs; do - deps=$(yq -r ".services[\"$svc\"].depends_on | keys | .[]" docker-compose-head.yml 2>/dev/null || true) - if [ -n "$deps" ]; then - echo "$svc depends on:" - echo "$deps" - deps_list="$deps_list $deps" - fi - done + # Include direct dependencies (only if head file exists) + if [ -f docker-compose-head.yml ]; then + echo "Resolving direct dependencies..." + deps_list="" + for svc in $mod_svcs; do + deps=$(yq -r ".services[\"$svc\"].depends_on | keys | .[]" docker-compose-head.yml 2>/dev/null || true) + if [ -n "$deps" ]; then + echo "$svc depends on:" + echo "$deps" + deps_list="$deps_list $deps" + fi + done - all_svcs=$( (echo "$mod_svcs"; echo "$deps_list") | tr ' ' '\n' | sort -u) + all_svcs=$( (echo "$mod_svcs"; echo "$deps_list") | tr ' ' '\n' | sort -u) + else + all_svcs="$mod_svcs" + fi echo "Final service list (including direct dependencies):" echo "$all_svcs" - # Expose to workflow output echo "docker_svc_list<> "$GITHUB_OUTPUT" echo "$all_svcs" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" @@ -157,6 +162,7 @@ jobs: # Always exit cleanly exit 0 + docker-compose-dry-run: name: Docker Compose Dry Run needs: [generate-service-list] -- 2.52.0 From 8e236ea7b32c8a65de7182109687bd9778e83b27 Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Tue, 28 Oct 2025 07:05:11 -0400 Subject: [PATCH 13/14] ... --- .gitea/workflows/pr-cloudflare-docker-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/pr-cloudflare-docker-deploy.yml b/.gitea/workflows/pr-cloudflare-docker-deploy.yml index ee4f4b23..15014f2a 100644 --- a/.gitea/workflows/pr-cloudflare-docker-deploy.yml +++ b/.gitea/workflows/pr-cloudflare-docker-deploy.yml @@ -162,7 +162,6 @@ jobs: # Always exit cleanly exit 0 - docker-compose-dry-run: name: Docker Compose Dry Run needs: [generate-service-list] @@ -215,6 +214,7 @@ jobs: HC_VAULT_SECRETS_PATH: rinoa-docker/env - name: Pre-pull/build service images in parallel + if: ${{ env.DOCKER_SVC_LIST && env.DOCKER_SVC_LIST != '' }} uses: https://git.trez.wtf/Trez/docker-select-image-pull@main env: DOCKER_HOST: tcp://dockerproxy:2375 -- 2.52.0 From 4ea80a78b45993c7d5ee12110ae321d27ce96d1d Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Tue, 28 Oct 2025 09:02:00 -0400 Subject: [PATCH 14/14] Add'l check. --- .gitea/workflows/pr-cloudflare-docker-deploy.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/pr-cloudflare-docker-deploy.yml b/.gitea/workflows/pr-cloudflare-docker-deploy.yml index 15014f2a..91259a28 100644 --- a/.gitea/workflows/pr-cloudflare-docker-deploy.yml +++ b/.gitea/workflows/pr-cloudflare-docker-deploy.yml @@ -213,8 +213,18 @@ jobs: HC_VAULT_TOKEN: ${{ secrets.VAULT_GITEA_TOKEN }} HC_VAULT_SECRETS_PATH: rinoa-docker/env + - name: Check services + env: + DSLIST: ${{ env.DOCKER_SVC_LIST }} + run: | + if [ -z ${DSLIST} ]; then + echo "DOCKER_SVC_LIST=" >> $GITHUB_ENV + else + echo "${DLIST}" + fi + - name: Pre-pull/build service images in parallel - if: ${{ env.DOCKER_SVC_LIST && env.DOCKER_SVC_LIST != '' }} + continue-on-error: true uses: https://git.trez.wtf/Trez/docker-select-image-pull@main env: DOCKER_HOST: tcp://dockerproxy:2375 -- 2.52.0