Build, Deploy, and Infrastructure Commands
Build applications, deploy to environments, manage infrastructure, and use Forge Cloud
Build, Deploy, and Infrastructure Commands
Forge provides a full suite of commands for building applications, deploying them to various platforms, generating infrastructure configuration, and managing Forge Cloud. These commands introspect your project automatically — discovering apps, detecting ports, and generating production-ready Dockerfiles, Compose files, and Kubernetes manifests.
Build Commands
forge build
Build applications for production or development.
forge build # Build all apps
forge build -a api-gateway # Build specific app
forge build --platform=linux/amd64 # Cross-platform build
forge build --production # Production build
forge build -o ./dist # Custom outputFlags:
-a, --app— App to build (empty = all)-p, --platform— Target platform (os/arch)--production— Production build with optimizations-o, --output— Output directory (default:./bin)
Build Configuration in .forge.yaml:
build:
output_dir: ./bin
auto_discover: true # Scan cmd/ for buildable apps
ldflags: "-s -w" # Strip debug info for smaller binaries
tags:
- production
platforms:
- os: linux
arch: amd64
- os: linux
arch: arm64
- os: darwin
arch: arm64
apps: # Optional: explicit app list
- name: api-gateway
cmd: ./cmd/api-gateway
output: api-gateway
dockerfile: docker/Dockerfile.apiDeploy Commands
forge deploy
Deploy an application — builds a Docker image, pushes to a registry, and deploys to Kubernetes.
forge deploy -a api-gateway -e staging -t v1.2.3
forge deploy -a auth-service -e production --tag=latestFlags:
-a, --app— App to deploy (required)-e, --env— Target environment (default:dev)-t, --tag— Docker image tag (default:latest)
Workflow:
- Build Docker image →
<registry>/<app>:<tag> - Push to configured registry
- Deploy to Kubernetes using environment config
forge deploy docker
Build and push a Docker image without deploying.
forge deploy docker -a api-gateway -t v1.0.0
forge deploy docker -a auth-service --tag=latestFlags:
-a, --app— App to build (required)-t, --tag— Image tag (default:latest)
The image is tagged using the registry from your .forge.yaml:
deploy:
registry: ghcr.io/myorg # Docker registry prefixExample Output:
Building Docker image for api-gateway...
Image: ghcr.io/myorg/api-gateway:v1.0.0
✓ Image built
Pushing Docker image...
Pushing: ghcr.io/myorg/api-gateway:v1.0.0
✓ Image pushed
✓ Docker image built and pushed!forge deploy k8s (aliases: kubernetes)
Deploy to Kubernetes using manifests from deployments/kubernetes/overlays/<env>.
forge deploy k8s -e staging
forge deploy k8s -e production --namespace=prod
forge deploy kubernetes -e devFlags:
-e, --env— Environment (default:dev)-n, --namespace— Kubernetes namespace (falls back to environment config, thendefault)
forge deploy status
Show deployment status for all apps.
forge deploy status
forge deploy status --env=productionFlags:
-e, --env— Environment (default:dev)
Example Output:
Deployment status for staging environment:
App Status Replicas Version Updated
api-gateway ✓ Running 3/3 v1.2.3 2 hours ago
auth-service ✓ Running 2/2 v1.1.0 1 day ago
worker-service ⚠ Degraded 1/2 v0.9.0 3 days agoDeploy Configuration
Configure deployment environments and platform-specific settings in .forge.yaml:
deploy:
registry: ghcr.io/myorg
environments:
- name: dev
namespace: dev
variables:
LOG_LEVEL: debug
- name: staging
namespace: staging
cluster: staging-cluster
variables:
LOG_LEVEL: info
- name: production
namespace: prod
cluster: prod-cluster
region: us-east-1
variables:
LOG_LEVEL: warn
# Platform-specific configs (used by forge infra)
docker:
build_context: .
dockerfile: Dockerfile
compose_file: docker-compose.yml
network: forge-network
volumes:
pg-data: /var/lib/postgresql/data
kubernetes:
manifests: ./deployments/k8s
namespace: default
context: my-cluster
registry: ghcr.io/myorg
digitalocean:
region: nyc1
git_repo: myorg/myrepo
git_branch: main
deploy_on_push: true
render:
region: oregon
git_repo: myorg/myrepo
git_branch: mainInfrastructure Commands
The forge infra command generates and deploys infrastructure configuration for Docker, Kubernetes, DigitalOcean, and Render. It auto-introspects your project — discovering apps, detecting ports, and resolving database/cache dependencies.
Command Overview
forge infra <provider> <command> [flags]| Provider | Alias | Description |
|---|---|---|
docker | — | Docker Compose infrastructure |
k8s | kubernetes | Kubernetes with Kustomize |
do | digitalocean | DigitalOcean App Platform |
render | — | Render.com |
Each provider supports two subcommands:
export— Generate config files to thedeployments/<provider>/directory.deploy— Build and deploy (uses exported config if available, otherwise generates on-the-fly).
forge infra docker export
Export Docker Compose configuration, Dockerfiles, and environment files.
forge infra docker export # Export to deployments/docker/
forge infra docker export -o ./my-docker # Custom output directory
forge infra docker export --force # Overwrite existing filesFlags:
-o, --output— Output directory (default:deployments/docker/)-f, --force— Overwrite existing files
Generated Files:
deployments/docker/
├── docker-compose.yml # Base Compose config
├── docker-compose.dev.yml # Dev environment overrides
├── docker-compose.prod.yml # Prod environment overrides (3 replicas)
├── .env.example # Environment variable template
├── Dockerfile.api-gateway # Multi-stage Dockerfile per app
├── Dockerfile.auth-service
└── Dockerfile.workerGenerated docker-compose.yml example:
version: '3.8'
services:
api-gateway:
build:
context: .
dockerfile: Dockerfile.api-gateway
ports:
- "${API_GATEWAY_PORT:-8080}:8080"
environment:
- ENV=base
- LOG_LEVEL=${LOG_LEVEL:-info}
networks:
- forge-network
restart: unless-stopped
auth-service:
build:
context: .
dockerfile: Dockerfile.auth-service
ports:
- "${AUTH_SERVICE_PORT:-8080}:8080"
environment:
- ENV=base
- LOG_LEVEL=${LOG_LEVEL:-info}
networks:
- forge-network
restart: unless-stopped
networks:
forge-network:
driver: bridgeGenerated Dockerfile.<app> example (multi-stage):
# Build stage
FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main ./cmd/api-gateway
# Runtime stage
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/main .
EXPOSE 8080
CMD ["./main"]Generated .env.example:
# Docker Compose Environment Variables
ENV=dev
LOG_LEVEL=info
# Service Ports
API_GATEWAY_PORT=8080
AUTH_SERVICE_PORT=8080
# Database (if needed)
DATABASE_URL=postgres://user:password@postgres:5432/dbname
# Redis (if needed)
REDIS_URL=redis://redis:6379forge infra docker deploy
Build and deploy services using Docker Compose.
forge infra docker deploy # Deploy all services
forge infra docker deploy -s api-gateway # Deploy specific service
forge infra docker deploy --env=prod # Use prod overrides
forge infra docker deploy --build # Force rebuild imagesFlags:
-s, --service— Service to deploy (default: all)-e, --env— Environment (default:dev)-b, --build— Force rebuild images
Behavior:
- If
deployments/docker/exists (from a previousexport), those files are used directly. - Otherwise, configuration is generated on-the-fly in a temporary directory.
- Dockerfiles are copied to the project root temporarily for correct build context, then cleaned up.
forge infra k8s export (aliases: kubernetes)
Export Kubernetes manifests using Kustomize overlays.
forge infra k8s export # Export to deployments/k8s/
forge infra k8s export -o ./k8s-manifests # Custom output
forge infra k8s export --forceFlags:
-o, --output— Output directory (default:deployments/k8s/)-f, --force— Overwrite existing files
Generated Structure:
deployments/k8s/
├── base/
│ ├── deployment.yaml # Deployment per app (replicas, probes, resources)
│ ├── service.yaml # ClusterIP Service per app
│ └── kustomization.yaml
└── overlays/
├── dev/
│ └── kustomization.yaml # 1 replica, dev- prefix
└── prod/
└── kustomization.yaml # 3 replicas, prod- prefixforge infra k8s deploy
Deploy to Kubernetes using kubectl apply.
forge infra k8s deploy # Deploy all
forge infra k8s deploy -s api-gateway # Deploy specific service
forge infra k8s deploy --env=prod --namespace=production
forge infra k8s deploy --dry-run # Preview without applyingFlags:
-s, --service— Service to deploy (default: all)-e, --env— Environment (default:dev)-n, --namespace— Kubernetes namespace (default:default)--dry-run— Preview changes without applying
Kustomize is used if available; otherwise falls back to raw kubectl apply -f.
forge infra do export (aliases: digitalocean)
Export DigitalOcean App Platform spec.
forge infra do export
forge infra do export -o ./do-config --forceGenerated Files:
deployments/do/
├── app.yaml # DO App Platform spec
├── .env.example
└── README.mdforge infra do deploy
Deploy to DigitalOcean App Platform.
forge infra do deploy
forge infra do deploy -s api-gateway --region=nyc1Flags:
-s, --service— Service to deploy (default: all)-e, --env— Environment (default:dev)-r, --region— DigitalOcean region
forge infra render export
Export Render.com blueprint.
forge infra render export
forge infra render export -o ./render-config --forceGenerated Files:
deployments/render/
├── render.yaml # Render Blueprint spec
├── .env.example
└── README.mdforge infra render deploy
Deploy to Render.com.
forge infra render deploy
forge infra render deploy -s api-gatewayFlags:
-s, --service— Service to deploy (default: all)-e, --env— Environment (default:dev)
Forge Cloud
Forge Cloud is the managed deployment platform for Forge applications. The forge cloud command provides a complete workflow for deploying, monitoring, scaling, and managing your services.
Forge Cloud is currently in preview. Some commands return stub data while the backend is being finalized.
forge cloud login
Authenticate with Forge Cloud.
forge cloud login # Open browser for OAuth login
forge cloud login --token=<TOKEN> # Authenticate with API tokenFlags:
-t, --token— API token (skip browser OAuth flow)
forge cloud logout
Log out from Forge Cloud and clear stored credentials.
forge cloud logoutforge cloud deploy
Deploy services to Forge Cloud.
forge cloud deploy # Deploy all services
forge cloud deploy -s api-gateway # Deploy specific service
forge cloud deploy -s api-gateway -e prod # Deploy to production
forge cloud deploy -s api-gateway -r us-east-1 # Specify region
forge cloud deploy --watch # Watch deployment progressFlags:
-s, --service— Service to deploy (default: all, interactive selector shown)-e, --env— Environment (default:dev)-r, --region— Deployment region-w, --watch— Watch deployment progress in real time
Workflow:
- Verifies authentication (prompts
forge cloud loginif needed) - Discovers apps in the project
- Builds images, pushes to registry, and initiates deployment
- With
--watch, streams deployment progress until healthy
forge cloud status
Show deployment status across services and environments.
forge cloud status # Dev environment status
forge cloud status --env=prod # Production status
forge cloud status -s api-gateway # Filter by service
forge cloud status --watch # Live status updatesFlags:
-e, --env— Environment (default:dev)-s, --service— Filter by service name-w, --watch— Watch for status updates
Example Output:
☁️ Forge Cloud Status (prod environment)
Service Status Instances Version Updated
api-service ✓ Running 3/3 v1.2.3 2 hours ago
auth-service ✓ Running 2/2 v1.1.0 1 day ago
worker-service ⚠ Degraded 1/2 v0.9.0 3 days agoforge cloud logs
View service logs from Forge Cloud.
forge cloud logs -s api-service # Last 100 lines
forge cloud logs -s api-service -f # Follow (stream) logs
forge cloud logs -s api-service -n 500 # Last 500 lines
forge cloud logs -s api-service -e prod # Production logsFlags:
-s, --service— Service name (required)-e, --env— Environment (default:dev)-f, --follow— Follow log output (live stream)-n, --tail— Number of lines to show (default:100)
forge cloud rollback
Rollback a service to a previous deployment version.
forge cloud rollback -s api-service # Rollback to previous version
forge cloud rollback -s api-service -v v1.1.0 # Rollback to specific version
forge cloud rollback -s api-service -e prod # Rollback in productionFlags:
-s, --service— Service to rollback (required)-e, --env— Environment (default:dev)-v, --version— Target version (default: previous)
forge cloud scale
Scale service instances up or down.
forge cloud scale -s api-service -r 5 # Scale to 5 replicas
forge cloud scale -s api-service -r 1 -e prod # Scale prod to 1Flags:
-s, --service— Service to scale (required)-e, --env— Environment (default:dev)-r, --replicas— Number of replicas (default:1, minimum:1)
Docker Integration
Generated Dockerfiles
When exporting with forge infra docker export, Forge generates multi-stage Dockerfiles for each discovered app. The build stage compiles the Go binary with static linking, and the runtime stage uses a minimal Alpine image.
Docker Compose Workflow
A typical Docker-based development and deployment workflow:
# 1. Export Docker configuration
forge infra docker export
# 2. Review and customize generated files
vim deployments/docker/docker-compose.yml
# 3. Copy .env.example and fill in values
cp deployments/docker/.env.example deployments/docker/.env
# 4. Build and deploy locally
forge infra docker deploy --build
# 5. Or use docker compose directly
docker compose -f deployments/docker/docker-compose.yml up -d
# 6. View logs
docker compose -f deployments/docker/docker-compose.yml logs -f
# 7. Tear down
docker compose -f deployments/docker/docker-compose.yml downCI/CD Integration
GitHub Actions
name: Build and Deploy
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.25'
- name: Build
run: forge build --production
- name: Build and Push Docker
run: forge deploy docker -a api-gateway -t ${{ github.sha }}
- name: Deploy to Staging
run: forge deploy k8s -e stagingGitLab CI
stages:
- build
- deploy
build:
stage: build
script:
- forge build --production
- forge deploy docker -a api-gateway -t $CI_COMMIT_SHA
deploy_staging:
stage: deploy
script:
- forge deploy k8s -e staging
only:
- develop
deploy_production:
stage: deploy
script:
- forge deploy k8s -e production
only:
- mainTroubleshooting
Build Failures
# Check for syntax errors
forge build -a api-gateway
# Check dependencies
go mod tidy
# Build with verbose output
forge build -a api-gateway --verboseDocker Build Issues
# Test Docker build manually
docker build -t api-gateway .
# Check Docker daemon
docker info
# Check if Docker is available (forge does this automatically)
which docker && docker infoKubernetes Deployment Issues
# Check cluster connection
kubectl cluster-info
# Check namespace
kubectl get namespaces
# Check deployment status
kubectl get deployments -n staging
# View pod logs
kubectl logs -f deployment/api-gateway -n stagingInfrastructure Export Issues
# Export already exists (use --force to overwrite)
forge infra docker export --force
# No apps found
forge dev list # Check if apps are discoverableFor development server commands, see the Development Commands documentation.
How is this guide?