version: 2

references:
  workspace: &workspace
    /go/src/github.com/spf13/cobra

  run_tests: &run_tests
    run:
      name: "All Commands"
      command: |
        mkdir -p bin
        curl -Lso bin/shellcheck https://github.com/caarlos0/shellcheck-docker/releases/download/v0.4.6/shellcheck
        chmod +x bin/shellcheck
        go get -t -v ./...
        PATH=$PATH:$PWD/bin go test -v ./...
        go build
        if [ -z $NOVET ]; then
          diff -u <(echo -n) <(go vet . 2>&1 | grep -vE 'ExampleCommand|bash_completions.*Fprint');
        fi

jobs:
  go-current:
    docker:
      - image: circleci/golang:1.12
    working_directory: *workspace
    steps:
      - checkout
      - *run_tests
      - run:
          name: "Check formatting"
          command: diff -u <(echo -n) <(gofmt -d -s .)
  go-previous:
    docker:
      - image: circleci/golang:1.11
    working_directory: *workspace
    steps:
      - checkout
      - *run_tests
  go-latest:
    docker:
      - image: circleci/golang:latest
    working_directory: *workspace
    steps:
      - checkout
      - *run_tests

workflows:
  version: 2
  main:
    jobs:
      - go-current
      - go-previous
      - go-latest