6 Commits

Author SHA1 Message Date
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
5 changed files with 55 additions and 6 deletions

View File

@@ -421,6 +421,25 @@ IMGPROXY_ENABLE_WEBP_DETECTION=true
# Add your OpenAI API key to enable SQL Editor Assistant # Add your OpenAI API key to enable SQL Editor Assistant
OPENAI_API_KEY= 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) # Cloudflare Tunnel Configuration (Optional)
# ============================================ # ============================================

View File

@@ -2,6 +2,12 @@
## [Unreleased] ## [Unreleased]
## [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 ## [1.4.0] - 2026-03-15
### Added ### Added

View File

@@ -1 +1 @@
1.3.3 1.4.1

View File

@@ -115,6 +115,8 @@ declare -A VARS_TO_GENERATE=(
["RAGFLOW_MINIO_ROOT_PASSWORD"]="password:32" ["RAGFLOW_MINIO_ROOT_PASSWORD"]="password:32"
["RAGFLOW_MYSQL_ROOT_PASSWORD"]="password:32" ["RAGFLOW_MYSQL_ROOT_PASSWORD"]="password:32"
["RAGFLOW_REDIS_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 ["SEARXNG_PASSWORD"]="password:32" # Added SearXNG admin password
["SECRET_KEY_BASE"]="base64:64" # 48 bytes -> 64 chars ["SECRET_KEY_BASE"]="base64:64" # 48 bytes -> 64 chars
["TEMPORAL_UI_PASSWORD"]="password:32" # Temporal UI basic auth password ["TEMPORAL_UI_PASSWORD"]="password:32" # Temporal UI basic auth password

View File

@@ -71,18 +71,40 @@ def clone_supabase_repo():
os.chdir("..") os.chdir("..")
def prepare_supabase_env(): 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(): if not is_supabase_enabled():
print("Supabase is not enabled, skipping env preparation.") print("Supabase is not enabled, skipping env preparation.")
return return
env_path = os.path.join("supabase", "docker", ".env") env_path = os.path.join("supabase", "docker", ".env")
env_example_path = os.path.join(".env") root_env_path = ".env"
# Do not overwrite existing Supabase env to avoid credential drift
if os.path.exists(env_path): 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 return
print("Copying .env in root to .env in supabase/docker...") 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(): def clone_dify_repo():
"""Clone the Dify repository using sparse checkout if not already present.""" """Clone the Dify repository using sparse checkout if not already present."""