--- name: makefile-generation description: Generates Makefiles with testing, linting, formatting, and automation targets. Use when starting a project or standardizing build automation. globs: "**/Makefile" alwaysApply: false # Custom metadata (not used by Claude for matching): model: sonnet tools: [Read, Write, Bash] category: infrastructure tags: [makefile, automation, build-tools, development-workflow] complexity: low model_hint: fast estimated_tokens: 1200 --- # Makefile Generation Skill Generate a Makefile with standard development targets for Python, Rust, or TypeScript projects. ## When To Use - Need a Makefile for a project without one - Want to update Makefile with new targets - Standardizing build automation across projects - Setting up development workflow commands - Creating language-specific build targets ## When NOT To Use - Makefile already exists and is current - Project uses alternative build system exclusively (e.g., npm scripts only) - Complex custom build process that doesn't fit standard patterns - Use `/attune:upgrade-project` instead for updating existing Makefiles ## Standard Targets ### Python Makefile **Common targets**: - `help` - Show available targets - `install` - Install dependencies with uv - `lint` - Run ruff linting - `format` - Format code with ruff - `typecheck` - Run mypy type checking - `test` - Run pytest - `test-coverage` - Run tests with coverage report - `check-all` - Run all quality checks - `clean` - Remove generated files and caches - `build` - Build distribution packages - `publish` - Publish to PyPI ### Rust Makefile **Common targets**: - `help` - Show available targets - `fmt` - Format with rustfmt - `lint` - Run clippy - `check` - Cargo check - `test` - Run tests - `build` - Build release binary - `clean` - Clean build artifacts ### TypeScript Makefile **Common targets**: - `help` - Show available targets - `install` - Install npm dependencies - `lint` - Run ESLint - `format` - Format with Prettier - `typecheck` - Run tsc type checking - `test` - Run Jest tests - `build` - Build for production - `dev` - Start development server ## Workflow ### 1. Detect Language ```bash # Check for language indicators if [ -f "pyproject.toml" ]; then LANGUAGE="python" elif [ -f "Cargo.toml" ]; then LANGUAGE="rust" elif [ -f "package.json" ]; then LANGUAGE="typescript" fi ``` **Verification:** Run the command with `--help` flag to verify availability. ### 2. Load Template ```python from pathlib import Path template_path = Path("plugins/attune/templates") / language / "Makefile.template" ``` **Verification:** Run the command with `--help` flag to verify availability. ### 3. Collect Project Info ```python metadata = { "PROJECT_NAME": "my-project", "PROJECT_MODULE": "my_project", "PYTHON_VERSION": "3.10", } ``` **Verification:** Run the command with `--help` flag to verify availability. ### 4. Render Template ```python from template_engine import TemplateEngine engine = TemplateEngine(metadata) engine.render_file(template_path, Path("Makefile")) ``` **Verification:** Run the command with `--help` flag to verify availability. ### 5. Verify ```bash make help ``` **Verification:** Run `make --dry-run` to verify build configuration. ## Customization Users can add custom targets after the generated ones: ```makefile # ============================================================================ # CUSTOM TARGETS # ============================================================================ deploy: build ## Deploy to production ./scripts/deploy.sh ``` **Verification:** Run the command with `--help` flag to verify availability. ## Related Skills - `Skill(attune:project-init)` - Full project initialization - `/abstract:make-dogfood` command - Makefile testing and validation ## Exit Criteria - [ ] A `Makefile` is created at the project root containing at minimum a `help` target and all standard targets for the detected language (Python: install/lint/format/typecheck/test; Rust: fmt/lint/check/test/build; TypeScript: install/lint/format/typecheck/test/build). - [ ] `make help` runs without error and lists all generated targets with descriptions. - [ ] `make --dry-run ` exits 0 for each standard target, confirming recipe syntax is valid. - [ ] If no language is detected (no `pyproject.toml`, `Cargo.toml`, or `package.json`), the skill reports the detection failure and stops rather than generating a blank Makefile.