version: 2.0

jobs:
  # Base test configuration for Go library tests Each distinct version should
  # inherit this base, and override (at least) the container image used.
  "test": &test
    docker:
      - image: circleci/golang:latest
    working_directory: /go/src/github.com/gorilla/websocket
    steps: &steps
      - checkout
      - run: go version
      - run: go get -t -v ./...
      # Only run gofmt, vet & lint against the latest Go version
      - run: >
          if [[ "$LATEST" = true ]]; then
            go get -u golang.org/x/lint/golint
            golint ./...
          fi
      - run: >
          if [[ "$LATEST" = true ]]; then
            diff -u <(echo -n) <(gofmt -d .)
          fi
      - run: >
          if [[ "$LATEST" = true ]]; then
            go vet -v .
          fi
      - run: if [[ "$LATEST" = true ]]; then go vet -v .; fi
      - run: go test -v -race ./...

  "latest":
    <<: *test
    environment:
      LATEST: true

  "1.12":
    <<: *test
    docker:
      - image: circleci/golang:1.12

  "1.11":
    <<: *test
    docker:
      - image: circleci/golang:1.11

  "1.10":
    <<: *test
    docker:
      - image: circleci/golang:1.10

  "1.9":
    <<: *test
    docker:
      - image: circleci/golang:1.9

  "1.8":
    <<: *test
    docker:
      - image: circleci/golang:1.8

  "1.7":
    <<: *test
    docker:
      - image: circleci/golang:1.7

workflows:
  version: 2
  build:
    jobs:
      - "latest"
      - "1.12"
      - "1.11"
      - "1.10"
      - "1.9"
      - "1.8"
      - "1.7"