feat: enhance Docker buildx commands with unified config integration

- Add comprehensive Docker buildx commands for multi-platform builds
- Integrate buildx commands with unified config for automatic:
  - Image tagging from container.imageUrl
  - Build arguments from app configuration
  - Environment-aware builds (dev/staging/prod)
- Add configuration health check and debug commands
- Remove irrelevant migration-related commands
- Provides consistent, configuration-driven container builds
This commit is contained in:
William Valentin
2025-09-08 20:42:29 -07:00
parent 341aaf1ae0
commit 9132d78bfa

View File

@@ -126,6 +126,79 @@ docker-build-push: ## Build and push multi-platform Docker images
@printf "$(BLUE)Building and pushing multi-platform Docker images...$(RESET)\n" @printf "$(BLUE)Building and pushing multi-platform Docker images...$(RESET)\n"
@./scripts/buildx-helper.sh build-push @./scripts/buildx-helper.sh build-push
docker-buildx-create: ## Create and use a new buildx builder instance
@printf "$(BLUE)Creating new buildx builder instance...$(RESET)\n"
@docker buildx create --name meds-builder --use --bootstrap
@printf "$(GREEN)Buildx builder 'meds-builder' created and activated$(RESET)\n"
docker-buildx-build: ## Build multi-platform image using buildx
@printf "$(BLUE)Building multi-platform image with buildx...$(RESET)\n"
@docker buildx build --platform linux/amd64,linux/arm64 \
--build-arg JWT_SECRET=$$(openssl rand -base64 32) \
--build-arg SESSION_SECRET=$$(openssl rand -base64 32) \
--build-arg NODE_ENV=production \
--build-arg APP_NAME=$$(bun -e "import {unifiedConfig} from './config/unified.config.ts'; console.log(unifiedConfig.app.name)") \
--build-arg APP_BASE_URL=$$(bun -e "import {unifiedConfig} from './config/unified.config.ts'; console.log(unifiedConfig.app.baseUrl)") \
-t $$(bun -e "import {unifiedConfig} from './config/unified.config.ts'; console.log(unifiedConfig.container.imageUrl)") .
docker-buildx-build-push: ## Build and push multi-platform image using buildx
@printf "$(BLUE)Building and pushing multi-platform image with buildx...$(RESET)\n"
@docker buildx build --platform linux/amd64,linux/arm64 \
--build-arg JWT_SECRET=$$(openssl rand -base64 32) \
--build-arg SESSION_SECRET=$$(openssl rand -base64 32) \
--build-arg NODE_ENV=production \
--build-arg APP_NAME=$$(bun -e "import {unifiedConfig} from './config/unified.config.ts'; console.log(unifiedConfig.app.name)") \
--build-arg APP_BASE_URL=$$(bun -e "import {unifiedConfig} from './config/unified.config.ts'; console.log(unifiedConfig.app.baseUrl)") \
-t $$(bun -e "import {unifiedConfig} from './config/unified.config.ts'; console.log(unifiedConfig.container.imageUrl)") --push .
docker-buildx-build-load: ## Build multi-platform image and load to local Docker
@printf "$(BLUE)Building multi-platform image and loading to local Docker...$(RESET)\n"
@docker buildx build --platform linux/amd64 \
--build-arg JWT_SECRET=$$(openssl rand -base64 32) \
--build-arg SESSION_SECRET=$$(openssl rand -base64 32) \
--build-arg NODE_ENV=production \
--build-arg APP_NAME=$$(bun -e "import {unifiedConfig} from './config/unified.config.ts'; console.log(unifiedConfig.app.name)") \
--build-arg APP_BASE_URL=$$(bun -e "import {unifiedConfig} from './config/unified.config.ts'; console.log(unifiedConfig.app.baseUrl)") \
-t $$(bun -e "import {unifiedConfig} from './config/unified.config.ts'; console.log(unifiedConfig.container.imageUrl)") --load .
docker-buildx-inspect: ## Inspect current buildx builder
@printf "$(BLUE)Inspecting current buildx builder...$(RESET)\n"
@docker buildx inspect
docker-buildx-ls: ## List all buildx builder instances
@printf "$(BLUE)Listing all buildx builder instances...$(RESET)\n"
@docker buildx ls
docker-buildx-build-dev: ## Build development image using buildx
@printf "$(BLUE)Building development image with buildx...$(RESET)\n"
@docker buildx build --platform linux/amd64 \
--build-arg JWT_SECRET=dev-jwt-secret-key-not-for-production \
--build-arg SESSION_SECRET=dev-session-secret-key-not-for-production \
--build-arg NODE_ENV=development \
--build-arg DEBUG_MODE=true \
--build-arg APP_NAME=$$(NODE_ENV=development bun -e "import {createUnifiedConfigForEnvironment} from './config/unified.config.ts'; console.log(createUnifiedConfigForEnvironment('development').app.name)") \
--build-arg APP_BASE_URL=$$(NODE_ENV=development bun -e "import {createUnifiedConfigForEnvironment} from './config/unified.config.ts'; console.log(createUnifiedConfigForEnvironment('development').app.baseUrl)") \
-t $$(NODE_ENV=development bun -e "import {createUnifiedConfigForEnvironment} from './config/unified.config.ts'; const config = createUnifiedConfigForEnvironment('development'); console.log(config.container.registry + '/' + config.container.repository + ':dev')") --load .
docker-buildx-build-with-registry: ## Build and push to specific registry (requires REGISTRY variable)
@printf "$(BLUE)Building and pushing to custom registry...$(RESET)\n"
@if [ -z "$(REGISTRY)" ]; then \
printf "$(RED)Error: REGISTRY variable not set. Use: make docker-buildx-build-with-registry REGISTRY=your-registry.com$(RESET)\n"; \
exit 1; \
fi
@docker buildx build --platform linux/amd64,linux/arm64 \
--build-arg JWT_SECRET=$$(openssl rand -base64 32) \
--build-arg SESSION_SECRET=$$(openssl rand -base64 32) \
--build-arg NODE_ENV=production \
--build-arg APP_NAME=$$(bun -e "import {unifiedConfig} from './config/unified.config.ts'; console.log(unifiedConfig.app.name)") \
--build-arg APP_BASE_URL=$$(bun -e "import {unifiedConfig} from './config/unified.config.ts'; console.log(unifiedConfig.app.baseUrl)") \
-t $(REGISTRY)/$$(bun -e "import {unifiedConfig} from './config/unified.config.ts'; console.log(unifiedConfig.container.repository)"):$$(bun -e "import {unifiedConfig} from './config/unified.config.ts'; console.log(unifiedConfig.container.tag)") --push .
docker-buildx-rm: ## Remove the meds-builder buildx instance
@printf "$(BLUE)Removing meds-builder buildx instance...$(RESET)\n"
@docker buildx rm meds-builder || true
@printf "$(GREEN)Buildx builder 'meds-builder' removed$(RESET)\n"
docker-push: ## Push existing Docker images to registry docker-push: ## Push existing Docker images to registry
@printf "$(BLUE)Pushing Docker images to registry...$(RESET)\n" @printf "$(BLUE)Pushing Docker images to registry...$(RESET)\n"
@./scripts/buildx-helper.sh push @./scripts/buildx-helper.sh push
@@ -234,7 +307,23 @@ validate-config: ## Validate unified configuration
config-debug: ## Show current unified configuration (debug mode) config-debug: ## Show current unified configuration (debug mode)
@printf "$(BLUE)Current unified configuration:$(RESET)\n" @printf "$(BLUE)Current unified configuration:$(RESET)\n"
@bun -e "import { logConfig } from './config/unified.config.ts'; logConfig();" @DEBUG_MODE=true bun -e "import { logConfig } from './config/unified.config.ts'; logConfig();"
config-check: ## Check configuration system health and show sources
@printf "$(BLUE)Configuration System Health Check:$(RESET)\n"
@printf "\n$(YELLOW)1. Environment Variables (.env file):$(RESET)\n"
@grep -v '^#' .env 2>/dev/null | head -10 || printf "$(YELLOW) No .env file found$(RESET)\n"
@printf "\n$(YELLOW)2. Unified Config Status:$(RESET)\n"
@bun -e "import { unifiedConfig, exportAsEnvVars } from './config/unified.config.ts'; console.log('✅ Unified config loaded successfully'); console.log('Environment:', unifiedConfig.app.environment); console.log('App Name:', unifiedConfig.app.name); console.log('Base URL:', unifiedConfig.app.baseUrl); console.log('Container Image:', unifiedConfig.container.imageUrl);"
@printf "\n$(YELLOW)3. Generated Config Files:$(RESET)\n"
@ls -la config/generated/ 2>/dev/null | grep -v '^total' || printf "$(YELLOW) No generated configs found$(RESET)\n"
@printf "\n$(GREEN)Configuration system is working!$(RESET)\n"
config-export: ## Export current config as environment variables
@printf "$(BLUE)Exporting unified configuration as environment variables:$(RESET)\n"
@bun -e "import { exportAsEnvVars } from './config/unified.config.ts'; const vars = exportAsEnvVars(); Object.entries(vars).forEach(([key, value]) => console.log(\`\${key}=\${value}\`));"
##@ Workflows ##@ Workflows