version: '2'

includes:
  docs: ./docs

vars:
  GIT_COMMIT:
    sh: git log -n 1 --format=%h

  GO_PACKAGES:
    sh: go list ./...

tasks:
  default:
    cmds:
      - task: test

  install:
    desc: Installs Task
    cmds:
      - go install -v -ldflags="-w -s -X main.version={{.GIT_COMMIT}}" ./cmd/task
    env:
      CGO_ENABLED: '0'

  dl-deps:
    desc: Downloads cli dependencies
    cmds:
      - task: go-get
        vars: {REPO: golang.org/x/lint/golint}
      - task: go-get
        vars: {REPO: github.com/goreleaser/goreleaser}
      - task: go-get
        vars: {REPO: github.com/goreleaser/godownloader}

  vendor:
    desc: Sync vendor/ directory according to go.mod file
    cmds:
      - go mod vendor

  update-deps:
    desc: Updates dependencies
    cmds:
      - dep ensure
      - dep ensure -update

  clean:
    desc: Cleans temp files and folders
    cmds:
      - rm -rf dist/

  lint:
    desc: Runs golint
    cmds:
      - golint {{catLines .GO_PACKAGES}}
    silent: true

  test:
    desc: Runs test suite
    deps: [install]
    cmds:
      - go test {{catLines .GO_PACKAGES}}

  test-release:
    desc: Tests release process without publishing
    cmds:
      - goreleaser --snapshot --rm-dist

  generate-install-script:
    desc: Generate install script using https://github.com/goreleaser/godownloader
    cmds:
      - godownloader --repo go-task/task -o install-task.sh
      - cp ./install-task.sh ./docs/install.sh

  ci:
    cmds:
      - task: go-get
        vars: {REPO: golang.org/x/lint/golint}
      - task: lint
      - task: test

  go-get:
    cmds:
      - go get -u {{.REPO}}

  packages:
    cmds:
      - echo '{{.GO_PACKAGES}}'
    silent: true