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:
91
Makefile
91
Makefile
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user