### *** ### WARNING: DO NOT manually EDIT or MERGE this file, it is generated by 'make ci-config'. ### INSTEAD: Edit or merge the source in config/ then run 'make ci-config'. ### *** version: 2 jobs: pre-flight-checks: docker: - image: circleci/buildpack-deps environment: - CCI_VERSION: 0.1.5691 shell: /usr/bin/env bash -euo pipefail steps: - checkout - run: command: | export CCI_PATH=/tmp/circleci-cli/$CCI_VERSION mkdir -p $CCI_PATH NAME=circleci-cli_${CCI_VERSION}_${ARCH} URL=$BASE/v${CCI_VERSION}/${NAME}.tar.gz curl -sSL $URL \ | tar --overwrite --strip-components=1 -xz -C $CCI_PATH "${NAME}/circleci" # Add circleci to the path for subsequent steps. echo "export PATH=$CCI_PATH:\$PATH" >> $BASH_ENV # Done, print some debug info. set -x . $BASH_ENV which circleci circleci version environment: ARCH: linux_amd64 BASE: https://github.com/CircleCI-Public/circleci-cli/releases/download name: Install CircleCI CLI - run: command: make ci-verify install-ui-dependencies: docker: - environment: JOBS: 2 image: node:10-buster shell: /usr/bin/env bash -euo pipefail -c working_directory: /go/src/github.com/hashicorp/vault steps: - checkout - restore_cache: key: yarn-lock-v6-{{ checksum "ui/yarn.lock" }} - run: command: | cd ui yarn install npm rebuild node-sass name: Install UI dependencies - save_cache: key: yarn-lock-v6-{{ checksum "ui/yarn.lock" }} paths: - ui/node_modules build-go-dev: machine: true shell: /usr/bin/env bash -euo pipefail -c working_directory: /go/src/github.com/hashicorp/vault steps: - run: command: | [ -n "$GO_VERSION" ] || { echo "You must set GO_VERSION"; exit 1; } # Install Go curl -sSLO "https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz" sudo rm -rf /usr/local/go sudo tar -C /usr/local -xzf "go${GO_VERSION}.linux-amd64.tar.gz" rm -f "go${GO_VERSION}.linux-amd64.tar.gz" GOPATH="/go" mkdir $GOPATH 2>/dev/null || { sudo mkdir $GOPATH && sudo chmod 777 $GOPATH; } echo "export GOPATH='$GOPATH'" >> "$BASH_ENV" echo "export PATH='$PATH:$GOPATH/bin:/usr/local/go/bin'" >> "$BASH_ENV" echo "$ go version" go version name: Setup Go working_directory: ~/ - checkout - attach_workspace: at: . - run: command: | # Move dev UI assets to expected location rm -rf ./pkg mkdir ./pkg # Build dev binary make ci-bootstrap dev name: Build dev binary - persist_to_workspace: paths: - bin root: . environment: - CIRCLECI_CLI_VERSION: 0.1.5546 - GO_TAGS: '' - GO_VERSION: 1.13.8 - GO111MODULE: 'off' - GOTESTSUM_VERSION: 0.3.3 test-ui: docker: - environment: JOBS: 2 image: node:10-buster shell: /usr/bin/env bash -euo pipefail -c working_directory: /go/src/github.com/hashicorp/vault resource_class: medium+ steps: - checkout - restore_cache: key: yarn-lock-v6-{{ checksum "ui/yarn.lock" }} - attach_workspace: at: . - run: command: | set -x # Install Chrome wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub \ | apt-key add - echo "deb http://dl.google.com/linux/chrome/deb/ stable main" \ | tee /etc/apt/sources.list.d/google-chrome.list apt-get update apt-get -y install google-chrome-stable rm /etc/apt/sources.list.d/google-chrome.list rm -rf /var/lib/apt/lists/* /var/cache/apt/* # Add ./bin to the PATH so vault binary can be run by Ember tests export PATH="${PWD}/bin:${PATH}" # Run Ember tests cd ui mkdir -p test-results/qunit yarn test:oss name: Test UI - store_artifacts: path: ui/test-results - store_test_results: path: ui/test-results test-ui-browserstack: docker: - environment: JOBS: 2 image: node:10-buster shell: /usr/bin/env bash -euo pipefail -c working_directory: /go/src/github.com/hashicorp/vault resource_class: medium+ steps: - checkout - restore_cache: key: yarn-lock-v6-{{ checksum "ui/yarn.lock" }} - attach_workspace: at: . - run: command: | # Add ./bin to the PATH so vault binary can be found. export PATH="${PWD}"/bin:${PATH} make test-ui-browserstack name: Run Browserstack Tests test-go: machine: true shell: /usr/bin/env bash -euo pipefail -c working_directory: /go/src/github.com/hashicorp/vault parallelism: 2 steps: - run: command: | # If the branch being tested starts with ui/ or docs/ we want to exit the job without failing [[ "$CIRCLE_BRANCH" = ui/* || "$CIRCLE_BRANCH" = docs/* ]] && { # stop the job from this step circleci-agent step halt } # exit with success either way exit 0 name: Check branch name working_directory: ~/ - run: command: | [ -n "$GO_VERSION" ] || { echo "You must set GO_VERSION"; exit 1; } # Install Go curl -sSLO "https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz" sudo rm -rf /usr/local/go sudo tar -C /usr/local -xzf "go${GO_VERSION}.linux-amd64.tar.gz" rm -f "go${GO_VERSION}.linux-amd64.tar.gz" GOPATH="/go" mkdir $GOPATH 2>/dev/null || { sudo mkdir $GOPATH && sudo chmod 777 $GOPATH; } echo "export GOPATH='$GOPATH'" >> "$BASH_ENV" echo "export PATH='$PATH:$GOPATH/bin:/usr/local/go/bin'" >> "$BASH_ENV" echo "$ go version" go version name: Setup Go working_directory: ~/ - checkout - run: command: | set -x # Install CircleCI CLI curl -sSL \ "https://github.com/CircleCI-Public/circleci-cli/releases/download/v${CIRCLECI_CLI_VERSION}/circleci-cli_${CIRCLECI_CLI_VERSION}_linux_amd64.tar.gz" \ | sudo tar --overwrite -xz \ -C /usr/local/bin \ "circleci-cli_${CIRCLECI_CLI_VERSION}_linux_amd64/circleci" # Split Go tests by prior test times package_names=$(go list \ -tags "${GO_TAGS}" \ ./... \ | grep -v /integ \ | grep -v /vendor/ \ | sort \ | circleci tests split --split-by=timings --timings-type=classname) # Install gotestsum curl -sSL "https://github.com/gotestyourself/gotestsum/releases/download/v${GOTESTSUM_VERSION}/gotestsum_${GOTESTSUM_VERSION}_linux_amd64.tar.gz" \ | sudo tar --overwrite -xz -C /usr/local/bin gotestsum # Run tests make prep mkdir -p test-results/go-test CGO_ENABLED= \ VAULT_ADDR= \ VAULT_TOKEN= \ VAULT_DEV_ROOT_TOKEN_ID= \ VAULT_ACC= \ VAULT_TEST_LOG_DIR=/tmp/testlogs \ gotestsum --format=short-verbose --junitfile test-results/go-test/results.xml -- \ -tags "${GO_TAGS}" \ -timeout=60m \ -parallel=20 \ \ ${package_names} name: Run Go tests no_output_timeout: 60m - store_artifacts: path: test-results - store_test_results: path: test-results - store_artifacts: path: /tmp/testlogs environment: - CIRCLECI_CLI_VERSION: 0.1.5546 - GO_TAGS: '' - GO_VERSION: 1.13.8 - GO111MODULE: 'off' - GOTESTSUM_VERSION: 0.3.3 test-go-race: machine: true shell: /usr/bin/env bash -euo pipefail -c working_directory: /go/src/github.com/hashicorp/vault steps: - run: command: | [ -n "$GO_VERSION" ] || { echo "You must set GO_VERSION"; exit 1; } # Install Go curl -sSLO "https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz" sudo rm -rf /usr/local/go sudo tar -C /usr/local -xzf "go${GO_VERSION}.linux-amd64.tar.gz" rm -f "go${GO_VERSION}.linux-amd64.tar.gz" GOPATH="/go" mkdir $GOPATH 2>/dev/null || { sudo mkdir $GOPATH && sudo chmod 777 $GOPATH; } echo "export GOPATH='$GOPATH'" >> "$BASH_ENV" echo "export PATH='$PATH:$GOPATH/bin:/usr/local/go/bin'" >> "$BASH_ENV" echo "$ go version" go version name: Setup Go working_directory: ~/ - checkout - run: command: | set -x # Install CircleCI CLI curl -sSL \ "https://github.com/CircleCI-Public/circleci-cli/releases/download/v${CIRCLECI_CLI_VERSION}/circleci-cli_${CIRCLECI_CLI_VERSION}_linux_amd64.tar.gz" \ | sudo tar --overwrite -xz \ -C /usr/local/bin \ "circleci-cli_${CIRCLECI_CLI_VERSION}_linux_amd64/circleci" # Split Go tests by prior test times package_names=$(go list \ -tags "${GO_TAGS}" \ ./... \ | grep -v /integ \ | grep -v /vendor/ \ | sort \ | circleci tests split --split-by=timings --timings-type=classname) # Install gotestsum curl -sSL "https://github.com/gotestyourself/gotestsum/releases/download/v${GOTESTSUM_VERSION}/gotestsum_${GOTESTSUM_VERSION}_linux_amd64.tar.gz" \ | sudo tar --overwrite -xz -C /usr/local/bin gotestsum # Run tests make prep mkdir -p test-results/go-test CGO_ENABLED= \ VAULT_ADDR= \ VAULT_TOKEN= \ VAULT_DEV_ROOT_TOKEN_ID= \ VAULT_ACC= \ VAULT_TEST_LOG_DIR=/tmp/testlogs \ gotestsum --format=short-verbose --junitfile test-results/go-test/results.xml -- \ -tags "${GO_TAGS}" \ -timeout=60m \ -parallel=20 \ -race \ ${package_names} name: Run Go tests no_output_timeout: 60m - store_artifacts: path: test-results - store_test_results: path: test-results - store_artifacts: path: /tmp/testlogs environment: - CIRCLECI_CLI_VERSION: 0.1.5546 - GO_TAGS: '' - GO_VERSION: 1.13.8 - GO111MODULE: 'off' - GOTESTSUM_VERSION: 0.3.3 website-docker-image: docker: - image: circleci/buildpack-deps shell: /usr/bin/env bash -euo pipefail -c steps: - checkout - setup_remote_docker - run: command: | IMAGE_TAG="$(git rev-list -n1 HEAD -- website/Dockerfile website/package-lock.json)" echo "Using $IMAGE_TAG" if [ "$CIRCLE_REPOSITORY_URL" != "git@github.com:hashicorp/vault.git" ]; then echo "Not Vault OSS Repo, not building website docker image" elif curl https://hub.docker.com/v2/repositories/hashicorp/vault-website/tags/$IMAGE_TAG -fsL > /dev/null; then echo "Dependencies have not changed, not building a new website docker image." else cd website/ docker build -t hashicorp/vault-website:$IMAGE_TAG . docker tag hashicorp/vault-website:$IMAGE_TAG hashicorp/vault-website:latest docker login -u $WEBSITE_DOCKER_USER -p $WEBSITE_DOCKER_PASS docker push hashicorp/vault-website fi name: Build Docker Image if Necessary workflows: ci: jobs: - pre-flight-checks - install-ui-dependencies: requires: - pre-flight-checks - build-go-dev: requires: - pre-flight-checks - test-ui: requires: - install-ui-dependencies - build-go-dev - test-ui-browserstack: filters: branches: ignore: /pull\/[0-9]+/ requires: - install-ui-dependencies - build-go-dev - test-go: requires: - build-go-dev - test-go-race: filters: branches: ignore: - /^docs\/.*/ - /^ui\/.*/ requires: - build-go-dev - website-docker-image: filters: branches: only: - master context: vault-docs version: 2 # Original config.yml file: # commands: # check-branch-name: # description: | # Check if branch name starts with ui/ or docs/ and if so, exit. # steps: # - run: # command: | # # If the branch being tested starts with ui/ or docs/ we want to exit the job without failing # [[ \"$CIRCLE_BRANCH\" = ui/* || \"$CIRCLE_BRANCH\" = docs/* ]] && { # # stop the job from this step # circleci-agent step halt # } # # exit with success either way # exit 0 # name: Check branch name # working_directory: ~/ # go_test: # description: run go tests # parameters: # extra_flags: # default: \"\" # type: string # log_dir: # default: /tmp/testlogs # type: string # steps: # - run: # command: | # set -x # # # Install CircleCI CLI # curl -sSL \\ # \"https://github.com/CircleCI-Public/circleci-cli/releases/download/v${CIRCLECI_CLI_VERSION}/circleci-cli_${CIRCLECI_CLI_VERSION}_linux_amd64.tar.gz\" \\ # | sudo tar --overwrite -xz \\ # -C /usr/local/bin \\ # \"circleci-cli_${CIRCLECI_CLI_VERSION}_linux_amd64/circleci\" # # # Split Go tests by prior test times # package_names=$(go list \\ # -tags \"${GO_TAGS}\" \\ # ./... \\ # | grep -v /integ \\ # | grep -v /vendor/ \\ # | sort \\ # | circleci tests split --split-by=timings --timings-type=classname) # # # Install gotestsum # curl -sSL \"https://github.com/gotestyourself/gotestsum/releases/download/v${GOTESTSUM_VERSION}/gotestsum_${GOTESTSUM_VERSION}_linux_amd64.tar.gz\" \\ # | sudo tar --overwrite -xz -C /usr/local/bin gotestsum # # # Run tests # make prep # mkdir -p test-results/go-test # CGO_ENABLED= \\ # VAULT_ADDR= \\ # VAULT_TOKEN= \\ # VAULT_DEV_ROOT_TOKEN_ID= \\ # VAULT_ACC= \\ # VAULT_TEST_LOG_DIR=<< parameters.log_dir >> \\ # gotestsum --format=short-verbose --junitfile test-results/go-test/results.xml -- \\ # -tags \"${GO_TAGS}\" \\ # -timeout=60m \\ # -parallel=20 \\ # << parameters.extra_flags >> \\ # ${package_names} # name: Run Go tests # no_output_timeout: 60m # restore_yarn_cache: # steps: # - restore_cache: # key: yarn-lock-v6-{{ checksum \"ui/yarn.lock\" }} # save_yarn_cache: # steps: # - save_cache: # key: yarn-lock-v6-{{ checksum \"ui/yarn.lock\" }} # paths: # - ui/node_modules # setup-go: # description: | # Ensure the right version of Go is installed and set GOPATH to $HOME/go. # steps: # - run: # command: | # [ -n \"$GO_VERSION\" ] || { echo \"You must set GO_VERSION\"; exit 1; } # # Install Go # curl -sSLO \"https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz\" # sudo rm -rf /usr/local/go # sudo tar -C /usr/local -xzf \"go${GO_VERSION}.linux-amd64.tar.gz\" # rm -f \"go${GO_VERSION}.linux-amd64.tar.gz\" # GOPATH=\"/go\" # mkdir $GOPATH 2>/dev/null || { sudo mkdir $GOPATH && sudo chmod 777 $GOPATH; } # echo \"export GOPATH='$GOPATH'\" >> \"$BASH_ENV\" # echo \"export PATH='$PATH:$GOPATH/bin:/usr/local/go/bin'\" >> \"$BASH_ENV\" # # echo \"$ go version\" # go version # name: Setup Go # working_directory: ~/ # executors: # alpine: # docker: # - image: alpine:3.10.2 # shell: /bin/sh # working_directory: /go/src/github.com/hashicorp/vault # go-machine: # environment: # CIRCLECI_CLI_VERSION: 0.1.5546 # GO_TAGS: \"\" # GO_VERSION: 1.13.8 # GO111MODULE: \"off\" # GOTESTSUM_VERSION: 0.3.3 # machine: true # shell: /usr/bin/env bash -euo pipefail -c # working_directory: /go/src/github.com/hashicorp/vault # node: # docker: # - environment: # JOBS: 2 # image: node:10-buster # shell: /usr/bin/env bash -euo pipefail -c # working_directory: /go/src/github.com/hashicorp/vault # python: # docker: # - image: python:3-alpine # shell: /usr/bin/env bash -euo pipefail -c # working_directory: /go/src/github.com/hashicorp/vault # jobs: # build-go-dev: # executor: go-machine # steps: # - setup-go # - checkout # - attach_workspace: # at: . # - run: # command: | # # Move dev UI assets to expected location # rm -rf ./pkg # mkdir ./pkg # # # Build dev binary # make ci-bootstrap dev # name: Build dev binary # - persist_to_workspace: # paths: # - bin # root: . # install-ui-dependencies: # executor: node # steps: # - checkout # - restore_yarn_cache # - run: # command: | # cd ui # yarn install # npm rebuild node-sass # name: Install UI dependencies # - save_yarn_cache # pre-flight-checks: # description: Ensures nothing obvious is broken for faster failures. # docker: # - image: circleci/buildpack-deps # environment: # CCI_VERSION: 0.1.5691 # shell: /usr/bin/env bash -euo pipefail # steps: # - checkout # - run: # command: | # export CCI_PATH=/tmp/circleci-cli/$CCI_VERSION # mkdir -p $CCI_PATH # NAME=circleci-cli_${CCI_VERSION}_${ARCH} # URL=$BASE/v${CCI_VERSION}/${NAME}.tar.gz # curl -sSL $URL \\ # | tar --overwrite --strip-components=1 -xz -C $CCI_PATH \"${NAME}/circleci\" # # Add circleci to the path for subsequent steps. # echo \"export PATH=$CCI_PATH:\\$PATH\" >> $BASH_ENV # # Done, print some debug info. # set -x # . $BASH_ENV # which circleci # circleci version # environment: # ARCH: linux_amd64 # BASE: https://github.com/CircleCI-Public/circleci-cli/releases/download # name: Install CircleCI CLI # - run: make ci-verify # test-go: # executor: go-machine # parallelism: 2 # steps: # - check-branch-name # - setup-go # - checkout # - go_test: # log_dir: /tmp/testlogs # - store_artifacts: # path: test-results # - store_test_results: # path: test-results # - store_artifacts: # path: /tmp/testlogs # test-go-race: # executor: go-machine # steps: # - setup-go # - checkout # - go_test: # extra_flags: -race # log_dir: /tmp/testlogs # - store_artifacts: # path: test-results # - store_test_results: # path: test-results # - store_artifacts: # path: /tmp/testlogs # test-ui: # executor: node # resource_class: medium+ # steps: # - checkout # - restore_yarn_cache # - attach_workspace: # at: . # - run: # command: | # set -x # # # Install Chrome # wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub \\ # | apt-key add - # echo \"deb http://dl.google.com/linux/chrome/deb/ stable main\" \\ # | tee /etc/apt/sources.list.d/google-chrome.list # apt-get update # apt-get -y install google-chrome-stable # rm /etc/apt/sources.list.d/google-chrome.list # rm -rf /var/lib/apt/lists/* /var/cache/apt/* # # # Add ./bin to the PATH so vault binary can be run by Ember tests # export PATH=\"${PWD}/bin:${PATH}\" # # # Run Ember tests # cd ui # mkdir -p test-results/qunit # yarn test:oss # name: Test UI # - store_artifacts: # path: ui/test-results # - store_test_results: # path: ui/test-results # test-ui-browserstack: # executor: node # resource_class: medium+ # steps: # - checkout # - restore_yarn_cache # - attach_workspace: # at: . # - run: # command: | # # Add ./bin to the PATH so vault binary can be found. # export PATH=\"${PWD}\"/bin:${PATH} # make test-ui-browserstack # name: Run Browserstack Tests # website-docker-image: # docker: # - image: circleci/buildpack-deps # shell: /usr/bin/env bash -euo pipefail -c # steps: # - checkout # - setup_remote_docker # - run: # command: | # IMAGE_TAG=\"$(git rev-list -n1 HEAD -- website/Dockerfile website/package-lock.json)\" # echo \"Using $IMAGE_TAG\" # if [ \"$CIRCLE_REPOSITORY_URL\" != \"git@github.com:hashicorp/vault.git\" ]; then # echo \"Not Vault OSS Repo, not building website docker image\" # elif curl https://hub.docker.com/v2/repositories/hashicorp/vault-website/tags/$IMAGE_TAG -fsL > /dev/null; then # echo \"Dependencies have not changed, not building a new website docker image.\" # else # cd website/ # docker build -t hashicorp/vault-website:$IMAGE_TAG . # docker tag hashicorp/vault-website:$IMAGE_TAG hashicorp/vault-website:latest # docker login -u $WEBSITE_DOCKER_USER -p $WEBSITE_DOCKER_PASS # docker push hashicorp/vault-website # fi # name: Build Docker Image if Necessary # references: # cache: # go-sum: go-sum-v1-{{ checksum \"go.sum\" }} # yarn-lock: yarn-lock-v6-{{ checksum \"ui/yarn.lock\" }} # images: # node: node:10-buster # version: 2.1 # workflows: # ci: # jobs: # - pre-flight-checks # - install-ui-dependencies: # requires: # - pre-flight-checks # - build-go-dev: # requires: # - pre-flight-checks # - test-ui: # requires: # - install-ui-dependencies # - build-go-dev # - test-ui-browserstack: # filters: # branches: # ignore: /pull\\/[0-9]+/ # requires: # - install-ui-dependencies # - build-go-dev # - test-go: # requires: # - build-go-dev # - test-go-race: # filters: # branches: # ignore: # - /^docs\\/.*/ # - /^ui\\/.*/ # requires: # - build-go-dev # - website-docker-image: # context: vault-docs # filters: # branches: # only: # - master