name: build_tasks
description: Build Tasks

commands:
    - name: dependencies
      type: parent
      description: Manage dependencies
      aliases: [d]
      commands:
        - name: update
          description: Update dependencies
          type: exec
          aliases: [up]
          dir: "{{ AppDir }}"
          flags:
            - name: verbose
              description: Log verbosely
              short: v
              bool: true
            - name: proxy
              description: Enable using go proxy
              bool: true
              default: "true"
          script: |
            . "{{ BashHelperPath }}"
            
            ab_announce Updating all dependencies
            echo
            
            {{ if eq .Flags.proxy false }}  
            export GOPROXY=direct
            ab_say Disabling go mod proxy
            {{ end }}

            go get -u -n -a -t {{- if .Flags.verbose }} -d -x {{ end }} ./...

            ab_say Running go mod tidy
            
            go mod tidy

    - name: generate
      type: parent
      aliases: [gen]
      description: Performs 'go generate' tasks
      commands:
        - name: all
          description: Generates all files
          type: exec
          dir: "{{ AppDir }}"
          command: go generate

    - name: test
      type: parent
      aliases: [t]
      description: Perform various tests
      commands:
        - name: unit
          type: exec
          description: Run ginkgo unit tests
          aliases: [u]
          arguments:
            - name: dir
              description: Directory to test
              default: .
          script: |
            set -e
            
            go test ./...

        - name: lint
          type: exec
          dir: "{{ AppDir }}"
          flags:
            - name: vet
              description: Perform go vet
              bool: true
              default: true
            - name: staticcheck
              description: Perform staticcheck
              bool: true
              default: true
            - name: update
              description: Updates lint dependencies
              bool: true
          script: |
            set -e
            
            . "{{ BashHelperPath }}"
                        
            {{ if .Flags.update }}
              ab_announce Updating linting tools
              go install github.com/client9/misspell/cmd/misspell@latest
              go install honnef.co/go/tools/cmd/staticcheck@latest
            {{ else }}
              ab_say Run with --update to install required commands
            {{ end }}
            
            ab_say Formatting source files
            go fmt ./...
            
            ab_say Tidying go mod
            go mod tidy

            {{ if .Flags.vet }}
            ab_say Performing go vet
            go vet ./...
            {{ end }}
            
            {{ if .Flags.staticcheck }}
            ab_say Running staticcheck
            staticcheck -f stylish ./...
            {{ end }}