__ __
| \ \
______ _______ ______ _______| ▓▓\▓▓
/ \| \ / \ / \ ▓▓ \
| ▓▓▓▓▓▓\ ▓▓▓▓▓▓▓\ ▓▓▓▓▓▓\ | ▓▓▓▓▓▓▓ ▓▓ ▓▓
| ▓▓ ▓▓ ▓▓ | ▓▓ ▓▓ | ▓▓ | ▓▓ | ▓▓ ▓▓
| ▓▓▓▓▓▓▓▓ ▓▓ | ▓▓ ▓▓__| ▓▓ | ▓▓_____| ▓▓ ▓▓
\▓▓ \ ▓▓ | ▓▓\▓▓ ▓▓ \▓▓ \ ▓▓ ▓▓
\▓▓▓▓▓▓▓\▓▓ \▓▓_\▓▓▓▓▓▓▓ \▓▓▓▓▓▓▓\▓▓\▓▓
| \__| ▓▓
\▓▓ ▓▓
\▓▓▓▓▓▓
A modern, modular CLI tool for developer automation, dotfiles management, system utilities, and project codemods. Built in Go, designed for extensibility and productivity.
- Modular CLI: Each command is a self-contained module (git, dotfiles, system, codemod, ts, version, config)
- Git Repository Management: Bulk operations across multiple git repositories with intelligent branch detection
- Dotfiles Management: Manage dotfiles via a bare git repo, with sync/fetch helpers
- System Utilities: MacOS/Linux helpers (kill port, find folders, proxy, update)
- Codemod Automation: Project codemods (e.g., lint setup for JS/TS projects)
- TypeScript Helpers: Up/down migration helpers for TypeScript projects
- Config Management: Centralized config via Viper
- Versioning: Shows build info, checks for updates, Homebrew auto-update
- Taskfile-based Dev Workflow: Build, test, lint, release, changelog automation
- CI/CD: GitHub Actions for lint, test, release, changelog
graph LR
A[main.go] --> B[cmd/root.go]
B --> C1[Git Commands]
C1 --> D1[sync-all]
C1 --> D2[fetch-all]
C1 --> D3[pull-all]
C1 --> D4[push-all]
C1 --> D5[status-all]
C1 --> D6[list]
C1 --> D7[branch-all]
C1 --> D8[stash-all]
C1 --> D9[clean-all]
B --> C2[Dotfiles]
C2 --> E1[sync]
C2 --> E2[fetch]
B --> C3[System]
C3 --> F1[kill-port]
C3 --> F2[find-non-movie-folders]
C3 --> F3[proxy]
C3 --> F4[update]
B --> C4[Other Commands]
C4 --> G1[codemod]
C4 --> G2[ts up/down]
C4 --> G3[version]
C4 --> G4[config]
B --> C5[Utils]
C5 --> H1[log]
C5 --> H2[repo]
C5 --> H3[config]
C5 --> H4[files]
C5 --> H5[command]
brew tap eng618/eng
brew install eng
go install github.com/eng618/eng@latest
git clone https://github.com/eng618/eng.git
cd eng
go install .
eng [command] [flags]
eng git
— Git repository management across multiple reposeng dotfiles
— Manage dotfiles (sync, fetch, info)eng system
— System utilities (kill-port, find-non-movie-folders, update, proxy)eng codemod
— Project codemods (e.g., lint-setup)eng ts
— TypeScript helpers (up, down)eng version
— Show version, check for updateseng config
— Show or edit config
Manage multiple git repositories in your development folder with a comprehensive set of commands. All commands support the --current
flag to operate on the current directory instead of the configured development path.
# Configure your development folder path
eng config git-dev-path /path/to/your/dev/folder
eng git sync-all [--current] [--dry-run]
— Fetch and pull with rebase across all repositorieseng git fetch-all [--current] [--dry-run]
— Fetch latest changes from remote for all repositorieseng git pull-all [--current] [--dry-run]
— Pull latest changes with rebase for all repositorieseng git push-all [--current] [--dry-run]
— Push local changes to remote for all repositorieseng git status-all [--current]
— Show git status for all repositorieseng git list [--current]
— List all git repositories foundeng git branch-all [--current]
— Show current branch for all repositorieseng git stash-all [--current] [--dry-run]
— Stash changes in all repositorieseng git clean-all [--current] [--dry-run]
— Clean untracked files in all repositories
--current
— Use current working directory instead of configured development path--dry-run
— Show what would be done without making changes (where applicable)
eng dotfiles --info
— Show current dotfiles configeng dotfiles sync
— Sync dotfiles repoeng dotfiles fetch
— Fetch latest dotfiles
eng system kill-port <port>
— Kill process on a porteng system find-non-movie-folders [--dry-run]
— Find/delete non-movie folderseng system update
— Update system packageseng system proxy
— Manage proxy settings
eng codemod lint-setup
— Setup lint/format (eslint, prettier, husky, lint-staged) in JS/TS projects
eng ts up
— Run up migrationeng ts down
— Run down migration
eng version
— Show version, build info, check for updateseng version --update
— Auto-update via Homebrew (if installed that way)
eng config
— Show configeng config edit
— Edit configeng config git-dev-path
— Set development folder path for git commands
- Build:
task build
orgo build
- Install:
task install
orgo install
- Lint:
task lint
(uses golangci-lint) - Test:
task test
(with coverage) - Validate:
task validate
(lint + test) - Changelog:
task changelog
(uses git-chglog) - Release:
task release
(goreleaser + changelog) - Module Management:
task tidy
,task deps-upgrade
, etc.
See Taskfile.yaml
for all tasks.
- Changelog: Automated with git-chglog
- Release: goreleaser for multi-platform builds
- CI: GitHub Actions (
.github/workflows/go.yml
) runs lint, test, changelog, and release on tag push - Changelog in CI:
task changelog-ci
runs on tag push
- Follow idiomatic Go style (see
.github/copilot-instructions.md
) - Use Go modules (
go mod tidy
) - Lint with
golangci-lint
- Write and update tests for all code (
go test -cover
) - Document code with GoDoc comments
- Keep this README up to date
MIT License © 2023–2025 Eric N. Garcia