Skip to content

Task Nesting Loop For

Vendor: https://taskfile.dev/ Github: https://github.com/go-task/task

Usage case: set git config value for all repositories of team/organization

version: "3"

vars:
  config:
    - { o: 'user.name', v: user }
    - { o: 'user.email', v: [email protected] }
    - { o: 'pull.rebase', v: 'false' }
    - 
  path: "~/dev/my"

  repos:
    sh: "ls -1 {{.path}} | grep -v disabled"
  cG: "\e[38;05;10m"
  cB: "\e[38;05;12m"
  cZ: '\033[0m'

tasks:
  default:
    silent: true
    cmds:
      - echo "Git Team Project Tool"

  list:
    silent: true
    desc: List existing directories
    cmds:
      - for: { var: repos }
        cmd: echo {{.ITEM}}
      - 
# ... skipped ...

  setconfig:
    desc: "git set config options"
    cmds:
      - for: { var: repos }
        task: setconfig-items
        vars:
          repo: "{{.ITEM}}"

  setconfig-items:
    internal: true
    silent: true
    cmds:
      - for:
          var: config
        cmd: |
          echo -e "{{.cB}}[*] Repo: {{.path}}/{{.repo}}{{.cZ}} {{.cG}}{{.ITEM.o}}{{.cZ}}: {{.ITEM.v}}"
          bash -c "git -C {{.path}}/{{.repo}} config {{.ITEM.o}} {{.ITEM.v}}"