Adds a CircleCI integration for Ghost Inspector (https://ghostinspector.com), a headless browser testing SaaS. The README is updated with details about how to run GI locally. Removes the bootstrap setup for Selenium testing with BrowserStack.
325 lines
9.8 KiB
YAML
325 lines
9.8 KiB
YAML
version: 2.1
|
|
|
|
orbs:
|
|
aws-ecr: circleci/aws-ecr@6.3.0
|
|
aws-eks: circleci/aws-eks@0.1.0
|
|
azure-acr: circleci/azure-acr@0.1.2
|
|
azure-aks: circleci/azure-aks@0.2.0
|
|
kubernetes: circleci/kubernetes@0.3.0
|
|
|
|
defaults:
|
|
appEnvironment: &appEnvironment
|
|
KEEP_EXISTING_VENV: true
|
|
PGHOST: localhost
|
|
PGUSER: root
|
|
PGDATABASE: circle_test
|
|
REDIS_URI: redis://localhost:6379
|
|
PIP_VERSION: 18.*
|
|
CRL_STORAGE_PROVIDER: CLOUDFILES
|
|
|
|
commands:
|
|
migration_setup:
|
|
parameters:
|
|
container_image:
|
|
type: string
|
|
steps:
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Setup Environment Variables
|
|
command: |
|
|
echo 'export CONTAINER_IMAGE="<< parameters.container_image >>"' >> $BASH_ENV
|
|
- run: sudo apt-get update
|
|
- run: sudo apt-get install gettext
|
|
- kubernetes/install
|
|
migration_apply:
|
|
steps:
|
|
- run:
|
|
command: ./script/cluster_migration
|
|
name: Apply Migrations and Seed Roles
|
|
|
|
jobs:
|
|
app_setup:
|
|
docker:
|
|
- image: circleci/python:3.7.3-stretch-node
|
|
environment: *appEnvironment
|
|
- image: circleci/postgres:9.6.5-alpine-ram
|
|
- image: circleci/redis:4-alpine3.8
|
|
steps:
|
|
- checkout
|
|
- run: sudo apt-get update
|
|
- run: sudo apt-get install postgresql-client-9.6
|
|
- attach_workspace:
|
|
at: .
|
|
- run: ./script/setup
|
|
- save_cache:
|
|
name: "Save Cache: Pipenv Refrences"
|
|
paths:
|
|
- ~/.local/share
|
|
key: pipenv-v1-{{ .Branch }}-{{ checksum "Pipfile.lock" }}
|
|
- save_cache:
|
|
name: "Save Cache: Python Venv"
|
|
paths:
|
|
- ./.venv
|
|
key: venv-v1-{{ .Branch }}-{{ checksum "Pipfile.lock" }}
|
|
- save_cache:
|
|
name: "Save Cache: Yarn"
|
|
paths:
|
|
- ~/.cache/yarn
|
|
key: yarn-v1-{{ .Branch }}-{{ checksum "yarn.lock" }}
|
|
- save_cache:
|
|
name: "Save Cache: Node Modules"
|
|
paths:
|
|
- ./node_modules
|
|
key: node-v1-{{ .Branch }}-{{ checksum "yarn.lock" }}
|
|
- run:
|
|
name: "Update CRLs"
|
|
command: ./script/sync-crls
|
|
- run:
|
|
name: "Generate build info"
|
|
command: ./script/generate_build_info.sh
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- .
|
|
|
|
test:
|
|
docker:
|
|
- image: circleci/python:3.7.3-stretch-node
|
|
environment: *appEnvironment
|
|
- image: circleci/postgres:9.6.5-alpine-ram
|
|
- image: circleci/redis:4-alpine3.8
|
|
steps:
|
|
- attach_workspace:
|
|
at: .
|
|
- run: sudo apt-get update
|
|
- run: sudo apt-get install postgresql-client-9.6
|
|
- run:
|
|
name: "Run Tests"
|
|
command: ./script/cibuild
|
|
|
|
aws-migration:
|
|
executor: aws-eks/python3
|
|
steps:
|
|
- migration_setup:
|
|
container_image: "$AWS_ECR_ACCOUNT_URL/atat:atat-$CIRCLE_SHA1"
|
|
- aws-eks/update-kubeconfig-with-authenticator:
|
|
cluster-name: atat
|
|
aws-region: "${AWS_REGION}"
|
|
- migration_apply
|
|
|
|
azure-migration:
|
|
executor: azure-aks/default
|
|
steps:
|
|
- migration_setup:
|
|
container_image: "$AZURE_SERVER_NAME/atat:atat-$CIRCLE_SHA1"
|
|
- azure-aks/update-kubeconfig-with-credentials:
|
|
cluster-name: atat-cluster
|
|
install-kubectl: true
|
|
perform-login: true
|
|
resource-group: atat
|
|
- migration_apply
|
|
|
|
# the azure-acr orb doesn't allow for multiple tags in the
|
|
# build-and-push-image step, so instead we wrap our own job around it and run
|
|
# some additional Docker commands
|
|
azure-build-and-push-image:
|
|
executor: azure-acr/default
|
|
steps:
|
|
- azure-acr/build-and-push-image:
|
|
extra-build-args: "--build-arg CSP=azure"
|
|
login-server-name: "${AZURE_SERVER_NAME}"
|
|
registry-name: pwatat
|
|
repo: atat
|
|
tag: "atat-${CIRCLE_SHA1}"
|
|
- run: "docker tag ${AZURE_SERVER_NAME}/atat:atat-${CIRCLE_SHA1} ${AZURE_SERVER_NAME}/atat:latest"
|
|
- run: "docker push ${AZURE_SERVER_NAME}/atat:latest"
|
|
|
|
integration-tests:
|
|
docker:
|
|
- image: docker:17.05.0-ce-git
|
|
steps:
|
|
- setup_remote_docker:
|
|
version: 18.06.0-ce
|
|
- checkout
|
|
- run:
|
|
name: Set up temporary docker network
|
|
command: docker network create atat
|
|
- run:
|
|
name: Build image
|
|
command: docker build . -t atat:latest
|
|
- run:
|
|
name: Get storage containers
|
|
command: docker pull postgres:latest && docker pull redis:latest
|
|
- run:
|
|
name: Start redis
|
|
command: docker run -d --network atat --link redis:redis -p 6379:6379 --name redis redis:latest
|
|
- run:
|
|
name: Start postgres
|
|
command: docker run -d --network atat --link postgres:postgres -p 5432:5432 --name postgres postgres:latest
|
|
- run:
|
|
name: Start application container
|
|
command: |
|
|
docker run -d \
|
|
-e DISABLE_CRL_CHECK=true \
|
|
-e PGHOST=postgres \
|
|
-e REDIS_URI=redis://redis:6379 \
|
|
-p 8000:8000 \
|
|
--network atat \
|
|
--name test-atat \
|
|
atat:latest \
|
|
uwsgi \
|
|
--callable app \
|
|
--module app \
|
|
--plugin python3 \
|
|
--virtualenv /opt/atat/atst/.venv \
|
|
--http-socket :8000
|
|
- run:
|
|
name: Wait for containers
|
|
command: sleep 3
|
|
- run:
|
|
name: Create database
|
|
command: docker exec postgres createdb -U postgres atat
|
|
- run:
|
|
name: Apply migrations
|
|
command: docker exec test-atat .venv/bin/python .venv/bin/alembic upgrade head
|
|
- run:
|
|
name: Execute Ghost Inspector test suite
|
|
command: |
|
|
docker pull ghostinspector/test-runner-standalone:latest
|
|
docker run \
|
|
-e NGROK_TOKEN=$NGROK_TOKEN \
|
|
-e GI_API_KEY=$GI_API_KEY \
|
|
-e GI_SUITE=$GI_SUITE \
|
|
-e GI_PARAMS_JSON='{}' \
|
|
-e APP_PORT="test-atat:8000" \
|
|
--network atat \
|
|
ghostinspector/test-runner-standalone:latest
|
|
|
|
workflows:
|
|
version: 2
|
|
run-tests:
|
|
jobs:
|
|
- app_setup
|
|
- test:
|
|
requires:
|
|
- app_setup
|
|
- integration-tests:
|
|
requires:
|
|
- test
|
|
- azure-build-and-push-image:
|
|
requires:
|
|
- integration-tests
|
|
filters:
|
|
branches:
|
|
only:
|
|
- master
|
|
- azure-migration:
|
|
requires:
|
|
- azure-build-and-push-image
|
|
filters:
|
|
branches:
|
|
only:
|
|
- master
|
|
- azure-aks/update-container-image:
|
|
cluster-name: atat-cluster
|
|
container-image-updates: "atst=${AZURE_SERVER_NAME}/atat:atat-${CIRCLE_SHA1}"
|
|
namespace: atat
|
|
resource-name: deployment.apps/atst
|
|
resource-group: atat
|
|
# uncomment below for debugging
|
|
# show-kubectl-command: true
|
|
requires:
|
|
- azure-migration
|
|
filters:
|
|
branches:
|
|
only:
|
|
- master
|
|
- azure-aks/update-container-image:
|
|
cluster-name: atat-cluster
|
|
container-image-updates: "atst-worker=${AZURE_SERVER_NAME}/atat:atat-${CIRCLE_SHA1}"
|
|
namespace: atat
|
|
resource-name: deployment.apps/atst-worker
|
|
resource-group: atat
|
|
# uncomment below for debugging
|
|
# show-kubectl-command: true
|
|
requires:
|
|
- azure-migration
|
|
filters:
|
|
branches:
|
|
only:
|
|
- master
|
|
- azure-aks/update-container-image:
|
|
cluster-name: atat-cluster
|
|
container-image-updates: "atst-beat=${AZURE_SERVER_NAME}/atat:atat-${CIRCLE_SHA1}"
|
|
namespace: atat
|
|
resource-name: deployment.apps/atst-beat
|
|
resource-group: atat
|
|
# uncomment below for debugging
|
|
# show-kubectl-command: true
|
|
requires:
|
|
- azure-migration
|
|
filters:
|
|
branches:
|
|
only:
|
|
- master
|
|
- aws-ecr/build-and-push-image:
|
|
extra-build-args: "--build-arg CSP=aws"
|
|
repo: atat
|
|
tag: "atat-${CIRCLE_SHA1},latest"
|
|
requires:
|
|
- integration-tests
|
|
filters:
|
|
branches:
|
|
only:
|
|
- master
|
|
- aws-migration:
|
|
requires:
|
|
- aws-ecr/build-and-push-image
|
|
filters:
|
|
branches:
|
|
only:
|
|
- master
|
|
- aws-eks/update-container-image:
|
|
cluster-name: atat
|
|
container-image-updates: "atst=${AWS_ECR_ACCOUNT_URL}/atat:atat-${CIRCLE_SHA1}"
|
|
namespace: atat
|
|
resource-name: deployment.apps/atst
|
|
aws-region: "${AWS_REGION}"
|
|
# uncomment below for debugging
|
|
# show-kubectl-command: true
|
|
requires:
|
|
- aws-migration
|
|
filters:
|
|
branches:
|
|
only:
|
|
- master
|
|
- aws-eks/update-container-image:
|
|
cluster-name: atat
|
|
container-image-updates: "atst-worker=${AWS_ECR_ACCOUNT_URL}/atat:atat-${CIRCLE_SHA1}"
|
|
namespace: atat
|
|
resource-name: deployment.apps/atst-worker
|
|
aws-region: "${AWS_REGION}"
|
|
# uncomment below for debugging
|
|
# show-kubectl-command: true
|
|
requires:
|
|
- aws-migration
|
|
filters:
|
|
branches:
|
|
only:
|
|
- master
|
|
- aws-eks/update-container-image:
|
|
cluster-name: atat
|
|
container-image-updates: "atst-beat=${AWS_ECR_ACCOUNT_URL}/atat:atat-${CIRCLE_SHA1}"
|
|
namespace: atat
|
|
resource-name: deployment.apps/atst-beat
|
|
aws-region: "${AWS_REGION}"
|
|
# uncomment below for debugging
|
|
# show-kubectl-command: true
|
|
requires:
|
|
- aws-migration
|
|
filters:
|
|
branches:
|
|
only:
|
|
- master
|