From devops-skills
Validates, lints, audits, and checks Makefiles and .mk files for syntax errors, security issues, best practices, and optimizations using GNU make dry-run, mbake, and custom bash scripts.
npx claudepluginhub akin-ozer/cc-devops-skills --plugin devops-skillsThis skill uses the workspace's default tool permissions.
Use this skill to validate Makefiles with a local-first, deterministic flow.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Checks Next.js compilation errors using a running Turbopack dev server after code edits. Fixes actionable issues before reporting complete. Replaces `next build`.
Use this skill to validate Makefiles with a local-first, deterministic flow.
Default validator entrypoint:
bash scripts/validate_makefile.sh <makefile-path>
Validation layers:
python3, pip3, make)make -n --dry-run) when make is availablembake validatembake format --checkcheckmake and unmake checks when installedUse this skill when the request includes Makefile quality, linting, validation, hardening, or troubleshooting.
.mk file"makefile-generator)Run from this skill directory for shortest commands:
cd devops-skills-plugin/skills/makefile-validator
writable) or only suggestions can be returned (read-only).# From skill directory
bash scripts/validate_makefile.sh <makefile-path>
# From repository root
bash devops-skills-plugin/skills/makefile-validator/scripts/validate_makefile.sh <makefile-path>
Always record:
Errors, Warnings, Info)| Exit code | Meaning | Expected summary line | Action |
|---|---|---|---|
0 | no blocking findings | Validation PASSED | optional improvements only |
1 | warning-only result | Validation PASSED with warnings | fix recommended; merge policy dependent |
2 | error result | Validation FAILED - errors must be fixed | fix required, then rerun |
Open only the docs required by the current findings.
| Finding type | Reference doc |
|---|---|
.PHONY, .DELETE_ON_ERROR, .ONESHELL, variable usage, performance structure | docs/best-practices.md |
| tabs vs spaces, dependency mistakes, credential patterns, anti-patterns | docs/common-mistakes.md |
mbake behavior, formatter flags, known mbake caveats | docs/bake-tool.md |
After applying fixes, rerun:
bash scripts/validate_makefile.sh <makefile-path>
Loop rules:
Use explicit file-open commands so paths are unambiguous.
From repository root:
sed -n '1,220p' devops-skills-plugin/skills/makefile-validator/docs/best-practices.md
sed -n '1,220p' devops-skills-plugin/skills/makefile-validator/docs/common-mistakes.md
sed -n '1,220p' devops-skills-plugin/skills/makefile-validator/docs/bake-tool.md
rg -n "PHONY|DELETE_ON_ERROR|ONESHELL|tab|credential|mbake" devops-skills-plugin/skills/makefile-validator/docs/*.md
From devops-skills-plugin/skills/makefile-validator:
sed -n '1,220p' docs/best-practices.md
sed -n '1,220p' docs/common-mistakes.md
sed -n '1,220p' docs/bake-tool.md
rg -n "PHONY|DELETE_ON_ERROR|ONESHELL|tab|credential|mbake" docs/*.md
If shell commands are unavailable, use the environment's file-open/read actions on the same paths.
Use these only when the default validator path cannot run fully.
| Constraint | Fallback action | Reporting requirement |
|---|---|---|
python3 or pip3 unavailable | Run limited checks (make -f <file> -n --dry-run if make exists, plus focused grep checks) | State that mbake stages were skipped and coverage is reduced |
pip3 install mbake fails (offline/proxy/index issue) | Keep syntax/custom checks that still work; defer formatter/linter stages | Report install failure and request rerun in a network-enabled environment |
make unavailable | Continue with non-syntax stages; script already downgrades syntax stage | Explicitly note syntax coverage was skipped |
checkmake or unmake unavailable | Continue; these are optional stages | Note optional lint/portability coverage not executed |
| target file is read-only | Provide patch suggestions only | Mark response as advisory only |
| command execution unavailable | Provide static review from file contents and docs | Mark result as non-executed analysis |
Minimal fallback commands:
# Syntax only (when make exists)
make -f <makefile-path> -n --dry-run
# Focused quick checks
grep -n "^\\.DELETE_ON_ERROR:" <makefile-path>
grep -n "^\\.PHONY:" <makefile-path>
grep -nE "^( | | )[a-zA-Z@\\$\\(]" <makefile-path>
exit 0)Errors: 0
Warnings: 0
Info: 2
✓ Validation PASSED
exit 1)Errors: 0
Warnings: 3
Info: 1
⚠ Validation PASSED with warnings
exit 2)Errors: 2
Warnings: 1
Info: 0
⚠ Validation FAILED - errors must be fixed
command -v python3 pip3 make
make -f <makefile-path> -n --dry-run
grep -nE "^( | | )[a-zA-Z@\\$\\(]" <makefile-path>
NO_COLOR=1 bash scripts/validate_makefile.sh <makefile-path> > /tmp/makefile-validator.log 2>&1
echo "exit=$? log=/tmp/makefile-validator.log"
makefile-validator/
├── SKILL.md
├── scripts/
│ └── validate_makefile.sh
├── docs/
│ ├── best-practices.md
│ ├── common-mistakes.md
│ └── bake-tool.md
└── examples/
├── good-makefile.mk
└── bad-makefile.mk
This skill update is complete when all are true:
0, 1, 2).name and description remain unchanged.