Claude Skills Guide

Claude Code for Fly.io Deployment Automation Workflow

Fly.io offers an elegant platform for deploying applications close to your users with automatic scaling and global distribution. When you combine Fly.io’s infrastructure with Claude Code’s automation capabilities, you create a deployment pipeline that handles build verification, health validation, and multi-region management without manual intervention. For an overview of deployment automation, visit the workflows hub. This guide shows you how to build a complete deployment automation workflow using Claude skills like /tdd, /supermemory, /pdf, and /webapp-testing.

Why Fly.io Works Well with Claude Code Automation

Fly.io’s container-based deployment model pairs naturally with Claude Code’s ability to execute shell commands, analyze outputs, and make decisions based on results. The platform’s CLI-first approach means every deployment step can be scripted and automated. Unlike complex Kubernetes setups, Fly.io provides a simpler abstraction that Claude Code can interact with directly, making it ideal for developers who want production-grade deployment without operational overhead.

The key advantage is that Claude Code can monitor deployment status, automatically rollback failed deployments, and maintain deployment history using skills like /supermemory for context retention across sessions.

Prerequisites and Project Setup

Before implementing the automation workflow, ensure you have the Fly.io CLI installed and authenticated:

# Install Fly.io CLI
curl -L https://fly.io/install.sh | sh

# Authenticate with Fly.io
fly auth login

# Create a new Fly.io app in your project directory
fly launch --name your-app-name --org personal --region iad

This creates a fly.toml configuration file in your project. Review and customize it for your application’s requirements:

app = "your-app-name"
primary_region = "iad"

[build]
  builder = "paketobuildpacks/builder:base"

[[services]]
  http_checks = []
  internal_port = 8080
  processes = ["app"]
  protocol = "tcp"

[[services.ports]]
  force_https = true
  handlers = ["http"]
  port = 80

[[services.ports]]
  handlers = ["tls", "http"]
  port = 443

[metrics]
  path = "/metrics"
  port = 9090

Building the Deployment Automation Script

Create a deploy.sh script that handles the complete deployment lifecycle:

#!/bin/bash
set -e

PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$PROJECT_DIR"

echo "Starting deployment workflow..."

# Step 1: Verify build succeeds
echo "Building application..."
npm run build

# Step 2: Run tests using Claude TDD skill
echo "Running test suite..."
npm test

# Step 3: Deploy to Fly.io
echo "Deploying to Fly.io..."
fly deploy --config fly.toml

# Step 4: Wait for health checks
echo "Waiting for application to become healthy..."
sleep 10

# Step 5: Verify deployment
HEALTH_STATUS=$(fly health checks -a your-app-name)
if echo "$HEALTH_STATUS" | grep -q "passed"; then
    echo "Deployment successful!"
    fly status -a your-app-name
else
    echo "Health checks failed. Rolling back..."
    fly deploy --rollback -a your-app-name
    exit 1
fi

Using Claude Skills for Enhanced Deployment Validation

The /tdd skill becomes invaluable when integrated into your deployment pipeline. It ensures code quality before any deployment proceeds — a workflow covered in detail in the automated testing pipeline guide:

Invoke the /tdd skill in your Claude Code session, then describe the changed files.
Claude will generate or run tests focused on the modified code.

For frontend applications deployed to Fly.io, the /frontend-design skill can validate that your UI components render correctly in the deployed environment:

Use the frontend-design skill to verify the deployed application matches your design system. Run visual regression tests against the production URL.

The /webapp-testing skill complements this by performing end-to-end tests that simulate real user interactions:

/webapp-testing
Run smoke tests against https://your-app-name.fly.dev to verify the deployed application.

Automating Multi-Region Deployments

Fly.io’s strength lies in its ability to distribute applications across multiple regions. Claude Code can orchestrate this complexity:

#!/bin/bash
# deploy-multiregion.sh

REGIONS=("iad" "scl" "ams" "sin")

for region in "${REGIONS[@]}"; do
    echo "Deploying to $region..."
    fly deploy --region "$region" --config fly.toml --ha=false
    
    # Wait for region to become available
    sleep 5
    
    # Verify region health
    fly status -a your-app-name | grep "$region" || {
        echo "Deployment to $region failed"
        exit 1
    }
done

echo "Multi-region deployment complete"
fly regions list -a your-app-name

Maintaining Deployment History with /supermemory

The /supermemory skill allows Claude Code to maintain context across deployment sessions. Create a skill that logs deployment history:

# skill: deployment-memory
Every deployment should be logged with:
- timestamp (ISO 8601)
- commit hash
- deployer (username)
- region
- status (success/failure)
- rollback count

Store this in DEPLOYMENT_LOG.md in your project root.

Reference this skill in your deployment script:

/supermemory
Remember: deployed commit $(git rev-parse --short HEAD) to production at $(date -u +%Y-%m-%dT%H:%M:%SZ), status: success.

Generating Deployment Reports with /pdf

After each deployment, use the /pdf skill to generate a deployment report:

/pdf
Generate a deployment report PDF for app=your-app-name, region=iad, status=success.
Include deployment time, commit hash, health check results, and rollback status.

This creates documentation useful for audit trails and team communication.

Error Handling and Rollback Strategies

Reliable deployment automation requires comprehensive error handling:

#!/bin/bash
# deploy-with-rollback.sh

APP_NAME="your-app-name"
MAX_RETRIES=3
RETRY_COUNT=0

deploy_with_retry() {
    RETRY_COUNT=$((RETRY_COUNT + 1))
    
    echo "Deployment attempt $RETRY_COUNT of $MAX_RETRIES"
    
    if fly deploy --config fly.toml; then
        echo "Deployment successful"
        return 0
    else
        echo "Deployment failed"
        
        if [ $RETRY_COUNT -lt $MAX_RETRIES ]; then
            echo "Retrying in 30 seconds..."
            sleep 30
            deploy_with_retry
        else
            echo "All retry attempts exhausted"
            fly deploy --rollback -a "$APP_NAME"
            return 1
        fi
    fi
}

deploy_with_retry

Continuous Deployment with GitHub Actions

Integrate your Fly.io deployment with GitHub Actions for automated CI/CD — see the Claude Code GitHub Actions workflow guide for advanced pipeline patterns:

name: Deploy to Fly.io

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Install Fly CLI
        uses: superfly/flyctl-actions/setup-flyctl@main
      
      - name: Deploy to Fly.io
        run: |
          fly auth login --token ${{ secrets.FLY_API_TOKEN }}
          ./deploy.sh
        env:
          FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}

Conclusion

Combining Claude Code with Fly.io creates a powerful deployment automation system that reduces manual effort while maintaining reliability. The workflow handles build verification, multi-region deployments, health checks, and automatic rollbacks without requiring constant developer attention. By integrating skills like /tdd for code quality, /webapp-testing for validation, and /supermemory for context retention, you build a deployment pipeline that improves over time with each execution.

The scripts and strategies in this guide provide a foundation you can customize for your specific application requirements. Start with the basic deployment script, then add complexity as your needs evolve.

Built by theluckystrike — More at zovo.one