version: 2.1 orbs: golang: cci-orb/golang@volatile codecov: codecov/codecov@volatile command_vars: - cache_key: &cache_key gomod-<< parameters.go-version >>-{{ checksum "go.mod" }}-{{ checksum "go.sum" }} - cache_tools_key: &cache_tools_key tools-<< parameters.go-version >>-{{ checksum "tools/go.mod" }}-{{ checksum "tools/go.sum" }} commands: restore_dependencies: parameters: go-version: type: string steps: - restore_cache: name: "Restore module dependencies cache" keys: - *cache_key - restore_cache: name: "Restore dependencies tools" keys: - *cache_tools_key - run: name: "Download project modules" command: | go mod download save_dependencies: parameters: go-version: type: string steps: - save_cache: name: "Save module cache" key: *cache_key paths: - /go/pkg/mod/cache - save_cache: name: "Save dependencies tools" key: *cache_tools_key paths: - /go/bin/ - run: name: "go mod vendor" command: | go mod vendor setup: steps: - checkout - run: name: Check versions command: | go version go env - run: name: "Parse CPUs" command: | # https://circleci.com/changelog#container-cgroup-limits-now-visible-inside-the-docker-executor CPUS="$(echo $(($(cat /sys/fs/cgroup/cpu/cpu.shares) / 1024)))" echo "export CPUS=${CPUS}" >> $BASH_ENV install_tools: steps: - run: name: "Download project tool dependencies" command: | if [ -z $(find /go/bin/ -mindepth 1 -type f -executable | head -1) ]; then make -j${CPUS} tools GOBIN=/go/bin fi set_goflags: steps: - run: name: "Parse CPUs" command: | echo "export GOFLAGS='-p=${CPUS} -cpu=${CPUS}'" >> $BASH_ENV jobs: test: parameters: go-version: type: string docker: - image: golang:<< parameters.go-version >> auth: username: $DOCKERHUB_USER password: $DOCKERHUB_PASSWORD working_directory: /go/src/go.lsp.dev/uri resource_class: medium steps: - restore_dependencies: go-version: << parameters.go-version >> - install_tools - save_dependencies: go-version: << parameters.go-version >> - set_goflags - run: name: Test and take a coverage environment: GOTESTSUM_FORMAT: standard-verbose GOTESTSUM_JUNITFILE: /tmp/test-results/tests.xml GOTESTSUM_JSONFILE: /tmp/test-results/tests.json command: | mkdir -p /tmp/test-results make coverage - codecov/upload: file: "coverage.out" when: on_success lint: parameters: go-version: type: string docker: - image: golang:<< parameters.go-version >> auth: username: $DOCKERHUB_USER password: $DOCKERHUB_PASSWORD working_directory: /go/src/go.lsp.dev/uri resource_class: medium steps: - restore_dependencies: go-version: << parameters.go-version >> - install_tools - save_dependencies: go-version: << parameters.go-version >> - run: name: Run fmt and lint for sources command: | make lint git add -N . && git diff --exit-code workflows: version: 2 workflows: jobs: - test: context: org-global matrix: parameters: go-version: ["1.15-buster", "1.16-rc-buster"] pre-steps: - setup post-steps: - store_test_results: path: /tmp/test-results - store_artifacts: path: /tmp/test-results - lint: context: org-global matrix: parameters: go-version: ["1.15-buster"] pre-steps: - setup