diff --git a/.circleci/config.yml b/.circleci/config.yml index e7b95a6..827452d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,25 +1,21 @@ version: 2.1 -executors: - go: - docker: - - image: circleci/golang:1.14 - environment: - GOMAXPROCS: 4 - GO111MODULE: "on" - GOPROXY: https://proxy.golang.org/ - TEST_RESULTS_DIR: &TEST_RESULTS_DIR /tmp/test-results +orbs: + win: circleci/windows@2.2.0 -jobs: - go-checks: - executor: - name: go +references: + environment: &ENVIRONMENT + GOMAXPROCS: 4 + GO111MODULE: "on" + GOPROXY: https://proxy.golang.org/ + TEST_RESULTS_DIR: &TEST_RESULTS_DIR /tmp/test-results + WIN_TEST_RESULTS: &WIN_TEST_RESULTS c:\Users\circleci\AppData\Local\Temp\test-results + +commands: + git-verify: steps: - - checkout - - run: go mod verify - - run: make fmt - - run: - name: verify no code was generated + - run: + name: "Verify no code was generated" command: | if [[ -z $(git status --porcelain) ]]; then echo "Git directory is clean." @@ -29,35 +25,153 @@ jobs: exit 1 fi - go-test: - executor: - name: go + run-gotests: + parameters: + cmd: + type: string + platform: + type: string + steps: + - run: + name: "Run go tests" + command: | + PACKAGE_NAMES=$(go list ./... | circleci tests split --split-by=timings --timings-type=classname) + echo "Running $(echo $PACKAGE_NAMES | wc -w) packages" + echo $PACKAGE_NAMES + << parameters.cmd >> --format=short-verbose --junitfile $TEST_RESULTS_DIR/hcl2/gotestsum-report.xml -- -p 2 -cover -coverprofile=<< parameters.platform >>_cov_$CIRCLE_NODE_INDEX.part $PACKAGE_NAMES + +jobs: + go-checks: + docker: + - image: circleci/golang:<< parameters.go-version >> + environment: + <<: *ENVIRONMENT + parameters: + go-version: + type: string + steps: + - checkout + - run: go mod verify + - run: make fmt + - git-verify + + linux-tests: + docker: + - image: circleci/golang:<< parameters.go-version >> + environment: + <<: *ENVIRONMENT + parameters: + go-version: + type: string + parallelism: 4 steps: - checkout - attach_workspace: at: . - - run: mkdir -p $TEST_RESULTS_DIR - - run: - name: Run Go Tests - command: | - PACKAGE_NAMES=$(go list ./... | circleci tests split --split-by=timings --timings-type=classname) - echo "Running $(echo $PACKAGE_NAMES | wc -w) packages" - echo $PACKAGE_NAMES - gotestsum --format=short-verbose --junitfile $TEST_RESULTS_DIR/gotestsum-report.xml -- -p 2 -cover -coverprofile=cov_$CIRCLE_NODE_INDEX.part $PACKAGE_NAMES + - run: mkdir -p $TEST_RESULTS_DIR/hcl2 + - run-gotests: + cmd: "gotestsum" + platform: "linux" # save coverage report parts - persist_to_workspace: root: . paths: - - cov_*.part + - linux_cov_*.part - store_test_results: path: *TEST_RESULTS_DIR - store_artifacts: path: *TEST_RESULTS_DIR + win-tests: + executor: + name: win/default + shell: bash --login -eo pipefail + environment: + <<: *ENVIRONMENT + working_directory: c:\gopath\src\github.com\hashicorp\hcl + parameters: + go-version: + type: string + gotestsum-version: + type: string + steps: + - run: git config --global core.autocrlf false + - checkout + - attach_workspace: + at: . + # - git-verify + - run: + name: Setup (remove pre-installed golang version) + command: | + rm -rf "c:\Go" + mkdir -p $TEST_RESULTS_DIR/hcl2 + - restore_cache: + keys: + - win-golang-<< parameters.go-version >>-cache-v1 + - win-gomod-cache-{{ checksum "go.mod" }}-v1 + + - run: + name: Install go version << parameters.go-version >> + command: | + if [ ! -d "c:\go" ]; then + echo "Cache not found, installing new version of go" + curl --fail --location https://dl.google.com/go/go<< parameters.go-version >>.windows-amd64.zip --output go.zip + unzip go.zip -d "/c" + fi + - run: + name: Go mod download + command: | + go mod verify + go mod download + + - save_cache: + key: win-golang-<< parameters.go-version >>-cache-v1 + paths: + - /go + + - save_cache: + key: win-gomod-cache-{{ checksum "go.mod" }}-v1 + paths: + - c:\Windows\system32\config\systemprofile\go\pkg\mod + + - run: + name: Install gotestsum + command: | + curl --fail --location https://github.com/gotestyourself/gotestsum/releases/download/v<< parameters.gotestsum-version >>/gotestsum_<< parameters.gotestsum-version >>_windows_amd64.tar.gz --output gotestsum.tar.gz + tar -xvzf gotestsum.tar.gz + - run-gotests: + cmd: "./gotestsum.exe" + platform: "win" + + # save coverage report parts + - persist_to_workspace: + root: . + paths: + - win_cov_*.part + + - store_test_results: + path: *WIN_TEST_RESULTS + - store_artifacts: + path: *WIN_TEST_RESULTS + workflows: - version: 2 - test: + hcl2: jobs: - - go-test + # - go-checks: + # matrix: + # parameters: + # go-version: ["1.14"] + # name: go-checks-<< matrix.go-version >> + - linux-tests: + matrix: + parameters: + go-version: ["1.14"] + name: linux-test-go-<< matrix.go-version >> + - win-tests: + matrix: + parameters: + go-version: ["1.12"] + gotestsum-version: ["0.4.1"] + name: win-test-go-<< matrix.go-version >> diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index e382f8f..0000000 --- a/appveyor.yml +++ /dev/null @@ -1,13 +0,0 @@ -build: off - -clone_folder: c:\gopath\src\github.com\hashicorp\hcl - -environment: - GOPATH: c:\gopath - GO111MODULE: on - GOPROXY: https://goproxy.io - -stack: go 1.12 - -test_script: - - go test ./...