Skip to content
Back to skills

Run Ci Cd Pipeline Locally

BSecurity

Run the Wavecraft CI checks locally. Prefer the native `cargo xtask` commands for speed; use Docker + `act` only when validating GitHub Actions workflows or Linux-specific behavior.

  • 57 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 17, 2026
devopstypescriptrustgoshellbashnodedockertestingdebugginggit

Works with

  • terminal
  • cli

Security analysis

B88/100
  • criticalSends environment variables or credentials to an external URL

Pro shows the line behind each finding and how to fix it

Scanned October 17, 2026

npx -y skills add diegosouzapw/awesome-omni-skill --skill run-ci-cd-pipeline-locally --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Run Ci Cd Pipeline Locally?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Run Ci Cd Pipeline Locally
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/diegosouzapw-run-ci-cd-pipeline-locally/badge)](https://www.skillsdirectory.com/skills/diegosouzapw-run-ci-cd-pipeline-locally)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: Run CI/CD Pipeline Locally
description: Run the Wavecraft CI checks locally. Prefer the native `cargo xtask` commands for speed; use Docker + `act` only when validating GitHub Actions workflows or Linux-specific behavior.
---

# Skill: Run GitHub Actions CI/CD pipeline Locally

Use this skill to test CI workflows locally before pushing to GitHub. **Preferred path:** run the native `cargo xtask` commands (fast, no Docker). Use Docker + `act` only when you need to validate workflow YAML or Linux-specific behavior.

## Workflow parity requirement ✅

**Keep an xtask mirror for every workflow file** under `.github/workflows/`. If a workflow changes (or a new one is added), update or add an xtask so local runs stay fast and consistent. Use Docker + `act` only for workflow/YAML-specific checks or Linux-only behavior.

| Workflow file             | Preferred local mirror          | Notes                                                                             |
| ------------------------- | ------------------------------- | --------------------------------------------------------------------------------- |
| `ci.yml`                  | `cargo xtask ci-check`          | Full lint + test suite                                                            |
| `template-validation.yml` | `cargo xtask validate-template` | CLI template generation validation                                                |
| `release.yml`             | `cargo xtask release`           | Build/sign/notarize pipeline                                                      |
| `cli-release.yml`         | `cargo xtask release`           | Mirror release steps where applicable; add a dedicated xtask if workflow diverges |
| `continuous-deploy.yml`   | `cargo xtask release`           | Use release pipeline for parity; add a publish-focused xtask if needed            |

## Preferred: Native xtask (fast, no Docker)

These commands mirror CI checks without container overhead and are the recommended way to validate locally.

```bash
# Pre-push validation (lint + tests)
cargo xtask ci-check

# Template validation (mirrors template-validation.yml)
cargo xtask validate-template

# Optional targeted runs
cargo xtask lint
cargo xtask test
```

## Prerequisites

- **Rust toolchain** (stable, with clippy + rustfmt)
- **Node.js** + **npm** (for UI checks)

## Docker-based (only when needed)

Use Docker + `act` when validating GitHub Actions workflow changes, Linux-specific behavior, or job orchestration.

**⚠️ Agent Handoff:** If you don't have terminal execution tools available, delegate to an agent who does (Coder or Tester) to run the Docker/act commands below.

### Prerequisites (Docker path)

- **Docker Desktop** must be installed and running
- **act** must be installed: `brew install act`
- **Wavecraft custom CI image** (recommended): See the “Building the Custom Image” section below

### Quick Start for Wavecraft (Docker)

Wavecraft provides a custom Docker image with all dependencies pre-installed:

```bash
# Build the custom image (one-time setup)
docker build --platform linux/amd64 -t wavecraft-ci:latest .github/skills/run-ci-pipeline-locally/

# Run a specific job
act -j check-engine -W .github/workflows/ci.yml \
    --container-architecture linux/amd64 \
    -P ubuntu-latest=wavecraft-ci:latest \
    --pull=false \
    --artifact-server-path ./tmp/act-artifacts
```

### Available CI Jobs

| Job              | Description                  | Local Testing |
| ---------------- | ---------------------------- | ------------- |
| `check-ui`       | Prettier, ESLint, TypeScript | ✅ Works      |
| `test-ui`        | Vitest unit tests            | ✅ Works      |
| `prepare-engine` | Build UI + compile Rust      | ✅ Works      |
| `check-engine`   | cargo fmt + clippy           | ✅ Works      |
| `test-engine`    | cargo test                   | ✅ Works      |

### Run Full Pipeline Locally (Docker)

```bash
# Run entire CI workflow
act -W .github/workflows/ci.yml \
    --container-architecture linux/amd64 \
    -P ubuntu-latest=wavecraft-ci:latest \
    --pull=false \
    --artifact-server-path ./tmp/act-artifacts
```

## Building the Custom Image

The custom image includes:

- Ubuntu 22.04
- Node.js 20.x
- Rust stable with rustfmt + clippy
- GTK, WebKit, X11 development libraries

```bash
# Build for linux/amd64 (required for Apple Silicon Macs)
docker build --platform linux/amd64 -t wavecraft-ci:latest \
    .github/skills/run-ci-pipeline-locally/

# Verify the image
docker images | grep wavecraft-ci
```

**Note:** Build takes ~5-10 minutes on first run.

## Commands Reference (Docker)

**Important:** Do not combine `act` commands with `head` or `tail` — follow the logs directly.

### List Available Jobs

```bash
act -l
```

### Run Specific Workflow

```bash
act -W .github/workflows/ci.yml
```

### Run Specific Job

```bash
act -j <job-name>
```

### Run on Specific Event

```bash
act push
act pull_request
```

### Dry Run (Preview Without Executing)

```bash
act -n
```

### Pass Secrets

```bash
# Use GitHub CLI token
act -s GITHUB_TOKEN="$(gh auth token)"

# Use secrets file (.secrets with KEY=value format)
act --secret-file .secrets
```

## Key Flags for Wavecraft

| Flag                                   | Purpose                                     |
| -------------------------------------- | ------------------------------------------- |
| `--container-architecture linux/amd64` | Required on Apple Silicon Macs              |
| `-P ubuntu-latest=wavecraft-ci:latest` | Use custom image with dependencies          |
| `--pull=false`                         | Use local image, don't pull from Docker Hub |
| `-W .github/workflows/ci.yml`          | Specify workflow file                       |
| `-j <job-name>`                        | Run specific job                            |
| `--artifact-server-path <dir>`         | Enable local artifact upload/download       |

## Limitations (Docker)

### Artifact Upload/Download

By default, `actions/upload-artifact` and `actions/download-artifact` fail locally because they require GitHub's artifact server. Use the `--artifact-server-path` flag to enable a local artifact server:

```bash
act ... --artifact-server-path /tmp/act-artifacts
```

Artifacts will be stored in the specified directory and can be downloaded by subsequent jobs.

### Caching Differences

- `act` doesn't share cache with GitHub Actions
- First local run compiles everything from scratch
- Subsequent runs with `--reuse` can be faster

### Network Dependencies

Some steps require network access:

- `cargo` downloads crates
- `npm` downloads packages
- Git repos are cloned

## Debugging Failed Runs

```bash
# Verbose output
act -v

# Very verbose output
act -vv

# Keep containers running after failure for inspection
act --reuse

# Interactive shell in the container
docker exec -it <container-id> bash
```

## Common Issues

| Issue                             | Solution                                            |
| --------------------------------- | --------------------------------------------------- |
| Docker not running                | Start Docker Desktop                                |
| `--container-architecture` errors | Ensure Docker supports linux/amd64 emulation        |
| Image pull timeout                | Use `--pull=false` with local image                 |
| Permission denied on files        | Check Docker volume mounts                          |
| Job uses `macos-latest`           | Skip job or test manually                           |
| Missing Linux packages            | Rebuild custom image                                |
| Rust compilation slow             | Expected on first run; use `--reuse` for subsequent |
| `ACTIONS_RUNTIME_TOKEN` error     | Add `--artifact-server-path /tmp/act-artifacts`     |

## Updating the Custom Image

If CI dependencies change (new apt packages, Rust version, etc.):

1. Edit the Dockerfile at `.github/skills/run-ci-pipeline-locally/Dockerfile`
2. Rebuild: `docker build --platform linux/amd64 -t wavecraft-ci:latest .github/skills/run-ci-pipeline-locally/`
3. Test: `act -j check-engine ... --pull=false`

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.