Full CI pipeline: run local tests, type check, push branch, and return the pipeline URL. The only command you need before opening a PR.
Scanned 9/4/2026
Install to Claude Code
npx -y skills add gabrielmoreira/agent-skills-mirror --skill ci-all --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Ci All?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/gabrielmoreira-ci-all)More formats (shields.io, HTML) on the badges page.
---
name: ci-all
description: "Full CI pipeline: run local tests, type check, push branch, and return the pipeline URL. The only command you need before opening a PR."
argument-hint: "[--skip-tests | --e2e]"
allowed-tools: [Bash]
model: haiku
effort: medium
disable-model-invocation: true
---
# /ci:all: Full CI before PR
Runs everything in order: local tests → type check → push → pipeline URL.
One `/ci:all` replaces: manual tests + git push + copying the pipeline URL.
## Stack detection
```bash
if [ -f "uv.lock" ]; then STACK="python"
elif [ -f "pnpm-lock.yaml" ]; then STACK="node"
elif [ -f "package-lock.json" ]; then STACK="node-npm"
elif [ -f "Cargo.toml" ]; then STACK="rust"
fi
```
## Step 1: Local tests (blocking)
**Python (uv/pytest):**
```bash
uv run pytest --tb=short -q
# Failure → STOP + print failing tests
```
**Node (pnpm/vitest):**
```bash
pnpm vitest run
pnpm tsc --noEmit
# Failure → STOP
```
**Rust:**
```bash
cargo test --quiet 2>&1
```
If `--skip-tests` is passed → skip to step 2.
## Step 2: Push + pipeline
```bash
BRANCH=$(git branch --show-current)
# Verify commits exist to push
AHEAD=$(git rev-list --count origin/$BRANCH..HEAD 2>/dev/null || echo "1")
if [ "$AHEAD" = "0" ]; then
echo "Branch already up to date on origin."
else
git push origin "$BRANCH"
fi
```
## Step 3: Pipeline URL
### GitLab CI
```bash
REMOTE=$(git remote get-url origin)
WEB_URL=$(echo "$REMOTE" | sed 's/git@gitlab\.com:/https:\/\/gitlab.com\//' | sed 's/\.git$//')
echo "Pipeline: $WEB_URL/-/pipelines?ref=$BRANCH"
# Optional: live status via glab CLI
if command -v glab &>/dev/null; then
sleep 3
glab ci status --branch "$BRANCH" 2>/dev/null || true
fi
```
### GitHub Actions
```bash
REMOTE=$(git remote get-url origin)
WEB_URL=$(echo "$REMOTE" | sed 's/git@github\.com:/https:\/\/github.com\//' | sed 's/\.git$//')
echo "Actions: $WEB_URL/actions?query=branch%3A$BRANCH"
# Optional: live status via gh CLI
if command -v gh &>/dev/null; then
sleep 5
gh run list --branch "$BRANCH" --limit 3 2>/dev/null || true
fi
```
## Expected output
```
CI: my-app (Node/Vitest)
──────────────────────────
① Local tests
✅ 47 passed in 8.2s
② Type check
✅ No errors
③ Push
✅ origin/feat/my-feature
④ Pipeline
🔗 https://gitlab.com/org/my-app/-/pipelines?ref=feat/my-feature
Next step: open a PR with /pr or directly on GitLab/GitHub.
```
If tests fail:
```
CI: my-api (Python/pytest)
────────────────────────────
① Local tests
❌ 2 failed
FAILED tests/test_orders.py::TestOrderService::test_refund_validation
AssertionError: expected 400, got 500
→ Fix tests before pushing. Pipeline not triggered.
```
## Usage
```
/ci:all
/ci:all --skip-tests # push without re-running tests
/ci:all --e2e # include E2E tests (if configured)
```
Target: $ARGUMENTS
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!