8 Commits

Author SHA1 Message Date
Yury Kossakovsky
9dcf622e9f fix: use node-based healthcheck for uptime-kuma
louislam/uptime-kuma:2 image doesn't include wget
2026-03-28 17:50:48 -06:00
Yury Kossakovsky
7861dee1b1 fix: make n8n payload size max configurable via .env
was hardcoded to 256 in docker-compose.yml, ignoring user overrides
2026-03-28 17:40:18 -06:00
Yury Kossakovsky
6fe028d01b chore: remove claude code github actions workflows 2026-03-23 16:12:15 -06:00
Yury Kossakovsky
804b81f6cb fix: resolve supabase-storage crash-loop by adding missing s3 config variables
supabase-storage crashes with "Region is missing" after upstream image
update because @aws-sdk/client-s3vectors requires REGION env var.

- add REGION, GLOBAL_S3_BUCKET, STORAGE_TENANT_ID to .env.example
- auto-generate S3_PROTOCOL_ACCESS_KEY_ID/SECRET in secret generation
- sync new env vars to existing supabase/docker/.env during updates
  (append-only, never overwrites existing values)
- bump version 1.3.3 → 1.4.1
2026-03-23 16:09:06 -06:00
Yury Kossakovsky
d344291c21 Merge pull request #53 from kossakovsky/develop
v1.4.0: add uptime kuma and pgvector support
2026-03-15 20:21:35 -06:00
Yury Kossakovsky
174fce7527 Merge pull request #48 from kossakovsky/add-claude-github-actions-1773363152825
Add claude GitHub actions 1773363152825
2026-03-12 20:31:23 -06:00
Yury Kossakovsky
b0564ea0d8 "Claude Code Review workflow" 2026-03-12 18:52:35 -06:00
Yury Kossakovsky
888347e110 "Claude PR Assistant workflow" 2026-03-12 18:52:34 -06:00
6 changed files with 67 additions and 8 deletions

View File

@@ -226,6 +226,10 @@ N8N_LOG_LEVEL=info
NODES_EXCLUDE="[]"
N8N_LOG_OUTPUT=console
# Maximum payload size in MB for n8n requests (default: 256 MB).
# Increase if you need to handle large files or webhook payloads.
N8N_PAYLOAD_SIZE_MAX=256
# Timezone for n8n and workflows (https://docs.n8n.io/hosting/configuration/environment-variables/timezone-localization/)
GENERIC_TIMEZONE=America/New_York
@@ -421,6 +425,25 @@ IMGPROXY_ENABLE_WEBP_DETECTION=true
# Add your OpenAI API key to enable SQL Editor Assistant
OPENAI_API_KEY=
############
# Storage - Configuration for S3 protocol endpoint
############
# S3 bucket when using S3 backend, directory name when using 'file'
GLOBAL_S3_BUCKET=stub
# Used for S3 protocol endpoint configuration
REGION=stub
# Equivalent to project_ref (S3 session token authentication)
STORAGE_TENANT_ID=stub
# Access to Storage via S3 protocol endpoint
S3_PROTOCOL_ACCESS_KEY_ID=
S3_PROTOCOL_ACCESS_KEY_SECRET=
# ============================================
# Cloudflare Tunnel Configuration (Optional)
# ============================================

View File

@@ -2,6 +2,18 @@
## [Unreleased]
## [1.4.2] - 2026-03-28
### Fixed
- **n8n** - Make `N8N_PAYLOAD_SIZE_MAX` configurable via `.env` (was hardcoded to 256, ignoring user overrides)
- **Uptime Kuma** - Fix healthcheck failure (`wget: not found`) by switching to Node.js-based check
## [1.4.1] - 2026-03-23
### Fixed
- **Supabase Storage** - Fix crash-loop (`Region is missing`) by adding missing S3 storage configuration variables (`REGION`, `GLOBAL_S3_BUCKET`, `STORAGE_TENANT_ID`) from upstream Supabase
- **Supabase** - Sync new environment variables to existing `supabase/docker/.env` during updates (previously only populated on first install)
## [1.4.0] - 2026-03-15
### Added

View File

@@ -1 +1 @@
1.3.3
1.4.2

View File

@@ -83,7 +83,7 @@ x-n8n: &service-n8n
N8N_LOG_LEVEL: ${N8N_LOG_LEVEL:-info}
N8N_LOG_OUTPUT: ${N8N_LOG_OUTPUT:-console}
N8N_METRICS: true
N8N_PAYLOAD_SIZE_MAX: 256
N8N_PAYLOAD_SIZE_MAX: ${N8N_PAYLOAD_SIZE_MAX:-256}
N8N_PERSONALIZATION_ENABLED: false
N8N_RESTRICT_FILE_ACCESS_TO: /data/shared
N8N_RUNNERS_AUTH_TOKEN: ${N8N_RUNNERS_AUTH_TOKEN}
@@ -1291,7 +1291,7 @@ services:
volumes:
- uptime_kuma_data:/app/data
healthcheck:
test: ["CMD-SHELL", "http_proxy= https_proxy= HTTP_PROXY= HTTPS_PROXY= wget -qO- http://localhost:3001/ || exit 1"]
test: ["CMD-SHELL", "node -e \"const http=require('http');const r=http.get('http://localhost:3001',res=>{process.exit(res.statusCode<400?0:1)});r.on('error',()=>process.exit(1));r.setTimeout(5000,()=>{r.destroy();process.exit(1)})\""]
interval: 30s
timeout: 10s
retries: 5

View File

@@ -115,6 +115,8 @@ declare -A VARS_TO_GENERATE=(
["RAGFLOW_MINIO_ROOT_PASSWORD"]="password:32"
["RAGFLOW_MYSQL_ROOT_PASSWORD"]="password:32"
["RAGFLOW_REDIS_PASSWORD"]="password:32"
["S3_PROTOCOL_ACCESS_KEY_ID"]="hex:32"
["S3_PROTOCOL_ACCESS_KEY_SECRET"]="hex:64"
["SEARXNG_PASSWORD"]="password:32" # Added SearXNG admin password
["SECRET_KEY_BASE"]="base64:64" # 48 bytes -> 64 chars
["TEMPORAL_UI_PASSWORD"]="password:32" # Temporal UI basic auth password

View File

@@ -71,18 +71,40 @@ def clone_supabase_repo():
os.chdir("..")
def prepare_supabase_env():
"""Copy .env to .env in supabase/docker."""
"""Copy .env to supabase/docker/.env, or sync new variables if it already exists."""
if not is_supabase_enabled():
print("Supabase is not enabled, skipping env preparation.")
return
env_path = os.path.join("supabase", "docker", ".env")
env_example_path = os.path.join(".env")
# Do not overwrite existing Supabase env to avoid credential drift
root_env_path = ".env"
if os.path.exists(env_path):
print(f"Supabase env already exists at {env_path}, not overwriting.")
# Sync new variables from root .env that don't exist in supabase .env
print(f"Syncing new variables from root .env to {env_path}...")
root_env = dotenv_values(root_env_path)
supabase_env = dotenv_values(env_path)
new_vars = []
for key, value in root_env.items():
if key not in supabase_env and value is not None:
# Quote values to handle special characters safely
if '$' in value:
new_vars.append(f"{key}='{value}'")
else:
new_vars.append(f'{key}="{value}"')
if new_vars:
with open(env_path, 'r') as f:
existing_content = f.read()
sync_header = "# --- Variables synced from root .env ---"
with open(env_path, 'a') as f:
if sync_header not in existing_content:
f.write(f"\n{sync_header}\n")
for var in new_vars:
f.write(f"{var}\n")
print(f"Synced {len(new_vars)} new variable(s) to Supabase env.")
else:
print("Supabase env is up to date, no new variables to sync.")
return
print("Copying .env in root to .env in supabase/docker...")
shutil.copyfile(env_example_path, env_path)
shutil.copyfile(root_env_path, env_path)
def clone_dify_repo():
"""Clone the Dify repository using sparse checkout if not already present."""