This document covers the CI/CD infrastructure for building and deploying worker-flash Docker images.
The worker-flash repository maintains four Docker images:
- GPU Image (
runpod/flash) - Queue-based serverless worker with CUDA - CPU Image (
runpod/flash-cpu) - Queue-based serverless worker for CPU-only - Load Balancer GPU Image (
runpod/flash-lb) - HTTP-based Load Balancer worker with CUDA - Load Balancer CPU Image (
runpod/flash-lb-cpu) - HTTP-based Load Balancer worker for CPU-only
All images are automatically built and pushed via GitHub Actions workflows.
Trigger: All pull requests and pushes to main
Jobs:
docker-test- Validates GPU image buildsdocker-test-lb- Validates Load Balancer GPU image buildsdocker-test-lb-cpu- Validates Load Balancer CPU image builds
What it does:
- Builds the Docker images locally
- Validates Dockerfile syntax
- Checks that all dependencies resolve
- Does NOT push to Docker Hub
Status checks: Required to pass before merging
Trigger: Pushes to main branch (when no release is created)
Jobs:
docker-main-gpu- Pushes GPU imagedocker-main-cpu- Pushes CPU imagedocker-main-lb- Pushes Load Balancer GPU imagedocker-main-lb-cpu- Pushes Load Balancer CPU image
What it does:
- Builds the Docker images
- Pushes to Docker Hub with
:maintag - Useful for testing development versions
- Skipped if a release was just created
Image tags:
runpod/flash:mainrunpod/flash-cpu:mainrunpod/flash-lb:mainrunpod/flash-lb-cpu:main
Trigger: When a release is created via release-please
Jobs:
docker-prod-gpu- Pushes GPU image with version tagsdocker-prod-cpu- Pushes CPU image with version tagsdocker-prod-lb- Pushes Load Balancer GPU image with version tagsdocker-prod-lb-cpu- Pushes Load Balancer CPU image with version tags
What it does:
- Builds the Docker images
- Pushes with semantic version tags (e.g.,
0.7.3) - Also pushes
:latesttag - Automatically triggered by release-please
Image tags:
runpod/flash:0.7.3andrunpod/flash:latestrunpod/flash-cpu:0.7.3andrunpod/flash-cpu:latestrunpod/flash-lb:0.7.3andrunpod/flash-lb:latestrunpod/flash-lb-cpu:0.7.3andrunpod/flash-lb-cpu:latest
graph TD
A["Pull Request"] --> B["test"]
A --> C["lint"]
B --> D["docker-test"]
C --> D
B --> E["docker-test-lb"]
C --> E
D --> F["release"]
E --> F
F --> G["docker-main-gpu"]
F --> H["docker-main-cpu"]
F --> I["docker-main-lb"]
J["Main Branch Push<br/>with Release"] --> K["release-please"]
K --> L["docker-prod-gpu"]
K --> M["docker-prod-cpu"]
K --> N["docker-prod-lb"]
style D fill:#FF9800,stroke:#E65100,stroke-width:2px,color:#fff
style E fill:#FF9800,stroke:#E65100,stroke-width:2px,color:#fff
style G fill:#4CAF50,stroke:#2E7D32,stroke-width:2px,color:#fff
style H fill:#4CAF50,stroke:#2E7D32,stroke-width:2px,color:#fff
style I fill:#4CAF50,stroke:#2E7D32,stroke-width:2px,color:#fff
style L fill:#F44336,stroke:#C62828,stroke-width:2px,color:#fff
style M fill:#F44336,stroke:#C62828,stroke-width:2px,color:#fff
style N fill:#F44336,stroke:#C62828,stroke-width:2px,color:#fff
style F fill:#2196F3,stroke:#1565C0,stroke-width:2px,color:#fff
make build-gpuBuilds runpod/flash:local for testing locally.
make build-cpuBuilds runpod/flash-cpu:local for testing locally.
make build-lbBuilds runpod/flash-lb:local for testing locally.
make build-lb-cpuBuilds runpod/flash-lb-cpu:local for testing locally.
make buildBuilds both GPU and CPU images (does not build Load Balancer image).
The pipeline requires Docker Hub credentials configured as GitHub repository secrets:
- DOCKERHUB_USERNAME - Docker Hub username
- DOCKERHUB_TOKEN - Docker Hub password or personal access token
These are used by the docker/login-action step to authenticate with Docker Hub.
Releases are managed automatically via release-please:
- Detect conventional commits on main branch
- Create pull request with version bump and changelog
- User merges the release PR
- release-please creates a Git tag and release
- CI/CD triggers production image builds and pushes
Use conventional commit messages to trigger releases:
feat:- Feature (triggers minor version bump)fix:- Bug fix (triggers patch version bump)BREAKING CHANGE:- Breaking change (triggers major version bump)
Example:
git commit -m "feat(executor): add async function execution support"
git commit -m "fix(handler): correct dependency installation order"- Check
pyproject.tomlsyntax - Verify
Dockerfile*line endings (LF not CRLF) - Ensure
uv.lockis up to date:uv lock --upgrade - Test locally:
make build-lb(for Load Balancer)
- Verify Docker Hub credentials are set in GitHub secrets
- Check CI/CD job logs for authentication errors
- Ensure you're on main branch for main builds
- Ensure release tag exists for production builds
- Check that commits follow conventional commit format
- Ensure
release-pleaseworkflow is enabled - Verify release-please app has access to repository
- Check repository settings > Actions permissions