From 9bcccd757472652d478543e6c36d588b12ad270c Mon Sep 17 00:00:00 2001 From: Arve Knudsen Date: Wed, 11 Mar 2020 15:45:52 +0100 Subject: [PATCH] CircleCI: Implement new release pipeline (#22625) * CircleCI: Adapt build-pipeline to implement also release pipeline --- .circleci/config.yml | 1166 ++++++++---------------------------------- 1 file changed, 213 insertions(+), 953 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 89b47007d26..0729721bddb 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -4,7 +4,7 @@ aliases: # Workflow filters - &filter-only-release branches: - ignore: /.*/ + only: chore/test-release-pipeline tags: only: /^v[0-9]+(\.[0-9]+){2}(-.+|[^-.]*)$/ - &filter-not-release-or-master @@ -15,6 +15,13 @@ aliases: - &filter-only-master branches: only: master + - &filter-master-or-release + branches: + only: + - master + - chore/test-release-pipeline + tags: + only: /^v[0-9]+(\.[0-9]+){2}(-.+|[^-.]*)$/ executors: grafana-build: @@ -72,8 +79,22 @@ jobs: - run: name: Build Grafana backend command: | - /tmp/workspace/bin/grabpl build-backend --edition << parameters.edition >> \ - --variants << parameters.variant >> --build-id $CIRCLE_WORKFLOW_ID + if [[ -n $CIRCLE_TAG ]]; then + # A release build + /tmp/workspace/bin/grabpl build-backend --edition << parameters.edition >> \ + --variants << parameters.variant >> $CIRCLE_TAG + elif [[ $CIRCLE_BRANCH == "master" ]]; then + # A master build + /tmp/workspace/bin/grabpl build-backend --edition << parameters.edition >> \ + --variants << parameters.variant >> --build-id $CIRCLE_WORKFLOW_ID + elif [[ $CIRCLE_BRANCH == "chore/test-release-pipeline" ]]; then + # We're testing the release pipeline + /tmp/workspace/bin/grabpl build-backend --edition << parameters.edition >> \ + --variants << parameters.variant >> v6.7.0-beta1 + else + echo "Unknown branch trigger: $CIRCLE_BRANCH" + exit 1 + fi - run: name: Move artifacts command: mkdir -p << parameters.edition >> && mv bin << parameters.edition >>/ @@ -279,7 +300,20 @@ jobs: command: cp -r /tmp/workspace/oss/* . - run: name: Package Grafana - command: /tmp/workspace/bin/grabpl package --edition oss --build-id $CIRCLE_WORKFLOW_ID + command: | + if [[ -n $CIRCLE_TAG ]]; then + # A release build + /tmp/workspace/bin/grabpl package --edition oss $CIRCLE_TAG + elif [[ $CIRCLE_BRANCH == "master" ]]; then + # A master build + /tmp/workspace/bin/grabpl package --edition oss --build-id $CIRCLE_WORKFLOW_ID + elif [[ $CIRCLE_BRANCH == "chore/test-release-pipeline" ]]; then + # We're testing the release pipeline + /tmp/workspace/bin/grabpl package --edition oss v6.7.0-beta1 + else + echo "Unknown branch trigger: $CIRCLE_BRANCH" + exit 1 + fi - run: name: Move artifacts command: | @@ -312,7 +346,20 @@ jobs: command: cp -r /tmp/workspace/enterprise/* . - run: name: Package Grafana - command: /tmp/workspace/bin/grabpl package --edition enterprise --build-id $CIRCLE_WORKFLOW_ID + command: | + if [[ -n $CIRCLE_TAG ]]; then + # A release build + /tmp/workspace/bin/grabpl package --edition enterprise $CIRCLE_TAG + elif [[ $CIRCLE_BRANCH == "master" ]]; then + # A master build + /tmp/workspace/bin/grabpl package --edition enterprise --build-id $CIRCLE_WORKFLOW_ID + elif [[ $CIRCLE_BRANCH == "chore/test-release-pipeline" ]]; then + # We're testing the release pipeline + /tmp/workspace/bin/grabpl package --edition enterprise v6.7.0-beta1 + else + echo "Unknown branch trigger: $CIRCLE_BRANCH" + exit 1 + fi - run: name: Move artifacts command: | @@ -331,7 +378,11 @@ jobs: command: ./scripts/ci-job-succeeded.sh when: on_success - publish-oss-master: + publish-packages: + description: "Publish packages" + parameters: + edition: + type: string executor: grafana-publish steps: - attach_workspace: @@ -341,51 +392,33 @@ jobs: name: CI job started command: ./scripts/ci-job-started.sh - run: - name: GCP credentials - command: echo ${GCP_GRAFANA_UPLOAD_KEY} > /tmp/gcpkey.json - - run: - name: Sign in to GCP - command: /opt/google-cloud-sdk/bin/gcloud auth activate-service-account --key-file=/tmp/gcpkey.json - - run: - name: Publish to GCP + name: Publish packages command: | - /opt/google-cloud-sdk/bin/gsutil cp /tmp/workspace/oss/dist/* gs://$GCP_BUCKET_NAME/oss/master/ + cp -r /tmp/workspace/<< parameters.edition >>/dist . + if [[ $CIRCLE_BRANCH == "chore/test-release-pipeline" ]]; then + # We're testing the release pipeline + /tmp/workspace/bin/grabpl publish-packages --edition << parameters.edition >> \ + --deb-db-bucket grafana-testing-aptly-db --deb-repo-bucket grafana-testing-repo --packages-bucket \ + grafana-downloads-test --rpm-repo-bucket grafana-testing-repo --simulate-release + else + /tmp/workspace/bin/grabpl publish-packages --edition << parameters.edition >> + fi - run: - name: Publish to Grafana.com - command: | - cp -r /tmp/workspace/oss/dist . - rm -f dist/*latest* - cd dist - /tmp/workspace/scripts/build/release_publisher/release_publisher -apikey ${GRAFANA_COM_API_KEY} -version "v$(cat grafana.version)" --nightly + name: CI job failed + command: ./scripts/ci-job-failed.sh + when: on_fail + - run: + name: CI job succeeded + command: ./scripts/ci-job-succeeded.sh + when: on_success - publish-enterprise-master: - executor: grafana-publish - steps: - - attach_workspace: - at: /tmp/workspace - - checkout - - run: - name: CI job started - command: ./scripts/ci-job-started.sh - - run: - name: GCP credentials - command: echo ${GCP_GRAFANA_UPLOAD_KEY} > /tmp/gcpkey.json - - run: - name: Sign in to GCP - command: /opt/google-cloud-sdk/bin/gcloud auth activate-service-account --key-file=/tmp/gcpkey.json - - run: - name: Publish to GCP - command: | - /opt/google-cloud-sdk/bin/gsutil cp /tmp/workspace/enterprise/dist/* gs://$GCP_BUCKET_NAME/enterprise/master/ - - run: - name: Publish to Grafana.com - command: | - cp -r /tmp/workspace/enterprise/dist . - rm -f dist/*latest* - cd dist - /tmp/workspace/scripts/build/release_publisher/release_publisher -apikey ${GRAFANA_COM_API_KEY} -version "v$(cat grafana.version)" --nightly - - docker-oss-master: + build-docker-images: + description: "Build Docker images" + parameters: + edition: + type: string + ubuntu: + type: boolean executor: docker steps: - attach_workspace: @@ -395,32 +428,22 @@ jobs: name: CI job started command: ./scripts/ci-job-started.sh - run: docker info + # XXX: Is this necessary? - run: docker run --privileged linuxkit/binfmt:v0.6 - run: name: Copy Grafana archives command: | - cp /tmp/workspace/oss/dist/grafana-*.linux-amd64-musl.tar.gz packaging/docker/grafana-latest.linux-x64-musl.tar.gz - cp /tmp/workspace/oss/dist/grafana-*.linux-armv7-musl.tar.gz packaging/docker/grafana-latest.linux-armv7-musl.tar.gz - cp /tmp/workspace/oss/dist/grafana-*.linux-arm64-musl.tar.gz packaging/docker/grafana-latest.linux-arm64-musl.tar.gz + cp -r /tmp/workspace/<< parameters.edition >>/dist . - run: name: Build Docker images command: | - pushd packaging/docker && ./build.sh "master-${CIRCLE_SHA1}" && popd - mkdir docker - docker save -o docker/grafana-oss-amd64.tar "grafana/grafana:master-${CIRCLE_SHA1}" - docker save -o docker/grafana-oss-arm32v7.tar "grafana/grafana-arm32v7-linux:master-${CIRCLE_SHA1}" - docker save -o docker/grafana-oss-arm64v8.tar "grafana/grafana-arm64v8-linux:master-${CIRCLE_SHA1}" - # Publish dev image, since e2e tests need it - - run: - name: Publish development Docker image - command: | - docker tag "grafana/grafana:master-${CIRCLE_SHA1}" "grafana/grafana-dev:master-${CIRCLE_SHA1}" - docker login -u "$DOCKER_USER" -p "$DOCKER_PASS" - docker push "grafana/grafana-dev:master-${CIRCLE_SHA1}" + /tmp/workspace/bin/grabpl build-docker --edition << parameters.edition >> --ubuntu=<< parameters.ubuntu >> $CIRCLE_WORKFLOW_ID + mkdir -p << parameters.edition >>/docker + mv docker/*.tar << parameters.edition >>/docker/ - persist_to_workspace: root: . paths: - - docker/grafana-oss*.tar + - << parameters.edition >>/docker/*.tar - run: name: CI job failed command: ./scripts/ci-job-failed.sh @@ -430,143 +453,13 @@ jobs: command: ./scripts/ci-job-succeeded.sh when: on_success - docker-ubuntu-oss-master: - executor: docker - steps: - - attach_workspace: - at: /tmp/workspace - - checkout - - run: - name: CI job started - command: ./scripts/ci-job-started.sh - - run: docker info - - run: docker run --privileged linuxkit/binfmt:v0.6 - - run: - name: Copy Grafana archives - command: | - cp /tmp/workspace/oss/dist/grafana-*.linux-amd64.tar.gz packaging/docker/grafana-latest.linux-x64.tar.gz - cp /tmp/workspace/oss/dist/grafana-*.linux-armv7.tar.gz packaging/docker/grafana-latest.linux-armv7.tar.gz - cp /tmp/workspace/oss/dist/grafana-*.linux-arm64.tar.gz packaging/docker/grafana-latest.linux-arm64.tar.gz - - run: - name: Build Docker images - command: | - pushd packaging/docker && ./build.sh --ubuntu "master-${CIRCLE_SHA1}" && popd - mkdir docker - docker save -o docker/grafana-oss-amd64-ubuntu.tar "grafana/grafana:master-${CIRCLE_SHA1}-ubuntu" - docker save -o docker/grafana-oss-arm32v7-ubuntu.tar "grafana/grafana-arm32v7-linux:master-${CIRCLE_SHA1}-ubuntu" - docker save -o docker/grafana-oss-arm64v8-ubuntu.tar "grafana/grafana-arm64v8-linux:master-${CIRCLE_SHA1}-ubuntu" - - persist_to_workspace: - root: . - paths: - - docker/grafana-oss*.tar - - run: - name: CI job failed - command: ./scripts/ci-job-failed.sh - when: on_fail - - run: - name: CI job succeeded - command: ./scripts/ci-job-succeeded.sh - when: on_success - - docker-enterprise-master: - executor: docker - steps: - - attach_workspace: - at: /tmp/workspace - - checkout - - run: - name: CI job started - command: ./scripts/ci-job-started.sh - - run: docker info - - run: docker run --privileged linuxkit/binfmt:v0.6 - - run: - name: Copy Grafana archives - command: | - cp /tmp/workspace/enterprise/dist/grafana-enterprise-*.linux-amd64-musl.tar.gz packaging/docker/grafana-latest.linux-x64-musl.tar.gz - cp /tmp/workspace/enterprise/dist/grafana-enterprise-*.linux-armv7-musl.tar.gz packaging/docker/grafana-latest.linux-armv7-musl.tar.gz - cp /tmp/workspace/enterprise/dist/grafana-enterprise-*.linux-arm64-musl.tar.gz packaging/docker/grafana-latest.linux-arm64-musl.tar.gz - - run: - name: Build Docker images - command: | - export DOCKER_CLI_EXPERIMENTAL=enabled - pushd packaging/docker - docker build -t "grafana/grafana-enterprise:master" --no-cache=true . - docker build -t "grafana/grafana-enterprise-arm32v7-linux:master" \ - --build-arg BASE_IMAGE=arm32v7/alpine:3.10 \ - --build-arg GRAFANA_TGZ=grafana-latest.linux-armv7-musl.tar.gz \ - --no-cache=true . - docker build -t "grafana/grafana-enterprise-arm64v8-linux:master" \ - --build-arg BASE_IMAGE=arm64v8/alpine:3.10 \ - --build-arg GRAFANA_TGZ=grafana-latest.linux-arm64-musl.tar.gz \ - --no-cache=true . - popd - mkdir docker - docker save -o docker/grafana-enterprise-amd64.tar "grafana/grafana-enterprise:master" - docker save -o docker/grafana-enterprise-arm32v7.tar "grafana/grafana-enterprise-arm32v7-linux:master" - docker save -o docker/grafana-enterprise-arm64v8.tar "grafana/grafana-enterprise-arm64v8-linux:master" - - persist_to_workspace: - root: . - paths: - - docker/grafana-enterprise*.tar - - run: - name: CI job failed - command: ./scripts/ci-job-failed.sh - when: on_fail - - run: - name: CI job succeeded - command: ./scripts/ci-job-succeeded.sh - when: on_success - - docker-ubuntu-enterprise-master: - executor: docker - steps: - - attach_workspace: - at: /tmp/workspace - - checkout - - run: - name: CI job started - command: ./scripts/ci-job-started.sh - - run: docker info - - run: docker run --privileged linuxkit/binfmt:v0.6 - - run: - name: Copy Grafana archives - command: | - cp /tmp/workspace/enterprise/dist/grafana-enterprise-*.linux-amd64.tar.gz packaging/docker/grafana-latest.linux-x64.tar.gz - cp /tmp/workspace/enterprise/dist/grafana-enterprise-*.linux-armv7.tar.gz packaging/docker/grafana-latest.linux-armv7.tar.gz - cp /tmp/workspace/enterprise/dist/grafana-enterprise-*.linux-arm64.tar.gz packaging/docker/grafana-latest.linux-arm64.tar.gz - - run: - name: Build Docker images - command: | - export DOCKER_CLI_EXPERIMENTAL=enabled - pushd packaging/docker - docker build -t "grafana/grafana-enterprise:master-ubuntu" --no-cache=true -f ubuntu.Dockerfile . - docker build -t "grafana/grafana-enterprise-arm32v7-linux:master-ubuntu" \ - --build-arg BASE_IMAGE=arm32v7/ubuntu:19.10 \ - --build-arg GRAFANA_TGZ=grafana-latest.linux-armv7.tar.gz \ - --no-cache=true -f ubuntu.Dockerfile . - docker build -t "grafana/grafana-enterprise-arm64v8-linux:master-ubuntu" \ - --build-arg BASE_IMAGE=arm64v8/ubuntu:19.10 \ - --build-arg GRAFANA_TGZ=grafana-latest.linux-arm64.tar.gz \ - --no-cache=true -f ubuntu.Dockerfile . - popd - mkdir docker - docker save -o docker/grafana-enterprise-amd64-ubuntu.tar "grafana/grafana-enterprise:master-ubuntu" - docker save -o docker/grafana-enterprise-arm32v7-ubuntu.tar "grafana/grafana-enterprise-arm32v7-linux:master-ubuntu" - docker save -o docker/grafana-enterprise-arm64v8-ubuntu.tar "grafana/grafana-enterprise-arm64v8-linux:master-ubuntu" - - persist_to_workspace: - root: . - paths: - - docker/grafana-enterprise*.tar - - run: - name: CI job failed - command: ./scripts/ci-job-failed.sh - when: on_fail - - run: - name: CI job succeeded - command: ./scripts/ci-job-succeeded.sh - when: on_success - - publish-docker-oss-master: + publish-docker-images: + description: Publish Docker images + parameters: + edition: + type: string + ubuntu: + type: boolean executor: docker steps: - attach_workspace: @@ -576,175 +469,19 @@ jobs: name: CI job started command: ./scripts/ci-job-started.sh - run: - name: Load Docker images + name: Copy artifacts from workspace command: | - docker load -i /tmp/workspace/docker/grafana-oss-amd64.tar - docker load -i /tmp/workspace/docker/grafana-oss-arm32v7.tar - docker load -i /tmp/workspace/docker/grafana-oss-arm64v8.tar - - run: - name: Log into Docker Hub - command: docker login -u "$DOCKER_USER" -p "$DOCKER_PASS" + cp -r /tmp/workspace/<< parameters.edition >>/docker . + cp -r /tmp/workspace/<< parameters.edition >>/dist . - run: name: Publish Docker images command: | - export DOCKER_CLI_EXPERIMENTAL=enabled - docker tag "grafana/grafana:master-${CIRCLE_SHA1}" "grafana/grafana:master" - docker push "grafana/grafana:master" - docker tag "grafana/grafana-arm32v7-linux:master-${CIRCLE_SHA1}" "grafana/grafana-arm32v7-linux:master" - docker push "grafana/grafana-arm32v7-linux:master" - docker tag "grafana/grafana-arm64v8-linux:master-${CIRCLE_SHA1}" "grafana/grafana-arm64v8-linux:master" - docker push "grafana/grafana-arm64v8-linux:master" - - run: - name: Publish Docker manifest - command: | - export DOCKER_CLI_EXPERIMENTAL=enabled - docker manifest create "grafana/grafana:master" \ - "grafana/grafana:master" \ - "grafana/grafana-arm32v7-linux:master" \ - "grafana/grafana-arm64v8-linux:master" - docker manifest push "grafana/grafana:master" - - run: - name: CI job failed - command: ./scripts/ci-job-failed.sh - when: on_fail - - run: - name: CI job succeeded - command: ./scripts/ci-job-succeeded.sh - when: on_success - - publish-docker-ubuntu-oss-master: - executor: docker - steps: - - attach_workspace: - at: /tmp/workspace - - checkout - - run: - name: CI job started - command: ./scripts/ci-job-started.sh - - run: - name: Load Docker images - command: | - mkdir docker - docker load -i /tmp/workspace/docker/grafana-oss-amd64-ubuntu.tar - docker load -i /tmp/workspace/docker/grafana-oss-arm32v7-ubuntu.tar - docker load -i /tmp/workspace/docker/grafana-oss-arm64v8-ubuntu.tar - - run: - name: Log into Docker Hub - command: docker login -u "$DOCKER_USER" -p "$DOCKER_PASS" - - run: - name: Publish Docker images - command: | - export DOCKER_CLI_EXPERIMENTAL=enabled - docker tag "grafana/grafana:master-${CIRCLE_SHA1}-ubuntu" "grafana/grafana:master-ubuntu" - docker push "grafana/grafana:master-ubuntu" - docker tag "grafana/grafana-arm32v7-linux:master-${CIRCLE_SHA1}-ubuntu" "grafana/grafana-arm32v7-linux:master-ubuntu" - docker push "grafana/grafana-arm32v7-linux:master-ubuntu" - docker tag "grafana/grafana-arm64v8-linux:master-${CIRCLE_SHA1}-ubuntu" "grafana/grafana-arm64v8-linux:master-ubuntu" - docker push "grafana/grafana-arm64v8-linux:master-ubuntu" - - run: - name: Publish Docker manifest - command: | - export DOCKER_CLI_EXPERIMENTAL=enabled - docker manifest create "grafana/grafana:master-ubuntu" \ - "grafana/grafana:master-ubuntu" \ - "grafana/grafana-arm32v7-linux:master-ubuntu" \ - "grafana/grafana-arm64v8-linux:master-ubuntu" - docker manifest push "grafana/grafana:master-ubuntu" - - run: - name: CI job failed - command: ./scripts/ci-job-failed.sh - when: on_fail - - run: - name: CI job succeeded - command: ./scripts/ci-job-succeeded.sh - when: on_success - - publish-docker-enterprise-master: - executor: docker - steps: - - attach_workspace: - at: /tmp/workspace - - checkout - - run: - name: CI job started - command: ./scripts/ci-job-started.sh - - run: - name: Load Docker images - command: | - mkdir docker - docker load -i /tmp/workspace/docker/grafana-enterprise-amd64.tar - docker load -i /tmp/workspace/docker/grafana-enterprise-arm32v7.tar - docker load -i /tmp/workspace/docker/grafana-enterprise-arm64v8.tar - - run: - name: Log into Docker Hub - command: docker login -u "$DOCKER_USER" -p "$DOCKER_PASS" - - run: - name: Publish Docker images - command: | - export DOCKER_CLI_EXPERIMENTAL=enabled - docker push "grafana/grafana-enterprise:master" - docker push "grafana/grafana-enterprise-arm32v7-linux:master" - docker push "grafana/grafana-enterprise-arm64v8-linux:master" - - run: - name: Publish Docker manifest - command: | - export DOCKER_CLI_EXPERIMENTAL=enabled - docker manifest create "grafana/grafana-enterprise:master" \ - "grafana/grafana-enterprise:master" \ - "grafana/grafana-enterprise-arm32v7-linux:master" \ - "grafana/grafana-enterprise-arm64v8-linux:master" - docker manifest push "grafana/grafana-enterprise:master" - - run: - name: CI job failed - command: ./scripts/ci-job-failed.sh - when: on_fail - - run: - name: CI job succeeded - command: ./scripts/ci-job-succeeded.sh - when: on_success - - publish-docker-ubuntu-enterprise-master: - executor: docker - steps: - - attach_workspace: - at: /tmp/workspace - - checkout - - run: - name: CI job started - command: ./scripts/ci-job-started.sh - - run: - name: Load Docker images - command: | - mkdir docker - docker load -i /tmp/workspace/docker/grafana-enterprise-amd64-ubuntu.tar - docker load -i /tmp/workspace/docker/grafana-enterprise-arm32v7-ubuntu.tar - docker load -i /tmp/workspace/docker/grafana-enterprise-arm64v8-ubuntu.tar - - run: - name: Log into Docker Hub - command: docker login -u "$DOCKER_USER" -p "$DOCKER_PASS" - - run: - name: Publish Docker images - command: | - export DOCKER_CLI_EXPERIMENTAL=enabled - docker push "grafana/grafana-enterprise:master-ubuntu" - docker push "grafana/grafana-enterprise-arm32v7-linux:master-ubuntu" - docker push "grafana/grafana-enterprise-arm64v8-linux:master-ubuntu" - - # Publish dev image - docker tag "grafana/grafana-enterprise:master-ubuntu" \ - "grafana/grafana-enterprise-dev:master-${CIRCLE_SHA1}" - docker push "grafana/grafana-enterprise-dev:master-${CIRCLE_SHA1}" - # deploy to kubernetes - ./packaging/docker/deploy_to_k8s.sh "grafana/grafana-enterprise-dev:master-${CIRCLE_SHA1}" - - run: - name: Publish Docker manifest - command: | - export DOCKER_CLI_EXPERIMENTAL=enabled - docker manifest create "grafana/grafana-enterprise:master-ubuntu" \ - "grafana/grafana-enterprise:master-ubuntu" \ - "grafana/grafana-enterprise-arm32v7-linux:master-ubuntu" \ - "grafana/grafana-enterprise-arm64v8-linux:master-ubuntu" - docker manifest push "grafana/grafana-enterprise:master-ubuntu" + if [[ $CIRCLE_BRANCH == "chore/test-release-pipeline" ]]; then + # We're testing the release pipeline + /tmp/workspace/bin/grabpl publish-docker --edition << parameters.edition >> --ubuntu=<< parameters.ubuntu >> --dry-run + else + /tmp/workspace/bin/grabpl publish-docker --edition << parameters.edition >> --ubuntu=<< parameters.ubuntu >> + fi - run: name: CI job failed command: ./scripts/ci-job-failed.sh @@ -757,7 +494,7 @@ jobs: end-to-end-tests: docker: - image: circleci/node:12-browsers - - image: grafana/grafana-dev:master-$CIRCLE_SHA1 + - image: grafana/grafana-dev:$CIRCLE_WORKFLOW_ID steps: - attach_workspace: at: /tmp/workspace @@ -1017,102 +754,6 @@ jobs: command: './scripts/ci-job-succeeded.sh' when: on_success - - build-all: - docker: - - image: grafana/build-container:1.2.13 - working_directory: /go/src/github.com/grafana/grafana - steps: - - checkout - - run: - name: prepare build tools - command: '/tmp/bootstrap.sh' - - run: - name: ci job started - command: './scripts/ci-job-started.sh' - - restore_cache: - key: phantomjs-binaries-{{ checksum "scripts/build/download-phantomjs.sh" }} - - run: - name: download phantomjs binaries - command: './scripts/build/download-phantomjs.sh' - - save_cache: - key: phantomjs-binaries-{{ checksum "scripts/build/download-phantomjs.sh" }} - paths: - - /tmp/phantomjs - - run: - name: build and package grafana - command: './scripts/build/build-all.sh' - - run: - name: Prepare GPG private key - command: './scripts/build/prepare_signing_key.sh' - - run: - name: sign packages - command: './scripts/build/sign_packages.sh dist/*.rpm' - - run: - name: verify signed packages - command: './scripts/build/verify_signed_packages.sh dist/*.rpm' - - run: - name: sha-sum packages - command: 'go run build.go sha-dist' - - run: - name: Test and build Grafana.com release publisher - command: 'cd scripts/build/release_publisher && go test . && go build -o release_publisher .' - - persist_to_workspace: - root: . - paths: - - dist/* - - scripts/*.sh - - scripts/build/release_publisher/release_publisher - - scripts/build/publish.sh - - run: - name: ci job failed - command: './scripts/ci-job-failed.sh' - when: on_fail - - run: - name: ci job succeeded - command: './scripts/ci-job-succeeded.sh' - when: on_success - - build: - docker: - - image: grafana/build-container:1.2.13 - working_directory: /go/src/github.com/grafana/grafana - steps: - - checkout - - run: - name: ci job started - command: './scripts/ci-job-started.sh' - - run: - name: prepare build tools - command: '/tmp/bootstrap.sh' - - run: - name: build and package grafana - command: './scripts/build/build.sh' - - run: - name: Prepare GPG private key - command: './scripts/build/prepare_signing_key.sh' - - run: - name: sign packages - command: './scripts/build/sign_packages.sh dist/*.rpm' - - run: - name: sha-sum packages - command: 'go run build.go sha-dist' - - run: - name: Test Grafana.com release publisher - command: 'cd scripts/build/release_publisher && go test .' - - persist_to_workspace: - root: . - paths: - - dist/* - - run: - name: ci job failed - command: './scripts/ci-job-failed.sh' - when: on_fail - - run: - name: ci job succeeded - command: './scripts/ci-job-succeeded.sh' - when: on_success - build-fast-backend: docker: - image: grafana/build-container:1.2.13 @@ -1361,314 +1002,6 @@ jobs: command: './scripts/ci-job-succeeded.sh' when: on_success - grafana-docker-release: - machine: - image: circleci/classic:201808-01 - steps: - - checkout - - run: - name: ci job started - command: './scripts/ci-job-started.sh' - - attach_workspace: - at: . - - run: docker info - - run: docker run --privileged linuxkit/binfmt:v0.6 - - run: cp dist/grafana-latest.linux-*.tar.gz packaging/docker - - run: cd packaging/docker && ./build-deploy.sh "${CIRCLE_TAG}" - - run: rm packaging/docker/grafana-latest.linux-*.tar.gz - - run: cp enterprise-dist/grafana-enterprise-*.linux-amd64-musl.tar.gz packaging/docker/grafana-latest.linux-x64-musl.tar.gz - - run: cd packaging/docker && ./build-enterprise.sh "${CIRCLE_TAG}" - - run: - name: ci job failed - command: './scripts/ci-job-failed.sh' - when: on_fail - - run: - name: ci job succeeded - command: './scripts/ci-job-succeeded.sh' - when: on_success - - grafana-docker-ubuntu-release: - machine: - image: circleci/classic:201808-01 - steps: - - checkout - - run: - name: ci job started - command: './scripts/ci-job-started.sh' - - attach_workspace: - at: . - - run: docker info - - run: docker run --privileged linuxkit/binfmt:v0.6 - - run: cp dist/grafana-latest.linux-*.tar.gz packaging/docker - - run: cd packaging/docker && ./build-deploy.sh --ubuntu "${CIRCLE_TAG}" - - run: rm packaging/docker/grafana-latest.linux-*.tar.gz - - run: cp enterprise-dist/grafana-enterprise-*.linux-amd64.tar.gz packaging/docker/grafana-latest.linux-x64.tar.gz - - run: cd packaging/docker && ./build-enterprise.sh --ubuntu "${CIRCLE_TAG}" - - run: - name: ci job failed - command: './scripts/ci-job-failed.sh' - when: on_fail - - run: - name: ci job succeeded - command: './scripts/ci-job-succeeded.sh' - when: on_success - - build-enterprise: - docker: - - image: grafana/build-container:1.2.13 - working_directory: /go/src/github.com/grafana/grafana - steps: - - checkout - - run: - name: prepare build tools - command: '/tmp/bootstrap.sh' - - run: - name: ci job started - command: './scripts/ci-job-started.sh' - - run: - name: checkout enterprise - command: './scripts/build/prepare-enterprise.sh' - - run: - name: test enterprise - command: 'go test ./pkg/extensions/...' - - run: - name: build and package enterprise - command: './scripts/build/build.sh -enterprise' - - run: - name: Prepare GPG private key - command: './scripts/build/prepare_signing_key.sh' - - run: - name: sign packages - command: './scripts/build/sign_packages.sh dist/*.rpm' - - run: - name: sha-sum packages - command: 'go run build.go sha-dist' - - run: - name: move enterprise packages into their own folder - command: 'mv dist enterprise-dist' - - persist_to_workspace: - root: . - paths: - - enterprise-dist/* - - run: - name: ci job failed - command: './scripts/ci-job-failed.sh' - when: on_fail - - run: - name: ci job succeeded - command: './scripts/ci-job-succeeded.sh' - when: on_success - - build-all-enterprise: - docker: - - image: grafana/build-container:1.2.13 - working_directory: /go/src/github.com/grafana/grafana - steps: - - checkout - - run: - name: prepare build tools - command: '/tmp/bootstrap.sh' - - run: - name: ci job started - command: './scripts/ci-job-started.sh' - - run: - name: checkout enterprise - command: './scripts/build/prepare-enterprise.sh' - - restore_cache: - key: phantomjs-binaries-{{ checksum "scripts/build/download-phantomjs.sh" }} - - run: - name: download phantomjs binaries - command: './scripts/build/download-phantomjs.sh' - - save_cache: - key: phantomjs-binaries-{{ checksum "scripts/build/download-phantomjs.sh" }} - paths: - - /tmp/phantomjs - - run: - name: test enterprise - command: 'go test ./pkg/extensions/...' - - run: - name: build and package grafana - command: './scripts/build/build-all.sh -enterprise' - - run: - name: Prepare GPG private key - command: './scripts/build/prepare_signing_key.sh' - - run: - name: sign packages - command: './scripts/build/sign_packages.sh dist/*.rpm' - - run: - name: verify signed packages - command: './scripts/build/verify_signed_packages.sh dist/*.rpm' - - run: - name: sha-sum packages - command: 'go run build.go sha-dist' - - run: - name: move enterprise packages into their own folder - command: 'mv dist enterprise-dist' - - persist_to_workspace: - root: . - paths: - - enterprise-dist/* - - run: - name: ci job failed - command: './scripts/ci-job-failed.sh' - when: on_fail - - run: - name: ci job succeeded - command: './scripts/ci-job-succeeded.sh' - when: on_success - - deploy-enterprise-release: - docker: - - image: grafana/grafana-ci-deploy:1.2.3 - steps: - - checkout - - run: - name: ci job started - command: './scripts/ci-job-started.sh' - - attach_workspace: - at: . - - run: - name: gcp credentials - command: 'echo ${GCP_GRAFANA_UPLOAD_KEY} > /tmp/gcpkey.json' - - run: - name: sign in to gcp - command: '/opt/google-cloud-sdk/bin/gcloud auth activate-service-account --key-file=/tmp/gcpkey.json' - - run: - name: deploy to gcp - command: '/opt/google-cloud-sdk/bin/gsutil cp ./enterprise-dist/* gs://$GCP_BUCKET_NAME/enterprise/release' - - run: - name: Deploy to Grafana.com - command: './scripts/build/publish.sh --enterprise' - - run: - name: Prepare GPG private key - command: './scripts/build/prepare_signing_key.sh' - - run: - name: Load GPG private key - command: './scripts/build/update_repo/load-signing-key.sh' - - run: - name: Update Debian repository - command: './scripts/build/update_repo/update-deb.sh "enterprise" "$GPG_KEY_PASSWORD" "$CIRCLE_TAG" "enterprise-dist"' - - run: - name: Publish Debian repository - command: './scripts/build/update_repo/publish-deb.sh "enterprise"' - - run: - name: Update RPM repository - command: './scripts/build/update_repo/update-rpm.sh "enterprise" "$GPG_KEY_PASSWORD" "$CIRCLE_TAG" "enterprise-dist"' - - run: - name: Publish RPM repository - command: './scripts/build/update_repo/publish-rpm.sh "enterprise" "$CIRCLE_TAG"' - - run: - name: ci job failed - command: './scripts/ci-job-failed.sh' - when: on_fail - - run: - name: ci job succeeded - command: './scripts/ci-job-succeeded.sh' - when: on_success - - deploy-release: - docker: - - image: grafana/grafana-ci-deploy:1.2.3 - steps: - - checkout - - run: - name: ci job started - command: './scripts/ci-job-started.sh' - - attach_workspace: - at: . - - run: - name: gcp credentials - command: 'echo ${GCP_GRAFANA_UPLOAD_KEY} > /tmp/gcpkey.json' - - run: - name: sign in to gcp - command: '/opt/google-cloud-sdk/bin/gcloud auth activate-service-account --key-file=/tmp/gcpkey.json' - - run: - name: deploy to gcp - command: '/opt/google-cloud-sdk/bin/gsutil cp ./dist/* gs://$GCP_BUCKET_NAME/oss/release' - - run: - name: Deploy to Grafana.com - command: './scripts/build/publish.sh' - - run: - name: Prepare GPG private key - command: './scripts/build/prepare_signing_key.sh' - - run: - name: Load GPG private key - command: './scripts/build/update_repo/load-signing-key.sh' - - run: - name: Update Debian repository - command: './scripts/build/update_repo/update-deb.sh "oss" "$GPG_KEY_PASSWORD" "$CIRCLE_TAG" "dist"' - - run: - name: Publish Debian repository - command: './scripts/build/update_repo/publish-deb.sh "oss"' - - run: - name: Update RPM repository - command: './scripts/build/update_repo/update-rpm.sh "oss" "$GPG_KEY_PASSWORD" "$CIRCLE_TAG" "dist"' - - run: - name: Publish RPM repository - command: './scripts/build/update_repo/publish-rpm.sh "oss" "$CIRCLE_TAG"' - - run: - name: ci job failed - command: './scripts/ci-job-failed.sh' - when: on_fail - - run: - name: ci job succeeded - command: './scripts/ci-job-succeeded.sh' - when: on_success - - build-oss-msi: - docker: - - image: grafana/wix-toolset-ci:v3 - steps: - - checkout - - run: - name: ci job started - command: './scripts/ci-job-started.sh' - - attach_workspace: - at: . - - run: - name: Build OSS MSI - command: './scripts/build/ci-msi-build/ci-msi-build-oss.sh' - - persist_to_workspace: - root: . - paths: - - dist/grafana-*.msi - - dist/grafana-*.msi.sha256 - - run: - name: ci job failed - command: './scripts/ci-job-failed.sh' - when: on_fail - - run: - name: ci job succeeded - command: './scripts/ci-job-succeeded.sh' - when: on_success - - build-ee-msi: - docker: - - image: grafana/wix-toolset-ci:v3 - steps: - - checkout - - run: - name: ci job started - command: './scripts/ci-job-started.sh' - - attach_workspace: - at: . - - run: - name: Build EE MSI - command: './scripts/build/ci-msi-build/ci-msi-build-ee.sh' - - persist_to_workspace: - root: . - paths: - - enterprise-dist/grafana-*.msi - - enterprise-dist/grafana-*.msi.sha256 - - run: - name: ci job failed - command: './scripts/ci-job-failed.sh' - when: on_fail - - run: - name: ci job succeeded - command: './scripts/ci-job-succeeded.sh' - when: on_success - store-build-artifacts: docker: - image: circleci/node:12 @@ -1764,180 +1097,180 @@ workflows: build-pipeline: jobs: - install-grabpl: - filters: *filter-only-master + filters: *filter-master-or-release - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release edition: oss variant: armv6 name: build-oss-backend-armv6 requires: - install-grabpl - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release edition: oss variant: armv7 name: build-oss-backend-armv7 requires: - install-grabpl - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release edition: oss variant: armv7-musl name: build-oss-backend-armv7-musl requires: - install-grabpl - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release edition: oss variant: arm64 name: build-oss-backend-arm64 requires: - install-grabpl - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release edition: oss variant: arm64-musl name: build-oss-backend-arm64-musl requires: - install-grabpl - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release edition: oss variant: osx64 name: build-oss-backend-osx64 requires: - install-grabpl - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release edition: oss variant: win64 name: build-oss-backend-win64 requires: - install-grabpl - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release edition: oss variant: linux-x64 name: build-oss-backend-linux-x64 requires: - install-grabpl - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release edition: oss variant: linux-x64-musl name: build-oss-backend-linux-x64-musl requires: - install-grabpl - build-frontend: - filters: *filter-only-master + filters: *filter-master-or-release name: build-oss-frontend edition: oss requires: - install-grabpl - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release + name: build-enterprise-backend-armv6 edition: enterprise variant: armv6 - name: build-enterprise-backend-armv6 requires: - install-grabpl - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release + name: build-enterprise-backend-armv7 edition: enterprise variant: armv7 - name: build-enterprise-backend-armv7 requires: - install-grabpl - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release + name: build-enterprise-backend-armv7-musl edition: enterprise variant: armv7-musl - name: build-enterprise-backend-armv7-musl requires: - install-grabpl - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release + name: build-enterprise-backend-arm64 edition: enterprise variant: arm64 - name: build-enterprise-backend-arm64 requires: - install-grabpl - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release + name: build-enterprise-backend-arm64-musl edition: enterprise variant: arm64-musl - name: build-enterprise-backend-arm64-musl requires: - install-grabpl - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release + name: build-enterprise-backend-osx64 edition: enterprise variant: osx64 - name: build-enterprise-backend-osx64 requires: - install-grabpl - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release + name: build-enterprise-backend-win64 edition: enterprise variant: win64 - name: build-enterprise-backend-win64 requires: - install-grabpl - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release + name: build-enterprise-backend-linux-x64 edition: enterprise variant: linux-x64 - name: build-enterprise-backend-linux-x64 requires: - install-grabpl - build-backend: - filters: *filter-only-master + filters: *filter-master-or-release + name: build-enterprise-backend-linux-x64-musl edition: enterprise variant: linux-x64-musl - name: build-enterprise-backend-linux-x64-musl requires: - install-grabpl - build-frontend: - filters: *filter-only-master + filters: *filter-master-or-release name: build-enterprise-frontend edition: enterprise requires: - install-grabpl - build-release-publisher: - filters: *filter-only-master + filters: *filter-master-or-release - codespell: - filters: *filter-only-master + filters: *filter-master-or-release requires: - install-grabpl - lint-go: - filters: *filter-only-master + filters: *filter-master-or-release requires: - install-grabpl - shellcheck-grabpl: - filters: *filter-only-master + filters: *filter-master-or-release requires: - install-grabpl - test-backend: - filters: *filter-only-master + filters: *filter-master-or-release requires: - install-grabpl - lint-go - test-frontend: - filters: *filter-only-master + filters: *filter-master-or-release requires: - install-grabpl - mysql-integration-test: - filters: *filter-only-master + filters: *filter-master-or-release requires: - install-grabpl - lint-go - postgres-integration-test: - filters: *filter-only-master + filters: *filter-master-or-release requires: - install-grabpl - lint-go - package-oss: - filters: *filter-only-master + filters: *filter-master-or-release requires: - install-grabpl - build-oss-backend-armv6 @@ -1957,7 +1290,7 @@ workflows: - mysql-integration-test - postgres-integration-test - package-enterprise: - filters: *filter-only-master + filters: *filter-master-or-release requires: - install-grabpl - build-enterprise-backend-armv6 @@ -1977,182 +1310,109 @@ workflows: - mysql-integration-test - postgres-integration-test - build-oss-windows-installer: - filters: *filter-only-master + filters: *filter-master-or-release requires: - package-oss - build-enterprise-windows-installer: - filters: *filter-only-master + filters: *filter-master-or-release requires: - package-enterprise - release-next-packages: filters: *filter-only-master requires: - test-frontend - - publish-oss-master: - filters: *filter-only-master + - release-packages: + filters: *filter-only-release + requires: + - end-to-end-tests + # TODO: Do we have more dependencies? + - publish-packages: + filters: *filter-master-or-release + name: publish-oss-packages + edition: oss requires: - package-oss - build-oss-windows-installer - end-to-end-tests - build-release-publisher - - docker-oss-master: - filters: *filter-only-master - requires: - - package-oss - - build-oss-windows-installer - - docker-ubuntu-oss-master: - filters: *filter-only-master - requires: - - package-oss - - build-oss-windows-installer - - publish-enterprise-master: - filters: *filter-only-master + - publish-packages: + filters: *filter-master-or-release + name: publish-enterprise-packages + edition: enterprise requires: - package-enterprise - build-enterprise-windows-installer - end-to-end-tests - build-release-publisher - - docker-enterprise-master: - filters: *filter-only-master + - build-docker-images: + filters: *filter-master-or-release + name: build-oss-docker-images + edition: oss + ubuntu: false + requires: + - package-oss + - build-oss-windows-installer + - build-docker-images: + filters: *filter-master-or-release + name: build-oss-ubuntu-docker-images + edition: oss + ubuntu: true + requires: + - package-oss + - build-oss-windows-installer + - build-docker-images: + filters: *filter-master-or-release + name: build-enterprise-docker-images + edition: enterprise + ubuntu: false requires: - package-enterprise - - docker-ubuntu-enterprise-master: - filters: *filter-only-master + - build-enterprise-windows-installer + - build-docker-images: + filters: *filter-master-or-release + name: build-enterprise-ubuntu-docker-images + edition: enterprise + ubuntu: true requires: - package-enterprise + - build-enterprise-windows-installer - end-to-end-tests: - filters: *filter-only-master + filters: *filter-master-or-release requires: - - docker-oss-master - - publish-docker-oss-master: - filters: *filter-only-master + - build-oss-docker-images + - publish-docker-images: + filters: *filter-master-or-release + name: publish-oss-docker-images + edition: oss + ubuntu: false requires: - - docker-oss-master + - build-oss-docker-images - end-to-end-tests - - publish-docker-ubuntu-oss-master: - filters: *filter-only-master + - publish-docker-images: + filters: *filter-master-or-release + name: publish-oss-ubuntu-docker-images + edition: oss + ubuntu: true requires: - - docker-ubuntu-oss-master + - build-oss-ubuntu-docker-images - end-to-end-tests - - publish-docker-enterprise-master: - filters: *filter-only-master + - publish-docker-images: + filters: *filter-master-or-release + name: publish-enterprise-docker-images + edition: enterprise + ubuntu: false requires: - - docker-enterprise-master + - build-enterprise-docker-images - end-to-end-tests - - publish-docker-ubuntu-enterprise-master: - filters: *filter-only-master + - publish-docker-images: + filters: *filter-master-or-release + name: publish-enterprise-ubuntu-docker-images + edition: enterprise + ubuntu: true requires: - - docker-ubuntu-enterprise-master + - build-enterprise-ubuntu-docker-images - end-to-end-tests - release: - jobs: - - build-all: - filters: *filter-only-release - - build-all-enterprise: - filters: *filter-only-release - - codespell: - filters: *filter-only-release - - lint-go: - filters: *filter-only-release - - shellcheck: - filters: *filter-only-release - - test-frontend: - filters: *filter-only-release - - test-backend: - filters: *filter-only-release - - mysql-integration-test: - filters: *filter-only-release - - postgres-integration-test: - filters: *filter-only-release - - deploy-release: - requires: - - build-all - - test-backend - - test-frontend - - codespell - - lint-go - - shellcheck - - mysql-integration-test - - postgres-integration-test - - build-oss-msi - filters: *filter-only-release - - deploy-enterprise-release: - requires: - - build-all - - build-all-enterprise - - test-backend - - test-frontend - - codespell - - lint-go - - shellcheck - - mysql-integration-test - - postgres-integration-test - - build-ee-msi - filters: *filter-only-release - - grafana-docker-release: - requires: - - build-all - - build-all-enterprise - - test-backend - - test-frontend - - codespell - - lint-go - - shellcheck - - mysql-integration-test - - postgres-integration-test - filters: *filter-only-release - - grafana-docker-ubuntu-release: - requires: - - build-all - - build-all-enterprise - - test-backend - - test-frontend - - codespell - - lint-go - - shellcheck - - mysql-integration-test - - postgres-integration-test - filters: *filter-only-release - - release-packages: - requires: - - build-all - - test-backend - - test-frontend - - codespell - - lint-go - - shellcheck - - mysql-integration-test - - postgres-integration-test - - build-oss-msi - filters: *filter-only-release - - build-oss-msi: - requires: - - build-all - - test-backend - - test-frontend - - codespell - - lint-go - - shellcheck - - mysql-integration-test - - postgres-integration-test - filters: *filter-only-release - - build-ee-msi: - requires: - - build-all-enterprise - - test-backend - - test-frontend - - codespell - - lint-go - - shellcheck - - mysql-integration-test - - postgres-integration-test - filters: *filter-only-release - - end-to-end-test-release: - requires: - - grafana-docker-release - filters: *filter-only-release - build-branches-and-prs: jobs: - build-fast-backend: