scratch-www/.circleci/config.yml

194 lines
4.8 KiB
YAML

version: 2.1
aliases:
- &defaults
docker:
- image: cimg/node:16.14.2-browsers
auth:
username: $DOCKERHUB_USERNAME
password: $DOCKERHUB_PASSWORD
working_directory: ~/repo
- &setup
name: "setup"
command: |
npm --production=false ci
mkdir ./test/results
- &lint
name: "run lint tests"
command: |
npm run test:lint:ci
- &build
name: "run npm build"
command: |
WWW_VERSION=${CIRCLE_SHA1:0:5} npm run build
- &unit
name: "Run unit tests"
command: |
JEST_JUNIT_OUTPUT_NAME=unit-jest-results.xml npm run test:unit:jest:unit -- --reporters=jest-junit
JEST_JUNIT_OUTPUT_NAME=localization-jest-results.xml npm run test:unit:jest:localization -- --reporters=jest-junit
npm run test:unit:tap -- --output-file ./test/results/unit-raw.tap
npm run test:unit:convertReportToXunit
- &setup_python
name: "setup python"
command: |
curl https://bootstrap.pypa.io/pip/3.5/get-pip.py -o get-pip.py
python3 get-pip.py pip==21.0.1
pip install s3cmd==2.1.0
- &deploy
name: "deploy"
command: |
npm run deploy
- &integration
name: "integration tests with Jest"
command: |
JEST_JUNIT_OUTPUT_NAME=integration-jest-results.xml npm run test:integration:remote -- --reporters=jest-junit
- &build_no_deploy
<<: *defaults
resource_class: large
steps:
- checkout
- run:
<<: *setup
- run:
<<: *lint
- run:
<<: *build
- run:
<<: *unit
- store_test_results:
path: test/results
- &build_and_deploy
<<: *defaults
resource_class: large
steps:
- checkout
- run:
<<: *setup
- run:
<<: *lint
- run:
<<: *build
- run:
<<: *unit
- run:
<<: *setup_python
- run:
<<: *deploy
- store_test_results:
path: test/results
- run:
name: Compress Artifacts
command: tar -cvzf build.tar build
- store_artifacts:
path: build.tar
- &integration_tests_and_store
<<: *defaults
resource_class: large
steps:
- checkout
- run:
<<: *setup
- run:
<<: *integration
- store_test_results:
path: test/results
- &update-translations
<<: *defaults
steps:
- checkout
- run:
name: "setup"
command: npm --production=false ci
- run:
name: "run i18n script"
command: npm run i18n:push
# build-test-deploy requires two separately named jobs
jobs:
build-and-deploy-staging:
<<: *build_and_deploy
build-and-deploy-production:
<<: *build_and_deploy
integration-tests:
<<: *integration_tests_and_store
update-translations:
<<: *update-translations
build-no-deploy:
<<: *build_no_deploy
workflows:
build-test-deploy:
jobs:
- build-and-deploy-staging:
context:
- scratch-www-all
- scratch-www-staging
- dockerhub-credentials
filters:
branches:
only:
- develop
- /^hotfix\/.*/
- /^release\/.*/
- integration-tests:
requires:
- build-and-deploy-staging
context:
- scratch-www-all
- scratch-www-staging
- dockerhub-credentials
filters:
branches:
only:
- develop
- /^hotfix\/.*/
- /^release\/.*/
- build-and-deploy-production:
context:
- scratch-www-all
- scratch-www-production
- dockerhub-credentials
filters:
branches:
only:
- master
- integration-tests:
requires:
- build-and-deploy-production
context:
- scratch-www-all
- scratch-www-production
- dockerhub-credentials
filters:
branches:
only:
- master
Update-translations:
triggers:
- schedule: # every evening at 7pm EST (8pm EDT, Midnight UTC)
cron: "0 0 * * *"
filters:
branches:
only: develop
jobs:
- update-translations:
context:
- scratch-www-all
- scratch-www-staging
- dockerhub-credentials
filters:
branches:
only:
- develop
build-test-no-deploy:
jobs:
- build-no-deploy:
context:
- dockerhub-credentials
filters:
branches:
ignore:
- develop
- master
- /^hotfix\/.*/
- /^release\/.*/