Home

Awesome

codeclimate codecov

travelgrunt

Travel Terragrunt, Terraform and ... ANY [Git] repository tree with CLI as a first class passenger! :airplane:

travelgrunt alleviates the pain of hitting endless cd/<TAB> combos while navigating inside the repo.

:bulb: Video with a brief introduction and a demo is available here :movie_camera:

How to use?

Configuration

:bulb: If no configuration file found travelgrunt will assume repository having only Terragrunt projects inside.

Create .travelgrunt.yml file in the root path of your repository. Example config for a random monorepo:

rules:
  - prefix: vendor/
    negate: true
  - prefix: terragrunt/
    mode: terragrunt
  - prefix: code/
    name: '.*\.(go|js|css|html)$'
  - prefix: config/
    name: '*.yaml'

:arrow_up: Config is essentially a list of sequentially applied path matching rules. Each rule can have these fields:

:bulb: Even while developing travelgrunt itself we use it to navigate package directories of the application :tophat:

Override configured rules with arbitrary expression

You can search by the arbitrary expression instead of configured rules:

tg -x <EXPRESSION> [<match> <match2> ... <matchN>]

Shell aliases and functions

It is absolutely required to use zsh aliases or bash functions. Start from something like this:

ZSH

alias tg='_tg(){ travelgrunt -out-file ~/.tg-path ${@} && cd "$(cat ~/.tg-path)" }; _tg'
alias te='_te(){ travelgrunt -out-file ~/.tg-path -e ${@} && ${EDITOR} "$(cat ~/.tg-path)" }; _te'
alias tt='_tt(){ travelgrunt -top -out-file ~/.tg-path && cd "$(cat ~/.tg-path)" }; _tt'

BASH

function tg() {
	travelgrunt -out-file ~/.tg-path ${@} && cd "$(cat ~/.tg-path)"
}

function te() {
	travelgrunt -out-file ~/.tg-path -e ${@} && ${EDITOR} "$(cat ~/.tg-path)"
}

function tt() {
	travelgrunt -top -out-file ~/.tg-path && cd "$(cat ~/.tg-path)"
}

These lines are usually added to ~/.bashrc or ~/.zshrc file, depending on your system and shell of choice.

:bulb: tt is a "convenience alias" that brings you to the top level path of your repository.

Why aliases?

Core feature of this program is the ability to change working directory while staying inside the current shell. This can not be done by the program itself, because of POSIX security limitations. Without instrumenting the shell with aliases travelgrunt will not work!

CTRL+C / CTRL+D behaviour

When key combinations CTRL+C or CTRL+D get pressed during the execution, following occures:

How to install? :neckbeard:

Install with homebrew:

brew tap ivanilves/tap
brew install ivanilves/tap/travelgrunt

Install latest binary with cURL + sh:

Install latest release binary into /usr/local/bin (default):

curl -s -f \
  https://raw.githubusercontent.com/ivanilves/travelgrunt/main/scripts/install-latest.sh | sh

Install latest release binary into /somewhere/else/bin:

curl -s -f \
  https://raw.githubusercontent.com/ivanilves/travelgrunt/main/scripts/install-latest.sh \
  | PREFIX=/somewhere/else sh

How to build? :construction:

How to release a new version? :package:

:bulb: Make sure you have push permissions for this repository!

Run make release recipe, which will: