diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index b8ebf077e..000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,533 +0,0 @@ -# Copyright (c) HashiCorp, Inc. -# SPDX-License-Identifier: MPL-2.0 - -version: 2.1 - -references: - # environment specific references - aim to avoid conflicts - go-machine-image: &go_machine_image - ubuntu-2004:202111-02 - go-windows-image: &go_windows_image - windows-server-2019-vs2019:stable - - # common references - common_envs: &common_envs - NOMAD_SLOW_TEST: 1 - GOTESTSUM_JUNITFILE: /tmp/test-reports/results.xml - GOTESTSUM_JSONFILE: /tmp/test-reports/testjsonfile.json - # disable implicit git paging. CircleCI runs commands with in a tty - # making git assume it's an interactive session. - PAGER: cat - GIT_PAGER: cat - -commands: - install-buf: - steps: - - run: - name: install buf - command: | - sudo ./scripts/vagrant-linux-priv-buf.sh - install-vault: - parameters: - version: - type: string - default: 1.2.4 - steps: - - run: - name: Install Vault - command: | - set -x - - case "${OSTYPE}" in - linux*) os="linux" ;; - darwin*) os="darwin" ;; - msys*) os="windows" ;; - *) echo "unknown os: ${OSTYPE}"; exit 1 ;; - esac - - curl -SL --fail -o /tmp/vault.zip https://releases.hashicorp.com/vault/"<< parameters.version >>"/vault_"<< parameters.version >>"_"${os}"_amd64.zip - - if [[ "${os}" != "windows" ]]; then - sudo unzip -d /usr/local/bin /tmp/vault.zip - rm -rf /tmp/vault* - else - rm -rf c:\Windows\vault.exe - unzip /tmp/vault.zip -d "/c/Windows" - rm -rf /tmp/vault* - fi - install-consul: - parameters: - version: - type: string - default: 1.8.3 - steps: - - run: - name: Install Consul << parameters.version >> - command: | - curl -SL --fail -o /tmp/consul.zip https://releases.hashicorp.com/consul/<< parameters.version >>/consul_<< parameters.version >>_linux_amd64.zip - sudo unzip -d /usr/local/bin /tmp/consul.zip - rm -rf /tmp/consul* - install-golang: - parameters: - target_directory: - type: string - default: /usr/local - steps: - - run: - name: Install golang - command: | - set -x - - echo installing golang ${GO_VERSION} - - case "${OSTYPE}" in - linux*) os="linux" ;; - darwin*) os="darwin" ;; - msys*) os="windows" ;; - *) echo "unknown os: ${OSTYPE}"; exit 1 ;; - esac - - if [[ "${os}" != "windows" ]] - then - sudo rm -rf << parameters.target_directory >>/go - sudo mkdir -p << parameters.target_directory >> - curl -SL --fail -o /tmp/golang.tar.gz https://dl.google.com/go/go${GOLANG_VERSION}.${os}-amd64.tar.gz - sudo tar -C << parameters.target_directory >> -xzf /tmp/golang.tar.gz - rm -rf /tmp/golang.tar.gz - else - rm -rf << parameters.target_directory >>/go - mkdir -p <> - curl -SL --fail -o /tmp/go.zip https://dl.google.com/go/go${GOLANG_VERSION}.windows-amd64.zip - unzip -q -o /tmp/go.zip -d << parameters.target_directory >> - rm -rf /tmp/go.zip - fi - - install-circleci-local-cli: - parameters: - version: - type: string - default: 0.1.5879 - - sha256: - type: string - default: f178ea62c781aec06267017404f87983c87f171fd0e66ef3737916246ae66dd6 - steps: - - run: - name: Install CircleCI CLI << parameters.version >> - command: | - CCI_VERSION="<< parameters.version >>" - CCI_SHA256="<< parameters.sha256 >>" - - URL="https://github.com/CircleCI-Public/circleci-cli/releases/download/v${CCI_VERSION}/circleci-cli_${CCI_VERSION}_linux_amd64.tar.gz" - - mkdir -p /tmp/circleci-cli/ - curl --fail --show-error --location \ - -o /tmp/circleci-cli/cli.tar.gz "${URL}" - - echo "$CCI_SHA256 /tmp/circleci-cli/cli.tar.gz" | sha256sum -c - - tar -xz --strip-components=1 \ - -C /tmp/circleci-cli \ - -f /tmp/circleci-cli/cli.tar.gz \ - "circleci-cli_${CCI_VERSION}_linux_amd64/circleci" - - sudo cp /tmp/circleci-cli/circleci /usr/bin/circleci-local-cli - - circleci-local-cli version - run-tests: - steps: - - run: - name: Running Nomad Tests - no_output_timeout: 20m - command: | - if [ -z $GOTEST_PKGS_EXCLUDE ]; - then - unset GOTEST_PKGS_EXCLUDE - else - unset GOTEST_PKGS - fi - - if [ ! -z $GOTESTARCH ]; then - export GOARCH="$GOTESTARCH"; - fi - - mkdir -p /tmp/test-reports - sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make generate-structs - - if [ ! -z $GOTEST_MOD ]; then - sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make test-nomad-module - else - sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make test-nomad - fi - -jobs: - test-windows: - executor: go-windows - - steps: - - run: docker version - - run: git config --global core.autocrlf false - - checkout - - run: - name: Setup - command: | - mkdir -p $GOBIN - mkdir -p $GOTESTSUM_PATH - - install-golang: - target_directory: "c:" - - run: - name: Show installed Go version - command: | - export PATH=/c/go/bin:/c/gopath/bin:$PATH - go version - - install-vault: - version: $VAULT_VERSION - - run: vault version - - run: choco install make - - run: - name: Install golang dependencies - command: | - export PATH=/c/go/bin:/c/gopath/bin:$PATH - make deps - - run: - name: Pre-download docker test image - command: docker pull docker.mirror.hashicorp.services/hashicorpdev/busybox-windows:server2016-0.1 - - run: - name: Build nomad - command: | - export PATH=/c/go/bin:/c/gopath/bin:$PATH - go build -o $GOBIN\nomad.exe - - run: - name: Run tests with gotestsum - command: | - # Only test docker driver tests for now - export PATH=/c/go/bin:/c/gopath/bin:$PATH - gotestsum --format=short-verbose \ - --junitfile $GOTESTSUM_PATH/results.xml \ - github.com/hashicorp/nomad/drivers/docker \ - github.com/hashicorp/nomad/client/lib/fifo \ - github.com/hashicorp/nomad/client/logmon - - - store_test_results: - path: c:\tmp\test-reports - - store_artifacts: - path: c:\tmp\test-reports - test-ui: - docker: - - image: docker.mirror.hashicorp.services/circleci/node:14-browsers - environment: - # See https://git.io/vdao3 for details. - JOBS: 2 - steps: - - checkout - - restore_cache: - keys: - - v3-deps-{{ checksum "ui/yarn.lock" }} - - run: - name: yarn install - command: cd ui && yarn install --frozen-lockfile - - save_cache: - key: v3-deps-{{ checksum "ui/yarn.lock" }} - paths: - - ./ui/node_modules - - run: - name: lint:js - command: cd ui && yarn run lint:js - - run: - name: lint:hbs - command: cd ui && yarn run lint:hbs - - run: - name: Ember tests - command: mkdir -p /tmp/test-reports && cd ui && yarn test - - store_test_results: - path: /tmp/test-reports - - store_artifacts: - path: /tmp/test-reports - test-machine: - executor: "<< parameters.executor >>" - parameters: - test_packages: - type: string - default: "" - test_module: - type: string - default: "" - exclude_packages: - type: string - default: "" - executor: - type: string - default: "go-machine" - goarch: - type: string - default: "amd64" - enable_race_testing: - type: boolean - default: false - environment: - GOTEST_PKGS_EXCLUDE: "<< parameters.exclude_packages >>" - GOTEST_PKGS: "<< parameters.test_packages >>" - GOTEST_MOD: "<< parameters.test_module >>" - GOTESTARCH: "<< parameters.goarch >>" - ENABLE_RACE: "<<# parameters.enable_race_testing >>TRUE<>" - steps: - - checkout - - install-golang - - install-buf - - install-consul - - install-vault - - run: - name: Install 32bit gcc libs - command: | - if [ ! -z $GOTESTARCH ] && [ $GOTESTARCH == "386" ]; then - sudo apt-get update - sudo apt-get install -y gcc-multilib - else - echo "Skipping 32bit lib installation while building for not 386" - fi - - run: PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make bootstrap - - run-tests - - store_test_results: - path: /tmp/test-reports - - store_artifacts: - path: /tmp/test-reports - test-e2e: - executor: go - steps: - - checkout - - run: apt-get update; apt-get install -y sudo unzip - # e2e tests require privileged mount/umount permissions when running as root - # TODO: switch to using machine executor and run as root to test e2e path - - run: - name: prepare non-root user - command: | - groupadd --gid 3434 circleci - useradd --uid 3434 --gid circleci --shell /bin/bash --create-home circleci - echo 'circleci ALL=NOPASSWD: ALL' >> /etc/sudoers.d/50-circleci - echo 'Defaults env_keep += "DEBIAN_FRONTEND"' >> /etc/sudoers.d/env_keep - chown -R circleci:circleci /go - - # configure git and ssh for the user - cp -r ~/.ssh /home/circleci/.ssh - chown -R circleci:circleci /home/circleci/.ssh - sudo -H -u circleci git config --global url."ssh://git@github.com".insteadOf "https://github.com" - - - run: sudo -E -H -u circleci PATH=${PATH} make deps - - run: sudo -E -H -u circleci PATH=${PATH} make integration-test - - run: sudo -E -H -u circleci PATH=${PATH} make e2e-test - test-container: - executor: go - parameters: - test_packages: - type: string - default: "" - exclude_packages: - type: string - default: "" - goarch: - type: string - default: "amd64" - environment: - GOTEST_PKGS: "<< parameters.test_packages >>" - GOTEST_PKGS_EXCLUDE: "<< parameters.exclude_packages >>" - GOTESTARCH: "<< parameters.goarch >>" - steps: - - checkout - - run: apt-get update; apt-get install -y shellcheck sudo unzip - - run: make deps - - install-buf - - install-consul - - install-vault - - run-tests - - store_test_results: - path: /tmp/test-reports - - store_artifacts: - path: /tmp/test-reports - build-darwin-binaries: - executor: go-macos - steps: - - checkout - - run: - name: configure PATH - command: - echo 'export PATH="${GOPATH}/bin:${HOME}/goinstall/go/bin:$PATH"' >> ${BASH_ENV} - - - install-golang: - target_directory: ~/goinstall - - run: source ${BASH_ENV} && make deps - - run: PATH="$GOPATH/bin:${HOME}/goinstall/go/bin:$PATH" make generate-structs - - - run: - name: prepare ui cache - command: git log -n 1 --pretty=format:%H ui > /tmp/ui-sha - - - restore_cache: - name: restore compiled ui assets - keys: - - v1-binary-ui-assets-darwin-{{ checksum "/tmp/ui-sha" }} - - run: - name: prepare ui - command: | - if [[ -f ~/caches/ui-assets/bindata_assetfs.go ]]; then - cp ~/caches/ui-assets/bindata_assetfs.go ./command/agent/bindata_assetfs.go - exit 0 - fi - - ./scripts/vagrant-linux-unpriv-ui.sh - - export PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" - - source ${BASH_ENV} - . ~/.nvm/nvm.sh - cd ui && yarn install --frozen-lockfile && cd .. - JOBS=2 make ember-dist static-assets - - mkdir -p ~/caches/ui-assets - cp ./command/agent/bindata_assetfs.go ~/caches/ui-assets/bindata_assetfs.go - - save_cache: - name: save compiled ui assets - key: v1-binary-ui-assets-darwin-{{ checksum "/tmp/ui-sha" }} - paths: - - ~/caches/ui-assets - - run: - name: build binaries - command: | - source ${BASH_ENV} - export GO_TAGS="ui $(grep -e '^GO_TAGS ?=' ./GNUmakefile | cut -d= -f2)" - make pkg/darwin_amd64.zip - - store_artifacts: - path: pkg/darwin_amd64.zip - destination: /builds/nomad_darwin_amd64.zip - build-binaries: - executor: go - steps: - - checkout - - run: apt-get update; apt-get install -y sudo unzip zip - - run: make deps - - install-buf - - run: sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make generate-structs - - - run: - name: prepare ui cache - command: git log -n 1 --pretty=format:%H ui > /tmp/ui-sha - - - restore_cache: - name: restore compiled ui assets - keys: - - v1-binary-ui-assets-linux-{{ checksum "/tmp/ui-sha" }} - - run: - name: prepare ui - command: | - if [[ -f /tmp/ui-assets/bindata_assetfs.go ]]; then - cp /tmp/ui-assets/bindata_assetfs.go ./command/agent/bindata_assetfs.go - exit 0 - fi - - ./scripts/vagrant-linux-unpriv-ui.sh - - export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH" - export PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" - . ~/.nvm/nvm.sh - cd ui && yarn install --frozen-lockfile && cd .. - JOBS=2 make ember-dist static-assets - - mkdir -p /tmp/ui-assets - cp ./command/agent/bindata_assetfs.go /tmp/ui-assets/bindata_assetfs.go - - - save_cache: - name: save compiled ui assets - key: v1-binary-ui-assets-linux-{{ checksum "/tmp/ui-sha" }} - paths: - - /tmp/ui-assets - - run: - name: build binaries - command: | - export GO_TAGS="ui $(grep -e '^GO_TAGS ?=' ./GNUmakefile | cut -d= -f2)" - make pkg/windows_amd64.zip pkg/linux_amd64.zip - - store_artifacts: - path: pkg - destination: /builds - - store_artifacts: - path: /tmp/ui-assets - destination: /ui-assets -executors: - go: - working_directory: /go/src/github.com/hashicorp/nomad - docker: - - image: docker.mirror.hashicorp.services/golang:1.20.5 - resource_class: medium - environment: - <<: *common_envs - GOPATH: /go - - go-machine: - working_directory: ~/go/src/github.com/hashicorp/nomad - machine: - image: *go_machine_image - resource_class: large - environment: &machine_env - <<: *common_envs - GOLANG_VERSION: 1.20.5 - - go-macos: - working_directory: ~/go/src/github.com/hashicorp/nomad - macos: - xcode: 13.4.1 - environment: - <<: *common_envs - GOPATH: /Users/distiller/go - GOLANG_VERSION: 1.20.5 - - go-windows: - machine: - image: *go_windows_image - resource_class: windows.medium - shell: bash --login -eo pipefail - working_directory: c:\gopath\src\github.com\hashicorp\nomad - environment: - GOPATH: c:\gopath - GOBIN: c:\gopath\bin - GOTESTSUM_PATH: c:\tmp\test-reports - GOLANG_VERSION: 1.20.5 - GOTESTSUM_VERSION: 1.7.0 - VAULT_VERSION: 1.4.1 - -workflows: - build-test: - jobs: - - build-binaries: - # almost always build binaries as they may be needed - # for e2e tests - filters: - branches: - ignore: - - stable-website - - - test-e2e: - filters: - branches: - ignore: - - /^.-ui\b.*/ - - /^docs-.*/ - - /^backport/docs-.*/ - - stable-website - - - test-ui: - filters: - branches: - ignore: - - stable-website - - /^docs-.*/ - - /^backport/docs-.*/ - - /^e2e-.*/ - - # Note: comment-out this job in ENT - - test-windows: - filters: - branches: - ignore: - - /^.-ui\b.*/ - - /^docs-.*/ - - /^backport/docs-.*/ - - /^e2e-.*/ - - stable-website diff --git a/GNUmakefile b/GNUmakefile index 71e08baa1..1a768fc6a 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -15,12 +15,7 @@ BUILD_DATE_FLAG = $(GO_MODULE)/version.BuildDate=$(BUILD_DATE) GO_LDFLAGS = -X $(GIT_COMMIT_FLAG) -X $(BUILD_DATE_FLAG) -ifneq (MSYS_NT,$(THIS_OS)) -# GOPATH supports PATH style multi-paths; assume the first entry is favorable. -# Necessary because new Circle images override GOPATH with multiple values. -# See: https://discuss.circleci.com/t/gopath-is-set-to-multiple-directories/7174 -GOPATH := $(shell go env GOPATH | cut -d: -f1) -endif +GOPATH := $(shell go env GOPATH) # Respect $GOBIN if set in environment or via $GOENV file. BIN := $(shell go env GOBIN) diff --git a/scripts/update_golang_version.sh b/scripts/update_golang_version.sh index 2137dbcfe..81fdfd218 100755 --- a/scripts/update_golang_version.sh +++ b/scripts/update_golang_version.sh @@ -29,10 +29,6 @@ echo "${golang_version}" > .go-version # Specifically, we use "* instead of "?, which relies on GNU extension without much loss of # correctness in practice. -sed -i'' -e "s|/golang:[.0-9]*|/golang:${golang_version}|g" .circleci/config.yml -sed -i'' -e "s|GOLANG_VERSION:[ \"]*[.0-9]*\"*|GOLANG_VERSION: ${golang_version}|g" \ - .circleci/config.yml - sed -i'' -e "s|GO_VERSION:[ \"]*[.0-9]*\"*|GO_VERSION: ${golang_version}|g" \ .github/workflows/test-core.yaml