diff --git a/cloud/infrastructure/development/README.md b/cloud/infrastructure/development/README.md index 768eacb..407c991 100644 --- a/cloud/infrastructure/development/README.md +++ b/cloud/infrastructure/development/README.md @@ -123,9 +123,9 @@ task dev:status ``` NAMES STATUS PORTS -maple-cassandra-1-dev Up 2 minutes (healthy) 0.0.0.0:9042->9042/tcp -maple-redis-dev Up 2 minutes (healthy) 0.0.0.0:6379->6379/tcp -maple-wordpress-dev Up 2 minutes (healthy) 0.0.0.0:8081->80/tcp +mapleopentech-cassandra-1-dev Up 2 minutes (healthy) 0.0.0.0:9042->9042/tcp +mapleopentech-redis-dev Up 2 minutes (healthy) 0.0.0.0:6379->6379/tcp +mapleopentech-wordpress-dev Up 2 minutes (healthy) 0.0.0.0:8081->80/tcp ... ``` @@ -264,7 +264,7 @@ task redis **View debug logs:** ```bash -docker exec -it maple-wordpress-dev tail -f /var/www/html/wp-content/debug.log +docker exec -it mapleopentech-wordpress-dev tail -f /var/www/html/wp-content/debug.log ``` ### Working with SeaweedFS (S3 Storage) @@ -298,12 +298,12 @@ S3_SECRET_KEY=any All data is stored in Docker volumes and survives restarts: -- `maple-cassandra-1-dev`, `maple-cassandra-2-dev`, `maple-cassandra-3-dev` -- `maple-redis-dev` -- `maple-meilisearch-dev` -- `maple-seaweedfs-dev` -- `maple-mariadb-dev` -- `maple-wordpress-dev` +- `mapleopentech-cassandra-1-dev`, `mapleopentech-cassandra-2-dev`, `mapleopentech-cassandra-3-dev` +- `mapleopentech-redis-dev` +- `mapleopentech-meilisearch-dev` +- `mapleopentech-seaweedfs-dev` +- `mapleopentech-mariadb-dev` +- `mapleopentech-wordpress-dev` **To completely reset (deletes all data):** ```bash @@ -336,7 +336,7 @@ WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3}; 2. Configure your project's `docker-compose.dev.yml`: ```yaml networks: - maple-dev: + mapleopentech-dev: external: true services: @@ -349,7 +349,7 @@ services: - REDIS_HOST=redis - REDIS_DB=2 # Use next available: 0=maplepress, 1=maplefile networks: - - maple-dev + - mapleopentech-dev ``` 3. Restart infrastructure: diff --git a/cloud/infrastructure/development/Taskfile.yml b/cloud/infrastructure/development/Taskfile.yml index 5937547..6655dc8 100644 --- a/cloud/infrastructure/development/Taskfile.yml +++ b/cloud/infrastructure/development/Taskfile.yml @@ -1,4 +1,4 @@ -version: '3' +version: "3" # Variables for Docker Compose command detection vars: @@ -24,7 +24,7 @@ tasks: - echo "✅ Infrastructure ready!" - echo "" - echo "📊 Running Services:" - - docker ps --filter "name=maple-" + - docker ps --filter "name=mapleopentech-" dev:wait: desc: Wait for all services to be healthy @@ -33,7 +33,7 @@ tasks: - | echo "Waiting for Cassandra Node 1..." for i in {1..30}; do - if docker exec maple-cassandra-1-dev cqlsh -e "describe cluster" >/dev/null 2>&1; then + if docker exec mapleopentech-cassandra-1-dev cqlsh -e "describe cluster" >/dev/null 2>&1; then echo "✅ Cassandra Node 1 is ready" break fi @@ -43,7 +43,7 @@ tasks: - | echo "Waiting for Cassandra Node 2..." for i in {1..30}; do - if docker exec maple-cassandra-2-dev cqlsh -e "describe cluster" >/dev/null 2>&1; then + if docker exec mapleopentech-cassandra-2-dev cqlsh -e "describe cluster" >/dev/null 2>&1; then echo "✅ Cassandra Node 2 is ready" break fi @@ -53,7 +53,7 @@ tasks: - | echo "Waiting for Cassandra Node 3..." for i in {1..30}; do - if docker exec maple-cassandra-3-dev cqlsh -e "describe cluster" >/dev/null 2>&1; then + if docker exec mapleopentech-cassandra-3-dev cqlsh -e "describe cluster" >/dev/null 2>&1; then echo "✅ Cassandra Node 3 is ready" break fi @@ -63,7 +63,7 @@ tasks: - | echo "Waiting for Redis..." for i in {1..10}; do - if docker exec maple-redis-dev redis-cli ping >/dev/null 2>&1; then + if docker exec mapleopentech-redis-dev redis-cli ping >/dev/null 2>&1; then echo "✅ Redis is ready" break fi @@ -72,7 +72,7 @@ tasks: - | echo "Waiting for SeaweedFS..." for i in {1..10}; do - if docker exec maple-seaweedfs-dev /usr/bin/wget -q --spider http://127.0.0.1:9333/cluster/status 2>/dev/null; then + if docker exec mapleopentech-seaweedfs-dev /usr/bin/wget -q --spider http://127.0.0.1:9333/cluster/status 2>/dev/null; then echo "✅ SeaweedFS is ready" break fi @@ -84,7 +84,7 @@ tasks: cmds: - | echo "📦 Initializing Cassandra keyspaces..." - docker exec -i maple-cassandra-1-dev cqlsh < cassandra/init-scripts/01-create-keyspaces.cql + docker exec -i mapleopentech-cassandra-1-dev cqlsh < cassandra/init-scripts/01-create-keyspaces.cql echo "✅ Keyspaces initialized with replication_factor=3" dev:status: @@ -92,7 +92,7 @@ tasks: cmds: - | echo "📊 Infrastructure Status:" - docker ps --filter "name=maple-" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" + docker ps --filter "name=mapleopentech-" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" dev:stop: desc: Stop all infrastructure services (keeps data) @@ -130,39 +130,39 @@ tasks: exit 1 fi echo "🗑️ Dropping keyspace: $KEYSPACE" - docker exec maple-cassandra-1-dev cqlsh -e "DROP KEYSPACE IF EXISTS $KEYSPACE;" + docker exec mapleopentech-cassandra-1-dev cqlsh -e "DROP KEYSPACE IF EXISTS $KEYSPACE;" echo "📦 Recreating keyspace: $KEYSPACE" - docker exec maple-cassandra-1-dev cqlsh -e "CREATE KEYSPACE IF NOT EXISTS $KEYSPACE WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 3} AND DURABLE_WRITES = true;" + docker exec mapleopentech-cassandra-1-dev cqlsh -e "CREATE KEYSPACE IF NOT EXISTS $KEYSPACE WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 3} AND DURABLE_WRITES = true;" echo "✅ Keyspace $KEYSPACE cleaned and recreated" # Cassandra-specific tasks cql: desc: Open Cassandra CQL shell (connects to node 1) cmds: - - docker exec -it maple-cassandra-1-dev cqlsh + - docker exec -it mapleopentech-cassandra-1-dev cqlsh cql:keyspaces: desc: List all keyspaces cmds: - - docker exec maple-cassandra-1-dev cqlsh -e "DESCRIBE KEYSPACES;" + - docker exec mapleopentech-cassandra-1-dev cqlsh -e "DESCRIBE KEYSPACES;" cql:tables: desc: List tables in a keyspace (usage task cql:tables -- maplepress) cmds: - - docker exec maple-cassandra-1-dev cqlsh -e "USE {{.CLI_ARGS}}; DESCRIBE TABLES;" + - docker exec mapleopentech-cassandra-1-dev cqlsh -e "USE {{.CLI_ARGS}}; DESCRIBE TABLES;" cql:status: desc: Show Cassandra cluster status cmds: - - docker exec maple-cassandra-1-dev nodetool status + - docker exec mapleopentech-cassandra-1-dev nodetool status # Redis-specific tasks redis: desc: Open Redis CLI cmds: - - docker exec -it maple-redis-dev redis-cli + - docker exec -it mapleopentech-redis-dev redis-cli redis:info: desc: Show Redis info cmds: - - docker exec maple-redis-dev redis-cli INFO + - docker exec mapleopentech-redis-dev redis-cli INFO diff --git a/cloud/infrastructure/production/operations/HORIZONTAL_SCALING.md b/cloud/infrastructure/production/operations/HORIZONTAL_SCALING.md index 8fc61f5..ff3d054 100644 --- a/cloud/infrastructure/production/operations/HORIZONTAL_SCALING.md +++ b/cloud/infrastructure/production/operations/HORIZONTAL_SCALING.md @@ -453,13 +453,13 @@ docker node inspect mapleopentech-swarm-worker-10-prod --format '{{.Spec.Labels} **Important:** Workers must access Cassandra and Redis. ```bash -# Add worker-10 to maple-private-prod network +# Add worker-10 to mapleopentech-private-prod network # This is done automatically when services start on the worker # But verify connectivity: # On worker-10, test Redis connectivity ssh root@ -docker run --rm --network maple-private-prod redis:7.0-alpine redis-cli -h redis ping +docker run --rm --network mapleopentech-private-prod redis:7.0-alpine redis-cli -h redis ping # Should output: PONG ``` diff --git a/cloud/infrastructure/production/reference/README.md b/cloud/infrastructure/production/reference/README.md index b853bb6..3c5c437 100644 --- a/cloud/infrastructure/production/reference/README.md +++ b/cloud/infrastructure/production/reference/README.md @@ -153,8 +153,8 @@ DNS: [Your DNS provider] SSL: Let's Encrypt (automatic via Caddy) Networks: - - maple-private-prod: Databases and internal services - - maple-public-prod: Public-facing services (Caddy + backends) + - mapleopentech-private-prod: Databases and internal services + - mapleopentech-public-prod: Public-facing services (Caddy + backends) Databases: - Cassandra: 3-node cluster, RF=3, QUORUM consistency diff --git a/cloud/infrastructure/production/setup/00-multi-app-architecture.md b/cloud/infrastructure/production/setup/00-multi-app-architecture.md index 0d6ad21..3ffbef7 100644 --- a/cloud/infrastructure/production/setup/00-multi-app-architecture.md +++ b/cloud/infrastructure/production/setup/00-multi-app-architecture.md @@ -27,8 +27,8 @@ This document defines the **multi-application architecture** for Maple Open Tech │ - Meilisearch (worker 5) │ │ │ │ Networks: │ -│ - maple-private-prod (databases, cache, search) │ -│ - maple-public-prod (reverse proxies + backends) │ +│ - mapleopentech-private-prod (databases, cache, search) │ +│ - mapleopentech-public-prod (reverse proxies + backends) │ └─────────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────────┐ @@ -40,7 +40,7 @@ This document defines the **multi-application architecture** for Maple Open Tech │ Service: maplepress_backend │ │ Hostname: maplepress-backend │ │ Port: 8000 │ -│ Networks: maple-private-prod + maple-public-prod │ +│ Networks: mapleopentech-private-prod + mapleopentech-public-prod │ │ Connects to: Cassandra, Redis, Meilisearch, Spaces │ │ │ │ Service: maplepress_backend-caddy │ @@ -66,7 +66,7 @@ This document defines the **multi-application architecture** for Maple Open Tech │ Service: maplefile_backend │ │ Hostname: maplefile-backend │ │ Port: 8000 │ -│ Networks: maple-private-prod + maple-public-prod │ +│ Networks: mapleopentech-private-prod + mapleopentech-public-prod │ │ Connects to: Cassandra, Redis, Meilisearch, Spaces │ │ │ │ Service: maplefile_backend-caddy │ @@ -92,7 +92,7 @@ This document defines the **multi-application architecture** for Maple Open Tech │ Service: mapleopentech_backend │ │ Hostname: mapleopentech-backend │ │ Port: 8000 │ -│ Networks: maple-private-prod + maple-public-prod │ +│ Networks: mapleopentech-private-prod + mapleopentech-public-prod │ │ Connects to: Cassandra, Redis, Meilisearch, Spaces │ │ │ │ Service: mapleopentech_backend-caddy │ @@ -256,7 +256,7 @@ docker config ls ## Network Topology -### maple-private-prod (Shared by ALL Apps) +### mapleopentech-private-prod (Shared by ALL Apps) **Purpose**: Private backend services - databases, cache, search @@ -268,7 +268,7 @@ docker config ls **Security**: No ingress ports, no internet access, internal-only -### maple-public-prod (Per-App Reverse Proxies + Backends) +### mapleopentech-public-prod (Per-App Reverse Proxies + Backends) **Purpose**: Internet-facing services - reverse proxies and backends diff --git a/cloud/infrastructure/production/setup/00-network-architecture.md b/cloud/infrastructure/production/setup/00-network-architecture.md index 2311f7c..8c4619c 100644 --- a/cloud/infrastructure/production/setup/00-network-architecture.md +++ b/cloud/infrastructure/production/setup/00-network-architecture.md @@ -15,7 +15,7 @@ We use a **multi-network architecture** following industry best practices for se │ Docker Swarm Cluster │ │ │ │ ┌────────────────────────────────────────────────────────────┐ │ -│ │ maple-private-prod (Overlay Network) │ │ +│ │ mapleopentech-private-prod (Overlay Network) │ │ │ │ No Internet Access | Internal Services Only │ │ │ │ SHARED by ALL applications │ │ │ ├────────────────────────────────────────────────────────────┤ │ @@ -31,7 +31,7 @@ We use a **multi-network architecture** following industry best practices for se │ └────────────────────────────────────────────────────────────┘ │ │ │ │ ┌────────────────────────────────────────────────────────────┐ │ -│ │ maple-public-prod (Overlay Network) │ │ +│ │ mapleopentech-public-prod (Overlay Network) │ │ │ │ Internet-Facing | Public Services │ │ │ ├────────────────────────────────────────────────────────────┤ │ │ │ Reverse Proxies (Caddy - ports 80/443): │ │ @@ -48,14 +48,14 @@ We use a **multi-network architecture** following industry best practices for se │ └────────────────────────────────────────────────────────────┘ │ │ │ │ Note: Application backends join BOTH networks: │ -│ - Receive requests from Caddy on maple-public-prod │ -│ - Access databases/cache on maple-private-prod │ +│ - Receive requests from Caddy on mapleopentech-public-prod │ +│ - Access databases/cache on mapleopentech-private-prod │ └─────────────────────────────────────────────────────────────────┘ ``` ## Networks Explained -### 1. `maple-private-prod` (Current) +### 1. `mapleopentech-private-prod` (Current) **Purpose**: Backend services that should NEVER be exposed to the internet. @@ -86,7 +86,7 @@ cassandra-2:9042 cassandra-3:9042 ``` -### 2. `maple-public-prod` (Current - In Use) +### 2. `mapleopentech-public-prod` (Current - In Use) **Purpose**: Internet-facing services that handle external traffic. @@ -110,9 +110,9 @@ cassandra-3:9042 **Routing Flow:** ``` -Internet → Caddy Reverse Proxy (maple-public-prod) - → Application Backend (maple-public-prod + maple-private-prod) - → Databases/Cache (maple-private-prod only) +Internet → Caddy Reverse Proxy (mapleopentech-public-prod) + → Application Backend (mapleopentech-public-prod + mapleopentech-private-prod) + → Databases/Cache (mapleopentech-private-prod only) Example (MaplePress): https://getmaplepress.ca → maplepress-backend-caddy @@ -157,19 +157,19 @@ Both networks are created and in use: docker network create \ --driver overlay \ --attachable \ - maple-private-prod + mapleopentech-private-prod # Create public network (done in 06_caddy.md - used by reverse proxies) docker network create \ --driver overlay \ --attachable \ - maple-public-prod + mapleopentech-public-prod # Verify both exist docker network ls | grep maple # Should show: -# maple-private-prod -# maple-public-prod +# mapleopentech-private-prod +# mapleopentech-public-prod ``` ### Multi-App Pattern @@ -183,7 +183,7 @@ docker network ls | grep maple ### Go Backend Connecting to Services -**On `maple-private-prod` network:** +**On `mapleopentech-private-prod` network:** ```go // Redis connection @@ -206,16 +206,16 @@ services: backend: image: your-backend:latest networks: - - maple-private-prod # Access to databases - - maple-public-prod # Receive HTTP requests (when deployed) + - mapleopentech-private-prod # Access to databases + - mapleopentech-public-prod # Receive HTTP requests (when deployed) environment: - REDIS_HOST=redis - CASSANDRA_HOSTS=cassandra-1,cassandra-2,cassandra-3 networks: - maple-private-prod: + mapleopentech-private-prod: external: true - maple-public-prod: + mapleopentech-public-prod: external: true ``` @@ -256,7 +256,7 @@ docker service inspect your_service --format '{{.Spec.TaskTemplate.Networks}}' ### Test Connectivity Between Networks ```bash -# From a container on maple-private-prod +# From a container on mapleopentech-private-prod docker exec -it ping redis docker exec -it nc -zv cassandra-1 9042 @@ -266,19 +266,19 @@ docker exec -it nc -zv cassandra-1 9042 ### View All Services on a Network ```bash -docker network inspect maple-private-prod --format '{{range .Containers}}{{.Name}} {{end}}' +docker network inspect mapleopentech-private-prod --format '{{range .Containers}}{{.Name}} {{end}}' ``` ## Migration Path ### Current Status -- ✅ `maple-private-prod` created -- ✅ Cassandra on `maple-private-prod` -- ✅ Redis on `maple-private-prod` +- ✅ `mapleopentech-private-prod` created +- ✅ Cassandra on `mapleopentech-private-prod` +- ✅ Redis on `mapleopentech-private-prod` - ⏳ Backend deployment (next) - ⏳ Public network + NGINX (future) -### When to Create `maple-public-prod` +### When to Create `mapleopentech-public-prod` Create the public network when you're ready to: 1. Deploy NGINX reverse proxy diff --git a/cloud/infrastructure/production/setup/02_cassandra.md b/cloud/infrastructure/production/setup/02_cassandra.md index e6ebb3c..f81677e 100644 --- a/cloud/infrastructure/production/setup/02_cassandra.md +++ b/cloud/infrastructure/production/setup/02_cassandra.md @@ -50,7 +50,7 @@ Cassandra Cluster (NEW): ### Cassandra Configuration - **Version**: Cassandra 5.0.4 -- **Cluster Name**: maple-private-prod-cluster +- **Cluster Name**: mapleopentech-private-prod-cluster - **Replication Factor**: 3 (each data stored on all 3 nodes) - **Data Center**: datacenter1 - **Heap Size**: 512MB (reduced for 2GB RAM constraint) @@ -358,7 +358,7 @@ Copy and paste the following: version: '3.8' networks: - maple-private-prod: + mapleopentech-private-prod: external: true volumes: @@ -371,9 +371,9 @@ services: image: cassandra:5.0.4 hostname: cassandra-1 networks: - - maple-private-prod + - mapleopentech-private-prod environment: - - CASSANDRA_CLUSTER_NAME=maple-private-prod-cluster + - CASSANDRA_CLUSTER_NAME=mapleopentech-private-prod-cluster - CASSANDRA_DC=datacenter1 - CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch - CASSANDRA_SEEDS=cassandra-1,cassandra-2,cassandra-3 @@ -401,9 +401,9 @@ services: image: cassandra:5.0.4 hostname: cassandra-2 networks: - - maple-private-prod + - mapleopentech-private-prod environment: - - CASSANDRA_CLUSTER_NAME=maple-private-prod-cluster + - CASSANDRA_CLUSTER_NAME=mapleopentech-private-prod-cluster - CASSANDRA_DC=datacenter1 - CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch - CASSANDRA_SEEDS=cassandra-1,cassandra-2,cassandra-3 @@ -431,9 +431,9 @@ services: image: cassandra:5.0.4 hostname: cassandra-3 networks: - - maple-private-prod + - mapleopentech-private-prod environment: - - CASSANDRA_CLUSTER_NAME=maple-private-prod-cluster + - CASSANDRA_CLUSTER_NAME=mapleopentech-private-prod-cluster - CASSANDRA_DC=datacenter1 - CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch - CASSANDRA_SEEDS=cassandra-1,cassandra-2,cassandra-3 @@ -460,19 +460,19 @@ services: ### Step 4: Create Shared Overlay Network -Before deploying any services, create the shared `maple-private-prod` network that all services will use: +Before deploying any services, create the shared `mapleopentech-private-prod` network that all services will use: ```bash -# Create the maple-private-prod overlay network +# Create the mapleopentech-private-prod overlay network docker network create \ --driver overlay \ --attachable \ - maple-private-prod + mapleopentech-private-prod # Verify it was created -docker network ls | grep maple-private-prod +docker network ls | grep mapleopentech-private-prod # Should show: -# abc123... maple-private-prod overlay swarm +# abc123... mapleopentech-private-prod overlay swarm ``` **What is this network for?** @@ -847,7 +847,7 @@ docker exec -it $CONTAINER_ID cqlsh -e "SELECT * FROM test.users;" ```bash # On your local machine, add: -CASSANDRA_CLUSTER_NAME=maple-private-prod-cluster +CASSANDRA_CLUSTER_NAME=mapleopentech-private-prod-cluster CASSANDRA_DC=datacenter1 CASSANDRA_REPLICATION_FACTOR=3 @@ -1132,7 +1132,7 @@ docker exec -it $(docker ps -q --filter "name=cassandra") nodetool status ```yaml # In your application stack file: networks: - maple-private-prod: + mapleopentech-private-prod: external: true ``` diff --git a/cloud/infrastructure/production/setup/03_redis.md b/cloud/infrastructure/production/setup/03_redis.md index 29e7695..4baf8f2 100644 --- a/cloud/infrastructure/production/setup/03_redis.md +++ b/cloud/infrastructure/production/setup/03_redis.md @@ -7,7 +7,7 @@ **What You'll Build**: - Single Redis instance on existing worker-1 - Password-protected with Docker secrets -- Private network communication only (maple-private-prod overlay) +- Private network communication only (mapleopentech-private-prod overlay) - Persistent data with AOF + RDB - Ready for Go application connections @@ -37,23 +37,23 @@ Docker Swarm Cluster: │ ├── mapleopentech-swarm-worker-1-prod (10.116.0.3) │ └── Redis (single instance) -│ ├── Network: maple-private-prod (overlay, shared) +│ ├── Network: mapleopentech-private-prod (overlay, shared) │ ├── Port: 6379 (private only) │ ├── Auth: Password (Docker secret) │ └── Data: Persistent volume │ └── mapleopentech-swarm-worker-2,3,4-prod └── Cassandra Cluster (3 nodes) - └── Same network: maple-private-prod + └── Same network: mapleopentech-private-prod -Shared Network (maple-private-prod): +Shared Network (mapleopentech-private-prod): ├── All services can communicate ├── Service discovery by name (redis, cassandra-1, etc.) └── No public internet access Future Application: └── mapleopentech-swarm-worker-X-prod - └── Go Backend → Connects to redis:6379 and cassandra:9042 on maple-private-prod + └── Go Backend → Connects to redis:6379 and cassandra:9042 on mapleopentech-private-prod ``` ### Redis Configuration @@ -164,7 +164,7 @@ Copy and paste the following: version: '3.8' networks: - maple-private-prod: + mapleopentech-private-prod: external: true volumes: @@ -179,7 +179,7 @@ services: image: redis:7-alpine hostname: redis networks: - - maple-private-prod + - mapleopentech-private-prod volumes: - redis-data:/data secrets: @@ -240,16 +240,16 @@ Save and exit (`:wq` in vi). ### Step 2: Verify Shared Overlay Network -**Check if the maple-private-prod network exists:** +**Check if the mapleopentech-private-prod network exists:** ```bash -docker network ls | grep maple-private-prod +docker network ls | grep mapleopentech-private-prod ``` **You should see:** ``` -abc123... maple-private-prod overlay swarm +abc123... mapleopentech-private-prod overlay swarm ``` **If you completed 02_cassandra.md** (Step 4), the network already exists and you're good to go! @@ -257,14 +257,14 @@ abc123... maple-private-prod overlay swarm **If the network doesn't exist**, create it now: ```bash -# Create the shared maple-private-prod network +# Create the shared mapleopentech-private-prod network docker network create \ --driver overlay \ --attachable \ - maple-private-prod + mapleopentech-private-prod # Verify it was created -docker network ls | grep maple-private-prod +docker network ls | grep mapleopentech-private-prod ``` **What is this network?** @@ -436,22 +436,22 @@ docker stack deploy -c redis-stack.yml redis ### Problem: Network Not Found During Deployment -**Symptom**: `network "maple-private-prod" is declared as external, but could not be found` +**Symptom**: `network "mapleopentech-private-prod" is declared as external, but could not be found` **Solution:** -Create the shared `maple-private-prod` network first: +Create the shared `mapleopentech-private-prod` network first: ```bash # Create the network docker network create \ --driver overlay \ --attachable \ - maple-private-prod + mapleopentech-private-prod # Verify it exists -docker network ls | grep maple-private-prod -# Should show: maple-private-prod overlay swarm +docker network ls | grep mapleopentech-private-prod +# Should show: mapleopentech-private-prod overlay swarm # Then deploy Redis docker stack deploy -c redis-stack.yml redis @@ -487,10 +487,10 @@ docker stack deploy -c redis-stack.yml redis # Must show: map[redis:true] ``` -4. **Verify maple-private-prod network exists:** +4. **Verify mapleopentech-private-prod network exists:** ```bash - docker network ls | grep maple-private-prod - # Should show: maple-private-prod overlay swarm + docker network ls | grep mapleopentech-private-prod + # Should show: mapleopentech-private-prod overlay swarm ``` ### Problem: Can't Connect (Authentication Failed) @@ -548,9 +548,9 @@ docker stack deploy -c redis-stack.yml redis 1. **Verify both services on same network:** ```bash - # Check your app is on maple-private-prod network + # Check your app is on mapleopentech-private-prod network docker service inspect your_app --format '{{.Spec.TaskTemplate.Networks}}' - # Should show maple-private-prod + # Should show mapleopentech-private-prod ``` 2. **Test DNS resolution:** diff --git a/cloud/infrastructure/production/setup/04_meilisearch.md b/cloud/infrastructure/production/setup/04_meilisearch.md index a80d328..0db1d11 100644 Binary files a/cloud/infrastructure/production/setup/04_meilisearch.md and b/cloud/infrastructure/production/setup/04_meilisearch.md differ diff --git a/cloud/infrastructure/production/setup/05_maplepress_backend.md b/cloud/infrastructure/production/setup/05_maplepress_backend.md index a2c7776..f491343 100644 --- a/cloud/infrastructure/production/setup/05_maplepress_backend.md +++ b/cloud/infrastructure/production/setup/05_maplepress_backend.md @@ -41,7 +41,7 @@ Internet (HTTPS) → Caddy (worker-6) → Backend (worker-6) → Cassandra/Redis - **Image**: Ubuntu 24.04 LTS x64 - **Size**: Basic shared CPU, 2 GB / 2 vCPU ($18/mo) - **Hostname**: `mapleopentech-swarm-worker-6-prod` - - **VPC Network**: Select same VPC as your swarm (maple-vpc-prod) + - **VPC Network**: Select same VPC as your swarm (mapleopentech-vpc-prod) - **SSH Keys**: Add your SSH key 4. Click **Create Droplet** 5. Wait 1-2 minutes for droplet to provision @@ -349,8 +349,8 @@ dig www.getmaplepress.ca +short We need two overlay networks for our services: -1. **maple-private-prod** - Backend connects to databases (already exists from guides 02-04) -2. **maple-public-prod** - NGINX and Backend communicate (new) +1. **mapleopentech-private-prod** - Backend connects to databases (already exists from guides 02-04) +2. **mapleopentech-public-prod** - NGINX and Backend communicate (new) **On manager:** @@ -358,11 +358,11 @@ We need two overlay networks for our services: ssh dockeradmin@ # Check private network exists -docker network ls | grep maple-private-prod -# Should show: maple-private-prod (created in previous guides) +docker network ls | grep mapleopentech-private-prod +# Should show: mapleopentech-private-prod (created in previous guides) # Create public network -docker network create --driver overlay --attachable maple-public-prod +docker network create --driver overlay --attachable mapleopentech-public-prod # Verify both exist docker network ls | grep maple @@ -371,8 +371,8 @@ docker network ls | grep maple **Expected output:** ``` -abc123... maple-private-prod overlay swarm -def456... maple-public-prod overlay swarm +abc123... mapleopentech-private-prod overlay swarm +def456... mapleopentech-public-prod overlay swarm ``` **Why two networks?** @@ -380,7 +380,7 @@ def456... maple-public-prod overlay swarm - **Public**: NGINX forwards requests to Backend (internet-facing) - Backend joins BOTH networks to receive requests and access databases -**✅ Checkpoint:** Both `maple-private-prod` and `maple-public-prod` networks exist +**✅ Checkpoint:** Both `mapleopentech-private-prod` and `mapleopentech-public-prod` networks exist --- @@ -601,9 +601,9 @@ vi maplepress-stack.yml version: '3.8' networks: - maple-private-prod: + mapleopentech-private-prod: external: true - maple-public-prod: + mapleopentech-public-prod: external: true secrets: @@ -625,8 +625,8 @@ services: image: registry.digitalocean.com/ssp/maplepress_backend:prod hostname: maplepress-backend networks: - - maple-public-prod # Receives requests from Caddy - - maple-private-prod # Accesses databases + - mapleopentech-public-prod # Receives requests from Caddy + - mapleopentech-private-prod # Accesses databases secrets: - maplepress_jwt_secret - maplepress_ip_encryption_key @@ -871,7 +871,7 @@ docker service logs maplepress_backend --tail 100 # 1. Can't reach databases # - Verify Cassandra running: docker service ls | grep cassandra # - Verify Redis running: docker service ls | grep redis -# - Check backend is on maple-private-prod network +# - Check backend is on mapleopentech-private-prod network # 2. Secrets missing docker secret ls @@ -1047,9 +1047,9 @@ docker service logs -f maplepress_backend docker service ls # Should show: cassandra_cassandra-1, cassandra_cassandra-2, cassandra_cassandra-3, redis_redis, meilisearch_meilisearch -# 2. Verify backend is on maple-private-prod network +# 2. Verify backend is on mapleopentech-private-prod network docker service inspect maplepress_backend --format '{{range .Spec.TaskTemplate.Networks}}{{.Target}} {{end}}' -# Should include maple-private-prod +# Should include mapleopentech-private-prod # 3. Test DNS resolution from backend container ssh dockeradmin@ diff --git a/cloud/infrastructure/production/setup/06_maplepress_caddy.md b/cloud/infrastructure/production/setup/06_maplepress_caddy.md index 6189fef..25918b2 100644 --- a/cloud/infrastructure/production/setup/06_maplepress_caddy.md +++ b/cloud/infrastructure/production/setup/06_maplepress_caddy.md @@ -4,7 +4,7 @@ **Time to Complete**: 20-30 minutes **Prerequisites**: - ✅ Completed guide **05_backend.md** (Backend deployed and running) -- ✅ Backend service accessible on `maple-public-prod` network +- ✅ Backend service accessible on `mapleopentech-public-prod` network - ✅ Domain name pointing to worker-6 public IP - ✅ Email address for Let's Encrypt SSL certificate notifications @@ -59,7 +59,7 @@ Backend (worker-6) Databases (Cassandra, Redis, Meilisearch on other workers) ``` -**Key concept:** Caddy and Backend are both on worker-6, connected via the `maple-public-prod` Docker overlay network. Caddy can reach Backend by the hostname `backend` - Docker's built-in DNS resolves this to the backend container's IP automatically. +**Key concept:** Caddy and Backend are both on worker-6, connected via the `mapleopentech-public-prod` Docker overlay network. Caddy can reach Backend by the hostname `backend` - Docker's built-in DNS resolves this to the backend container's IP automatically. --- @@ -328,9 +328,9 @@ vi maplepress-stack.yml version: '3.8' networks: - maple-private-prod: + mapleopentech-private-prod: external: true - maple-public-prod: + mapleopentech-public-prod: external: true volumes: @@ -362,8 +362,8 @@ services: image: registry.digitalocean.com/ssp/maplepress_backend:prod hostname: maplepress-backend networks: - - maple-public-prod - - maple-private-prod + - mapleopentech-public-prod + - mapleopentech-private-prod secrets: - maplepress_jwt_secret - maplepress_ip_encryption_key @@ -431,7 +431,7 @@ services: image: caddy:2-alpine hostname: caddy networks: - - maple-public-prod + - mapleopentech-public-prod ports: # Port 80 - HTTP (for Let's Encrypt challenges and HTTP→HTTPS redirect) # Using mode: host to bind directly to worker-6's network interface @@ -488,7 +488,7 @@ Save: `Esc`, then `:wq`, then `Enter` **Understanding the stack file:** -- **`maple-public-prod` network**: Shared network with backend +- **`mapleopentech-public-prod` network**: Shared network with backend - Both Caddy and Backend are connected here - Allows Caddy to reach Backend by hostname - `external: true` means we created this network earlier (in 05_backend.md) @@ -542,9 +542,9 @@ Before deploying, let's make sure everything is ready: docker service ls | grep backend # Should show: maplepress_backend 1/1 registry.digitalocean.com/ssp/maplepress_backend:prod -# 2. Check maple-public-prod network exists -docker network ls | grep maple-public-prod -# Should show: maple-public-prod overlay swarm +# 2. Check mapleopentech-public-prod network exists +docker network ls | grep mapleopentech-public-prod +# Should show: mapleopentech-public-prod overlay swarm # 3. Verify worker-6 has backend label docker node inspect mapleopentech-swarm-worker-6-prod --format '{{.Spec.Labels}}' @@ -734,8 +734,8 @@ All should show `1/1` in REPLICAS column. docker network ls | grep maple # Should show: -# abc123... maple-private-prod overlay swarm -# def456... maple-public-prod overlay swarm +# abc123... mapleopentech-private-prod overlay swarm +# def456... mapleopentech-public-prod overlay swarm ``` ### 5.3 Verify Service Connectivity @@ -978,8 +978,8 @@ docker service logs maplepress_backend-caddy --tail 100 # - Stop conflicting service # 3. Network not found -docker network ls | grep maple-public-prod -# If missing, create it: docker network create --driver overlay --attachable maple-public-prod +docker network ls | grep mapleopentech-public-prod +# If missing, create it: docker network create --driver overlay --attachable mapleopentech-public-prod ``` ### Problem: Deployment Fails with "only updates to Labels are allowed" @@ -1245,7 +1245,7 @@ docker service ls | grep backend # 2. Are both on same network? docker service inspect maplepress_backend --format '{{range .Spec.TaskTemplate.Networks}}{{.Target}} {{end}}' docker service inspect maplepress_backend-caddy --format '{{range .Spec.TaskTemplate.Networks}}{{.Target}} {{end}}' -# Both should include: maple-public-prod +# Both should include: mapleopentech-public-prod # 3. Test from Caddy container ssh dockeradmin@ @@ -1478,7 +1478,7 @@ Internet (HTTPS) Caddy (worker-6) - Automatic SSL, reverse proxy ↓ Backend (worker-6) - Your Go application - ↓ maple-private-prod network + ↓ mapleopentech-private-prod network Cassandra (workers 1-3) - Database cluster Redis (worker-4) - Cache Meilisearch (worker-5) - Search engine diff --git a/cloud/infrastructure/production/setup/07_maplepress_frontend.md b/cloud/infrastructure/production/setup/07_maplepress_frontend.md index 08c008f..2cbc5e4 100644 --- a/cloud/infrastructure/production/setup/07_maplepress_frontend.md +++ b/cloud/infrastructure/production/setup/07_maplepress_frontend.md @@ -67,7 +67,7 @@ Internet (HTTPS) - **Image**: Ubuntu 24.04 LTS x64 - **Size**: Basic shared CPU, 1 GB / 1 vCPU ($6/mo) - Frontend is lightweight - **Hostname**: `mapleopentech-swarm-worker-7-prod` - - **VPC Network**: Select same VPC as your swarm (maple-vpc-prod) + - **VPC Network**: Select same VPC as your swarm (mapleopentech-vpc-prod) - **SSH Keys**: Add your SSH key 4. Click **Create Droplet** 5. Wait 1-2 minutes for droplet to provision diff --git a/cloud/infrastructure/production/setup/09_maplefile_backend.md b/cloud/infrastructure/production/setup/09_maplefile_backend.md index d280bcc..5c1f926 100644 --- a/cloud/infrastructure/production/setup/09_maplefile_backend.md +++ b/cloud/infrastructure/production/setup/09_maplefile_backend.md @@ -364,8 +364,8 @@ dig www.maplefile.ca +short We need two overlay networks for our services: -1. **maple-private-prod** - Backend connects to databases (already exists from guides 02-04) -2. **maple-public-prod** - Caddy and Backend communicate (already exists from guide 06) +1. **mapleopentech-private-prod** - Backend connects to databases (already exists from guides 02-04) +2. **mapleopentech-public-prod** - Caddy and Backend communicate (already exists from guide 06) **On manager:** @@ -376,15 +376,15 @@ ssh dockeradmin@143.110.210.162 docker network ls | grep maple # Should show: -# maple-private-prod overlay swarm -# maple-public-prod overlay swarm +# mapleopentech-private-prod overlay swarm +# mapleopentech-public-prod overlay swarm ``` -**If maple-public-prod doesn't exist, create it:** +**If mapleopentech-public-prod doesn't exist, create it:** ```bash # Create public network -docker network create --driver overlay --attachable maple-public-prod +docker network create --driver overlay --attachable mapleopentech-public-prod # Verify both exist docker network ls | grep maple @@ -395,7 +395,7 @@ docker network ls | grep maple - **Public**: Caddy forwards requests to Backend (internet-facing) - Backend joins BOTH networks to receive requests and access databases -**✅ Checkpoint:** Both `maple-private-prod` and `maple-public-prod` networks exist +**✅ Checkpoint:** Both `mapleopentech-private-prod` and `mapleopentech-public-prod` networks exist --- @@ -623,9 +623,9 @@ vi ~/stacks/maplefile-stack.yml version: '3.8' networks: - maple-private-prod: + mapleopentech-private-prod: external: true - maple-public-prod: + mapleopentech-public-prod: external: true secrets: @@ -645,8 +645,8 @@ services: image: registry.digitalocean.com/ssp/maplefile-backend:prod hostname: maplefile-backend networks: - - maple-public-prod # Receives requests from Caddy - - maple-private-prod # Accesses databases + - mapleopentech-public-prod # Receives requests from Caddy + - mapleopentech-private-prod # Accesses databases secrets: - maplefile_jwt_secret - redis_password @@ -935,7 +935,7 @@ docker service logs maplefile_backend --tail 100 # 1. Can't reach databases # - Verify Cassandra running: docker service ls | grep cassandra # - Verify Redis running: docker service ls | grep redis -# - Check backend is on maple-private-prod network +# - Check backend is on mapleopentech-private-prod network # 2. Secrets missing docker secret ls @@ -1027,9 +1027,9 @@ docker stack deploy -c ~/stacks/maplefile-stack.yml maplefile docker service ls | grep cassandra # Should show: cassandra_cassandra-1, cassandra_cassandra-2, cassandra_cassandra-3 -# 2. Verify backend is on maple-private-prod network +# 2. Verify backend is on mapleopentech-private-prod network docker service inspect maplefile_backend --format '{{range .Spec.TaskTemplate.Networks}}{{.Target}} {{end}}' -# Should include maple-private-prod +# Should include mapleopentech-private-prod # 3. Test DNS resolution from backend container ssh dockeradmin@143.110.212.253 @@ -1189,14 +1189,14 @@ cd ~/stacks ## Network Architecture Notes -**Private Network (maple-private-prod):** +**Private Network (mapleopentech-private-prod):** - Cassandra cluster (3 nodes) - Shared by ALL apps - Redis - Shared by ALL apps (different DB numbers per app) - Both MaplePress and MapleFile use same infrastructure - MaplePress uses Cassandra keyspace: `maplepress`, Redis DB: 0 - MapleFile uses Cassandra keyspace: `maplefile`, Redis DB: 1 -**Public Network (maple-public-prod):** +**Public Network (mapleopentech-public-prod):** - Each app gets its own Caddy instance - maplefile-backend-caddy (to be deployed in Part 2) - maplepress-backend-caddy (already deployed) diff --git a/cloud/infrastructure/production/setup/10_maplefile_caddy.md b/cloud/infrastructure/production/setup/10_maplefile_caddy.md index 0e16a33..6f9d7c3 100644 --- a/cloud/infrastructure/production/setup/10_maplefile_caddy.md +++ b/cloud/infrastructure/production/setup/10_maplefile_caddy.md @@ -4,7 +4,7 @@ **Time to Complete**: 20-30 minutes **Prerequisites**: - ✅ Completed guide **09_maplefile_backend.md** (Backend deployed and running) -- ✅ Backend service accessible on `maple-public-prod` network +- ✅ Backend service accessible on `mapleopentech-public-prod` network - ✅ Domain name `maplefile.ca` pointing to worker-8 public IP - ✅ Email address for Let's Encrypt SSL certificate notifications @@ -59,7 +59,7 @@ Backend (worker-8) Databases (Cassandra, Redis on other workers) ``` -**Key concept:** Caddy and Backend are both on worker-8, connected via the `maple-public-prod` Docker overlay network. Caddy can reach Backend by the hostname `maplefile-backend` - Docker's built-in DNS resolves this to the backend container's IP automatically. +**Key concept:** Caddy and Backend are both on worker-8, connected via the `mapleopentech-public-prod` Docker overlay network. Caddy can reach Backend by the hostname `maplefile-backend` - Docker's built-in DNS resolves this to the backend container's IP automatically. --- @@ -345,7 +345,7 @@ configs: image: caddy:2.9.1-alpine hostname: maplefile-caddy networks: - - maple-public-prod + - mapleopentech-public-prod ports: # Port 80 - HTTP (for Let's Encrypt challenges and HTTP→HTTPS redirect) # Using mode: host to bind directly to worker-8's network interface @@ -402,7 +402,7 @@ Save: `Esc`, then `:wq`, then `Enter` **Understanding the stack file:** -- **`maple-public-prod` network**: Shared network with backend +- **`mapleopentech-public-prod` network**: Shared network with backend - Both Caddy and Backend are connected here - Allows Caddy to reach Backend by hostname - `external: true` means we created this network earlier (in 09_maplefile_backend.md) @@ -431,7 +431,7 @@ Save: `Esc`, then `:wq`, then `Enter` - **Placement constraint**: - `node.labels.maplefile-backend == true` - Same as backend (worker-8) - - Caddy and Backend MUST be on the same node to share `maple-public-prod` network + - Caddy and Backend MUST be on the same node to share `mapleopentech-public-prod` network - Docker overlay networks work best when services are colocated ### 3.2 Deploy Updated Stack @@ -679,12 +679,12 @@ docker service logs maplefile_backend-caddy --tail 50 # Should show: Running ``` -2. **Backend not on maple-public-prod network** +2. **Backend not on mapleopentech-public-prod network** ```bash # Check backend networks docker service inspect maplefile_backend --format '{{json .Spec.TaskTemplate.Networks}}' - # Should include maple-public-prod + # Should include mapleopentech-public-prod ``` 3. **Wrong hostname in Caddyfile** diff --git a/cloud/infrastructure/production/setup/11_maplefile_frontend.md b/cloud/infrastructure/production/setup/11_maplefile_frontend.md index 6c32828..ed4091f 100644 --- a/cloud/infrastructure/production/setup/11_maplefile_frontend.md +++ b/cloud/infrastructure/production/setup/11_maplefile_frontend.md @@ -75,7 +75,7 @@ Choose this approach if you want better isolation and independent scaling. - **Image**: Ubuntu 24.04 LTS x64 - **Size**: Basic shared CPU, 1 GB / 1 vCPU ($6/mo) - Frontend is lightweight - **Hostname**: `mapleopentech-swarm-worker-9-prod` - - **VPC Network**: Select same VPC as your swarm (maple-vpc-prod) + - **VPC Network**: Select same VPC as your swarm (mapleopentech-vpc-prod) - **SSH Keys**: Add your SSH key - **Tags**: Add tags like `production`, `maplefile`, `frontend` 4. Click **Create Droplet** diff --git a/cloud/infrastructure/production/setup/README.md b/cloud/infrastructure/production/setup/README.md index b918baf..feaf73c 100644 --- a/cloud/infrastructure/production/setup/README.md +++ b/cloud/infrastructure/production/setup/README.md @@ -27,9 +27,9 @@ Internet (HTTPS) ├─ getmaplepress.ca → Backend API (worker-6) └─ getmaplepress.com → Frontend (worker-7) ↓ - Backend Services (maple-public-prod + maple-private-prod) + Backend Services (mapleopentech-public-prod + mapleopentech-private-prod) ↓ - Databases (maple-private-prod only) + Databases (mapleopentech-private-prod only) ├─ Cassandra: 3-node cluster (workers 2,3,4) - RF=3, QUORUM ├─ Redis: Single instance (worker-1/manager) └─ Meilisearch: Single instance (worker-5) @@ -51,7 +51,7 @@ Internet (HTTPS) - Command-line tools verification **[00-network-architecture.md](00-network-architecture.md)** - Network design -- Network segmentation strategy (`maple-private-prod` vs `maple-public-prod`) +- Network segmentation strategy (`mapleopentech-private-prod` vs `mapleopentech-public-prod`) - Security principles (defense in depth) - Service communication patterns - Firewall rules overview @@ -360,13 +360,13 @@ setup/ ### Network Architecture -**`maple-private-prod` (overlay network):** +**`mapleopentech-private-prod` (overlay network):** - All databases (Cassandra, Redis, Meilisearch) - Backend services (access to databases) - **No internet access** (security) - Internal-only communication -**`maple-public-prod` (overlay network):** +**`mapleopentech-public-prod` (overlay network):** - Caddy reverse proxies - Backend services (receive HTTP requests) - Ports 80/443 exposed to internet @@ -447,7 +447,7 @@ docker logs docker service inspect maplepress_backend # Check network -docker network inspect maple-private-prod +docker network inspect mapleopentech-private-prod # List configs docker config ls diff --git a/cloud/infrastructure/production/setup/templates/backend-stack.yml b/cloud/infrastructure/production/setup/templates/backend-stack.yml index d0e38ba..3967bfd 100644 --- a/cloud/infrastructure/production/setup/templates/backend-stack.yml +++ b/cloud/infrastructure/production/setup/templates/backend-stack.yml @@ -1,9 +1,9 @@ -version: '3.8' +version: "3.8" networks: - maple-private-prod: + mapleopentech-private-prod: external: true - maple-public-prod: + mapleopentech-public-prod: external: true secrets: @@ -24,8 +24,8 @@ services: image: registry.digitalocean.com/ssp/maplepress_backend:latest hostname: backend networks: - - maple-public-prod # Receive requests from NGINX - - maple-private-prod # Access databases + - mapleopentech-public-prod # Receive requests from NGINX + - mapleopentech-private-prod # Access databases secrets: - maplepress_jwt_secret - redis_password @@ -93,18 +93,27 @@ services: resources: limits: memory: 1G - cpus: '1.0' + cpus: "1.0" reservations: memory: 512M - cpus: '0.5' + cpus: "0.5" update_config: parallelism: 1 delay: 10s failure_action: rollback - order: start-first # Zero-downtime: start new before stopping old + order: start-first # Zero-downtime: start new before stopping old healthcheck: - test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "--header=X-Tenant-ID: healthcheck", "http://localhost:8000/health"] + test: + [ + "CMD", + "wget", + "--no-verbose", + "--tries=1", + "--spider", + "--header=X-Tenant-ID: healthcheck", + "http://localhost:8000/health", + ] interval: 30s timeout: 5s retries: 3 diff --git a/cloud/infrastructure/production/setup/templates/cassandra-stack.yml b/cloud/infrastructure/production/setup/templates/cassandra-stack.yml index 200f9d5..ce2966f 100644 --- a/cloud/infrastructure/production/setup/templates/cassandra-stack.yml +++ b/cloud/infrastructure/production/setup/templates/cassandra-stack.yml @@ -1,7 +1,7 @@ -version: '3.8' +version: "3.8" networks: - maple-private-prod: + mapleopentech-private-prod: external: true volumes: @@ -14,9 +14,9 @@ services: image: cassandra:5.0.4 hostname: cassandra-1 networks: - - maple-private-prod + - mapleopentech-private-prod environment: - - CASSANDRA_CLUSTER_NAME=maple-prod-cluster + - CASSANDRA_CLUSTER_NAME=mapleopentech-prod-cluster - CASSANDRA_DC=datacenter1 - CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch - CASSANDRA_SEEDS=cassandra-1,cassandra-2,cassandra-3 @@ -44,9 +44,9 @@ services: image: cassandra:5.0.4 hostname: cassandra-2 networks: - - maple-private-prod + - mapleopentech-private-prod environment: - - CASSANDRA_CLUSTER_NAME=maple-prod-cluster + - CASSANDRA_CLUSTER_NAME=mapleopentech-prod-cluster - CASSANDRA_DC=datacenter1 - CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch - CASSANDRA_SEEDS=cassandra-1,cassandra-2,cassandra-3 @@ -74,9 +74,9 @@ services: image: cassandra:5.0.4 hostname: cassandra-3 networks: - - maple-private-prod + - mapleopentech-private-prod environment: - - CASSANDRA_CLUSTER_NAME=maple-prod-cluster + - CASSANDRA_CLUSTER_NAME=mapleopentech-prod-cluster - CASSANDRA_DC=datacenter1 - CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch - CASSANDRA_SEEDS=cassandra-1,cassandra-2,cassandra-3 diff --git a/cloud/infrastructure/production/setup/templates/meilisearch-stack.yml b/cloud/infrastructure/production/setup/templates/meilisearch-stack.yml index 1e99831..a02630f 100644 --- a/cloud/infrastructure/production/setup/templates/meilisearch-stack.yml +++ b/cloud/infrastructure/production/setup/templates/meilisearch-stack.yml @@ -1,7 +1,7 @@ -version: '3.8' +version: "3.8" networks: - maple-private-prod: + mapleopentech-private-prod: external: true volumes: @@ -16,7 +16,7 @@ services: image: getmeili/meilisearch:v1.5 hostname: meilisearch networks: - - maple-private-prod + - mapleopentech-private-prod volumes: - meilisearch-data:/meili_data secrets: @@ -49,7 +49,15 @@ services: reservations: memory: 768M healthcheck: - test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:7700/health"] + test: + [ + "CMD", + "wget", + "--no-verbose", + "--tries=1", + "--spider", + "http://localhost:7700/health", + ] interval: 30s timeout: 10s retries: 3 diff --git a/cloud/infrastructure/production/setup/templates/nginx-stack.yml b/cloud/infrastructure/production/setup/templates/nginx-stack.yml index a332726..c1ae553 100644 --- a/cloud/infrastructure/production/setup/templates/nginx-stack.yml +++ b/cloud/infrastructure/production/setup/templates/nginx-stack.yml @@ -1,7 +1,7 @@ -version: '3.8' +version: "3.8" networks: - maple-public-prod: + mapleopentech-public-prod: external: true volumes: @@ -13,14 +13,14 @@ services: image: nginx:alpine hostname: nginx networks: - - maple-public-prod + - mapleopentech-public-prod ports: - "80:80" - "443:443" volumes: - nginx-ssl-certs:/etc/letsencrypt - nginx-ssl-www:/var/www/certbot - - /var/run/docker.sock:/tmp/docker.sock:ro # For nginx-proxy + - /var/run/docker.sock:/tmp/docker.sock:ro # For nginx-proxy configs: - source: nginx_config target: /etc/nginx/nginx.conf @@ -30,7 +30,7 @@ services: replicas: 1 placement: constraints: - - node.labels.backend == true # Same node as backend + - node.labels.backend == true # Same node as backend restart_policy: condition: on-failure delay: 5s @@ -38,12 +38,20 @@ services: resources: limits: memory: 256M - cpus: '0.5' + cpus: "0.5" reservations: memory: 128M - cpus: '0.25' + cpus: "0.25" healthcheck: - test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:80/health"] + test: + [ + "CMD", + "wget", + "--no-verbose", + "--tries=1", + "--spider", + "http://localhost:80/health", + ] interval: 30s timeout: 5s retries: 3 diff --git a/cloud/infrastructure/production/setup/templates/redis-stack.yml b/cloud/infrastructure/production/setup/templates/redis-stack.yml index a668887..3d187dd 100644 --- a/cloud/infrastructure/production/setup/templates/redis-stack.yml +++ b/cloud/infrastructure/production/setup/templates/redis-stack.yml @@ -1,7 +1,7 @@ -version: '3.8' +version: "3.8" networks: - maple-private-prod: + mapleopentech-private-prod: external: true volumes: @@ -16,7 +16,7 @@ services: image: redis:7-alpine hostname: redis networks: - - maple-private-prod + - mapleopentech-private-prod volumes: - redis-data:/data secrets: @@ -66,7 +66,13 @@ services: reservations: memory: 512M healthcheck: - test: ["CMD", "sh", "-c", "redis-cli -a $$(cat /run/secrets/redis_password) ping | grep PONG"] + test: + [ + "CMD", + "sh", + "-c", + "redis-cli -a $$(cat /run/secrets/redis_password) ping | grep PONG", + ] interval: 10s timeout: 3s retries: 3 diff --git a/cloud/infrastructure/production/setup/templates/redis.prod.conf b/cloud/infrastructure/production/setup/templates/redis.prod.conf index 8ad1f3d..6d146c1 100644 --- a/cloud/infrastructure/production/setup/templates/redis.prod.conf +++ b/cloud/infrastructure/production/setup/templates/redis.prod.conf @@ -11,7 +11,7 @@ bind 0.0.0.0 port 6379 # Protected mode disabled (we rely on Docker network isolation) -# Only containers on maple-prod overlay network can access +# Only containers on mapleopentech-prod overlay network can access protected-mode no # ============================================================================== diff --git a/cloud/maplefile-backend/Taskfile.yml b/cloud/maplefile-backend/Taskfile.yml index 3cdebef..b27ab8c 100644 --- a/cloud/maplefile-backend/Taskfile.yml +++ b/cloud/maplefile-backend/Taskfile.yml @@ -50,7 +50,7 @@ tasks: silent: true cmds: - | - if ! docker network inspect maple-dev >/dev/null 2>&1; then + if ! docker network inspect mapleopentech-dev >/dev/null 2>&1; then echo "❌ Infrastructure not running!" echo "" echo "Start it with:" @@ -58,7 +58,7 @@ tasks: echo "" exit 1 fi - if ! docker ps | grep -q maple-cassandra-1-dev; then + if ! docker ps | grep -q mapleopentech-cassandra-1-dev; then echo "❌ Cassandra not running!" echo "" echo "Start it with:" @@ -89,7 +89,7 @@ tasks: deps: [build] cmds: - echo "⚠️ Dropping keyspace 'maplefile'..." - - docker exec maple-cassandra-1-dev cqlsh -e "DROP KEYSPACE IF EXISTS maplefile;" + - docker exec mapleopentech-cassandra-1-dev cqlsh -e "DROP KEYSPACE IF EXISTS maplefile;" - echo "✅ Keyspace dropped" - echo "🔄 Running migrations to recreate schema..." - ./maplefile-backend migrate up @@ -169,11 +169,11 @@ tasks: cmds: - echo "Building version {{.GIT_COMMIT}} at {{.BUILD_TIME}}" - docker build -f Dockerfile --rm - --build-arg GIT_COMMIT={{.GIT_COMMIT_FULL}} - --build-arg BUILD_TIME={{.BUILD_TIME}} - -t registry.digitalocean.com/ssp/maplefile-backend:prod - -t registry.digitalocean.com/ssp/maplefile-backend:{{.GIT_COMMIT}} - --platform linux/amd64 . + --build-arg GIT_COMMIT={{.GIT_COMMIT_FULL}} + --build-arg BUILD_TIME={{.BUILD_TIME}} + -t registry.digitalocean.com/ssp/maplefile-backend:prod + -t registry.digitalocean.com/ssp/maplefile-backend:{{.GIT_COMMIT}} + --platform linux/amd64 . - docker push registry.digitalocean.com/ssp/maplefile-backend:prod - docker push registry.digitalocean.com/ssp/maplefile-backend:{{.GIT_COMMIT}} - echo "Deployed version {{.GIT_COMMIT}} - use this to verify on production" diff --git a/cloud/maplefile-backend/docker-compose.dev.yml b/cloud/maplefile-backend/docker-compose.dev.yml index bc38281..b01ec87 100644 --- a/cloud/maplefile-backend/docker-compose.dev.yml +++ b/cloud/maplefile-backend/docker-compose.dev.yml @@ -1,6 +1,6 @@ # Use external network from infrastructure networks: - maple-dev: + mapleopentech-dev: external: true services: @@ -110,10 +110,11 @@ services: volumes: - ./:/go/src/codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend networks: - - maple-dev + - mapleopentech-dev restart: unless-stopped healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:${SERVER_PORT:-8000}/health"] + test: + ["CMD", "curl", "-f", "http://localhost:${SERVER_PORT:-8000}/health"] interval: 30s timeout: 5s retries: 3 diff --git a/cloud/maplefile-backend/go.mod b/cloud/maplefile-backend/go.mod index 5cb5012..9ad1946 100644 --- a/cloud/maplefile-backend/go.mod +++ b/cloud/maplefile-backend/go.mod @@ -2,4 +2,70 @@ module codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend go 1.25.4 -require go.uber.org/mock v0.6.0 // indirect +require ( + codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend v0.0.0-20251202195307-f4a49ad4b9d0 + github.com/awnumar/memguard v0.23.0 + github.com/aws/aws-sdk-go-v2 v1.40.1 + github.com/aws/aws-sdk-go-v2/config v1.32.3 + github.com/aws/aws-sdk-go-v2/credentials v1.19.3 + github.com/aws/aws-sdk-go-v2/service/s3 v1.93.0 + github.com/aws/smithy-go v1.24.0 + github.com/bsm/redislock v0.9.4 + github.com/gocql/gocql v1.7.0 + github.com/golang-jwt/jwt/v5 v5.3.0 + github.com/golang-migrate/migrate/v4 v4.19.1 + github.com/google/wire v0.7.0 + github.com/mailgun/mailgun-go/v4 v4.23.0 + github.com/oschwald/geoip2-golang v1.13.0 + github.com/redis/go-redis/v9 v9.17.2 + github.com/robfig/cron/v3 v3.0.1 + github.com/spf13/cobra v1.10.1 + github.com/stretchr/testify v1.10.0 + github.com/tyler-smith/go-bip39 v1.1.0 + go.uber.org/mock v0.6.0 + go.uber.org/zap v1.27.1 + golang.org/x/crypto v0.45.0 + golang.org/x/vuln v1.1.4 +) + +require ( + github.com/awnumar/memcall v0.4.0 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.15 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.15 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.15 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.15 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.6 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.15 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.15 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.0.3 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.30.6 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.11 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.41.3 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/go-chi/chi/v5 v5.2.1 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/subcommands v1.2.0 // indirect + github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/mailgun/errors v0.4.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/oschwald/maxminddb-golang v1.13.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/spf13/pflag v1.0.9 // indirect + go.uber.org/multierr v1.10.0 // indirect + golang.org/x/mod v0.29.0 // indirect + golang.org/x/sync v0.18.0 // indirect + golang.org/x/sys v0.38.0 // indirect + golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8 // indirect + golang.org/x/tools v0.38.0 // indirect + golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/cloud/maplefile-backend/go.sum b/cloud/maplefile-backend/go.sum index 3a696b9..e6e09a3 100644 --- a/cloud/maplefile-backend/go.sum +++ b/cloud/maplefile-backend/go.sum @@ -1,2 +1,217 @@ +codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend v0.0.0-20251202195307-f4a49ad4b9d0 h1:B6BOeHvghv8GdsYE9WjrmY9dXGmBGlOvt5w204dL24Y= +codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend v0.0.0-20251202195307-f4a49ad4b9d0/go.mod h1:2FLpwTrS59a2D/CzoMBfC9SGHFhlMfX+8jXKW+Mpc2I= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/awnumar/memcall v0.4.0 h1:B7hgZYdfH6Ot1Goaz8jGne/7i8xD4taZie/PNSFZ29g= +github.com/awnumar/memcall v0.4.0/go.mod h1:8xOx1YbfyuCg3Fy6TO8DK0kZUua3V42/goA5Ru47E8w= +github.com/awnumar/memguard v0.23.0 h1:sJ3a1/SWlcuKIQ7MV+R9p0Pvo9CWsMbGZvcZQtmc68A= +github.com/awnumar/memguard v0.23.0/go.mod h1:olVofBrsPdITtJ2HgxQKrEYEMyIBAIciVG4wNnZhW9M= +github.com/aws/aws-sdk-go-v2 v1.40.1 h1:difXb4maDZkRH0x//Qkwcfpdg1XQVXEAEs2DdXldFFc= +github.com/aws/aws-sdk-go-v2 v1.40.1/go.mod h1:MayyLB8y+buD9hZqkCW3kX1AKq07Y5pXxtgB+rRFhz0= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4 h1:489krEF9xIGkOaaX3CE/Be2uWjiXrkCH6gUX+bZA/BU= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4/go.mod h1:IOAPF6oT9KCsceNTvvYMNHy0+kMF8akOjeDvPENWxp4= +github.com/aws/aws-sdk-go-v2/config v1.32.3 h1:cpz7H2uMNTDa0h/5CYL5dLUEzPSLo2g0NkbxTRJtSSU= +github.com/aws/aws-sdk-go-v2/config v1.32.3/go.mod h1:srtPKaJJe3McW6T/+GMBZyIPc+SeqJsNPJsd4mOYZ6s= +github.com/aws/aws-sdk-go-v2/credentials v1.19.3 h1:01Ym72hK43hjwDeJUfi1l2oYLXBAOR8gNSZNmXmvuas= +github.com/aws/aws-sdk-go-v2/credentials v1.19.3/go.mod h1:55nWF/Sr9Zvls0bGnWkRxUdhzKqj9uRNlPvgV1vgxKc= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.15 h1:utxLraaifrSBkeyII9mIbVwXXWrZdlPO7FIKmyLCEcY= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.15/go.mod h1:hW6zjYUDQwfz3icf4g2O41PHi77u10oAzJ84iSzR/lo= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.15 h1:Y5YXgygXwDI5P4RkteB5yF7v35neH7LfJKBG+hzIons= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.15/go.mod h1:K+/1EpG42dFSY7CBj+Fruzm8PsCGWTXJ3jdeJ659oGQ= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.15 h1:AvltKnW9ewxX2hFmQS0FyJH93aSvJVUEFvXfU+HWtSE= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.15/go.mod h1:3I4oCdZdmgrREhU74qS1dK9yZ62yumob+58AbFR4cQA= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.15 h1:NLYTEyZmVZo0Qh183sC8nC+ydJXOOeIL/qI/sS3PdLY= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.15/go.mod h1:Z803iB3B0bc8oJV8zH2PERLRfQUJ2n2BXISpsA4+O1M= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 h1:0ryTNEdJbzUCEWkVXEXoqlXV72J5keC1GvILMOuD00E= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4/go.mod h1:HQ4qwNZh32C3CBeO6iJLQlgtMzqeG17ziAA/3KDJFow= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.6 h1:P1MU/SuhadGvg2jtviDXPEejU3jBNhoeeAlRadHzvHI= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.6/go.mod h1:5KYaMG6wmVKMFBSfWoyG/zH8pWwzQFnKgpoSRlXHKdQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.15 h1:3/u/4yZOffg5jdNk1sDpOQ4Y+R6Xbh+GzpDrSZjuy3U= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.15/go.mod h1:4Zkjq0FKjE78NKjabuM4tRXKFzUJWXgP0ItEZK8l7JU= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.15 h1:wsSQ4SVz5YE1crz0Ap7VBZrV4nNqZt4CIBBT8mnwoNc= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.15/go.mod h1:I7sditnFGtYMIqPRU1QoHZAUrXkGp4SczmlLwrNPlD0= +github.com/aws/aws-sdk-go-v2/service/s3 v1.93.0 h1:IrbE3B8O9pm3lsg96AXIN5MXX4pECEuExh/A0Du3AuI= +github.com/aws/aws-sdk-go-v2/service/s3 v1.93.0/go.mod h1:/sJLzHtiiZvs6C1RbxS/anSAFwZD6oC6M/kotQzOiLw= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.3 h1:d/6xOGIllc/XW1lzG9a4AUBMmpLA9PXcQnVPTuHHcik= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.3/go.mod h1:fQ7E7Qj9GiW8y0ClD7cUJk3Bz5Iw8wZkWDHsTe8vDKs= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.6 h1:8sTTiw+9yuNXcfWeqKF2x01GqCF49CpP4Z9nKrrk/ts= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.6/go.mod h1:8WYg+Y40Sn3X2hioaaWAAIngndR8n1XFdRPPX+7QBaM= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.11 h1:E+KqWoVsSrj1tJ6I/fjDIu5xoS2Zacuu1zT+H7KtiIk= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.11/go.mod h1:qyWHz+4lvkXcr3+PoGlGHEI+3DLLiU6/GdrFfMaAhB0= +github.com/aws/aws-sdk-go-v2/service/sts v1.41.3 h1:tzMkjh0yTChUqJDgGkcDdxvZDSrJ/WB6R6ymI5ehqJI= +github.com/aws/aws-sdk-go-v2/service/sts v1.41.3/go.mod h1:T270C0R5sZNLbWUe8ueiAF42XSZxxPocTaGSgs5c/60= +github.com/aws/smithy-go v1.24.0 h1:LpilSUItNPFr1eY85RYgTIg5eIEPtvFbskaFcmmIUnk= +github.com/aws/smithy-go v1.24.0/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0= +github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY= +github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= +github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= +github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= +github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= +github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= +github.com/bsm/redislock v0.9.4 h1:X/Wse1DPpiQgHbVYRE9zv6m070UcKoOGekgvpNhiSvw= +github.com/bsm/redislock v0.9.4/go.mod h1:Epf7AJLiSFwLCiZcfi6pWFO/8eAYrYpQXFxEDPoDeAk= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= +github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= +github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= +github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/dhui/dktest v0.4.6 h1:+DPKyScKSEp3VLtbMDHcUq6V5Lm5zfZZVb0Sk7Ahom4= +github.com/dhui/dktest v0.4.6/go.mod h1:JHTSYDtKkvFNFHJKqCzVzqXecyv+tKt8EzceOmQOgbU= +github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= +github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/docker/docker v28.3.3+incompatible h1:Dypm25kh4rmk49v1eiVbsAtpAsYURjYkaKubwuBdxEI= +github.com/docker/docker v28.3.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= +github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/go-chi/chi/v5 v5.2.1 h1:KOIHODQj58PmL80G2Eak4WdvUzjSJSm0vG72crDCqb8= +github.com/go-chi/chi/v5 v5.2.1/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/gocql/gocql v1.7.0 h1:O+7U7/1gSN7QTEAaMEsJc1Oq2QHXvCWoF3DFK9HDHus= +github.com/gocql/gocql v1.7.0/go.mod h1:vnlvXyFZeLBF0Wy+RS8hrOdbn0UWsWtdg07XJnFxZ+4= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= +github.com/golang-migrate/migrate/v4 v4.19.1 h1:OCyb44lFuQfYXYLx1SCxPZQGU7mcaZ7gH9yH4jSFbBA= +github.com/golang-migrate/migrate/v4 v4.19.1/go.mod h1:CTcgfjxhaUtsLipnLoQRWCrjYXycRz/g5+RWDuYgPrE= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmdtest v0.4.1-0.20220921163831-55ab3332a786 h1:rcv+Ippz6RAtvaGgKxc+8FQIpxHgsF+HBzPyYL2cyVU= +github.com/google/go-cmdtest v0.4.1-0.20220921163831-55ab3332a786/go.mod h1:apVn/GCasLZUVpAJ6oWAuyP7Ne7CEsQbTnc0plM3m+o= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/wire v0.7.0 h1:JxUKI6+CVBgCO2WToKy/nQk0sS+amI9z9EjVmdaocj4= +github.com/google/wire v0.7.0/go.mod h1:n6YbUQD9cPKTnHXEBN2DXlOp/mVADhVErcMFb0v3J18= +github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8= +github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/mailgun/errors v0.4.0 h1:6LFBvod6VIW83CMIOT9sYNp28TCX0NejFPP4dSX++i8= +github.com/mailgun/errors v0.4.0/go.mod h1:xGBaaKdEdQT0/FhwvoXv4oBaqqmVZz9P1XEnvD/onc0= +github.com/mailgun/mailgun-go/v4 v4.23.0 h1:jPEMJzzin2s7lvehcfv/0UkyBu18GvcURPr2+xtZRbk= +github.com/mailgun/mailgun-go/v4 v4.23.0/go.mod h1:imTtizoFtpfZqPqGP8vltVBB6q9yWcv6llBhfFeElZU= +github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= +github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= +github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= +github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= +github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= +github.com/oschwald/geoip2-golang v1.13.0 h1:Q44/Ldc703pasJeP5V9+aFSZFmBN7DKHbNsSFzQATJI= +github.com/oschwald/geoip2-golang v1.13.0/go.mod h1:P9zG+54KPEFOliZ29i7SeYZ/GM6tfEL+rgSn03hYuUo= +github.com/oschwald/maxminddb-golang v1.13.0 h1:R8xBorY71s84yO06NgTmQvqvTvlS/bnYZrrWX1MElnU= +github.com/oschwald/maxminddb-golang v1.13.0/go.mod h1:BU0z8BfFVhi1LQaonTwwGQlsHUEu9pWNdMfmq4ztm0o= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/redis/go-redis/v9 v9.17.2 h1:P2EGsA4qVIM3Pp+aPocCJ7DguDHhqrXNhVcEp4ViluI= +github.com/redis/go-redis/v9 v9.17.2/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370= +github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= +github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s= +github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0= +github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= +github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= +go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= +go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= +go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= +go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= +go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU= +go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= +go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= +go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= +golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= +golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= +golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= +golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= +golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8 h1:LvzTn0GQhWuvKH/kVRS3R3bVAsdQWI7hvfLHGgh9+lU= +golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8/go.mod h1:Pi4ztBfryZoJEkyFTI5/Ocsu2jXyDr6iSdgJiYE/uwE= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= +golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= +golang.org/x/tools/go/expect v0.1.0-deprecated h1:jY2C5HGYR5lqex3gEniOQL0r7Dq5+VGVgY1nudX5lXY= +golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY= +golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM= +golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8= +golang.org/x/vuln v1.1.4 h1:Ju8QsuyhX3Hk8ma3CesTbO8vfJD9EvUBgHvkxHBzj0I= +golang.org/x/vuln v1.1.4/go.mod h1:F+45wmU18ym/ca5PLTPLsSzr2KppzswxPP603ldA67s= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/cloud/maplepress-backend/.env.sample b/cloud/maplepress-backend/.env.sample index 436c97c..9adc131 100644 --- a/cloud/maplepress-backend/.env.sample +++ b/cloud/maplepress-backend/.env.sample @@ -106,7 +106,7 @@ LOGGER_FORMAT=console # For running OUTSIDE Docker: # Change to: MEILISEARCH_HOST=http://localhost:7700 MEILISEARCH_HOST=http://meilisearch:7700 -MEILISEARCH_API_KEY=maple-dev-master-key-change-in-production +MEILISEARCH_API_KEY=mapleopentech-dev-master-key-change-in-production MEILISEARCH_INDEX_PREFIX=site_ # ============================================================================ diff --git a/cloud/maplepress-backend/README.md b/cloud/maplepress-backend/README.md index 55d1d1b..8f18e1c 100644 --- a/cloud/maplepress-backend/README.md +++ b/cloud/maplepress-backend/README.md @@ -319,7 +319,7 @@ JWT tokens expire after 60 minutes. Re-run the [registration step](#testing-the- **Verify:** ```bash -docker exec maple-wordpress-dev curl http://maplepress-backend-dev:8000/health +docker exec mapleopentech-wordpress-dev curl http://maplepress-backend-dev:8000/health ``` ## 🛠️ Technology Stack diff --git a/cloud/maplepress-backend/Taskfile.yml b/cloud/maplepress-backend/Taskfile.yml index db9c7d2..88b65c8 100644 --- a/cloud/maplepress-backend/Taskfile.yml +++ b/cloud/maplepress-backend/Taskfile.yml @@ -50,7 +50,7 @@ tasks: silent: true cmds: - | - if ! docker network inspect maple-dev >/dev/null 2>&1; then + if ! docker network inspect mapleopentech-dev >/dev/null 2>&1; then echo "❌ Infrastructure not running!" echo "" echo "Start it with:" @@ -58,7 +58,7 @@ tasks: echo "" exit 1 fi - if ! docker ps | grep -q maple-cassandra-1-dev; then + if ! docker ps | grep -q mapleopentech-cassandra-1-dev; then echo "❌ Cassandra not running!" echo "" echo "Start it with:" @@ -89,7 +89,7 @@ tasks: deps: [build] cmds: - echo "⚠️ Dropping keyspace 'maplepress'..." - - docker exec maple-cassandra-1-dev cqlsh -e "DROP KEYSPACE IF EXISTS maplepress;" + - docker exec mapleopentech-cassandra-1-dev cqlsh -e "DROP KEYSPACE IF EXISTS maplepress;" - echo "✅ Keyspace dropped" - echo "🔄 Running migrations to recreate schema..." - ./maplepress-backend migrate up diff --git a/cloud/maplepress-backend/docker-compose.dev.yml b/cloud/maplepress-backend/docker-compose.dev.yml index 16816e5..936c80e 100644 --- a/cloud/maplepress-backend/docker-compose.dev.yml +++ b/cloud/maplepress-backend/docker-compose.dev.yml @@ -1,6 +1,6 @@ # Use external network from infrastructure networks: - maple-dev: + mapleopentech-dev: external: true services: @@ -41,7 +41,7 @@ services: # Meilisearch Configuration (if needed) MEILISEARCH_HOST: ${MEILISEARCH_HOST:-http://meilisearch:7700} - MEILISEARCH_API_KEY: ${MEILISEARCH_API_KEY:-maple-dev-master-key-change-in-production} + MEILISEARCH_API_KEY: ${MEILISEARCH_API_KEY:-mapleopentech-dev-master-key-change-in-production} # S3 Configuration (SeaweedFS - S3-compatible storage) AWS_ACCESS_KEY: ${AWS_ACCESS_KEY:-any} @@ -63,10 +63,18 @@ services: volumes: - ./:/go/src/codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend networks: - - maple-dev + - mapleopentech-dev restart: unless-stopped healthcheck: - test: ["CMD", "curl", "-f", "-H", "X-Tenant-ID: healthcheck", "http://localhost:${SERVER_PORT:-8000}/health"] + test: + [ + "CMD", + "curl", + "-f", + "-H", + "X-Tenant-ID: healthcheck", + "http://localhost:${SERVER_PORT:-8000}/health", + ] interval: 30s timeout: 5s retries: 3 diff --git a/cloud/maplepress-backend/docs/Architecture/BACKEND_BLUEPRINT.md b/cloud/maplepress-backend/docs/Architecture/BACKEND_BLUEPRINT.md index 064c994..259d04a 100644 --- a/cloud/maplepress-backend/docs/Architecture/BACKEND_BLUEPRINT.md +++ b/cloud/maplepress-backend/docs/Architecture/BACKEND_BLUEPRINT.md @@ -2596,7 +2596,7 @@ CMD ["/app/app-backend", "daemon"] ```yaml # Use external network from shared infrastructure networks: - maple-dev: + mapleopentech-dev: external: true services: @@ -2640,7 +2640,7 @@ services: volumes: - ./:/go/src/codeberg.org/mapleopentech/monorepo/cloud/your-backend-name networks: - - maple-dev + - mapleopentech-dev restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:${SERVER_PORT:-8000}/health"] diff --git a/cloud/maplepress-backend/docs/GETTING-STARTED.md b/cloud/maplepress-backend/docs/GETTING-STARTED.md index db3aa74..e3c9afd 100644 --- a/cloud/maplepress-backend/docs/GETTING-STARTED.md +++ b/cloud/maplepress-backend/docs/GETTING-STARTED.md @@ -212,7 +212,7 @@ curl -X POST http://localhost:8000/api/v1/login \ **Verify from WordPress container**: ```bash -docker exec maple-wordpress-dev curl http://maplepress-backend-dev:8000/health +docker exec mapleopentech-wordpress-dev curl http://maplepress-backend-dev:8000/health # Should return: {"status":"healthy"} ``` @@ -322,8 +322,8 @@ task build # Build binary (only for manual operations) task migrate:up # Manual migration (only if needed) # View infrastructure logs -docker logs maple-cassandra-1-dev # Cassandra logs -docker logs maple-redis-dev # Redis logs +docker logs mapleopentech-cassandra-1-dev # Cassandra logs +docker logs mapleopentech-redis-dev # Redis logs ``` --- diff --git a/go.work.sum b/go.work.sum index dd9d2d1..36a25ca 100644 --- a/go.work.sum +++ b/go.work.sum @@ -6,6 +6,7 @@ atomicgo.dev/schedule v0.1.0 h1:nTthAbhZS5YZmgYbb2+DH8uQIZcTlIrd4eYr3UQxEjs= atomicgo.dev/schedule v0.1.0/go.mod h1:xeUa3oAkiuHYh8bKiQBRojqAMq3PXXbJujjb0hw8pEU= cel.dev/expr v0.16.0 h1:yloc84fytn4zmJX2GU3TkXGsaieaV7dQ057Qs4sIG2Y= cel.dev/expr v0.16.0/go.mod h1:TRSuuV7DlVCE/uwv5QbAiW/v8l5O8C4eEPHeu7gf7Sg= +cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= @@ -17,6 +18,7 @@ cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM= cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= +cloud.google.com/go v0.121.6 h1:waZiuajrI28iAf40cWgycWNgaXPO06dupuS+sgibK6c= cloud.google.com/go v0.121.6/go.mod h1:coChdst4Ea5vUpiALcYKXEpR1S9ZgXbhEzzMcMR66vI= cloud.google.com/go/accessapproval v1.7.5/go.mod h1:g88i1ok5dvQ9XJsxpUInWWvUBrIZhyPDPbk4T01OoJ0= cloud.google.com/go/accesscontextmanager v1.8.5/go.mod h1:TInEhcZ7V9jptGNqN3EzZ5XMhT6ijWxTGjzyETwmL0Q= @@ -30,7 +32,9 @@ cloud.google.com/go/area120 v0.8.5/go.mod h1:BcoFCbDLZjsfe4EkCnEq1LKvHSK0Ew/zk5U cloud.google.com/go/artifactregistry v1.14.7/go.mod h1:0AUKhzWQzfmeTvT4SjfI4zjot72EMfrkvL9g9aRjnnM= cloud.google.com/go/asset v1.17.2/go.mod h1:SVbzde67ehddSoKf5uebOD1sYw8Ab/jD/9EIeWg99q4= cloud.google.com/go/assuredworkloads v1.11.5/go.mod h1:FKJ3g3ZvkL2D7qtqIGnDufFkHxwIpNM9vtmhvt+6wqk= +cloud.google.com/go/auth v0.16.4 h1:fXOAIQmkApVvcIn7Pc2+5J8QTMVbUGLscnSVNl11su8= cloud.google.com/go/auth v0.16.4/go.mod h1:j10ncYwjX/g3cdX7GpEzsdM+d+ZNsXAbb6qXA7p1Y5M= +cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/automl v1.13.5/go.mod h1:MDw3vLem3yh+SvmSgeYUmUKqyls6NzSumDm9OJ3xJ1Y= cloud.google.com/go/baremetalsolution v1.2.4/go.mod h1:BHCmxgpevw9IEryE99HbYEfxXkAEA3hkMJbYYsHtIuY= @@ -50,6 +54,7 @@ cloud.google.com/go/compute v1.25.1/go.mod h1:oopOIR53ly6viBYxaDhBfJwzUAxf1zE//u cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= +cloud.google.com/go/compute/metadata v0.8.0 h1:HxMRIbao8w17ZX6wBnjhcDkW6lTFpgcaobyVfZWqRLA= cloud.google.com/go/compute/metadata v0.8.0/go.mod h1:sYOGTp851OV9bOFJ9CH7elVvyzopvWQFNNghtDQ/Biw= cloud.google.com/go/contactcenterinsights v1.13.0/go.mod h1:ieq5d5EtHsu8vhe2y3amtZ+BE+AQwX5qAy7cpo0POsI= cloud.google.com/go/container v1.31.0/go.mod h1:7yABn5s3Iv3lmw7oMmyGbeV6tQj86njcTijkkGuvdZA= @@ -84,6 +89,7 @@ cloud.google.com/go/gkemulticloud v1.1.1/go.mod h1:C+a4vcHlWeEIf45IB5FFR5XGjTeYh cloud.google.com/go/gsuiteaddons v1.6.5/go.mod h1:Lo4P2IvO8uZ9W+RaC6s1JVxo42vgy+TX5a6hfBZ0ubs= cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= +cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= cloud.google.com/go/iap v1.9.4/go.mod h1:vO4mSq0xNf/Pu6E5paORLASBwEmphXEjgCFg7aeNu1w= cloud.google.com/go/ids v1.4.5/go.mod h1:p0ZnyzjMWxww6d2DvMGnFwCsSxDJM666Iir1bK1UuBo= @@ -94,6 +100,7 @@ cloud.google.com/go/lifesciences v0.9.5/go.mod h1:OdBm0n7C0Osh5yZB7j9BXyrMnTRGBJ cloud.google.com/go/logging v1.9.0/go.mod h1:1Io0vnZv4onoUnsVUQY3HZ3Igb1nBchky0A0y7BBBhE= cloud.google.com/go/longrunning v0.5.5 h1:GOE6pZFdSrTb4KAiKnXsJBtlE6mEyaW44oKyMILWnOg= cloud.google.com/go/longrunning v0.5.5/go.mod h1:WV2LAxD8/rg5Z1cNW6FJ/ZpX4E4VnDnoTk0yawPBB7s= +cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= cloud.google.com/go/managedidentities v1.6.5/go.mod h1:fkFI2PwwyRQbjLxlm5bQ8SjtObFMW3ChBGNqaMcgZjI= cloud.google.com/go/maps v1.6.4/go.mod h1:rhjqRy8NWmDJ53saCfsXQ0LKwBHfi6OSh5wkq6BaMhI= @@ -101,6 +108,7 @@ cloud.google.com/go/mediatranslation v0.8.5/go.mod h1:y7kTHYIPCIfgyLbKncgqouXJtL cloud.google.com/go/memcache v1.10.5/go.mod h1:/FcblbNd0FdMsx4natdj+2GWzTq+cjZvMa1I+9QsuMA= cloud.google.com/go/metastore v1.13.4/go.mod h1:FMv9bvPInEfX9Ac1cVcRXp8EBBQnBcqH6gz3KvJ9BAE= cloud.google.com/go/monitoring v1.18.0/go.mod h1:c92vVBCeq/OB4Ioyo+NbN2U7tlg5ZH41PZcdvfc+Lcg= +cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7dd7lHM= cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U= cloud.google.com/go/networkconnectivity v1.14.4/go.mod h1:PU12q++/IMnDJAB+3r+tJtuCXCfwfN+C6Niyj6ji1Po= cloud.google.com/go/networkmanagement v1.9.4/go.mod h1:daWJAl0KTFytFL7ar33I6R/oNBH8eEOX/rBNHrC/8TA= @@ -134,12 +142,14 @@ cloud.google.com/go/servicedirectory v1.11.4/go.mod h1:Bz2T9t+/Ehg6x+Y7Ycq5xiShY cloud.google.com/go/shell v1.7.5/go.mod h1:hL2++7F47/IfpfTO53KYf1EC+F56k3ThfNEXd4zcuiE= cloud.google.com/go/spanner v1.56.0 h1:o/Cv7/zZ1WgRXVCd5g3Nc23ZI39p/1pWFqFwvg6Wcu8= cloud.google.com/go/spanner v1.56.0/go.mod h1:DndqtUKQAt3VLuV2Le+9Y3WTnq5cNKrnLb/Piqcj+h0= +cloud.google.com/go/spanner v1.85.0 h1:VVO3yW+0+Yx9tg4SQaZvJHGAnU6qCnGXQ3NX4E3+src= cloud.google.com/go/spanner v1.85.0/go.mod h1:9zhmtOEoYV06nE4Orbin0dc/ugHzZW9yXuvaM61rpxs= cloud.google.com/go/speech v1.21.1/go.mod h1:E5GHZXYQlkqWQwY5xRSLHw2ci5NMQNG52FfMU1aZrIA= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.38.0 h1:Az68ZRGlnNTpIBbLjSMIV2BDcwwXYlRlQzis0llkpJg= cloud.google.com/go/storage v1.38.0/go.mod h1:tlUADB0mAb9BgYls9lq+8MGkfzOXuLrnHXlpHmvFJoY= +cloud.google.com/go/storage v1.56.0 h1:iixmq2Fse2tqxMbWhLWC9HfBj1qdxqAmiK8/eqtsLxI= cloud.google.com/go/storage v1.56.0/go.mod h1:Tpuj6t4NweCLzlNbw9Z9iwxEkrSem20AetIeH/shgVU= cloud.google.com/go/storagetransfer v1.10.4/go.mod h1:vef30rZKu5HSEf/x1tK3WfWrL0XVoUQN/EPDRGPzjZs= cloud.google.com/go/talent v1.6.6/go.mod h1:y/WQDKrhVz12WagoarpAIyKKMeKGKHWPoReZ0g8tseQ= @@ -185,12 +195,17 @@ github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZ github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/AzureAD/microsoft-authentication-library-for-go v0.8.1/go.mod h1:4qFor3D/HDsvBME35Xy9rwW9DecL+M2sNw1ybjPtwA0= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ClickHouse/clickhouse-go v1.4.3 h1:iAFMa2UrQdR5bHJ2/yaSLffZkxpcOYQMCUuKeNXGdqc= github.com/ClickHouse/clickhouse-go v1.4.3/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI= +github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.3 h1:2afWGsMzkIcN8Qm4mgPJKZWyroE5QBszMiDMYEBrnfw= github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.3/go.mod h1:dppbR7CwXD4pgtV9t3wD1812RaLDcBjtblcDF5f1vI0= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0 h1:ErKg/3iS1AKcTkf3yixlZ54f9U1rljCkQyEXWUnIUxc= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0/go.mod h1:yAZHSGnqScoU556rBOVkwLze6WP5N+U11RHuWaGVxwY= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0 h1:owcC2UnmsZycprQ5RfRgjydWhuoxg71LUfyiQdijZuM= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0/go.mod h1:ZPpqegjbE99EPKsu3iUWV22A04wzGPcAY/ziSIQEEgs= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0 h1:Ron4zCA/yk6U7WOBXhTJcDpsUBG9npumK6xw2auFltQ= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0/go.mod h1:cSgYe11MCNYunTnRXrKiR/tHc0eoKjICUuWpNZoVCOo= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= @@ -211,6 +226,7 @@ github.com/apache/arrow/go/v10 v10.0.1 h1:n9dERvixoC/1JjDmBcs9FPaEryoANa2sCgVFo6 github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= github.com/apache/thrift v0.16.0 h1:qEy6UW60iVOlUy+b9ZR0d5WzUWYGOo4HfopoyBaNmoY= github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= github.com/aws/aws-sdk-go v1.49.6 h1:yNldzF5kzLBRvKlKz1S0bkvc2+04R1kt13KfBWQBfFA= github.com/aws/aws-sdk-go v1.49.6/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/aws-sdk-go-v2 v1.16.16/go.mod h1:SwiyXi/1zTUZ6KIAmLK5V5ll8SiURNUYOqTerZPaF9k= @@ -240,9 +256,15 @@ github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd3 github.com/bitfield/script v0.24.0 h1:ic0Tbx+2AgRtkGGIcUyr+Un60vu4WXvqFrCSumf+T7M= github.com/bitfield/script v0.24.0/go.mod h1:fv+6x4OzVsRs6qAlc7wiGq8fq1b5orhtQdtW0dwjUHI= github.com/bkaradzic/go-lz4 v1.0.0/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4= +github.com/blevesearch/blevex v1.0.0 h1:pnilj2Qi3YSEGdWgLj1Pn9Io7ukfXPoQcpAI1Bv8n/o= +github.com/blevesearch/cld2 v0.0.0-20200327141045-8b5f551d37f5 h1:/4ikScMMYMqsRFWJjCyzd3CNWB0lxvqDkqa5nEv6NMc= +github.com/blevesearch/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:kDy+zgJFJJoJYBvdfBSiZYBbdsUL0XcjHYWezpQBGPA= github.com/blevesearch/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:9eJDeqxJ3E7WnLebQUlPD7ZjSce7AnDb9vjGmMCbD0A= +github.com/blevesearch/goleveldb v1.0.1 h1:iAtV2Cu5s0GD1lwUiekkFHe2gTMCCNVj2foPclDLIFI= github.com/blevesearch/goleveldb v1.0.1/go.mod h1:WrU8ltZbIp0wAoig/MHbrPCXSOLpe79nz5lv5nqfYrQ= +github.com/blevesearch/snowball v0.6.1 h1:cDYjn/NCH+wwt2UdehaLpr2e4BwLIjN4V/TdLsL+B5A= github.com/blevesearch/snowball v0.6.1/go.mod h1:ZF0IBg5vgpeoUhnMza2v0A/z8m1cWPlwhke08LpNusg= +github.com/blevesearch/stempel v0.2.0 h1:CYzVPaScODMvgE9o+kf6D4RJ/VRomyi9uHF+PtB+Afc= github.com/blevesearch/stempel v0.2.0/go.mod h1:wjeTHqQv+nQdbPuJ/YcvOjTInA2EIc6Ks1FoSUzSLvc= github.com/bradfitz/gomemcache v0.0.0-20230905024940-24af94b03874/go.mod h1:r5xuitiExdLAJ09PR7vBVENGvp4ZuTBeWTGtxuX3K+c= github.com/cenkalti/backoff/v4 v4.1.2 h1:6Yo7N8UP2K6LWZnW94DLVSSrbobcWdVzAYOisuDPIFo= @@ -266,6 +288,7 @@ github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XP github.com/cncf/xds/go v0.0.0-20240318125728-8a4994d93e50/go.mod h1:5e1+Vvlzido69INQaVO6d87Qn543Xr6nooe9Kz7oBFM= github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20 h1:N+3sFI5GUjRKBi+i0TxYVST9h4Ie192jJWpHvthBBgg= github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 h1:aQ3y1lwWyqYPiWZThqv1aFbZMiM9vblcSArJRf2Irls= github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/cockroach-go/v2 v2.1.1 h1:3XzfSMuUT0wBe1a3o5C0eOTcArhmmFAg2Jzh/7hhKqo= @@ -274,17 +297,26 @@ github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARu github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/containerd/typeurl/v2 v2.2.0/go.mod h1:8XOOxnyatxSWuG8OfsZXVnAF4iZfedjS/8UHSPJnX4g= +github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04= +github.com/coreos/go-etcd v2.0.0+incompatible h1:bXhRBIXoTm9BYHS3gE0TtQuyNZyeEMux2sDi4oo5YOo= +github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazuY= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/couchbase/ghistogram v0.1.0 h1:b95QcQTCzjTUocDXp/uMgSNQi8oj1tGwnJ4bODWZnps= +github.com/couchbase/moss v0.2.0 h1:VCYrMzFwEryyhRSeI+/b3tRBSeTpi/8gn5Kf6dxqn+o= github.com/couchbase/moss v0.2.0/go.mod h1:9MaHIaRuy9pvLPUJxB8sh8OrLfyDczECVL37grCIubs= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/cyphar/filepath-securejoin v0.3.6 h1:4d9N5ykBnSp5Xn2JkhocYDkOpURL/18CYMpo6xB9uWM= github.com/cyphar/filepath-securejoin v0.3.6/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= +github.com/cznic/b v0.0.0-20181122101859-a26611c4d92d h1:SwD98825d6bdB+pEuTxWOXiSjBrHdOl/UVp75eI7JT8= github.com/cznic/mathutil v0.0.0-20180504122225-ca4c9f2c1369 h1:XNT/Zf5l++1Pyg08/HV04ppB0gKxAqtZQBRYiYrUuYk= github.com/cznic/mathutil v0.0.0-20180504122225-ca4c9f2c1369/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= +github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso= +github.com/cznic/strutil v0.0.0-20181122101858-275e90344537 h1:MZRmHqDBd0vxNwenEbKSQqRVT24d3C05ft8kduSwlqM= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= @@ -295,6 +327,7 @@ github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY= github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +github.com/dvsekhvalnov/jose2go v1.7.0 h1:bnQc8+GMnidJZA8zc6lLEAb4xNrIqHwO+9TzqvtQZPo= github.com/dvsekhvalnov/jose2go v1.7.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712 h1:aaQcKT9WumO6JEJcRyTqFVq4XUZiUcKR2/GI31TOcz8= github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= @@ -306,17 +339,23 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0= github.com/envoyproxy/go-control-plane v0.13.0 h1:HzkeUz1Knt+3bK+8LG1bxOO/jzWZmdxpwC51i202les= github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnvMg4d7nvT/wl9WgVXn3Q8= +github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8kXZ5CQAFYVjQcdVIr83A= github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= +github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= +github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= +github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= github.com/flytam/filenamify v1.2.0 h1:7RiSqXYR4cJftDQ5NuvljKMfd/ubKnW/j9C6iekChgI= github.com/flytam/filenamify v1.2.0/go.mod h1:Dzf9kVycwcsBlr2ATg6uxjqiFgKGH+5SKFuhdeP5zu8= github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/form3tech-oss/jwt-go v3.2.5+incompatible h1:/l4kBbb4/vGSsdtB5nUe8L7B9mImVMaBPw9L/0TBHU8= github.com/form3tech-oss/jwt-go v3.2.5+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/fsouza/fake-gcs-server v1.17.0 h1:OeH75kBZcZa3ZE+zz/mFdJ2btt9FgqfjI7gIh9+5fvk= github.com/fsouza/fake-gcs-server v1.17.0/go.mod h1:D1rTE4YCyHFNa99oyJJ5HyclvN/0uQR+pM/VdlL83bw= @@ -324,6 +363,7 @@ github.com/fxamacker/cbor/v2 v2.8.0 h1:fFtUGXUzXPHTIUdne5+zzMPTfffl3RD5qYnkY40vt github.com/fxamacker/cbor/v2 v2.8.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/gabriel-vasile/mimetype v1.4.1 h1:TRWk7se+TOjCYgRth7+1/OYLNiRNIotknkFtf/dnN7Q= github.com/gabriel-vasile/mimetype v1.4.1/go.mod h1:05Vi0w3Y9c/lNvJOdmIwvrrAhX3rYhfQQCaf9VJcv7M= +github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31 h1:gclg6gY70GLy3PbkQ1AERPfmLMMagS60DKF78eWwLn8= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM= @@ -332,6 +372,7 @@ github.com/go-git/go-git/v5 v5.13.2 h1:7O7xvsK7K+rZPKW6AQR1YyNhfywkv7B8/FsP3ki6Z github.com/go-git/go-git/v5 v5.13.2/go.mod h1:hWdW5P4YZRjmpGHwRH2v3zkWcNl6HeXaXQEMGb3NJ9A= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= @@ -376,6 +417,7 @@ github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0 h1:LUVKkCeviFUMKqHa4tXIIij/lbhnMbP7Fn5wKdKkRh4= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -392,6 +434,7 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/go-github/v39 v39.2.0 h1:rNNM311XtPOz5rDdsJXAp2o8F67X9FnROXTvto3aSnQ= github.com/google/go-github/v39 v39.2.0/go.mod h1:C1s8C5aCC9L+JXIYpJM5GYytdX52vC1bLvHEF1IhBrE= @@ -400,6 +443,7 @@ github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= @@ -407,23 +451,28 @@ github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OI github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA= github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc= +github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo= github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc= github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= +github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99 h1:twflg0XRTjwKpxb/jFExr4HGq6on2dEOmnL6FV+fgPw= github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= @@ -441,7 +490,10 @@ github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9 github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/ikawaha/kagome.ipadic v1.1.2 h1:pFxZ1PpMpc6ZoBK712YN5cVK0u/ju2DZ+gRIOriJFFs= github.com/itchyny/gojq v0.12.13 h1:IxyYlHYIlspQHHTE0f3cJF0NKDMfajxViuhBLnHd/QU= github.com/itchyny/gojq v0.12.13/go.mod h1:JzwzAqenfhrPUuwbmEz3nu3JQmFLlQTQMUcOdnu/Sf4= github.com/itchyny/timefmt-go v0.1.5 h1:G0INE2la8S6ru/ZI5JecgyzbbJNs5lG1RcBqa7Jm6GE= @@ -535,11 +587,13 @@ github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jmoiron/sqlx v1.3.1/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ= github.com/josephspurrier/goversioninfo v1.4.0/go.mod h1:JWzv5rKQr+MmW+LvM412ToT/IkYDZjaclF2pKDss8IY= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/k0kubun/pp v2.3.0+incompatible h1:EKhKbi34VQDWJtq+zpsKSEhkHHs9w2P8Izbq8IhLVSo= github.com/k0kubun/pp v2.3.0+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg= @@ -554,9 +608,11 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4= github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/kljensen/snowball v0.6.0 h1:6DZLCcZeL0cLfodx+Md4/OLC6b/bfurWUOUGs1ydfOU= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -567,6 +623,7 @@ github.com/ktrysmt/go-bitbucket v0.6.4/go.mod h1:9u0v3hsd2rqCHRIpbir1oP7F58uo5dq github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leaanthony/clir v1.3.0 h1:L9nPDWrmc/qU9UWZZvRaFajWYuO0np9V5p+5gxyYno0= github.com/leaanthony/clir v1.3.0/go.mod h1:k/RBkdkFl18xkkACMCLt09bhiZnrGORoxmomeMvDpE0= +github.com/leaanthony/debme v1.2.1 h1:9Tgwf+kjcrbMQ4WnPcEIUcQuIZYqdWftzZkBr+i/oOc= github.com/leaanthony/debme v1.2.1/go.mod h1:3V+sCm5tYAgQymvSOfYQ5Xx2JCr+OXiD9Jkw3otUjiA= github.com/leaanthony/winicon v1.0.0 h1:ZNt5U5dY71oEoKZ97UVwJRT4e+5xo5o/ieKuHuk8NqQ= github.com/leaanthony/winicon v1.0.0/go.mod h1:en5xhijl92aphrJdmRPlh4NI1L6wq3gEm0LpXAPghjU= @@ -582,8 +639,10 @@ github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69 github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lucor/goinfo v0.9.0/go.mod h1:L6m6tN5Rlova5Z83h1ZaKsMP1iiaoZ9vGTNzu5QKOD4= github.com/lyft/protoc-gen-star/v2 v2.0.4-0.20230330145011-496ad1ac90a4/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= +github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY= github.com/markbates/pkger v0.15.1 h1:3MPelV53RnGSW07izx5xGxl4e/sdRD6zqseIk0rMASY= github.com/markbates/pkger v0.15.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= +github.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ= github.com/matryer/is v1.4.1/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= @@ -640,9 +699,12 @@ github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.15.0 h1:WjP/FQ/sk43MRmnEcT+MlDw2TFvkrXlprrPST/IudjU= github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= +github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4/v4 v4.1.16 h1:kQPfno+wyx6C5572ABwV+Uo3pDFzQ7yhyGchSyRda0c= github.com/pierrec/lz4/v4 v4.1.16/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= @@ -658,6 +720,7 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/prometheus/client_model v0.6.0/go.mod h1:NTQHnmxFpouOD0DpvP4XujX3CdOAGQPoaGhyTchlyt8= github.com/pterm/pterm v0.12.80 h1:mM55B+GnKUnLMUSqhdINe4s6tOuVQIetQ3my8JGyAIg= github.com/pterm/pterm v0.12.80/go.mod h1:c6DeF9bSnOSeFPZlfs4ZRAFcf5SCoTwvwQ5xaKGQlHo= +github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563 h1:dY6ETXrvDG7Sa4vE8ZQG4yqWg6UnOcbqTAahkV813vQ= github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -668,6 +731,7 @@ github.com/rqlite/gorqlite v0.0.0-20230708021416-2acd02b70b79/go.mod h1:xF/KoXmr github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= +github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI= @@ -685,7 +749,12 @@ github.com/skeema/knownhosts v1.3.0 h1:AM+y0rI04VksttfwjkSTNQorvGqmwATnvnAHpSgc0 github.com/skeema/knownhosts v1.3.0/go.mod h1:sPINvnADmT/qYH1kfv+ePMmOBTH6Tbl7b5LvTDjFK7M= github.com/snowflakedb/gosnowflake v1.6.19 h1:KSHXrQ5o7uso25hNIzi/RObXtnSGkFgie91X82KcvMY= github.com/snowflakedb/gosnowflake v1.6.19/go.mod h1:FM1+PWUdwB9udFDsXdfD58NONC0m+MlOSmQRvimobSM= +github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= +github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= +github.com/spf13/viper v1.3.2 h1:VUFqw5KcqRf7i70GOzW7N+Q7+gxVBkSSqiXB12+JQ4M= +github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= @@ -700,6 +769,8 @@ github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8 github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= github.com/tc-hib/winres v0.3.1 h1:CwRjEGrKdbi5CvZ4ID+iyVhgyfatxFoizjPhzez9Io4= github.com/tc-hib/winres v0.3.1/go.mod h1:C/JaNhH3KBvhNKVbvdlDWkbMDO9H4fKKDaN7/07SSuk= +github.com/tebeka/snowball v0.4.2 h1:ujvgLOr6IHbsvB2Vgz27IcxWqDrNu9/oPhhe74lN/Kc= +github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= github.com/tidwall/gjson v1.14.2 h1:6BBkirS0rAHjumnjHF6qgy5d2YAJ1TLIaFE2lzfOLqo= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= @@ -709,6 +780,7 @@ github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8 h1:3SVOIvH7Ae1KRYyQWRjXWJEA9sS/c/pjvH++55Gr648= github.com/urfave/cli/v2 v2.4.0/go.mod h1:NX9W0zmTvedE5oDoOMs2RTC8RvdK98NTYZE5LbaEYPg= github.com/wzshiming/ctc v1.2.3 h1:q+hW3IQNsjIlOFBTGZZZeIXTElFM4grF4spW/errh/c= github.com/wzshiming/ctc v1.2.3/go.mod h1:2tVAtIY7SUyraSk0JxvwmONNPFL4ARavPuEsg5+KA28= @@ -718,16 +790,21 @@ github.com/xanzy/go-gitlab v0.15.0 h1:rWtwKTgEnXyNUGrOArN7yyc3THRkpYcKXIXia9abyw github.com/xanzy/go-gitlab v0.15.0/go.mod h1:8zdQa/ri1dfn8eS3Ir1SyfvOKlw7WBJ8DVThkpGiXrs= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs= github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= @@ -736,6 +813,7 @@ github.com/yuin/goldmark v1.7.4/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRla github.com/yuin/goldmark-emoji v1.0.3 h1:aLRkLHOuBR2czCY4R8olwMjID+tENfhyFDMCRhbIQY4= github.com/yuin/goldmark-emoji v1.0.3/go.mod h1:tTkZEbwu5wkPmgTcitqddVxY9osFZiavD+r4AzQrh1U= github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= +github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= @@ -743,6 +821,7 @@ github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxt gitlab.com/nyarla/go-crypt v0.0.0-20160106005555-d9a5dc2b789b h1:7gd+rd8P3bqcn/96gOZa3F5dpJr/vEiDQYlNb/y2uNs= gitlab.com/nyarla/go-crypt v0.0.0-20160106005555-d9a5dc2b789b/go.mod h1:T3BPAOm2cqquPa0MKWeNkmOM5RQsRhkrwMWonFMN7fE= go.etcd.io/bbolt v1.3.10/go.mod h1:bK3UQLPJZly7IlNmV7uVHJDxfe5aK9Ll93e/74Y9oEQ= +go.etcd.io/gofail v0.2.0 h1:p19drv16FKK345a09a1iubchlw/vmRuksmRzgBIGjcA= go.etcd.io/gofail v0.2.0/go.mod h1:nL3ILMGfkXTekKI3clMBNazKnjUZjYLKmBHzsVAnC1o= go.mongodb.org/mongo-driver v1.7.5 h1:ny3p0reEpgsR2cfA5cjgwFZg3Cv/ofFh/8jbhGtz9VI= go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= @@ -751,16 +830,20 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/detectors/gcp v1.36.0 h1:F7q2tNlCaHY9nMKHR6XH9/qkp8FktLnIcy6jJNyOCQw= go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 h1:dIIDULZJpgdiHz5tXrTgKIMLkus6jEFa7x5SOKcyR7E= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0/go.mod h1:jlRVBe7+Z1wyxFSUs48L6OBQZ5JwH2Hg/Vbl+t9rAgI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo= go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok= +go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs= go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY= +go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis= go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= @@ -876,6 +959,7 @@ golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= +golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= golang.org/x/oauth2 v0.0.0-20180227000427-d7d64896b5ff/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -886,6 +970,7 @@ golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M= golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -898,6 +983,7 @@ golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180224232135-f6cff0780e54/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -936,6 +1022,7 @@ golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXct golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0= golang.org/x/telemetry v0.0.0-20250710130107-8d8967aff50b/go.mod h1:4ZwOYna0/zsOKwuR5X/m0QFOJpSZvAxFfkQT+Erd9D4= golang.org/x/telemetry v0.0.0-20250807160809-1a19826ec488/go.mod h1:fGb/2+tgXXjhjHsTNdVEEMZNWA0quBnfrO+AfoDSAKw= +golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8 h1:LvzTn0GQhWuvKH/kVRS3R3bVAsdQWI7hvfLHGgh9+lU= golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8/go.mod h1:Pi4ztBfryZoJEkyFTI5/Ocsu2jXyDr6iSdgJiYE/uwE= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= @@ -950,6 +1037,7 @@ golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA= golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q= golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss= +golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -963,6 +1051,7 @@ golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU= golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -970,6 +1059,7 @@ golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= +golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -1009,6 +1099,7 @@ golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= golang.org/x/tools/go/vcs v0.1.0-deprecated/go.mod h1:zUrvATBAvEI9535oC0yWYsLsHIV4Z7g63sNPVMtuBy8= +golang.org/x/tools/godoc v0.1.0-deprecated h1:o+aZ1BOj6Hsx/GBdJO/s815sqftjSnrZZwyYTHODvtk= golang.org/x/tools/godoc v0.1.0-deprecated/go.mod h1:qM63CriJ961IHWmnWa9CjZnBndniPt4a3CK0PVB9bIg= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1024,6 +1115,7 @@ google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsb google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.169.0 h1:QwWPy71FgMWqJN/l6jVlFHUa29a7dcUy02I8o799nPY= google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg= +google.golang.org/api v0.247.0 h1:tSd/e0QrUlLsrwMKmkbQhYVa109qIintOls2Wh6bngc= google.golang.org/api v0.247.0/go.mod h1:r1qZOPmxXffXg6xS5uhx16Fa/UFY8QU/K4bfKrnvovM= google.golang.org/appengine v1.0.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -1049,15 +1141,18 @@ google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 h1:9+tzLLstTlPTRyJTh+ah5wIMsBW5c4tQwGTN3thOW9Y= google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4= google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s= google.golang.org/genproto/googleapis/api v0.0.0-20240513163218-0867130af1f8/go.mod h1:vPrPUTsDCYxXWjP7clS81mZ6/803D8K4iM9Ma27VKas= google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= +google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c h1:AtEkQdl5b6zsybXcbz00j1LwNodDuH6hVifIaNqk7NQ= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= google.golang.org/genproto/googleapis/bytestream v0.0.0-20240304161311-37d4d3c04a78/go.mod h1:vh/N7795ftP0AkN1w8XKqN4w1OdUKXW5Eummda+ofv8= google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8/go.mod h1:I7Y+G38R2bu5j1aLzfFmQfTcU/WnFuqDwLZAbvKTKpM= google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c h1:qXWI/sQtv5UKboZ/zUk7h+mrf/lXORyI+n9DKDAusdg= google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c/go.mod h1:gw1tLEfykwDz2ET4a12jcXt4couGAm7IwsVaTy0Sflo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -1070,6 +1165,7 @@ google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= google.golang.org/grpc v1.67.0 h1:IdH9y6PF5MPSdAntIcpjQ+tXO41pcQsfZV2RxtQgVcw= google.golang.org/grpc v1.67.0/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4= google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= @@ -1085,10 +1181,13 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/native/wordpress/README.md b/native/wordpress/README.md index 77a493f..fef278c 100644 --- a/native/wordpress/README.md +++ b/native/wordpress/README.md @@ -229,7 +229,7 @@ WordPress debug mode is enabled in the development environment: task logs # Or directly: -docker exec -it maple-wordpress-dev tail -f /var/www/html/wp-content/debug.log +docker exec -it mapleopentech-wordpress-dev tail -f /var/www/html/wp-content/debug.log ``` ### Environment Variables diff --git a/native/wordpress/maplepress-plugin/GETTING-STARTED.md b/native/wordpress/maplepress-plugin/GETTING-STARTED.md index 670c994..d8b6250 100644 --- a/native/wordpress/maplepress-plugin/GETTING-STARTED.md +++ b/native/wordpress/maplepress-plugin/GETTING-STARTED.md @@ -435,7 +435,7 @@ task dev:reset ```bash # From container -docker exec maple-wordpress-dev wp plugin list +docker exec mapleopentech-wordpress-dev wp plugin list # Should show: # name status @@ -446,7 +446,7 @@ docker exec maple-wordpress-dev wp plugin list ```bash # Connect to MariaDB -docker exec -it maple-mariadb-dev mysql -u wordpress -pwordpress wordpress +docker exec -it mapleopentech-mariadb-dev mysql -u wordpress -pwordpress wordpress # Check plugin options SELECT * FROM wp_options WHERE option_name = 'maplepress_settings'; @@ -462,8 +462,8 @@ exit docker-compose -f docker-compose.dev.yml down # Delete volumes (WARNING: Deletes all data) -docker volume rm maple-wordpress-dev -docker volume rm maple-mariadb-dev +docker volume rm mapleopentech-wordpress-dev +docker volume rm mapleopentech-mariadb-dev # Start fresh docker-compose -f docker-compose.dev.yml up -d @@ -543,18 +543,18 @@ task dev:start # ✓ Correct 1. **Check plugin directory:** ```bash - docker exec maple-wordpress-dev ls -la /var/www/html/wp-content/plugins/ + docker exec mapleopentech-wordpress-dev ls -la /var/www/html/wp-content/plugins/ ``` Should see `maplepress-plugin/` 2. **Check main plugin file exists:** ```bash - docker exec maple-wordpress-dev ls -la /var/www/html/wp-content/plugins/maplepress-plugin/maplepress-plugin.php + docker exec mapleopentech-wordpress-dev ls -la /var/www/html/wp-content/plugins/maplepress-plugin/maplepress-plugin.php ``` 3. **Check plugin header:** ```bash - docker exec maple-wordpress-dev head -n 15 /var/www/html/wp-content/plugins/maplepress-plugin/maplepress-plugin.php + docker exec mapleopentech-wordpress-dev head -n 15 /var/www/html/wp-content/plugins/maplepress-plugin/maplepress-plugin.php ``` Should show "Plugin Name: MaplePress" @@ -573,7 +573,7 @@ task dev:start # ✓ Correct 2. **Check WordPress config has loader:** ```bash - docker exec maple-wordpress-dev grep -A2 "MaplePress" /var/www/html/wp-config.php + docker exec mapleopentech-wordpress-dev grep -A2 "MaplePress" /var/www/html/wp-config.php ``` Should show loader code @@ -613,7 +613,7 @@ task dev:start # ✓ Correct ```bash # Fix plugin directory permissions -docker exec maple-wordpress-dev chown -R www-data:www-data /var/www/html/wp-content/plugins/maplepress-plugin +docker exec mapleopentech-wordpress-dev chown -R www-data:www-data /var/www/html/wp-content/plugins/maplepress-plugin # Restart WordPress docker-compose -f docker-compose.dev.yml restart wordpress @@ -623,12 +623,12 @@ docker-compose -f docker-compose.dev.yml restart wordpress **Check PHP error log:** ```bash -docker exec maple-wordpress-dev tail -f /var/www/html/wp-content/debug.log +docker exec mapleopentech-wordpress-dev tail -f /var/www/html/wp-content/debug.log ``` **Enable WordPress debug mode:** ```bash -docker exec maple-wordpress-dev bash -c " +docker exec mapleopentech-wordpress-dev bash -c " grep -q 'WP_DEBUG' /var/www/html/wp-config.php || sed -i \"/That's all, stop editing/i define('WP_DEBUG', true);\ndefine('WP_DEBUG_LOG', true);\ndefine('WP_DEBUG_DISPLAY', false);\" /var/www/html/wp-config.php " @@ -642,7 +642,7 @@ sed -i \"/That's all, stop editing/i define('WP_DEBUG', true);\ndefine('WP_DEBUG ```bash # Reset admin password -docker exec maple-wordpress-dev wp user update admin --user_pass=newpassword +docker exec mapleopentech-wordpress-dev wp user update admin --user_pass=newpassword ``` ### Build Includes Local Dev Files @@ -706,7 +706,7 @@ task test # Run tests ```bash # Access container -docker exec -it maple-wordpress-dev /bin/bash +docker exec -it mapleopentech-wordpress-dev /bin/bash # WordPress CLI commands wp plugin list # List plugins diff --git a/native/wordpress/maplepress-plugin/TESTING.md b/native/wordpress/maplepress-plugin/TESTING.md index e399d73..7004cf2 100644 --- a/native/wordpress/maplepress-plugin/TESTING.md +++ b/native/wordpress/maplepress-plugin/TESTING.md @@ -193,7 +193,7 @@ array( - Verify backend is running: `curl http://localhost:8000/health` - Check API URL in settings matches backend URL - Verify API key is correct and not expired -- Check WordPress debug logs: `docker exec -it maple-wordpress-dev tail -f /var/www/html/wp-content/debug.log` +- Check WordPress debug logs: `docker exec -it mapleopentech-wordpress-dev tail -f /var/www/html/wp-content/debug.log` - See backend troubleshooting: `cloud/maplepress-backend/GETTING-STARTED.md` ### Admin notice doesn't disappear diff --git a/native/wordpress/maplepress-plugin/Taskfile.yml b/native/wordpress/maplepress-plugin/Taskfile.yml index 1274ab3..2a69dec 100644 --- a/native/wordpress/maplepress-plugin/Taskfile.yml +++ b/native/wordpress/maplepress-plugin/Taskfile.yml @@ -1,4 +1,4 @@ -version: '3' +version: "3" tasks: dev:setup: @@ -34,7 +34,7 @@ tasks: desc: Add local config loader to WordPress wp-config.php cmds: - | - docker exec maple-wordpress-dev bash -c ' + docker exec mapleopentech-wordpress-dev bash -c ' CONFIG_FILE="/var/www/html/wp-config.php" LOADER_LINE="// MaplePress local development config\nif (file_exists(__DIR__ . '\''/wp-content/plugins/maplepress-plugin/wp-config.local.php'\'')) { require_once __DIR__ . '\''/wp-content/plugins/maplepress-plugin/wp-config.local.php'\''; }" @@ -53,7 +53,7 @@ tasks: cmds: - rm -f wp-config.local.php - | - docker exec maple-wordpress-dev bash -c ' + docker exec mapleopentech-wordpress-dev bash -c ' CONFIG_FILE="/var/www/html/wp-config.php" # Remove MaplePress local config lines sed -i "/MaplePress local development config/d" "$CONFIG_FILE" @@ -65,7 +65,7 @@ tasks: sync: desc: Sync plugin to local WordPress container cmds: - - docker cp . maple-wordpress-dev:/var/www/html/wp-content/plugins/maplepress-plugin/ + - docker cp . mapleopentech-wordpress-dev:/var/www/html/wp-content/plugins/maplepress-plugin/ - echo "Plugin synced to WordPress container" watch: @@ -80,12 +80,12 @@ tasks: logs: desc: View WordPress debug logs cmds: - - docker exec -it maple-wordpress-dev tail -f /var/www/html/wp-content/debug.log + - docker exec -it mapleopentech-wordpress-dev tail -f /var/www/html/wp-content/debug.log shell: desc: Open shell in WordPress container cmds: - - docker exec -it maple-wordpress-dev /bin/bash + - docker exec -it mapleopentech-wordpress-dev /bin/bash lint: desc: Run PHP CodeSniffer (requires phpcs)