CI/CD Automation Skill When to Activate Activate this skill when: Creating GitHub Actions workflows Setting up automated testing Configuring deployment pipelines Adding code quality checks to CI Automating release processes Quick Start Workflow Create .github/workflows/ci.yml : name : CI on : push : branches : [ main , develop ] pull_request : branches : [ main ] jobs : test : runs-on : ubuntu - latest steps : - uses : actions/checkout@v4 - name : Install UV run : curl - LsSf https : //astral.sh/uv/install.sh | sh - name : Add UV to PATH run : echo "$HOME/.cargo/bin"
$GITHUB_PATH
name : Install dependencies run : uv sync - name : Run tests run : uv run pytest tests/ - v - - cov=src - name : Lint with Ruff run : uv run ruff check src/ tests/ - name : Check formatting run : uv run black - - check src/ tests/ Workflow Structure .github/ └── workflows/ ├── ci.yml # Tests and linting ├── release.yml # Package publishing └── deploy.yml # Deployment Common Triggers
Every push and PR
on : [ push , pull_request ]
Specific branches
on : push : branches : [ main ] pull_request : branches : [ main ]
Manual trigger
on : workflow_dispatch
Scheduled (cron)
on : schedule : - cron : '0 0 * * *'
Daily at midnight
Testing with Coverage
name
:
Run tests with coverage
run
:
|
uv run pytest tests/ \
--cov=src \
--cov-report=xml \
--cov-report=term-missing \
--junitxml=junit.xml
-
name
:
Upload coverage to Codecov
uses
:
codecov/codecov
-
action@v3
with
:
files
:
./coverage.xml
fail_ci_if_error
:
true
Multi-Environment Testing
jobs
:
test
:
runs-on
:
$
{
{
matrix.os
}
}
strategy
:
matrix
:
os
:
[
ubuntu
-
latest
,
macos
-
latest
,
windows
-
latest
]
python-version
:
[
'3.10'
,
'3.11'
,
'3.12'
]
steps
:
-
uses
:
actions/checkout@v4
-
uses
:
actions/setup
-
python@v5
with
:
python-version
:
$
{
{
matrix.python
-
version
}
}
-
name
:
Install UV
run
:
curl
-
LsSf https
:
//astral.sh/uv/install.sh
|
sh
-
name
:
Run tests
run
:
uv run pytest tests/
Caching Dependencies
-
name
:
Cache UV dependencies
uses
:
actions/cache@v3
with
:
path
:
|
~/.cache/uv
.venv
key
:
$
{
{
runner.os
}
}
-
uv
-
$
{
{
hashFiles('
**/pyproject.toml')
}
}
restore-keys
:
|
${{ runner.os }}-uv-
-
name
:
Install dependencies
run
:
uv sync
Secrets in Workflows
-
name
:
Deploy
env
:
API_KEY
:
$
{
{
secrets.ANTHROPIC_API_KEY
}
}
DATABASE_URL
:
$
{
{
secrets.DATABASE_URL
}
}
run
:
uv run python deploy.py
Setting up secrets:
Repository Settings → Secrets and variables → Actions
Click "New repository secret"
Add name and value
Publishing to PyPI
name
:
Publish
on
:
release
:
types
:
[
published
]
jobs
:
publish
:
runs-on
:
ubuntu
-
latest
steps
:
-
uses
:
actions/checkout@v4
-
name
:
Install UV
run
:
curl
-
LsSf https
:
//astral.sh/uv/install.sh
|
sh
-
name
:
Build package
run
:
uv build
-
name
:
Publish to PyPI
env
:
UV_PUBLISH_TOKEN
:
$
{
{
secrets.PYPI_TOKEN
}
}
run
:
uv publish
-
-
token $UV_PUBLISH_TOKEN
Docker Image Build
-
name
:
Build and push Docker image
uses
:
docker/build
-
push
-
action@v5
with
:
context
:
.
push
:
true
tags
:
user/app
:
latest
,
user/app
:
$
{
{
github.sha
}
}
Status Badges
Add to README:
!
CI
Best Practices
DO ✅
Run tests on every push
Cache dependencies for speed
Use matrix for cross-platform testing
Separate CI from CD workflows
Use secrets for sensitive data
DON'T ❌
Skip linting in CI
Ignore test failures
Store secrets in code
Run unnecessary jobs
When to Use CI/CD
Start with:
Running tests on every push
Code quality checks (lint, format)
Security scanning
Add later:
Deployment automation
Docker builds
Documentation generation
Related Resources
See
AgentUsage/ci_cd_patterns.md
for complete documentation including:
Complex workflow examples
Environment-specific configs
Advanced caching strategies
Deployment patterns