# Pony-up!
machine:
  pre:
  # Install gvm
    - bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/1.0.22/binscripts/gvm-installer)

  post:
  # Install many go versions
    - gvm install go1.3.3 -B --name=old
    - gvm install go1.4 -B --name=stable
    # - gvm install tip --name=bleed

  environment:
  # Convenient shortcuts to "common" locations
    CHECKOUT: /home/ubuntu/$CIRCLE_PROJECT_REPONAME
    BASE_DIR: src/github.com/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME
  # Trick circle brainflat "no absolute path" behavior
    BASE_OLD: ../../../$HOME/.gvm/pkgsets/old/global/$BASE_DIR
    BASE_STABLE: ../../../$HOME/.gvm/pkgsets/stable/global/$BASE_DIR
  # BASE_BLEED: ../../../$HOME/.gvm/pkgsets/bleed/global/$BASE_DIR
  # Workaround Circle parsing dumb bugs and/or YAML wonkyness
    CIRCLE_PAIN: "mode: set"

  hosts:
  # Not used yet
    fancy: 127.0.0.1

dependencies:
  pre:
  # Copy the code to the gopath of all go versions
    - >
      gvm use old &&
      mkdir -p "$(dirname $BASE_OLD)" &&
      cp -R "$CHECKOUT" "$BASE_OLD"

    - >
      gvm use stable &&
      mkdir -p "$(dirname $BASE_STABLE)" &&
      cp -R "$CHECKOUT" "$BASE_STABLE"

    # - >
    #   gvm use bleed &&
    #   mkdir -p "$(dirname $BASE_BLEED)" &&
    #   cp -R "$CHECKOUT" "$BASE_BLEED"

  override:
  # Install dependencies for every copied clone/go version
    - gvm use old && go get github.com/tools/godep:
        pwd: $BASE_OLD

    - gvm use stable && go get github.com/tools/godep:
        pwd: $BASE_STABLE

    # - gvm use bleed && go get github.com/tools/godep:
    #   pwd: $BASE_BLEED

  post:
  # For the stable go version, additionally install linting tools
    - >
      gvm use stable &&
      go get github.com/axw/gocov/gocov github.com/mattn/goveralls github.com/golang/lint/golint

test:
  pre:
  # Output the go versions we are going to test
    - gvm use old && go version
    - gvm use stable && go version
    # - gvm use bleed && go version

  # FMT
    - gvm use stable && test -z "$(gofmt -s -l . | grep -v Godeps/_workspace/src/ | tee /dev/stderr)":
        pwd: $BASE_STABLE

  # VET
    - gvm use stable && go vet ./...:
        pwd: $BASE_STABLE

  # LINT
    - gvm use stable && test -z "$(golint ./... | grep -v Godeps/_workspace/src/ | tee /dev/stderr)":
        pwd: $BASE_STABLE

  override:
  # Test every version we have (but stable)
    - gvm use old; godep go test -test.v -test.short ./...:
        timeout: 600
        pwd: $BASE_OLD

    # - gvm use bleed; go test -test.v -test.short ./...:
    #     timeout: 600
    #     pwd: $BASE_BLEED

  # Test stable, and report
  # Preset the goverall report file
    - echo "$CIRCLE_PAIN" > ~/goverage.report
    - gvm use stable; go list ./... | xargs -L 1 -I{} rm -f $GOPATH/src/{}/coverage.out:
        pwd: $BASE_STABLE

    - gvm use stable; go list ./... | xargs -L 1 -I{} godep go test -test.short -coverprofile=$GOPATH/src/{}/coverage.out {}:
        timeout: 600
        pwd: $BASE_STABLE

  post:
  # Aggregate and report to coveralls
    - gvm use stable; go list ./... | xargs -L 1 -I{} cat "$GOPATH/src/{}/coverage.out" | grep -v "$CIRCLE_PAIN" >> ~/goverage.report:
        pwd: $BASE_STABLE
    - gvm use stable; goveralls -service circleci -coverprofile=/home/ubuntu/goverage.report -repotoken $COVERALLS_TOKEN:
        pwd: $BASE_STABLE

  ## Notes
  # Disabled the -race detector due to massive memory usage.
  # Do we want these as well?
  # - go get code.google.com/p/go.tools/cmd/goimports
  # - test -z "$(goimports -l -w ./... | tee /dev/stderr)"
  # http://labix.org/gocheck