Skip to content

Commit

Permalink
Update Circle CI for our workflow
Browse files Browse the repository at this point in the history
- 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.

Disable test that tests the login page and the existence of the
remote auth link there. We override this functionality for user
experience reasons via redash-stmo and redirect from the login page
to the remote auth URL.

Refs #13
Refs #37
  • Loading branch information
robotblake authored and jezdez committed May 4, 2020
1 parent c5e9db0 commit 9580594
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 66 deletions.
78 changes: 44 additions & 34 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,68 +78,78 @@ jobs:
- run: npm run bundle
- run: npm test
- run: npm run lint
frontend-e2e-tests:
build-docker-image:
<<: *build-docker-image-job
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
MOZILLA_VERSION: "master"
build-docker-image-rc:
<<: *build-docker-image-job
environment:
MOZILLA_VERSION: "rc"
build-docker-image-tag:
environment:
MOZILLA_VERSION: "$CIRCLE_TAG"
docker:
- image: circleci/node:12
steps:
- setup_remote_docker
- checkout
- run:
name: Install npm dependencies
command: |
npm ci
- run:
name: Setup Redash server
command: |
npm run cypress build
npm run cypress start -- --skip-db-seed
docker-compose run cypress npm run cypress db-seed
- run:
name: Execute Cypress tests
command: npm run cypress run-ci
build-docker-image: *build-docker-image-job
build-preview-docker-image: *build-docker-image-job
- run: sudo apt update
- run: sudo apt install python3-pip
- run: sudo pip3 install -r requirements_bundles.txt
- run: .circleci/update_version
- run: npm run bundle
- run: .circleci/docker_build
# 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:
- backend-lint
- backend-lint:
filters:
tags:
only: /^m[0-9]+(\.[0-9]+)?$/
- backend-unit-tests:
filters:
tags:
only: /^m[0-9]+(\.[0-9]+)?$/
requires:
- backend-lint
- frontend-lint
- frontend-lint:
filters:
tags:
only: /^m[0-9]+(\.[0-9]+)?$/
- frontend-unit-tests:
filters:
tags:
only: /^m[0-9]+(\.[0-9]+)?$/
requires:
- backend-lint
- frontend-lint
- frontend-e2e-tests:
requires:
- frontend-lint
- build-preview-docker-image:
- build-docker-image:
requires:
- backend-unit-tests
- frontend-unit-tests
- frontend-e2e-tests
filters:
branches:
only:
- master
- hold:
type: approval
- build-docker-image-rc:
requires:
- backend-unit-tests
- frontend-unit-tests
- frontend-e2e-tests
filters:
branches:
only:
- /release\/.*/
- build-docker-image:
- release
- build-docker-image-tag:
requires:
- hold
- backend-unit-tests
- frontend-unit-tests
filters:
branches:
ignore: /.*/
tags:
only: /^m[0-9]+(\.[0-9]+)?$/
16 changes: 4 additions & 12 deletions .circleci/docker_build
Original file line number Diff line number Diff line change
@@ -1,17 +1,9 @@
#!/bin/bash
VERSION=$(jq -r .version package.json)
VERSION_TAG=$VERSION.b$CIRCLE_BUILD_NUM
VERSION_TAG="$MOZILLA_VERSION"

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"
echo "Built: $VERSION_TAG"
4 changes: 3 additions & 1 deletion .circleci/update_version
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#!/bin/bash
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
13 changes: 13 additions & 0 deletions bin/dockerflow-version
Original file line number Diff line number Diff line change
@@ -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
2 changes: 2 additions & 0 deletions requirements_bundles.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
# loading mechanism need on Python 2 and can be removed
# when moved to Python 3.
# It's automatically installed when running npm run bundle
# This is the Mozilla Redash extension
redash-stmo>=2019.9.0

# These can be removed when upgrading to Python 3.x
importlib-metadata>=0.19 # remove when on 3.8
Expand Down
38 changes: 19 additions & 19 deletions tests/test_handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,25 +101,25 @@ def test_get_login_form(self):
rv = self.client.get("/default/login")
self.assertEqual(rv.status_code, 200)

def test_get_login_form_remote_auth(self):
"""Make sure the remote auth link can be rendered correctly on the
login page when the remote user login feature is enabled"""
old_remote_user_enabled = settings.REMOTE_USER_LOGIN_ENABLED
old_ldap_login_enabled = settings.LDAP_LOGIN_ENABLED
try:
settings.REMOTE_USER_LOGIN_ENABLED = True
settings.LDAP_LOGIN_ENABLED = True
rv = self.client.get("/default/login")
self.assertEqual(rv.status_code, 200)
self.assertIn(
"/{}/remote_user/login".format(self.factory.org.slug), rv.data.decode()
)
self.assertIn(
"/{}/ldap/login".format(self.factory.org.slug), rv.data.decode()
)
finally:
settings.REMOTE_USER_LOGIN_ENABLED = old_remote_user_enabled
settings.LDAP_LOGIN_ENABLED = old_ldap_login_enabled
# def test_get_login_form_remote_auth(self):
# """Make sure the remote auth link can be rendered correctly on the
# login page when the remote user login feature is enabled"""
# old_remote_user_enabled = settings.REMOTE_USER_LOGIN_ENABLED
# old_ldap_login_enabled = settings.LDAP_LOGIN_ENABLED
# try:
# settings.REMOTE_USER_LOGIN_ENABLED = True
# settings.LDAP_LOGIN_ENABLED = True
# rv = self.client.get("/default/login")
# self.assertEqual(rv.status_code, 200)
# self.assertIn(
# "/{}/remote_user/login".format(self.factory.org.slug), rv.data.decode()
# )
# self.assertIn(
# "/{}/ldap/login".format(self.factory.org.slug), rv.data.decode()
# )
# finally:
# settings.REMOTE_USER_LOGIN_ENABLED = old_remote_user_enabled
# settings.LDAP_LOGIN_ENABLED = old_ldap_login_enabled

def test_submit_non_existing_user(self):
with patch("redash.handlers.authentication.login_user") as login_user_mock:
Expand Down

0 comments on commit 9580594

Please sign in to comment.