# CircleCI 2.0 configuration file # Check https://circleci.com/docs/2.0/language-go/ for more details version: 2.1 parameters: primary_image: type: string default: 'rqlite/circleci-primary:0.0.4' commands: # a reusable command with parameters restore_and_save_cache: steps: - restore_cache: keys: - go-mod-v4-{{ checksum "go.sum" }} - run: go get -v -t -d ./... - save_cache: key: go-mod-v4-{{ checksum "go.sum" }} paths: - "/home/circleci/go/pkg/mod" cross_compile: parameters: cc: type: string goarch: default: "" type: string goos: default: "" type: string steps: - run: name: "Cross compile using <>" command: go install -a -tags sqlite_omit_load_extension ./... environment: CGO_ENABLED: 1 GOARCH: <> GOOS: <> CC: <> jobs: lint: docker: - image: << pipeline.parameters.primary_image >> steps: # Don't do a restore_cache here, so we regularly check that the Go # modules are actually fetchable. - checkout - run: go version - run: test -z "$(gofmt -l . | tee /dev/stderr)" - run: go vet ./... resource_class: large test_odd: docker: - image: << pipeline.parameters.primary_image >> steps: - checkout - restore_and_save_cache - run: go test -failfast $(go list ./... | sed -n 'n;p') resource_class: large test_odd_race: docker: - image: << pipeline.parameters.primary_image >> steps: - checkout - restore_and_save_cache - run: command: go test -failfast -timeout 20m -race $(go list ./... | sed -n 'n;p') environment: GORACE: "halt_on_error=1" resource_class: large test_even: docker: - image: << pipeline.parameters.primary_image >> steps: - checkout - restore_and_save_cache - run: go test -failfast $(go list ./... | sed -n 'p;n') resource_class: large test_even_race: docker: - image: << pipeline.parameters.primary_image >> steps: - checkout - restore_and_save_cache - run: command: go test -failfast -timeout 20m -race $(go list ./... | sed -n 'p;n') environment: GORACE: "halt_on_error=1" resource_class: large cross_compile_windows: docker: - image: << pipeline.parameters.primary_image >> steps: - checkout - restore_and_save_cache - cross_compile: cc: x86_64-w64-mingw32-gcc goarch: amd64 goos: windows resource_class: large cross_compile: docker: - image: << pipeline.parameters.primary_image >> steps: - checkout - restore_and_save_cache - cross_compile: cc: musl-gcc goarch: amd64 - cross_compile: cc: riscv64-linux-gnu-gcc goarch: riscv64 - cross_compile: cc: powerpc64le-linux-gnu-gcc goarch: ppc64le resource_class: large cross_compile_arm: docker: - image: << pipeline.parameters.primary_image >> steps: - checkout - restore_and_save_cache - cross_compile: cc: arm-linux-gnueabi-gcc goarch: arm - cross_compile: cc: aarch64-linux-gnu-gcc goarch: arm64 resource_class: large cross_compile_mips: docker: - image: << pipeline.parameters.primary_image >> steps: - checkout - restore_and_save_cache - cross_compile: cc: mips-linux-gnu-gcc goarch: mips - cross_compile: cc: mips64-linux-gnuabi64-gcc goarch: mips64 resource_class: large cross_compile_mips_le: docker: - image: << pipeline.parameters.primary_image >> steps: - checkout - restore_and_save_cache - cross_compile: cc: mipsel-linux-gnu-gcc goarch: mipsle - cross_compile: cc: mips64el-linux-gnuabi64-gcc goarch: mips64le resource_class: large end_to_end_single: docker: - image: << pipeline.parameters.primary_image >> steps: - checkout - restore_and_save_cache - run: go version - run: go install -tags osusergo,netgo,sqlite_omit_load_extension -ldflags="-extldflags=-static" ./... - run: command: python3 system_test/e2e/single_node.py environment: RQLITED_PATH: /home/circleci/go/bin/rqlited resource_class: large end_to_end_upgrade: docker: - image: << pipeline.parameters.primary_image >> steps: - checkout - restore_and_save_cache - run: go install -tags osusergo,netgo,sqlite_omit_load_extension -ldflags="-extldflags=-static" ./... - run: command: | cd system_test/e2e python3 upgrade.py environment: RQLITED_PATH: /home/circleci/go/bin/rqlited resource_class: large end_to_end_joining: docker: - image: << pipeline.parameters.primary_image >> steps: - checkout - restore_and_save_cache - run: go install -tags osusergo,netgo,sqlite_omit_load_extension -ldflags="-extldflags=-static" ./... - run: command: python3 system_test/e2e/joining.py environment: RQLITED_PATH: /home/circleci/go/bin/rqlited resource_class: large end_to_end_multi: docker: - image: << pipeline.parameters.primary_image >> steps: - checkout - restore_and_save_cache - run: go install -tags osusergo,netgo,sqlite_omit_load_extension -ldflags="-extldflags=-static" ./... - run: command: python3 system_test/e2e/multi_node.py environment: RQLITED_PATH: /home/circleci/go/bin/rqlited resource_class: large end_to_end_multi_adv: docker: - image: << pipeline.parameters.primary_image >> steps: - checkout - restore_and_save_cache - run: go install -tags osusergo,netgo,sqlite_omit_load_extension -ldflags="-extldflags=-static" ./... - run: command: python3 system_test/e2e/multi_node_adv.py environment: RQLITED_PATH: /home/circleci/go/bin/rqlited resource_class: large end_to_end_autoclustering: docker: - image: << pipeline.parameters.primary_image >> - image: hashicorp/consul - image: gcr.io/etcd-development/etcd:v3.5.1 steps: - checkout - restore_and_save_cache - run: go install -tags osusergo,netgo,sqlite_omit_load_extension -ldflags="-extldflags=-static" ./... - run: command: python3 system_test/e2e/auto_clustering.py environment: RQLITED_PATH: /home/circleci/go/bin/rqlited resource_class: large end_to_end_auto_state: docker: - image: << pipeline.parameters.primary_image >> steps: - checkout - restore_and_save_cache - run: go install -tags osusergo,netgo,sqlite_omit_load_extension -ldflags="-extldflags=-static" ./... - run: command: python3 system_test/e2e/auto_state.py environment: RQLITED_PATH: /home/circleci/go/bin/rqlited resource_class: large workflows: version: 2 build_and_test: jobs: - lint - cross_compile - cross_compile_windows - cross_compile_arm - cross_compile_mips - cross_compile_mips_le - test_even - test_even_race - test_odd - test_odd_race - end_to_end_single - end_to_end_multi - end_to_end_multi_adv - end_to_end_joining - end_to_end_autoclustering - end_to_end_auto_state - end_to_end_upgrade