framework-compliance-t…
Make a cloud account compliant with a security or industry framework using Prowler Cloud.
Helps with Prowler repository CI and PR gates (GitHub Actions workflows). Trigger: When investigating CI checks failing on a PR, PR title validation, changelog gate/no-changelog label, conflict marker checks, secret scanning, release freeze, CODEOWNERS/labeler automation, or
Claude Code
$ npx -y skills add prowler-cloud/prowler --skill prowler-ci --agent claude-code
Codex
$ npx skills add prowler-cloud/prowler --skill prowler-ci -a codex -y
Cursor
$ npx skills add prowler-cloud/prowler --skill prowler-ci -a cursor -y
Gemini CLI
$ npx skills add prowler-cloud/prowler --skill prowler-ci -a gemini-cli -y
GitHub Copilot
$ npx skills add prowler-cloud/prowler --skill prowler-ci -a github-copilot -y
OpenCode
$ npx skills add prowler-cloud/prowler --skill prowler-ci -a opencode -y
Windsurf
$ npx skills add prowler-cloud/prowler --skill prowler-ci -a windsurf -y
name: prowler-ci
description: >
Helps with Prowler repository CI and PR gates (GitHub Actions workflows).
Trigger: When investigating CI checks failing on a PR, PR title validation, changelog gate/no-changelog label,
conflict marker checks, secret scanning, release freeze, CODEOWNERS/labeler automation, or anything under .github/workflows.
license: Apache-2.0
metadata:
author: prowler-cloud
version: "1.1"
scope: [root]
auto_invoke:
- "Inspect PR CI checks and gates (.github/workflows/*)"
- "Debug why a GitHub Actions job is failing"
- "Understand changelog gate and no-changelog label behavior"
- "Understand PR title conventional-commit validation"
- "Understand CODEOWNERS/labeler-based automation"
allowed-tools: Read, Edit, Write, Glob, Grep, BashUse `prowler-pr` for *creating* PRs and filling the template; `gh-aw` for the agentic `issue-triage` workflow.
Workflow files are prefixed by area and the `name:` matches: `sdk-*` (`SDK: ...`), `api-*` (`API: ...`), `ui-*` (`UI: ...`), `mcp-*` (`MCP: ...`), `helm-*`, `ci-*` (`CI: ...`), `docs-*`/`markdown-lint` (`Docs: ...`), and repo tooling (`Tools: ...`: changelog, conventional commit, conflicts, labeler, backport, TruffleHog, release freeze). Component workflows use `tj-actions/changed-files` (or `paths:`) so they only do real work when their folder changes.
| Check (workflow) | Fails when | Fix / reproduce locally | |------------------|-----------|-------------------------| | PR title (`conventional-commit.yml`) | Title does not match `^(feat\|fix\|docs\|style\|refactor\|perf\|test\|chore\|build\|ci\|revert)(\([^)]+\))?!?: .+` | Edit the PR title | | Changelog (`pr-check-changelog.yml`) | Missing/invalid fragment, PR link in a fragment, or direct `CHANGELOG.md` edit | Add `<component>/changelog.d/<slug>.<type>.md` (see `prowler-changelog`) or the `no-changelog` label | | Conflicts (`pr-conflict-checker.yml`) | Conflict markers (`<<<<<<<`, `=======`, `>>>>>>>`) in changed files; also labels `has-conflicts` | Remove markers / rebase on `master` | | Secrets (`find-secrets.yml`, TruffleHog) | Verified or unknown secret in the PR diff | See TruffleHog below | | Release freeze (`release-freeze-gate.yml`) | Repo variable `RELEASE_FREEZE` is `true` (PRs to `master`) | Wait for the release; not a code problem | | Test `__init__.py` (`check-test-init-files.yml`) | `__init__.py` inside `tests/` | Delete it; `python3 scripts/check_test_init_files.py .` | | Duplicate test names (`sdk-check-duplicate-test-names.yml`) | Same `*_test.py` filename in two providers under `tests/providers/` | Rename the test file with a provider prefix | | Provider cards (`docs-check-provider-cards.yml`) | `docs/snippets/provider-cards.mdx` out of sync | `python3 docs/scripts/generate_provider_cards.py` and commit | | Compliance mapping (`pr-check-compliance-mapping.yml`) | Never fails: comments and adds `needs-compliance-review` for new checks not mapped in a compliance JSON | Map the check or add `no-compliance-check` |
| Workflow | Runs | |----------|------| | `sdk-code-quality.yml` | `uv lock --check`; `uv run flake8 . --ignore=E266,W503,E203,E501,W605,E128 --exclude .venv,contrib,ui,api,skills,mcp_server`; `uv run black --exclude "\.venv\|api\|ui\|skills\|mcp_server" --check .`; `uv run pylint --disable=W,C,R,E -j 0 -rn -sn prowler/` | | `sdk-tests.yml` | `uv run pytest -n auto --cov=./prowler/providers/<provider> tests/providers/<provider>` per changed provider (AWS narrows to changed services) | | `sdk-security.yml` | `uv run bandit -q -lll -x '*_test.py,./.venv/,./contrib/,./api/,./ui' -r .`; `uv run vulture --exclude ".venv,contrib,api,ui" --min-confidence 100 .` | | `api-code-quality.yml` (in `api/`) | `uv lock --check`; `uv run ruff check . --exclude contrib`; `uv run ruff format --check . --exclude contrib`; `uv run pylint --disable=W,C,R,E -j 0 -rn -sn src/` | | `api-security.yml` (in `api/`) | bandit + vulture (same flags style as SDK) | | `api-tests.yml` | API pytest suite (needs PostgreSQL/Valkey services) | | `ui-tests.yml` (in `ui/`) | `pnpm install --frozen-lockfile`; `pnpm run healthcheck` (typecheck + lint + format check); `pnpm run audit`; unit tests (`vitest related` for changed files or full `pnpm run test:unit`); `pnpm run test:integration`; `pnpm run build` | | `ui-e2e-tests-v2.yml` | Playwright E2E, scoped by `test-impact-analysis.yml` (`.github/test-impact.yml`) | | `mcp-tests.yml` (in `mcp_server/`) | `uv run pytest --cov=./prowler_mcp_server --cov-report=xml tests` | | `ci-actionlint.yml`, `ci-zizmor.yml` | actionlint and zizmor on workflows | | `markdown-lint.yml` | markdownlint-cli 0.45.0 on tracked `*.md` | | `*-container-checks.yml`, `*-codeql.yml` | Container build/scan, CodeQL |
Most of these also run as prek hooks: `uv run prek run --files <changed files>` is the fastest local check.
1. `gh pr checks <number>` to find the failing workflow/job, then open its file in `.github/workflows/`. 2. Check path filters: is the workflow supposed to run for your changed files? 3. Map it to the tables above and run the same command locally. 4. For workflows triggered by labels (`labeled`/`unlabeled`), re-apply or remove the label to re-run.
CI runs TruffleHog 3.99.2 on the PR diff with `--results=verified,unknown`, so fake values that match a detector format can fail too.
Prowler is the world’s most widely used Open-Source Cloud Security Platform that automates security and compliance across any cloud environment.
Make a cloud account compliant with a security or industry framework using Prowler Cloud.
Vercel AI SDK patterns for the installed major (ui/package.json: `ai` 6.x, `@ai-sdk/react` 3.x). The skill name is historical;…
Django REST Framework patterns. Trigger: When implementing generic DRF APIs (ViewSets, serializers, routers, permissions,…
Reviews Django migration files for PostgreSQL best practices specific to Prowler. Trigger: When creating migrations, running…
Create and maintain GitHub Agentic Workflows (gh-aw) for Prowler. Trigger: When creating agentic workflows, modifying gh-aw…
Strict JSON:API v1.1 specification compliance. Trigger: When creating or modifying API endpoints, reviewing API responses, or…
Use for authorized security assessment of REST, GraphQL, WebSocket, or SOAP APIs, including discovery, authentication,…
Extract and decrypt Windows DPAPI-protected secrets (Credential Manager, browser logins/cookies, Wi-Fi credentials, KeePass keys)…
Clean and finalize authorized natural-language text intended for readers by auditing suspicious invisible Unicode and rewriting…