Testing Test Automation Engineer
chendongqi/OPB-Skills
自动化测试助手 - 专业的测试自动化设计与实现专家。适用场景: (1) 自动化测试框架选型与搭建(Selenium/Cypress/Playwright/Appium) (2) 自动化测试脚本编写(Web/API/Mobile) (3) 测试数据管理与Mock设计 (4) CI/CD测试集成(Jenkins/GitLab CI/GitHub Actions) (5) Page…
Design CI/CD pipelines that run test suites. An agent skill from petrkindlmann/qa-skills.
$ npx skills add petrkindlmann/qa-skills --skill ci-cd-integration -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install petrkindlmann/qa-skills ci-cd-integration --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/petrkindlmann/qa-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ci-cd-integration .claude/skills/ci-cd-integration && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "ci-cd-integration" agent skill from https://github.com/petrkindlmann/qa-skills/tree/main/skills/ci-cd-integration into .claude/skills/ci-cd-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ci-cd-integration", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/petrkindlmann/qa-skills/tree/main/skills/ci-cd-integrationType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add petrkindlmann/qa-skills --skill ci-cd-integration -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install petrkindlmann/qa-skills ci-cd-integration --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/petrkindlmann/qa-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/ci-cd-integration .agents/skills/ci-cd-integration && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ci-cd-integration" agent skill from https://github.com/petrkindlmann/qa-skills/tree/main/skills/ci-cd-integration into .agents/skills/ci-cd-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ci-cd-integration", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add petrkindlmann/qa-skills --skill ci-cd-integration -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install petrkindlmann/qa-skills ci-cd-integration --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/petrkindlmann/qa-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/ci-cd-integration .cursor/skills/ci-cd-integration && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "ci-cd-integration" agent skill from https://github.com/petrkindlmann/qa-skills/tree/main/skills/ci-cd-integration into .cursor/skills/ci-cd-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ci-cd-integration", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/petrkindlmann/qa-skills.git --path skills/ci-cd-integration--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add petrkindlmann/qa-skills --skill ci-cd-integration -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install petrkindlmann/qa-skills ci-cd-integration --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/petrkindlmann/qa-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/ci-cd-integration .gemini/skills/ci-cd-integration && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "ci-cd-integration" agent skill from https://github.com/petrkindlmann/qa-skills/tree/main/skills/ci-cd-integration into .gemini/skills/ci-cd-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ci-cd-integration", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install petrkindlmann/qa-skills ci-cd-integrationInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add petrkindlmann/qa-skills --skill ci-cd-integration -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/petrkindlmann/qa-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/ci-cd-integration .github/skills/ci-cd-integration && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "ci-cd-integration" agent skill from https://github.com/petrkindlmann/qa-skills/tree/main/skills/ci-cd-integration into .github/skills/ci-cd-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ci-cd-integration", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add petrkindlmann/qa-skills --skill ci-cd-integration -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install petrkindlmann/qa-skills ci-cd-integration --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/petrkindlmann/qa-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/ci-cd-integration .opencode/skills/ci-cd-integration && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "ci-cd-integration" agent skill from https://github.com/petrkindlmann/qa-skills/tree/main/skills/ci-cd-integration into .opencode/skills/ci-cd-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ci-cd-integration", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
ci-cd-integrationDesign CI/CD pipelines that run test suites. An agent skill from petrkindlmann/qa-skills.
CI CD Integration is an agent skill from petrkindlmann/qa-skills. Design CI/CD pipelines that run test suites. Covers GitHub Actions and GitLab CI templates, parallelism and sharding, artifact management, flaky-test quarantine, test-result publishing, coverage quality gates, OIDC keyless deploy, and copy-paste workflows for Playwright, Jest, and multi-stage pipelines. Use when: "CI/CD," "GitHub Actions," "pipeline," "test in CI," "GitLab CI," "continuous integration," "test automation pipeline," "shard tests in CI." Not for: per-test flaky healing at runtime — use…
Its SKILL.md is about 4.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `references/github-actions-templates.md` and `references/gitlab-ci-template.md`).
It sits in Testing & QA, covering CI/CD and Feature launches and release readiness. It works with GitHub Actions, GitLab, Playwright and Jest. The repository describes itself as: 50 QA and test-automation skills for Claude Code, Codex, Cursor, and any Agent Skills Standard runtime. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit b3bb61b. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npxactionlintjqjestghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
DEPLOY_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
CI CD Integration loads about 4.8k tokens when it runs, and up to ~10k if it reads all its reference files. Until then it costs about 195 tokens; SKILL.md has 2,012 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from petrkindlmann/qa-skills at commit b3bb61b, republished under its MIT licence (© petrkindlmann). 2,012 words, ~4,839 tokens.
.claude/skills/ci-cd-integration/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.<objective>
A 20-minute serial suite on every push destroys developer velocity; a green pipeline that retries flaky tests three times hides the race condition until it ships. This skill produces CI/CD pipelines that run the right tests at the right trigger, shard them across runners, store traces and reports as evidence, quarantine flaky tests instead of masking them, and gate merges on real coverage numbers. Use this skill when the question is about running tests in a pipeline, not writing them.
</objective>
Check .agents/qa-project-context.md first — if it exists, use it and skip anything already answered there (especially team_maturity and existing CI conventions). Then:
Set team_maturity in .agents/qa-project-context.md; pick the matching pipeline shape:
coverageThreshold/thresholds and exit non-zero. Scraping percentages out of stdout with regex is fragile across runner versions.Push to branch: lint+types (30s) → unit (1-2m)
PR opened: + integration (2-3m) → E2E sharded (5-8m) → merge report
Merge to main: full E2E ∥ visual ∥ perf budget → deploy (OIDC)
Nightly (cron): full suite + npm audit + axe a11y + flaky quarantine| Trigger | Tests | Max duration |
|---|---|---|
| Push to branch | lint, type-check, unit | 2 min |
| PR opened/updated | + integration, E2E smoke | 10 min |
| Merge to main | + full E2E, visual, perf budget | 15 min |
| Nightly schedule | full suite, security, a11y, flaky quarantine | 30 min |
| Release tag | full suite, smoke against staging | 20 min |
For complete copy-paste workflow files (unit, sharded Playwright E2E, full pipeline, nightly, PR gate), see references/github-actions-templates.md.
Pin to the current major and let Dependabot bump them. The actions/* family runs on the Node 24 runner; Node 20 is deprecated on GH-hosted runners.
| Action | Current major | Notes |
|---|---|---|
actions/checkout | @v6 | |
actions/setup-node | @v6 | v5+ auto-caches only when packageManager is set; use cache: npm to be explicit |
actions/cache | @v5 | new cache service v2 backend |
actions/upload-artifact | @v7 | v7 can upload unzipped (archive: false) |
actions/download-artifact | @v7 | pair with upload-artifact major |
dorny/test-reporter | @v3 | v3 requires Node 24 runner; reporter keys unchanged |
dorny/paths-filter | @v3 | |
marocchino/sticky-pull-request-comment | @v3 | |
slackapi/slack-github-action | @v2 | floating major; see notification note before adopting v3 |
For supply-chain-sensitive pipelines, pin third-party actions (dorny, marocchino, slackapi, knapsack) to a full-length commit SHA with a version comment, and let Dependabot update the SHA: uses: dorny/test-reporter@<40-char-sha> # v3.0.0. First-party actions/* are lower risk; tags are acceptable there.
Concurrency groups cancel wasted runs when a branch gets multiple pushes:
concurrency:
group: tests-${{ github.ref }}
cancel-in-progress: trueMatrix sharding across runners:
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3, 4]
steps:
- run: npx playwright test --shard=${{ matrix.shard }}/4Caching browsers so they aren't re-downloaded every run:
- uses: actions/setup-node@v6
with: { node-version: 22, cache: npm }
- name: Cache Playwright browsers
id: playwright-cache
uses: actions/cache@v5
with:
path: ~/.cache/ms-playwright
key: playwright-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
- name: Install Playwright browsers
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: npx playwright install --with-deps chromiumArtifacts for reports and traces, and merging sharded reports into one HTML report — see references/github-actions-templates.md (E2E workflow). The merge job uses actions/download-artifact@v7 with pattern: test-results-* then npx playwright merge-reports --reporter=html.
Past 10–15 shards, naïve hash-based splitting wastes runner time on uneven shards. Use a timing-aware balancer:
knapsack-pro — timing-data based, supports Playwright/Jest/Cypress/RSpec; distributes by historical duration.Before reaching for a paid balancer: Playwright's --shard already distributes by file and balances on duration from prior runs. To inspect or feed custom timing data, dump it yourself — npx playwright test --reporter=json | jq '[.suites[].specs[] | {file: .file, duration: .tests[].results[].duration}]'. For Jest, jest-slow-test-reporter surfaces the slowest specs so you can split or fix them.
For self-hosted runners on Kubernetes, use Actions Runner Controller (arc-runner-set / gha-runner-scale-set) — Helm-installed, auto-scales runner pods per workflow. Replaces the deprecated runner-deployment CRD.
Protect main in Settings → Branches → Branch protection rules: enable "Require status checks to pass before merging," add lint, unit-tests, and e2e (all shards) as required checks, and enable "Require branches to be up to date."
For the full pipeline, see references/gitlab-ci-template.md. Key points:
[validate, test, e2e, deploy]; node:22-alpine for lint/unit, mcr.microsoft.com/playwright:v1.60.0-noble for E2E (keep this pinned to your installed @playwright/test minor).parallel: 4 exposes CI_NODE_INDEX/CI_NODE_TOTAL; run npx playwright test --shard=$CI_NODE_INDEX/$CI_NODE_TOTAL.coverage_report artifact and a junit report; GitLab reads the percentage and test results from those. The legacy coverage: stdout regex is a fragile fallback across Jest versions — prefer the cobertura report.- name: Publish test results
uses: dorny/test-reporter@v3
if: ${{ !cancelled() }}
with:
name: Test Results
path: test-results/junit.xml
reporter: jest-junit # use java-junit for a Playwright JUnit reportFor the sticky coverage PR comment (marocchino/sticky-pull-request-comment@v3), see references/github-actions-templates.md (PR Quality Gate).
Only test what changed. Use dorny/paths-filter@v3 to set outputs, then gate steps on them — see references/github-actions-templates.md (Conditional execution).
Separate flaky tests into a non-blocking job so they run in CI but don't block merges:
e2e-stable: # required for merge
steps:
- run: npx playwright test --grep-invert @flaky
e2e-quarantine: # non-blocking
continue-on-error: true
steps:
- run: npx playwright test --grep @flaky
- if: failure()
run: echo "::warning::Quarantined tests failed. Review and fix or remove."Tag flaky tests at the source so the grep splits them:
test('sometimes fails due to race condition @flaky', async ({ page }) => {
// runs in CI but doesn't block merges
});If a quarantined test passes 10 consecutive runs, remove the @flaky tag. For runtime self-healing of a single flaky test (selector recovery, auto-retry policy), use test-reliability.
| Layer | Path | Cache key |
|---|---|---|
| Node modules | (handled by setup-node cache: npm) | automatic |
| Playwright browsers | ~/.cache/ms-playwright | pw-{os}-{hash(package-lock.json)} |
| Build cache (Next.js) | .next/cache | nextjs-{os}-{hash(lockfile)}-{hash(src)} |
| Test fixtures | e2e/fixtures/.cache | test-data-{hash(seed.sql)} |
Use actions/cache@v5 for layers 2–4; add restore-keys on build caches for partial matches.
Don't store a long-lived DEPLOY_TOKEN. Use GitHub Actions OIDC to assume a cloud role for short-lived credentials — nothing static to leak or rotate:
deploy:
permissions:
id-token: write # request the OIDC JWT
contents: read
steps:
- uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: arn:aws:iam::123456789012:role/gha-deploy
aws-region: eu-central-1
- run: ./deploy.sh production # uses short-lived STS creds, no static secretThe IAM role's trust policy pins the sub claim to your repo and branch. GCP (google-github-actions/auth) and Azure (azure/login) have equivalent OIDC flows.
Use slackapi/slack-github-action@v2 with webhook-type: incoming-webhook, gated on if: failure() && github.ref == 'refs/heads/main' so only main-branch failures notify. Before moving to @v3, note v3 changed payload handling for workflow-trigger webhooks (no longer flattened/stringified) — verify your payload against the v3 docs first. Full example in references/github-actions-templates.md (Nightly Full Suite).
| Gate | When | Required checks | Blocking? |
|---|---|---|---|
| PR Gate | PR opened/updated | lint, type-check, unit, coverage threshold | Yes |
| Merge Gate | Before merge to main | + E2E smoke suite | Yes |
| Deploy Gate | Before production deploy | + full E2E, visual, perf budget | Yes |
| Nightly Gate | Scheduled 2am daily | full suite, npm audit, axe a11y | Alert only |
Enforce the coverage floor in the test runner's config, not in bash. In jest.config.js (or vitest.config.ts coverage.thresholds):
coverageThreshold: { global: { lines: 80, statements: 80, branches: 70 } }Then jest --coverage exits non-zero when coverage drops, so the job fails with no extra script. If you must read the number in CI (e.g. to print it), have Jest emit json-summary and read the file — there is no coverage-summary CLI:
- run: npm test -- --ci --coverage # exits 1 if below coverageThreshold
- name: Print coverage (optional)
run: |
PCT=$(jq '.total.lines.pct' coverage/coverage-summary.json)
echo "Line coverage: ${PCT}%"(json-summary reporter writes coverage/coverage-summary.json. For nyc/c8 projects, nyc report --reporter=text-summary. The standalone istanbul CLI is deprecated — don't use istanbul report.)
PR Gate + E2E smoke. Configure as required status checks in branch protection.
Needs [unit-tests, e2e-tests, visual-tests], then a perf budget check (npx lhci autorun / lhci assert --config=lighthouserc.json) before the OIDC deploy step above.
Full E2E across all browsers, security scan, a11y audit, flaky quarantine. Wire the security and a11y steps as real jobs, not just prose:
- run: npm audit --audit-level=high # fails on high/critical advisories
- run: npx playwright test --grep @a11y # specs that call @axe-core/playwrightWhere the @a11y-tagged specs use @axe-core/playwright:
import AxeBuilder from '@axe-core/playwright';
test('home page has no a11y violations @a11y', async ({ page }) => {
await page.goto('/');
const results = await new AxeBuilder({ page }).analyze();
expect(results.violations).toEqual([]);
});Results go to Slack, not as blocking checks.
A 20-minute full suite on every push destroys velocity. Use the trigger-to-suite map: fast tests on push, comprehensive on PR and merge.
Without traces, screenshots, and logs, every CI failure becomes a "reproduce locally" cycle that wastes hours. Upload artifacts on if: ${{ !cancelled() }}.
retries: 3 hides flakiness — the report is green but the race condition persists. Quarantine, track, fix the root cause.
If a test only fails in CI, document why (timezone, missing env var, screen resolution) and add a script that replicates CI locally with the same Playwright image you run in CI — don't pin a stale image. See references/github-actions-templates.md (Local repro).
Jobs that read files from sibling jobs without artifacts or needs. Each job starts fresh; pass data via upload-artifact/download-artifact.
Multiple runs for the same branch waste runners. Always use a concurrency group with cancel-in-progress: true.
Never put tokens, passwords, or keys in YAML. Use repo secrets (${{ secrets.X }}) or GitLab CI/CD variables — and prefer OIDC keyless auth over any long-lived deploy token.
A stuck test can hold a runner for hours. Set timeout-minutes on every job and actionTimeout/navigationTimeout in the Playwright config.
Prove the pipeline before relying on it. Smallest check first:
actionlint .github/workflows/*.yml catches expression, needs, and shell-quoting errors before they fail at runtime. Add a yamllint .github/workflows/ pass for indentation. Run actionlint as a job too.act -j unit-tests runs the job in a container so you can iterate without pushing.lint, unit-tests, e2e) show up and that the coverage gate fails when you drop coverage below the threshold.gh run download <id>) and confirm playwright-report/ and traces are present.if: github.event_name == 'pull_request' (verify the YAML, not "integration runs somewhere").actionlint .github/workflows/*.yml exits 0.--grep @flaky with continue-on-error: true; the stable job runs --grep-invert @flaky and is in the required checks list.if: ${{ !cancelled() }} with an explicit retention-days/expire_in.cancel-in-progress: true are set on the PR/test workflows.coverageThreshold/thresholds (job exits non-zero below the floor) — no coverage-summary CLI scrape.lint, unit-tests, and e2e as required status checks.id-token: write + cloud role) or, at minimum, a secrets-store reference.playwright.config.ts whose sharding/timeouts this pipeline drives.references/).gitlab-ci.yml with parallel sharding, cobertura coverage, and JUnit MR reporting.© petrkindlmann, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files (references) in skills/ci-cd-integration of petrkindlmann/qa-skills.
Open the folder on GitHubat commit b3bb61b
CI CD Integration next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| CI CD Integration this skillpetrkindlmann/qa-skills | 170 | — | ~4.8k | Automated safety check: Pass | MIT | |
| Testing Test Automation Engineerchendongqi/OPB-Skills | 126 | — | ~3.1k | Automated safety check: Pass | None | |
| Playwright CIzebbern/claude-code-guide | 4.7k | 2 repos | ~675 | Automated safety check: Pass | MIT | |
| Fingerprint CI Gateliarjsdev/liarjs-skills | 4 | 1 repos | ~986 | Automated safety check: Notes | MIT | |
| Dokan Run Test Suitegetdokan/dokan | 288 | — | ~4.7k | Automated safety check: Notes | None | |
| Playwright CI CachingAaronontheweb/dotnet-skills | 1.2k | 1 repos | ~1.7k | Automated safety check: Pass | MIT |
chendongqi/OPB-Skills
自动化测试助手 - 专业的测试自动化设计与实现专家。适用场景: (1) 自动化测试框架选型与搭建(Selenium/Cypress/Playwright/Appium) (2) 自动化测试脚本编写(Web/API/Mobile) (3) 测试数据管理与Mock设计 (4) CI/CD测试集成(Jenkins/GitLab CI/GitHub Actions) (5) Page…
zebbern/claude-code-guide
Production-ready CI/CD configurations for Playwright — GitHub Actions, GitLab CI, CircleCI, Azure DevOps, Jenkins, Docker, parallel sharding, reporting, code coverage, and global setup/teardown.
liarjsdev/liarjs-skills
Gate a build on browser fingerprint regressions with liarjs - save a baseline scan as JSON, diff later runs against it, and fail the job when the consistency score falls below a floor.
getdokan/dokan
Execute the Dokan Playwright test suite (E2E + API), locally or via GitHub Actions.
Aaronontheweb/dotnet-skills
Cache Playwright browser binaries in CI/CD pipelines (GitHub Actions, Azure DevOps) to avoid 1-2 minute download overhead on every build.
mizchi/skills
A skill your agent uses when auditing or improving GitHub Actions workflows for a project.
petrkindlmann/qa-skills
Test for WCAG 2.2 AA compliance with axe-core + Playwright, keyboard navigation audits, screen reader testing, ARIA pattern validation, and legal compliance mapping (ADA, EAA, Section 508).
petrkindlmann/qa-skills
Goal-driven E2E testing where a browser agent (Playwright MCP / computer-use) reads a natural-language goal and explores the app via the accessibility tree to assert outcomes — no pre-written script.
petrkindlmann/qa-skills
Use AI to write NEW test code from specs, PRDs, user stories, code diffs, bug reports, or OpenAPI specs.
petrkindlmann/qa-skills
Test REST and GraphQL APIs with Playwright APIRequestContext, Supertest, or standalone HTTP clients.
petrkindlmann/qa-skills
Test for regulatory compliance: GDPR/CMP consent verification, Google Consent Mode v2, Global Privacy Control (GPC), CCPA/US state opt-out, EU AI Act Article 50 transparency, Better Ads Standards…
petrkindlmann/qa-skills
Implement consumer-driven contract testing with Pact-JS (v16).
Works with
Categories
Design CI/CD pipelines that run test suites. An agent skill from petrkindlmann/qa-skills. CI CD Integration is an agent skill from petrkindlmann/qa-skills. Design CI/CD pipelines that run test suites.
CI CD Integration fits situations like: continuous integration; test automation pipeline; shard tests in CI. Not for: per-test flaky healing at runtime — use test-reliability; go/no-go release decisions and smoke-test checklists — use release-readiness.
Run `npx skills add petrkindlmann/qa-skills --skill ci-cd-integration -a claude-code`. Or copy the skill folder (skills/ci-cd-integration in petrkindlmann/qa-skills) into .claude/skills/ci-cd-integration in your project. Claude Code loads it when a task matches its description.
Run `npx skills add petrkindlmann/qa-skills --skill ci-cd-integration -a codex`. Or copy the skill folder (skills/ci-cd-integration in petrkindlmann/qa-skills) into .agents/skills/ci-cd-integration in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add petrkindlmann/qa-skills --skill ci-cd-integration -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ci-cd-integration, .gemini/skills/ci-cd-integration, .github/skills/ci-cd-integration and .opencode/skills/ci-cd-integration in your project.
Going by SKILL.md and its folder, CI CD Integration needs the command-line tools its instructions call (npx, actionlint, jq, jest and gh) and credentials named DEPLOY_TOKEN. Our summary lists: Node.js; A credential in DEPLOY_TOKEN.
SKILL.md contains no URLs. Its commands use npx and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
CI CD Integration is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.8k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 5.2k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with CI CD Integration: Testing Test Automation Engineer (chendongqi/OPB-Skills, 126 stars), Playwright CI (zebbern/claude-code-guide, 4.7k stars), Fingerprint CI Gate (liarjsdev/liarjs-skills, 4 stars) and Dokan Run Test Suite (getdokan/dokan, 288 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
petrkindlmann (a GitHub user) maintains it in petrkindlmann/qa-skills, which has 170 GitHub stars. The repository holds 45 skills in this directory. The repository was last updated on June 10, 2026.
Source: petrkindlmann/qa-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.