garden-tools 0.9.1

Garden grows and cultivates collections of Git trees Garden lets you define and run commands over collections of configuration-defined multi-worktree Git environments.
Documentation
# usage:
#   garden <cmd> [-- [<args>]]
# examples:
#   garden build -- --offline
#   garden -D prefix=/usr/local install
#   garden -D prefix=/usr/local install-doc
commands:
  bench: cargo bench "$@"
  build: cargo build "$@"
  check: garden -vv cmd garden test check/clippy check/fmt
  check/clippy: cargo clippy --all "$@" -- -D warnings
  check/fmt: cargo fmt --check "$@"
  clean: cargo clean "$@"
  commit: git commit "$@"
  coverage: cargo kcov "$@"
  diff: git diff "$@"
  diffs: git diff --staged "$@"
  doc: |
    cargo doc --no-deps --package ${cargo_package} "$@"
    cd doc
    ${mdbook} build --dest-dir book.new
    rsync -r --delete --exclude=.git book.new/ book/
    rm -rf book.new
  fix: cargo clippy --all --fix "$@" -- -D warnings
  fmt: cargo fmt "$@"
  git: git "$@"
  install: |
    cargo build --release "$@"
    install -m 775 -d "${DESTDIR}${bindir}"
    install -m 755 target/release/garden "${DESTDIR}${bindir}"
  install-doc: |
    garden doc "$@"
    mkdir -p "${DESTDIR}${docdir}"
    rsync -r --exclude=.git doc/book/ "${DESTDIR}${docdir}/"
  push: git push "$@"
  setup: |
    echo ':' git fetch pages
    git fetch pages || (
      echo
      echo 'error: The "pages" remote is not available.'
      echo
      echo To fix this, run either of these two commands and try again.
      echo
      echo '    garden grow .'
      echo
      echo '    git remote add pages git@gitlab.com:garden-rs/garden-rs.github.io.git'
      echo
      echo 'The first command uses "garden" to configure the "pages" remote.'
      echo 'The second command uses "git" to add the "pages" remote directly instead.'
      return 1
    )
    garden grow doc/book
    garden grow homebrew
  stage: git add --update "$@"
  stat: git status --short "$@"
  status: git status "$@"
  test: cargo test "$@"
  update: cargo update "$@"
  watch: cargo watch --shell "garden build && garden check && garden test"

# Variables can be set externally. eg.:
#   garden -D DESTDIR=/tmp/stage -D prefix=/usr/local install-doc
variables:
  cargo_package: garden-tools
  DESTDIR: ""
  prefix: ~/.cargo
  bindir: ${prefix}/bin
  docdir: ${prefix}/share/doc/garden
  mdbook: mdbook

groups:
  garden: garden
  doc: doc/book
  brew: homebrew
  all:
    - garden
    - doc/book
    - homebrew

trees:
  garden:
    path: ${GARDEN_CONFIG_DIR}
    url: "git@gitlab.com:garden-rs/garden.git"
    remotes:
      garden: "git@gitlab.com:garden-rs/garden.git"
      davvid: "git@gitlab.com:davvid/garden.git"
      github: "git@github.com:davvid/garden.git"
      jtietema: "https://github.com/jtietema/garden.git"
      slackline: "https://github.com/slackline/garden.git"
      pages: "git@gitlab.com:garden-rs/garden-rs.gitlab.io.git"
    gitconfig:
      remote.origin.pushurl:
        - "git@gitlab.com:garden-rs/garden.git"
        - "git@github.com:davvid/garden.git"
      branch.pages.remote: pages
      remote.pages.pushurl:
        - "git@gitlab.com:garden-rs/garden-rs.gitlab.io.git"
        - "git@github.com:davvid/garden.git"

  doc/book:
    worktree: garden
    branch: pages
    branches:
      pages: pages/pages

  homebrew: "git@gitlab.com:garden-rs/homebrew-garden.git"