From 15f6401743e7244f7e7352372ee7c1bf273c6dbd Mon Sep 17 00:00:00 2001 From: Blake Imsland Date: Wed, 19 Apr 2017 10:23:14 -0700 Subject: [PATCH] Update Circle CI for our workflow - Use new master / rc release release strategy (#440) - Migrate Circle CI 2.0 (#488, #502, #923) - Install redash-stmo. In the long run we'll be able to install additional dependencies by having an own Dockerfile to build images based on the Redash image but that installs additional Python dependencies. But until we have a fork with lots of changes ourselves we need to do it this way. Redash-stmo contains the ability to hook up our own Dockerflow library. Refs #13 Refs #37 --- .circleci/config.yml | 91 ++++++++++++++++++++++++---------------- .circleci/docker_build | 14 ++----- .circleci/update_version | 5 ++- bin/dockerflow-version | 13 ++++++ requirements_bundles.txt | 1 + 5 files changed, 76 insertions(+), 48 deletions(-) create mode 100755 bin/dockerflow-version diff --git a/.circleci/config.yml b/.circleci/config.yml index b7d7033e9e..16ac4f209c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -66,30 +66,6 @@ jobs: - run: npm run bundle - run: npm test - run: npm run lint - frontend-e2e-tests: - environment: - COMPOSE_FILE: .circleci/docker-compose.cypress.yml - COMPOSE_PROJECT_NAME: cypress - PERCY_TOKEN_ENCODED: ZGRiY2ZmZDQ0OTdjMzM5ZWE0ZGQzNTZiOWNkMDRjOTk4Zjg0ZjMxMWRmMDZiM2RjOTYxNDZhOGExMjI4ZDE3MA== - CYPRESS_PROJECT_ID_ENCODED: OTI0Y2th - CYPRESS_RECORD_KEY_ENCODED: YzA1OTIxMTUtYTA1Yy00NzQ2LWEyMDMtZmZjMDgwZGI2ODgx - docker: - - image: circleci/node:8 - steps: - - setup_remote_docker - - checkout - - run: - name: Install npm dependencies - command: | - npm install - - run: - name: Setup Redash server - command: | - npm run cypress start - docker-compose run cypress npm run cypress db-seed - - run: - name: Execute Cypress tests - command: npm run cypress run-ci build-tarball: docker: - image: circleci/node:8 @@ -113,41 +89,84 @@ jobs: - checkout - run: sudo apt install python-pip - run: sudo pip install -r requirements_bundles.txt - - run: .circleci/update_version + - run: .circleci/update_version "master" + - run: npm run bundle + - run: .circleci/docker_build "master" + build-docker-image-rc: + docker: + - image: circleci/node:8 + steps: + - setup_remote_docker + - checkout + - run: sudo apt install python-pip + - run: sudo pip install -r requirements_bundles.txt + - run: .circleci/update_version "rc" + - run: npm run bundle + - run: .circleci/docker_build "rc" + build-docker-image-tag: + docker: + - image: circleci/node:8 + steps: + - setup_remote_docker + - checkout + - run: sudo apt install python-pip + - run: sudo pip install -r requirements_bundles.txt + - run: .circleci/update_version "$CIRCLE_TAG" - run: npm run bundle - - run: .circleci/docker_build + - run: .circleci/docker_build "$CIRCLE_TAG" + # Create alias from tag to "latest": + - run: docker tag $DOCKERHUB_REPO:$CIRCLE_TAG $DOCKERHUB_REPO:latest + - run: docker push $DOCKERHUB_REPO:latest workflows: version: 2 build: jobs: - python-flake8-tests - legacy-python-flake8-tests - - backend-unit-tests - - frontend-lint + - backend-unit-tests: + filters: + tags: + only: /^m[0-9]+(\.[0-9]+)?$/ + - frontend-lint: + filters: + tags: + only: /^m[0-9]+(\.[0-9]+)?$/ - frontend-unit-tests: requires: - frontend-lint - - frontend-e2e-tests: - requires: - - frontend-lint + filters: + tags: + only: /^m[0-9]+(\.[0-9]+)?$/ - build-tarball: requires: - backend-unit-tests - frontend-unit-tests - - frontend-e2e-tests filters: branches: only: - master - - /release\/.*/ - build-docker-image: requires: - backend-unit-tests - frontend-unit-tests - - frontend-e2e-tests filters: branches: only: - master - - preview-image - - /release\/.*/ + - build-docker-image-rc: + requires: + - backend-unit-tests + - frontend-unit-tests + filters: + branches: + only: + - release + - build-docker-image-tag: + requires: + - backend-unit-tests + - frontend-unit-tests + filters: + branches: + ignore: /.*/ + tags: + only: /^m[0-9]+(\.[0-9]+)?$/ diff --git a/.circleci/docker_build b/.circleci/docker_build index 50acc2f526..0de850dff8 100755 --- a/.circleci/docker_build +++ b/.circleci/docker_build @@ -1,17 +1,9 @@ #!/bin/bash -VERSION=$(jq -r .version package.json) -VERSION_TAG=$VERSION.b$CIRCLE_BUILD_NUM +VERSION_TAG="$1" docker login -u $DOCKER_USER -p $DOCKER_PASS -if [ $CIRCLE_BRANCH = master ] || [ $CIRCLE_BRANCH = preview-image ] -then - docker build -t redash/redash:preview -t redash/preview:$VERSION_TAG . - docker push redash/redash:preview - docker push redash/preview:$VERSION_TAG -else - docker build -t redash/redash:$VERSION_TAG . - docker push redash/redash:$VERSION_TAG -fi +docker build -t $DOCKERHUB_REPO:$VERSION_TAG . +docker push $DOCKERHUB_REPO:$VERSION_TAG echo "Built: $VERSION_TAG" \ No newline at end of file diff --git a/.circleci/update_version b/.circleci/update_version index d397fb23df..4bd4340765 100755 --- a/.circleci/update_version +++ b/.circleci/update_version @@ -1,6 +1,9 @@ #!/bin/bash +MOZILLA_VERSION="$1" +bin/dockerflow-version "$MOZILLA_VERSION" + VERSION=$(jq -r .version package.json) -FULL_VERSION=$VERSION+b$CIRCLE_BUILD_NUM +FULL_VERSION=$VERSION+b$CIRCLE_BUILD_NUM-$MOZILLA_VERSION sed -ri "s/^__version__ = '([A-Za-z0-9.-]*)'/__version__ = '$FULL_VERSION'/" redash/__init__.py sed -i "s/dev/$CIRCLE_SHA1/" client/app/version.json diff --git a/bin/dockerflow-version b/bin/dockerflow-version new file mode 100755 index 0000000000..027d61971f --- /dev/null +++ b/bin/dockerflow-version @@ -0,0 +1,13 @@ +#!/bin/bash + +set -eo pipefail + +VERSION="$1" + +printf '{"commit":"%s","version":"%s","source":"https://github.com/%s/%s","build":"%s"}\n' \ + "$CIRCLE_SHA1" \ + "$VERSION" \ + "$CIRCLE_PROJECT_USERNAME" \ + "$CIRCLE_PROJECT_REPONAME" \ + "$CIRCLE_BUILD_URL" \ +> version.json diff --git a/requirements_bundles.txt b/requirements_bundles.txt index 9b871f411d..fe772fe06c 100644 --- a/requirements_bundles.txt +++ b/requirements_bundles.txt @@ -2,6 +2,7 @@ # loading mechanism need on Python 2 and can be removed # when moved to Python 3. # It's automatically installed when running npm run bundle +redash-stmo>=2019.7.3 # These can be removed when upgrading to Python 3.x importlib-metadata==0.9 # remove when on 3.8