diff --git a/.circleci/config.yml b/.circleci/config.yml
index 0fd545f7a..84e7f3694 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -8,92 +8,74 @@ aliases:
username: $DOCKERHUB_USERNAME
password: $DOCKERHUB_PASSWORD
working_directory: ~/repo
- - &save_git_cache
- save_cache:
- paths:
- - .git
- key: v1-git-{{ .Revision }}
- - &restore_git_cache
- restore_cache:
- keys:
- - v1-git-{{ .Revision }}
- - v1-git-
- - &save_npm_cache
- save_cache:
- paths:
- - node_modules
- key: v1-npm-{{ checksum "package-lock.json" }}
- - &restore_npm_cache
- restore_cache:
- keys:
- - v1-npm-{{ checksum "package-lock.json" }}
- - &save_build_cache
- save_cache:
- paths:
- - ./build
- - ./intl
- key: v1-build-{{ .Revision }}
- - &restore_build_cache
- restore_cache:
- keys:
- - v1-build-{{ .Revision }}
- - v1-build-
- - &build_no_cache
+ - &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:
- name: "setup"
- command: |
- npm --production=false ci
- mkdir ./test/results
+ <<: *setup
- run:
- name: "run lint tests"
- command: |
- npm run test:lint:ci
+ <<: *lint
- run:
- name: "run npm build"
- command: |
- WWW_VERSION=${CIRCLE_SHA1:0:5} npm run build
+ <<: *build
- run:
- 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
+ <<: *unit
- store_test_results:
path: test/results
- - &build
+ - &build_and_deploy
<<: *defaults
resource_class: large
steps:
- - *restore_git_cache
- checkout
- run:
- name: "setup"
- command: |
- npm --production=false ci
- mkdir ./test/results
+ <<: *setup
- run:
- name: "run lint tests"
- command: |
- npm run test:lint:ci
+ <<: *lint
- run:
- name: "run npm build"
- command: |
- WWW_VERSION=${CIRCLE_SHA1:0:5} npm run build
+ <<: *build
- run:
- 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
- - *save_npm_cache
- - *save_git_cache
- - *save_build_cache
+ <<: *unit
+ - run:
+ <<: *setup_python
+ - run:
+ <<: *deploy
+ - run:
+ <<: *integration
- store_test_results:
path: test/results
- run:
@@ -101,35 +83,6 @@ aliases:
command: tar -cvzf build.tar build
- store_artifacts:
path: build.tar
- - &deploy
- <<: *defaults
- steps:
- - *restore_git_cache
- - checkout
- - *restore_npm_cache
- - *restore_build_cache
- - run:
- 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
- - run:
- name: "deploy"
- command: |
- npm run deploy
- - &integration_jest
- <<: *defaults
- steps:
- - *restore_git_cache
- - checkout
- - *restore_npm_cache
- - run:
- name: "integration tests with Jest"
- command: |
- JEST_JUNIT_OUTPUT_NAME=integration-jest-results.xml npm run test:integration:remote -- --reporters=jest-junit
- - store_test_results:
- path: test/results
- &update-translations
<<: *defaults
steps:
@@ -141,28 +94,21 @@ aliases:
name: "run i18n script"
command: npm run i18n:push
+# build-test-deploy requires two separately named jobs
jobs:
- build-staging:
- <<: *build
- build-production:
- <<: *build
- deploy-staging:
- <<: *deploy
- deploy-production:
- <<: *deploy
- integration-staging-jest:
- <<: *integration_jest
- integration-production-jest:
- <<: *integration_jest
+ build-and-deploy-staging:
+ <<: *build_and_deploy
+ build-and-deploy-production:
+ <<: *build_and_deploy
update-translations:
<<: *update-translations
- build-no-cache:
- <<: *build_no_cache
+ build-no-deploy:
+ <<: *build_no_deploy
workflows:
build-test-deploy:
jobs:
- - build-staging:
+ - build-and-deploy-staging:
context:
- scratch-www-all
- scratch-www-staging
@@ -172,7 +118,7 @@ workflows:
- develop
- /^hotfix\/.*/
- /^release\/.*/
- - build-production:
+ - build-and-deploy-production:
context:
- scratch-www-all
- scratch-www-production
@@ -180,50 +126,6 @@ workflows:
branches:
only:
- master
- - deploy-staging:
- context:
- - scratch-www-all
- - scratch-www-staging
- requires:
- - build-staging
- filters:
- branches:
- only:
- - develop
- - /^hotfix\/.*/
- - /^release\/.*/
- - deploy-production:
- context:
- - scratch-www-all
- - scratch-www-production
- requires:
- - build-production
- filters:
- branches:
- only:
- - master
- - integration-staging-jest:
- context:
- - scratch-www-all
- - scratch-www-staging
- requires:
- - deploy-staging
- filters:
- branches:
- only:
- - develop
- - /^hotfix\/.*/
- - /^release\/.*/
- - integration-production-jest:
- context:
- - scratch-www-all
- - scratch-www-production
- requires:
- - deploy-production
- filters:
- branches:
- only:
- - master
Update-translations:
triggers:
- schedule: # every evening at 7pm EST (8pm EDT, Midnight UTC)
@@ -242,7 +144,7 @@ workflows:
- develop
build-test-no-deploy:
jobs:
- - build-no-cache:
+ - build-no-deploy:
filters:
branches:
ignore:
diff --git a/package-lock.json b/package-lock.json
index d5e4340fa..c4e029dbf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4509,9 +4509,9 @@
"dev": true
},
"caniuse-lite": {
- "version": "1.0.30001300",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001300.tgz",
- "integrity": "sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA==",
+ "version": "1.0.30001305",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001305.tgz",
+ "integrity": "sha512-p7d9YQMji8haf0f+5rbcv9WlQ+N5jMPfRAnUmZRlNxsNeBO3Yr7RYG6M2uTY1h9tCVdlkJg6YNNc4kiAiBLdWA==",
"dev": true
},
"canvas-fit": {
@@ -20578,9 +20578,9 @@
}
},
"scratch-gui": {
- "version": "0.1.0-prerelease.20220118124756",
- "resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20220118124756.tgz",
- "integrity": "sha512-dyF9po7oRRIjslNFZoRa6I46YtKf5qeOEbDYk/bmqHdcr6MqnqVv6fV9je8PuBNCY9La/PbpPmbG2KsEr+Z37g==",
+ "version": "0.1.0-prerelease.20220202135032",
+ "resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20220202135032.tgz",
+ "integrity": "sha512-OelxP2ULGnLz0f2Y10rdZ2cAipM2Iho8ZJYewesevOs3KhZKQguyj+b0D3T2fTxnU8CXKq36dpt7oGFGxJcPLg==",
"dev": true,
"requires": {
"arraybuffer-loader": "^1.0.6",
@@ -20789,9 +20789,9 @@
"dev": true
},
"electron-to-chromium": {
- "version": "1.4.47",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.47.tgz",
- "integrity": "sha512-ZHc8i3/cgeCRK/vC7W2htAG6JqUmOUgDNn/f9yY9J8UjfLjwzwOVEt4MWmgJAdvmxyrsR5KIFA/6+kUHGY0eUA==",
+ "version": "1.4.61",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.61.tgz",
+ "integrity": "sha512-kpzCOOFlx63C9qKRyIDEsKIUgzoe98ump7T4gU+/OLzj8gYkkWf2SIyBjhTSE0keAjMAp3i7C262YtkQOMYrGw==",
"dev": true
},
"has-flag": {
@@ -20994,6 +20994,18 @@
"integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
"dev": true
},
+ "scratch-l10n": {
+ "version": "3.14.20220118031528",
+ "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220118031528.tgz",
+ "integrity": "sha512-y5Mzi+r6hxZ3kfax3aXhfiJwJIfN8FHdcvLd0E46KqUjpbvbs1TTUZjWBQdV9SmWAwii8L7U0z+1iWN4+K7W+A==",
+ "dev": true,
+ "requires": {
+ "@babel/cli": "^7.1.2",
+ "@babel/core": "^7.1.2",
+ "babel-plugin-react-intl": "^3.0.1",
+ "transifex": "1.6.6"
+ }
+ },
"scratch-storage": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-1.3.5.tgz",
@@ -21060,9 +21072,9 @@
}
},
"scratch-l10n": {
- "version": "3.14.20220118031528",
- "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220118031528.tgz",
- "integrity": "sha512-y5Mzi+r6hxZ3kfax3aXhfiJwJIfN8FHdcvLd0E46KqUjpbvbs1TTUZjWBQdV9SmWAwii8L7U0z+1iWN4+K7W+A==",
+ "version": "3.14.20220202031539",
+ "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220202031539.tgz",
+ "integrity": "sha512-OBMVkfjuRpfOTF9+u9JrKyrJEIlvRbJzYd9KxiSvJLjF8BsdS4fALJDa8Yl4GX0w/DInSHt+iiO8xgtdf7WjgQ==",
"dev": true,
"requires": {
"@babel/cli": "^7.1.2",
diff --git a/package.json b/package.json
index 133adc70d..e01ee74d4 100644
--- a/package.json
+++ b/package.json
@@ -127,8 +127,8 @@
"redux-thunk": "2.0.1",
"regenerator-runtime": "0.13.9",
"sass-loader": "6.0.6",
- "scratch-gui": "0.1.0-prerelease.20220118124756",
- "scratch-l10n": "3.14.20220118031528",
+ "scratch-gui": "0.1.0-prerelease.20220202135032",
+ "scratch-l10n": "3.14.20220202031539",
"selenium-webdriver": "4.1.0",
"slick-carousel": "1.6.0",
"style-loader": "0.12.3",
diff --git a/src/components/forms/radio-group.jsx b/src/components/forms/radio-group.jsx
index 168f0a926..608748b0a 100644
--- a/src/components/forms/radio-group.jsx
+++ b/src/components/forms/radio-group.jsx
@@ -11,7 +11,7 @@ require('./radio-group.scss');
const RadioGroup = props => (