A powerful Rust CLI tool to bootstrap project configuration files. Quickly generate common project configuration files like .editorconfig, .prettierrc, and Ruby-specific configurations.
- π Fast: Built in Rust for blazing-fast performance
- π― Smart: Automatically detects project types and generates appropriate configs
- π Safe: Built-in safety checks and error handling
- π¨ Beautiful: Colored output and progress indicators
- π§ͺ Tested: Comprehensive test coverage
- π Auto-detection: Automatically detects Ruby projects and generates appropriate configs
- π― Interactive: Guided setup with user prompts
- π¨ Templates: Multiple configuration templates for different coding styles
- π Dry Run: Preview what would be created without actually creating files
- πͺ Git Hooks: Generate pre-commit, pre-push, and commit-msg hooks for all languages
git clone https://github.com/zackkitzmiller/zackstrap.git
cd zackstrap
cargo build --release
cargo install --path .cargo install zackstrapGenerate basic configuration files (.editorconfig, .prettierrc):
zackstrap basicGenerate Ruby-specific configuration files:
zackstrap rubyThis will create:
- .editorconfig
- .prettierrc
- .ruby-version (set to 3.3.0)
- .node-version (set to 24)
- .rubocop.yml (comprehensive configuration)
- package.json (with prettier-plugin-ruby)Generate Python-specific configuration files:
zackstrap pythonThis will create:
- .editorconfig
- .prettierrc
- .python-version (set to 3.12)
- pyproject.toml (with black, flake8, mypy)
- .flake8 configuration
- requirements-dev.txt
- justfile with Python development tasksGenerate Node.js-specific configuration files:
zackstrap nodeThis will create:
- .editorconfig
- .prettierrc
- .nvmrc (set to Node.js 20)
- .eslintrc.js (ESLint configuration)
- package.json (with development dependencies)
- justfile with Node.js development tasksGenerate Go-specific configuration files:
zackstrap goThis will create:
- .editorconfig
- .prettierrc
- go.mod (Go module file)
- .golangci.yml (golangci-lint configuration)
- .gitignore additions for Go
- justfile with Go development tasksGenerate Rust-specific configuration files:
zackstrap rustThis will create:
- .editorconfig
- .prettierrc
- rustfmt.toml (Rust formatting configuration)
- .clippy.toml (Clippy linting configuration)
- .cargo/config.toml (Cargo configuration)
- justfile with Rust development tasksUse the --force flag to overwrite existing files:
zackstrap basic --force
zackstrap ruby --forceSpecify a different target directory:
zackstrap basic --target /path/to/project
zackstrap ruby --target /path/to/projectSee what configuration files are available:
zackstrap listAutomatically detect project type and generate appropriate configs:
zackstrap autoGuided setup with user prompts:
zackstrap interactiveUse different configuration templates:
# Basic projects with different styles
zackstrap basic --template google
zackstrap basic --template airbnb
# Ruby projects with framework-specific configs
zackstrap ruby --template rails
zackstrap ruby --template sinatra
zackstrap ruby --template gem
# Python projects with framework-specific configs
zackstrap python --template django
zackstrap python --template flask
# Node.js projects with framework-specific configs
zackstrap node --template express
zackstrap node --template react
# Go projects with project type configs
zackstrap go --template web
zackstrap go --template cli
# Rust projects with project type configs
zackstrap rust --template web
zackstrap rust --template cliPreview what would be created without actually creating files:
# Note: --dry-run must come BEFORE the subcommand
zackstrap --dry-run basic
zackstrap --dry-run ruby --template rails
zackstrap --dry-run auto.editorconfig- Multi-language editor configuration.prettierrc- Prettier formatting rulesjustfile- Project automation and development tasks
.ruby-version- Ruby 3.3.0.node-version- Node.js 24.rubocop.yml- Comprehensive Ruby lintingpackage.json- Withprettier-plugin-rubyjustfile- Ruby-specific automation tasks
.python-version- Python 3.12pyproject.toml- Project configuration with black, flake8, mypy.flake8- Flake8 linting configurationrequirements-dev.txt- Development dependenciesjustfile- Python-specific automation tasks
.nvmrc- Node.js 20.eslintrc.js- ESLint configurationpackage.json- With development dependenciesjustfile- Node.js-specific automation tasks
go.mod- Go module file.golangci.yml- golangci-lint configuration.gitignore- Go-specific ignore patternsjustfile- Go-specific automation tasks
rustfmt.toml- Rust formatting configuration.clippy.toml- Clippy linting configuration.cargo/config.toml- Cargo configurationjustfile- Rust-specific automation tasks
Generate git hooks for your project to ensure code quality and consistency:
# Generate git hooks for Ruby project
zackstrap --hooks ruby
# Generate git hooks for Python Django project
zackstrap --hooks python --template django
# Generate git hooks for Node.js React project
zackstrap --hooks node --template react
# Generate git hooks for Go web project
zackstrap --hooks go --template web
# Generate git hooks for Rust CLI project
zackstrap --hooks rust --template cli- pre-commit: Runs linters, formatters, and tests before each commit
- pre-push: Runs full test suite before pushing to remote
- commit-msg: Validates commit message format (conventional commits)
Each language gets tailored git hooks:
Ruby Projects:
- RuboCop linting
- Prettier formatting
- RSpec tests
- Bundle security audit
Python Projects:
- Black formatting
- Flake8 linting
- MyPy type checking
- Pytest tests
Node.js Projects:
- ESLint linting
- Prettier formatting
- TypeScript checking
- Jest tests
Go Projects:
- golangci-lint
- go fmt
- go test
- go mod tidy
Rust Projects:
- Clippy linting
- rustfmt formatting
- cargo test
- cargo check
Git hooks require:
- Git repository initialized (
git init) - Language-specific tools installed (Ruby, Python, Node.js, Go, or Rust)
- Project dependencies installed
- Root settings for consistent coding style
- File-specific overrides for Ruby, JavaScript, TypeScript
- UTF-8 encoding, LF line endings
- 2-space indentation
- Semi-colons enabled
- Single quotes
- 2-space tab width
- 80 character print width
- ES5 trailing comma style
Templates available:
- default: Standard configuration
- google: Google style (double quotes, 80 char width)
- airbnb: Airbnb style (single quotes, 100 char width)
- Set to Ruby 3.3.0 (latest stable)
- Set to Node.js 24 (latest LTS)
- Comprehensive Ruby linting rules
- RSpec-specific configurations
- Performance and security checks
- Bundler integration
Templates available:
- default: Standard Ruby configuration
- rails: Rails-specific rules and exclusions
- sinatra: Lightweight Sinatra configuration
- gem: Gem development with stricter rules
- Prettier with Ruby plugin
- Development dependencies only
Templates available:
- default: Basic Ruby project setup
- rails: Rails app with ESLint and additional tools
- sinatra: Sinatra app setup
- gem: Gem development with RSpec
- Set to Python 3.12 (latest stable)
- Black formatting configuration (88 char width)
- Flake8 linting configuration
- MyPy type checking configuration
- Pytest configuration
Templates available:
- default: Standard Python configuration
- django: Django-specific settings and stubs
- flask: Flask app configuration
- 88 character line length (compatible with Black)
- Extended ignore patterns for common issues
- Black (code formatter)
- Flake8 (linter)
- MyPy (type checker)
- Pytest (testing framework)
- Set to Node.js 20 (LTS version)
- ES2022 environment support
- Recommended ESLint rules
- Framework-specific configurations
Templates available:
- default: Standard Node.js configuration
- express: Express.js with console logging allowed
- react: React with JSX support and relaxed prop-types
- ESLint and Prettier development dependencies
- Framework-specific dependencies based on template
- Go 1.21 module configuration
- Project module name
- golangci-lint configuration
- Common linters enabled (gofmt, golint, govet, errcheck)
- 5-minute timeout for large projects
- Go-specific ignore patterns
- Binary files, test files, and workspace files
- Rust 2021 edition
- 100 character line width
- Clippy linting configuration
- Customizable rules and settings
- Cargo build configuration
- Native CPU optimization flags
- Project automation and development tasks
- Common development commands for all languages
- Language-specific commands and workflows
- Framework-specific commands and tasks
Templates available:
- Basic: Standard development tasks (build, test, format, lint)
- Ruby: Ruby development with bundler and tools
- Rails: Rails-specific commands (server, console, routes, db)
- Sinatra: Sinatra development commands
- Gem: Gem development and release commands
- Python: Python development with virtual environments
- Django: Django-specific commands (server, migrate, shell)
- Flask: Flask development commands
- Node.js: Node.js development with npm/yarn
- Express: Express.js development commands
- React: React development and build commands
- Go: Go development with go commands
- Web: Web application commands
- CLI: Command-line application commands
- Rust: Rust development with cargo
- Web: Web application commands
- CLI: Command-line application commands
The project uses GitHub Actions for continuous integration and deployment, organized into separate stages for better efficiency and maintainability.
ci.yml: Main CI/CD pipeline that triggers the lint workflowlint.yml: Dedicated workflow for code quality checks (formatting, linting)test.yml: Dedicated workflow for testing and coverage across multiple platformsrelease.yml: Release automation workflow
The CI pipeline uses a trigger-based approach where:
- Stage 1:
ci.ymltriggerslint.yml - Stage 2:
lint.ymltriggerstest.ymlonly on success - Benefits:
- Keeps workflows organized in separate files
- Tests only run if linting passes
- Each workflow can be run independently
- Clear separation of concerns
-
Lint and Format (Stage 1)
- Code formatting check with
rustfmt - Linting with
clippy - Dependency validation
- Unused dependency detection
- Outdated dependency reporting (non-blocking)
- PR comments with dependency status
- Triggers test workflow on success
- Code formatting check with
-
Test and Coverage (Stage 2)
- Only triggered by successful lint workflow
- Unit and integration tests
- Multi-platform testing (Ubuntu, macOS, Windows)
- Multi-Rust-version testing (stable, 1.89)
- Coverage reporting with
cargo-tarpaulin - Codecov integration
Use the justfile commands for local development:
# Run individual CI stages
just ci-lint-format # Linting and formatting checks
just ci-test # Tests and coverage
just ci-local # Full local CI pipeline
# Quick development checks
just quick-check # Quick compilation check
just quick-fmt # Format code
just quick-lint # Run clippy
just pre-commit # Pre-commit checks
# Development tools
just install-tools # Install required development tools
just check-tools # Check which tools are installed
just check-deps # Check for outdated dependencies
just check-deps-json # Check dependencies and save to JSON file
just check-deps-table # Check dependencies in table formatAll workflows can be triggered manually from the GitHub Actions tab:
- Lint and Format: For code quality checks only
- Test and Coverage: For testing across platforms
- CI/CD Pipeline: For full pipeline execution
The CI pipeline automatically checks for outdated dependencies and:
- Uploads reports as artifacts for download
- Comments on PRs with dependency status
- Never fails the build due to outdated dependencies
- Provides actionable feedback for developers
Dependency check outputs:
- π Table format: Human-readable summary
- π JSON format: Machine-readable data
- π― PR comments: Inline notifications
- π¦ Artifacts: Downloadable reports
- Rust 1.70+
- Cargo
cargo buildcargo testcargo run -- basic
cargo run -- rubyzackstrap/
βββ src/
β βββ main.rs # CLI entry point
β βββ lib.rs # Library exports
β βββ config.rs # Configuration structures
β βββ error.rs # Error handling
β βββ generators.rs # File generation logic
βββ tests/
β βββ integration_tests.rs
βββ Cargo.toml
βββ README.md- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Run the test suite
- Submit a pull request
MIT License - see LICENSE file for details.
Zack Kitzmiller - GitHub