3scale/porta

View on GitHub
.circleci/config.yml

Summary

Maintainability
Test Coverage
version: 2.1
orbs:
codecov: codecov/codecov@3.3.0
 
##################################### YAML ANCHORS ############################################
 
persist-vendored-dependencies-to-workspace: &persist-vendored-dependencies-to-workspace
persist_to_workspace:
root: .
paths:
- ./vendor/bundle
- ./.bundle/
 
store-junit-results: &store-junit-test-results
store_test_results:
path: tmp/junit
 
store-test-artifacts: &store-test-artifacts
store_artifacts:
path: tmp/junit
destination: junit
 
store-log-artifacts: &store-log-artifacts
store_artifacts:
path: log
destination: log
 
npm-cache-key: &npm-cache-key stream9-{{ .Environment.CACHE_VERSION }}-node-modules-{{ checksum "yarn.lock" }}
bundle-cache-key: &bundle-cache-key stream9-{{ .Environment.CACHE_VERSION }}-bundler-gems-{{ arch }}-{{ checksum "Gemfile.lock" }}-{{ checksum "/tmp/db" }}
assets-cache-key: &assets-cache-key stream9-{{ .Environment.CACHE_VERSION }}-asset-cache-{{ checksum "tmp/assets_related_checksums" }}
oracle-libs-cache-key: &oracle-libs-cache-key ora1-{{ .Environment.CACHE_VERSION }}-oracle-libs-cache-{{ checksum "script/oracle/install-instantclient-packages.sh" }}
 
restore-npm-cache: &restore-npm-cache
restore_cache:
key: *npm-cache-key
 
save-npm-cache: &save-npm-cache
save_cache:
key: *npm-cache-key
paths:
- ./node_modules
 
restore-oracle-libs-cache: &restore-oracle-libs-cache
restore_cache:
key: *oracle-libs-cache-key
 
save-oracle-libs-cache: &save-oracle-libs-cache
save_cache:
key: *oracle-libs-cache-key
paths:
- vendor/oracle
 
save-assets-cache: &save-assets-cache
save_cache:
key: *assets-cache-key
paths:
- public/assets
- public/packs
- tmp/cache/assets
 
restore-assets-cache: &restore-assets-cache
restore_cache:
key: *assets-cache-key
 
generate-assets-checksums: &generate-assets-checksums
run:
name: Generate assets precompilation checksum data
command: git ls-tree -r HEAD $(<.circleci/asset_paths) > tmp/assets_related_checksums
 
use-example-config-files: &use-example-config-files
run:
name: Copy example config files into place to be used by tests
command: cp config/examples/*.yml config/
 
disable-internet-access: &disable-internet-access
run:
name: Disable internet access
command: sudo sed -c -i".bak" 's/127\.0\.0\.11$/127.0.0.1/' /etc/resolv.conf
 
enable-internet-access: &enable-internet-access
run:
name: Enabled internet access
command: sudo sed -c -i".bak" 's/127\.0\.0\.1$/127.0.0.11/' /etc/resolv.conf
when: always
 
attach-to-workspace: &attach-to-workspace
attach_workspace:
at: .
 
system-builder-ruby31: &system-builder-ruby31
image: quay.io/3scale/system-builder:ps
environment:
BUNDLE_FROZEN: true
BUNDLE_PATH: 'vendor/bundle'
DISABLE_SPRING: "true"
ORACLE_SYSTEM_PASSWORD: threescalepass
NLS_LANG: AMERICAN_AMERICA.UTF8
TZ: UTC
MASTER_PASSWORD: p
USER_PASSWORD: p
LC_ALL: C.utf8
RAILS_ENV: test
 
mysql-container: &mysql-container
image: cimg/mysql:8.0
command: mysqld --performance_schema=0 --table_definition_cache=400 --innodb_buffer_pool_size=16M --innodb_log_buffer_size=4M --tmp_table_size=1M --key_buffer_size=4M --sort_buffer_size=128K --skip-log-bin
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: yes
MYSQL_ROOT_PASSWORD: ''
MYSQL_DATABASE: circleci
 
postgres-container: &postgres-container
image: cimg/postgres:14.12
environment:
POSTGRES_USER: postgres
 
oracle-db-container: &oracle-db-container
image: quay.io/3scale/oracle:19.3.0-ee-ci-prebuilt
auth:
username: $DOCKER_USERNAME
password: $DOCKER_PASSWORD
environment:
ORACLE_CHARACTERSET: 'AL32UTF8'
ORACLE_SID: 'threescale'
ORACLE_PDB: 'systempdbtest'
ORACLE_PWD: 'threescalepass'
command: bash -c "sed -i.bak 's|2048|6144|g' /opt/oracle/dbca.rsp.tmpl && exec /opt/oracle/runOracle.sh"
 
memcached-container: &memcached-container
image: memcached:1.5-alpine
 
redis-container: &redis-container
image: redis:6.2-alpine
 
dnsmasq-container: &dnsmasq-container
image: quay.io/3scale/dnsmasq
command:
- --user=root
- --keep-in-foreground
- --log-facility=-
- --log-queries
- --no-poll
- --server=/circleci-internal-outer-build-agent/circleci-internal-outer-build-agent.ec2.internal/circleci.com/circleci-binary-releases.s3.amazonaws.com/127.0.0.11
- --address=/#/127.0.0.1
 
only-master-filter: &only-master-filter
filters:
branches:
only: master
 
nightly-trigger: &nightly-trigger
triggers:
- schedule:
cron: "0 0 * * *"
<<: *only-master-filter
 
build-envs:
mysql: &build-envs-mysql
environment:
DB: mysql
DATABASE_URL: mysql2://root:@127.0.0.1:3306/3scale_system_test
 
postgresql: &build-envs-postgresql
environment:
DB: postgresql
DATABASE_URL: postgresql://postgres:@127.0.0.1:5432/systemdb
 
oracle: &build-envs-oracle
environment:
DB: oracle
DATABASE_URL: oracle-enhanced://rails:railspass@127.0.0.1:1521/systempdb
CAPYBARA_MAX_WAIT_TIME: 30
 
##################################### CIRCLECI COMMANDS ############################################
 
commands: # reusable commands with parameters
 
notify_failure:
steps:
- when:
condition:
equal: [ master, << pipeline.git.branch >> ] # &only-master-filter won't work at step level
steps:
- run:
name: Notify Slack about tests failure
command: |
curl -X POST -H 'Content-type: application/json' \
--data \
"{ \
\"attachments\": [ \
{ \
\"fallback\": \"Build failed on $CIRCLE_BRANCH, for $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME.\", \
\"color\": \"#CD0000\", \
\"pretext\": \"Don't panic. Build failed on $CIRCLE_BRANCH !! \", \
\"author_name\": \"$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME\", \
\"title\": \"Job: $CIRCLE_JOB \", \
\"title_link\": \"$CIRCLE_BUILD_URL\", \
\"text\": \"$CIRCLE_BUILD_URL\", \
\"fields\": [ \
{ \
\"title\": \"Commit\", \
\"value\": \"$CIRCLE_SHA1\", \
\"short\": false \
} \
] \
} \
] \
}" $SLACK_WEBHOOK_SYSTEM
when: on_fail
 
install-gem-dependencies:
parameters:
extra-deps:
description: "Steps that will be executed in case extra dependencies."
type: steps
default: []
steps:
- checkout
- run:
name: Make $DB Available for cache keys
command: echo $DB > /tmp/db
- restore-gem-cache
- steps: << parameters.extra-deps >>
- run:
name: Install gems with bundler
command: |
echo "Running gems install for database: $DB"
echo "$(bundle version)"
bundle config set --local deployment 'true'
bundle config build.nokogiri --use-system-libraries
bundle check || bundle install
bundle clean
# remove capybara-webkit source, save more than 400 MB
rm -rf "$BUNDLE_PATH/$(ruby -e 'puts Gem.ruby_engine')/$(ruby -e 'puts Gem.ruby_api_version')"/gems/capybara-webkit-*/src
environment:
BUNDLE_RETRY: 3
BUNDLE_JOBS: 3
- save-gem-cache
- *persist-vendored-dependencies-to-workspace
 
clone-oracle-libraries:
steps:
- *restore-oracle-libs-cache
- run:
name: "Fetch oracle libraries"
command: |
set +o pipefail
ls vendor/oracle
sudo ORACLE_KEEP_DOWNLOADS=1 ./script/oracle/install-instantclient-packages.sh
- *save-oracle-libs-cache
 
prepare-db-for-tests:
steps:
- run:
name: Prepare database for tests
command: |
set +o pipefail
echo "Running for database: $(echo $DATABASE_URL | sed -e 's/\(oracle\|mysql\|postgresql\).*/\1/g')"
set -o pipefail
bundle exec rake ci:db:ready db:create db:test:prepare
 
rspec-tests:
parameters:
extra-deps:
description: "Steps that will be executed in case extra dependencies are required, e.g. to connect to db."
type: steps
default: []
steps:
- checkout
- *attach-to-workspace
- *use-example-config-files
- steps: << parameters.extra-deps >>
- prepare-db-for-tests
- run:
name: jemalloc availability
command: ldd /bin/bash | grep "$LD_PRELOAD" || ( ldconfig -p && exit 1 )
environment: &malloc_preload
LD_PRELOAD: libjemalloc.so.2
- run:
name: Rspec tests
command: |
circleci tests glob "spec/**/*_spec.rb" | circleci tests run --command="xargs bundle exec rspec --format progress" --verbose --split-by=timings
environment: *malloc_preload
- upload-artifacts
 
cucumber-tests:
parameters:
extra-deps:
description: "Steps that will be executed in case extra dependencies are required, e.g. to connect to db."
type: steps
default: []
steps:
- checkout
- *attach-to-workspace
- steps: << parameters.extra-deps >>
- prepare-db-for-tests
- *disable-internet-access
- run:
name: Check internet access is disabled
command: |
echo "bundle exec cucumber --profile ci .circleci/no_internet.feature"
bundle exec cucumber --profile ci .circleci/no_internet.feature
environment: *malloc_preload
- log-memory-usage-periodic
- run:
name: Run cucumber tests
command: |
# saved test cases metadata can be read here:
# ${CIRCLE_INTERNAL_TASK_DATA}/circle-test-results/results.json
bundle exec ruby .circleci/features.rb | circleci tests run --command="xargs bundle exec cucumber --profile ci" --verbose --split-by=timings
- *enable-internet-access
- print-oom-process-count
- upload-artifacts
- store_artifacts:
path: tmp/capybara
destination: capybara
 
rails-tests:
parameters:
extra-deps:
description: "Steps that will be executed in case extra dependencies are required, e.g. to connect to db."
type: steps
default: []
steps:
- checkout
- *attach-to-workspace
- *use-example-config-files
- steps: << parameters.extra-deps >>
- prepare-db-for-tests
- run:
name: Run Rails tests
command: |
list=/tmp/test-list-$$
taskname=$(echo $CIRCLE_JOB | sed -e 's/-\(postgres\|oracle\|[0-9]\).*//')
bundle exec rake "test:files:${taskname}" | circleci tests run --command="cat > $list" --verbose --split-by=timings
if [ -s $list ]; then
bundle exec rails test $(awk 'ORS=" "' < $list) --verbose --backtrace
fi
environment: *malloc_preload
- upload-artifacts
 
save-gem-cache:
steps:
- save_cache:
key: *bundle-cache-key
paths:
- ./vendor/bundle
- ./.bundle/
 
restore-gem-cache:
steps:
- restore_cache:
keys:
- *bundle-cache-key
 
upload-artifacts:
steps:
- *store-junit-test-results
- *store-test-artifacts
- *store-log-artifacts
- codecov/upload
 
log-memory-usage-periodic:
steps:
- run:
name: Log process memory usage
command: |
while sleep 2; do
date
ps -eo pid,user,%mem,rss,command ww --sort rss
echo
done
background: true
 
print-oom-process-count:
steps:
- run:
name: Number of OOM killed processes
command: |
# see https://support.circleci.com/hc/en-us/articles/19306469418139-How-to-detect-when-a-process-is-killed-by-the-OOM-killer
printf "OOM Control: "
cat /sys/fs/cgroup/memory/memory.oom_control | sed -n 3p | tee tmp/oom_num
[ "oom_kill 0" = "$(<tmp/oom_num)" ] # fails when a proc was killed by OOM
when: always
 
##################################### CIRCLECI EXECUTORS ############################################
 
executors:
builder-ruby31: &builder-ruby31
parameters:
database:
type: string
default: mysql
docker:
- *system-builder-ruby31
environment:
DB: << parameters.database >>
working_directory: /opt/ci/workdir
 
builder-with-mysql-ruby31: &builder-with-mysql-ruby31
resource_class: small
docker:
- *system-builder-ruby31
- *mysql-container
- *memcached-container
- *redis-container
working_directory: /opt/ci/workdir
<<: *build-envs-mysql
 
builder-with-postgres-ruby31: &builder-with-postgres-ruby31
resource_class: small
docker:
- *system-builder-ruby31
- *postgres-container
- *memcached-container
- *redis-container
working_directory: /opt/ci/workdir
<<: *build-envs-postgresql
 
builder-with-oracle-ruby31: &builder-with-oracle-ruby31
resource_class: large
docker:
- *system-builder-ruby31
- *oracle-db-container
- *memcached-container
- *redis-container
working_directory: /opt/ci/workdir
<<: *build-envs-oracle
 
cucumber-with-mysql-ruby31: &cucumber-with-mysql-ruby31
resource_class: small
docker:
- *system-builder-ruby31
- *dnsmasq-container
- *mysql-container
- *memcached-container
- *redis-container
 
cucumber-with-postgres-ruby31: &cucumber-with-postgres-ruby31
resource_class: small
docker:
- *system-builder-ruby31
- *dnsmasq-container
- *postgres-container
- *memcached-container
- *redis-container
 
cucumber-with-oracle-ruby31: &cucumber-with-oracle-ruby31
resource_class: large
docker:
- *system-builder-ruby31
- *dnsmasq-container
- *oracle-db-container
- *memcached-container
- *redis-container
 
##################################### CIRCLECI JOBS ############################################
 
jobs:
dependencies_bundler:
parameters:
executor:
type: string
default: builder-ruby31
executor:
name: << parameters.executor >>
database: mysql
steps:
- install-gem-dependencies
- notify_failure
 
deps_bundler_postgres:
parameters:
executor:
type: string
default: builder-ruby31
executor:
name: << parameters.executor >>
database: postgresql
steps:
- install-gem-dependencies
- notify_failure
 
deps_bundler_oracle:
parameters:
executor:
type: string
default: builder-ruby31
executor:
name: << parameters.executor >>
database: oracle
steps:
- install-gem-dependencies:
extra-deps:
- clone-oracle-libraries
- notify_failure
 
dependencies_npm:
parameters:
executor:
type: string
default: builder-ruby31
executor:
name: << parameters.executor >>
steps:
- checkout
- *restore-npm-cache
- run:
name: Install Node dependencies
command: |
yarn --version
yarn install:safe
- *save-npm-cache
- persist_to_workspace:
root: .
paths:
- ./node_modules
- notify_failure
 
assets_precompile:
resource_class: large
parameters:
executor:
type: string
default: builder-ruby31
executor:
name: << parameters.executor >>
steps:
- checkout
- *attach-to-workspace
- *generate-assets-checksums
- *restore-assets-cache
- *use-example-config-files
- run:
name: Precompile assets
command: bundle exec rake assets:precompile
environment:
RAILS_GROUPS: assets
- *save-assets-cache
- persist_to_workspace:
root: .
paths:
- ./public/packs
- ./public/assets
- ./config/*.yml
- notify_failure
 
lint:
parameters:
executor:
type: string
default: builder-ruby31
executor:
name: << parameters.executor >>
steps:
- checkout
- *attach-to-workspace
- run:
name: Eslint
command: yarn ci:lint
- notify_failure
 
licenses:
parameters:
executor:
type: string
default: builder-ruby31
executor:
name: << parameters.executor >>
steps:
- checkout
- *attach-to-workspace
- *use-example-config-files
- run:
name: Licenses check
command: bundle exec rake licenses:compliance
- store_artifacts:
path: doc/licenses
destination: licenses
- notify_failure
 
jest:
resource_class: medium+
parameters:
executor:
type: string
default: builder-ruby31
executor:
name: << parameters.executor >>
steps:
- checkout
- *attach-to-workspace
- run:
name: Jest specs
command: yarn jest --maxWorkers=3 --coverage
- codecov/upload
- notify_failure
 
unit:
parallelism: 8
parameters:
executor:
type: string
default: builder-with-mysql-ruby31
executor:
name: << parameters.executor >>
steps:
- rails-tests
- notify_failure
 
unit-postgres:
parallelism: 8
parameters:
executor:
type: string
default: builder-with-postgres-ruby31
executor:
name: << parameters.executor >>
steps:
- rails-tests
- notify_failure
 
unit-oracle:
parallelism: 6
parameters:
executor:
type: string
default: builder-with-oracle-ruby31
executor:
name: << parameters.executor >>
steps:
- rails-tests:
extra-deps:
- clone-oracle-libraries
- notify_failure
 
functional:
parallelism: 2
parameters:
executor:
type: string
default: builder-with-mysql-ruby31
executor:
name: << parameters.executor >>
steps:
- rails-tests
- notify_failure
 
functional-postgres:
parallelism: 2
parameters:
executor:
type: string
default: builder-with-postgres-ruby31
executor:
name: << parameters.executor >>
steps:
- rails-tests
- notify_failure
 
functional-oracle:
parallelism: 2
parameters:
executor:
type: string
default: builder-with-oracle-ruby31
executor:
name: << parameters.executor >>
steps:
- rails-tests:
extra-deps:
- clone-oracle-libraries
- notify_failure
 
integration:
parallelism: 8
parameters:
executor:
type: string
default: builder-with-mysql-ruby31
executor:
name: << parameters.executor >>
steps:
- rails-tests
- notify_failure
 
integration-postgres:
parallelism: 8
parameters:
executor:
type: string
default: builder-with-postgres-ruby31
executor:
name: << parameters.executor >>
steps:
- rails-tests
- notify_failure
 
integration-oracle:
parallelism: 6
parameters:
executor:
type: string
default: builder-with-oracle-ruby31
executor:
name: << parameters.executor >>
steps:
- rails-tests:
extra-deps:
- clone-oracle-libraries
- notify_failure
 
rspec:
parallelism: 3
parameters:
executor:
type: string
default: builder-with-mysql-ruby31
executor:
name: << parameters.executor >>
steps:
- rspec-tests
- notify_failure
 
rspec-postgres:
parallelism: 3
parameters:
executor:
type: string
default: builder-with-postgres-ruby31
executor:
name: << parameters.executor >>
steps:
- rspec-tests
- notify_failure
 
rspec-oracle:
parallelism: 4
parameters:
executor:
type: string
default: builder-with-oracle-ruby31
executor:
name: << parameters.executor >>
steps:
- rspec-tests:
extra-deps:
- clone-oracle-libraries
- notify_failure
 
cucumber:
<<: *build-envs-mysql
parallelism: 40
parameters:
executor:
type: string
default: cucumber-with-mysql-ruby31
executor:
name: << parameters.executor >>
steps:
- cucumber-tests
- notify_failure
 
cucumber-postgres:
<<: *build-envs-postgresql
parallelism: 40
parameters:
executor:
type: string
default: cucumber-with-postgres-ruby31
executor:
name: << parameters.executor >>
steps:
- cucumber-tests
- notify_failure
 
cucumber-oracle:
<<: *build-envs-oracle
parallelism: 30
parameters:
executor:
type: string
default: cucumber-with-oracle-ruby31
executor:
name: << parameters.executor >>
steps:
- cucumber-tests:
extra-deps:
- clone-oracle-libraries
- notify_failure
 
notify_start:
docker:
- image: cimg/base:current
steps:
- run:
name: Notify Slack about tests start
command: |
curl -X POST -H 'Content-type: application/json' \
--data \
"{ \
\"attachments\": [ \
{ \
\"fallback\": \"Build started on master, for $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME.\", \
\"color\": \"#D3D3D3\", \
\"pretext\": \"Build started on master: \", \
\"author_name\": \"$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME\", \
\"title\": \"Job: $CIRCLE_JOB \", \
\"title_link\": \"$CIRCLE_BUILD_URL\", \
\"text\": \"Changes: $CIRCLE_COMPARE_URL\", \
\"fields\": [ \
{ \
\"title\": \"Commit\", \
\"value\": \"$CIRCLE_SHA1\", \
\"short\": false \
}, \
{ \
\"title\": \"GitHub Repo\", \
\"value\": \"$CIRCLE_REPOSITORY_URL\", \
\"short\": false \
}, \
{ \
\"title\": \"Triggered by:\", \
\"value\": \"$CIRCLE_USERNAME\", \
\"short\": false \
} \
] \
} \
] \
}" $SLACK_WEBHOOK_SYSTEM
 
notify_success:
docker:
- image: cimg/base:current
steps:
- run:
name: Notify Slack about tests passing
command: |
curl -X POST -H 'Content-type: application/json' \
--data \
"{ \
\"attachments\": [ \
{ \
\"fallback\": \"All is well & green on $CIRCLE_BRANCH, for $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME.\", \
\"color\": \"#00B700\", \
\"pretext\": \"All is well & green on $CIRCLE_BRANCH. Nothing to see here. \", \
\"author_name\": \"$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME\", \
\"title\": \"Job: $CIRCLE_JOB \", \
\"title_link\": \"$CIRCLE_BUILD_URL\", \
\"text\": \"$CIRCLE_BUILD_URL\", \
\"fields\": [ \
{ \
\"title\": \"Commit\", \
\"value\": \"$CIRCLE_SHA1\", \
\"short\": false \
} \
] \
} \
] \
}" $SLACK_WEBHOOK_SYSTEM
when: on_success
 
 
##################################### CIRCLECI WORKFLOWS ############################################
 
workflows:
version: 2
 
mysql_build:
jobs:
- manual_approval: # <<< A job that will require manual approval in the CircleCI web application.
type: approval # <<< This key-value pair will set your workflow to a status of "On Hold"
- notify_start:
<<: *only-master-filter
requires:
- manual_approval
- dependencies_bundler:
requires:
- manual_approval
- dependencies_npm:
requires:
- manual_approval
- assets_precompile:
requires:
- dependencies_bundler
- dependencies_npm
- unit:
requires:
- dependencies_bundler
- functional:
requires:
- assets_precompile
- integration:
requires:
- assets_precompile
- rspec:
requires:
- dependencies_bundler
- cucumber:
requires:
- assets_precompile
- notify_success:
requires:
- rspec
- unit
- cucumber
- integration
- functional
<<: *only-master-filter
 
postgres_build:
jobs:
- manual_approval: # <<< A job that will require manual approval in the CircleCI web application.
type: approval # <<< This key-value pair will set your workflow to a status of "On Hold"
# On approval of the `hold` job, any successive job that requires the `hold` job will run.
- notify_start:
requires:
- manual_approval
<<: *only-master-filter
- deps_bundler_postgres:
requires:
- manual_approval
- dependencies_npm:
requires:
- manual_approval
- assets_precompile:
requires:
- deps_bundler_postgres
- dependencies_npm
- unit-postgres:
requires:
- deps_bundler_postgres
- functional-postgres:
requires:
- assets_precompile
- integration-postgres:
requires:
- assets_precompile
- rspec-postgres:
requires:
- deps_bundler_postgres
- cucumber-postgres:
requires:
- assets_precompile
- notify_success:
requires:
- rspec-postgres
- unit-postgres
- cucumber-postgres
- integration-postgres
- functional-postgres
<<: *only-master-filter
 
oracle_build:
jobs:
- manual_approval: # <<< A job that will require manual approval in the CircleCI web application.
type: approval # <<< This key-value pair will set your workflow to a status of "On Hold"
# On approval of the `hold` job, any successive job that requires the `hold` job will run.
- notify_start:
requires:
- manual_approval
<<: *only-master-filter
- deps_bundler_oracle:
requires:
- manual_approval
- dependencies_npm:
requires:
- manual_approval
- assets_precompile:
requires:
- deps_bundler_oracle
- dependencies_npm
- unit-oracle:
requires:
- deps_bundler_oracle
context:
- quay
- functional-oracle:
requires:
- assets_precompile
context:
- quay
- integration-oracle:
requires:
- assets_precompile
context:
- quay
- rspec-oracle:
requires:
- deps_bundler_oracle
context:
- quay
- cucumber-oracle:
requires:
- assets_precompile
context:
- quay
- notify_success:
requires:
- rspec-oracle
- unit-oracle
- cucumber-oracle
- integration-oracle
- functional-oracle
<<: *only-master-filter
 
javascript_tests:
jobs:
- manual_approval: # <<< A job that will require manual approval in the CircleCI web application.
type: approval # <<< This key-value pair will set your workflow to a status of "On Hold"
- notify_start:
<<: *only-master-filter
requires:
- manual_approval
- dependencies_bundler:
requires:
- manual_approval
- dependencies_npm:
requires:
- manual_approval
- licenses:
requires:
- dependencies_bundler
- lint:
requires:
- dependencies_npm
- jest:
requires:
- dependencies_npm
- notify_success:
requires:
- licenses
- lint
- jest
<<: *only-master-filter
 
 
######## Nightly workflows
 
 
mysql_nightly_build_ruby31:
jobs:
- notify_start:
<<: *only-master-filter
- dependencies_bundler:
executor: builder-ruby31
- dependencies_npm:
executor: builder-ruby31
- assets_precompile:
executor: builder-ruby31
requires:
- dependencies_bundler
- dependencies_npm
- unit:
executor: builder-with-mysql-ruby31
requires:
- dependencies_bundler
- functional:
executor: builder-with-mysql-ruby31
requires:
- assets_precompile
- integration:
executor: builder-with-mysql-ruby31
requires:
- assets_precompile
- rspec:
executor: builder-with-mysql-ruby31
requires:
- dependencies_bundler
- cucumber:
executor: cucumber-with-mysql-ruby31
requires:
- assets_precompile
- notify_success:
requires:
- rspec
- unit
- cucumber
- integration
- functional
<<: *only-master-filter
<<: *nightly-trigger
 
postgres_nightly_build_ruby31:
jobs:
- notify_start:
<<: *only-master-filter
- deps_bundler_postgres:
executor: builder-ruby31
- dependencies_npm:
executor: builder-ruby31
- assets_precompile:
executor: builder-ruby31
requires:
- deps_bundler_postgres
- dependencies_npm
- unit-postgres:
executor: builder-with-postgres-ruby31
requires:
- deps_bundler_postgres
- functional-postgres:
executor: builder-with-postgres-ruby31
requires:
- assets_precompile
- integration-postgres:
executor: builder-with-postgres-ruby31
requires:
- assets_precompile
- rspec-postgres:
executor: builder-with-postgres-ruby31
requires:
- deps_bundler_postgres
- cucumber-postgres:
executor: cucumber-with-postgres-ruby31
requires:
- assets_precompile
- notify_success:
requires:
- rspec-postgres
- unit-postgres
- cucumber-postgres
- integration-postgres
- functional-postgres
<<: *only-master-filter
<<: *nightly-trigger
 
oracle_nightly_build_ruby31:
jobs:
- notify_start:
<<: *only-master-filter
- deps_bundler_oracle:
executor: builder-ruby31
- dependencies_npm:
executor: builder-ruby31
- assets_precompile:
executor: builder-ruby31
requires:
- deps_bundler_oracle
- dependencies_npm
- unit-oracle:
executor: builder-with-oracle-ruby31
context:
- quay
requires:
- deps_bundler_oracle
- functional-oracle:
executor: builder-with-oracle-ruby31
context:
- quay
requires:
- assets_precompile
- integration-oracle:
executor: builder-with-oracle-ruby31
context:
- quay
requires:
- assets_precompile
- rspec-oracle:
executor: builder-with-oracle-ruby31
context:
- quay
requires:
- deps_bundler_oracle
- cucumber-oracle:
executor: cucumber-with-oracle-ruby31
context:
- quay
requires:
- assets_precompile
- notify_success:
requires:
- rspec-oracle
- unit-oracle
- cucumber-oracle
- integration-oracle
- functional-oracle
<<: *only-master-filter
<<: *nightly-trigger
 
javascript_nightly_build_ruby31:
jobs:
- notify_start:
<<: *only-master-filter
- dependencies_bundler:
executor: builder-ruby31
- dependencies_npm:
executor: builder-ruby31
- assets_precompile:
executor: builder-ruby31
requires:
- dependencies_bundler
- dependencies_npm
- licenses:
executor: builder-ruby31
requires:
- dependencies_bundler
- lint:
executor: builder-ruby31
requires:
- dependencies_npm
- jest:
executor: builder-ruby31
requires:
- dependencies_npm
- notify_success:
requires:
- licenses
- lint
- jest
<<: *only-master-filter
<<: *nightly-trigger