diff --git a/.circleci/config.yml b/.circleci/config.yml
index b97d187e304..a77d1871691 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -44,12 +44,42 @@ aliases:
working_directory: ~/repo
jobs:
+ build-test-no-cache:
+ <<: *defaults
+ environment:
+ JEST_JUNIT_OUTPUT_DIR: test-results
+ NODE_OPTIONS: --max-old-space-size=4000
+ steps:
+ - *restore_git_cache
+ - checkout
+ - run: npm ci
+ - run:
+ name: Lint
+ command: npm run test:lint -- --quiet --output-file test-results/eslint-results.xml --format junit
+ - run:
+ name: Unit
+ environment:
+ JEST_JUNIT_OUTPUT_NAME: unit-results.xml
+ command: npm run test:unit -- --reporters="default" --reporters="jest-junit" --coverage --coverageReporters=text --coverageReporters=lcov --maxWorkers="2"
+ - run:
+ name: Build
+ environment:
+ NODE_ENV: production
+ command: npm run build
+ - run:
+ name: Integration
+ environment:
+ JEST_JUNIT_OUTPUT_NAME: integration-results.xml
+ command: npm run test:integration -- --reporters="default" --reporters="jest-junit"
+ - store_artifacts:
+ path: coverage
+ - store_test_results:
+ path: test-results
setup:
<<: *defaults
steps:
- *restore_git_cache
- checkout
- - *restore_npm_cache
- run: npm ci
- *save_git_cache
- *save_npm_cache
@@ -187,9 +217,24 @@ workflows:
requires:
- setup
+ build-test-no-deploy:
+ jobs:
+ - build-test-no-cache:
+ filters:
+ branches:
+ ignore:
+ - master
+ - develop
+ - /^hotfix\/.*/
build-test-deploy:
jobs:
- - setup
+ - setup:
+ filters:
+ branches:
+ only:
+ - master
+ - develop
+ - /^hotfix\/.*/
- lint:
requires:
- setup
@@ -205,9 +250,21 @@ workflows:
- store_build:
requires:
- build
+ filters:
+ branches:
+ only:
+ - master
+ - develop
+ - /^hotfix\/.*/
- store_dist:
requires:
- build
+ filters:
+ branches:
+ only:
+ - master
+ - develop
+ - /^hotfix\/.*/
- deploy-npm:
requires:
- lint
diff --git a/package-lock.json b/package-lock.json
index 8288fcbcec1..224d175559c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3371,9 +3371,9 @@
"dev": true
},
"@types/babel__core": {
- "version": "7.1.16",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz",
- "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==",
+ "version": "7.1.18",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz",
+ "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==",
"requires": {
"@babel/parser": "^7.1.0",
"@babel/types": "^7.0.0",
@@ -3383,9 +3383,9 @@
}
},
"@types/babel__generator": {
- "version": "7.6.3",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz",
- "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==",
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz",
+ "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==",
"requires": {
"@babel/types": "^7.0.0"
}
@@ -8640,23 +8640,23 @@
}
},
"format-message-formats": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/format-message-formats/-/format-message-formats-6.2.0.tgz",
- "integrity": "sha512-QP0dl1O9P3fDCG5klj101nfizgiWiv0T+DMNBqwi25FvB1LIenQQW4PpULk5zO5PiOSvmMu5pW4HS542kJRAww=="
+ "version": "6.2.4",
+ "resolved": "https://registry.npmjs.org/format-message-formats/-/format-message-formats-6.2.4.tgz",
+ "integrity": "sha512-smT/fAqBLqusWfWCKRAx6QBDAAbmYznWsIyTyk66COmvwt2Byiqd7SJe2ma9a5oV0kwRaOJpN/F4lr4YK/n6qQ=="
},
"format-message-interpret": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/format-message-interpret/-/format-message-interpret-6.2.3.tgz",
- "integrity": "sha512-OoOdB5yHLzW89RwDQW4fj+8p2Eay9Dtmx4B7Tz8C/QQl/j+aVjy65A5xasQhQD+4JumYU/OxMBdjYzBSR8+ivA==",
+ "version": "6.2.4",
+ "resolved": "https://registry.npmjs.org/format-message-interpret/-/format-message-interpret-6.2.4.tgz",
+ "integrity": "sha512-dRvz9mXhITApyOtfuFEb/XqvCe1u6RMkQW49UJHXS8w2S8cAHCqq5LNDFK+QK6XVzcofROycLb/k1uybTAKt2w==",
"requires": {
- "format-message-formats": "^6.2.0",
+ "format-message-formats": "^6.2.4",
"lookup-closest-locale": "^6.2.0"
}
},
"format-message-parse": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/format-message-parse/-/format-message-parse-6.2.3.tgz",
- "integrity": "sha512-ZSL3nZ0zaDktDAGwkoGJ439rS9ZfTcMOrWAVav9BOAoKs0qE2Ozal2H6vVJOuIdDhwaJuFqvJ7fdRSE+qR5oNg=="
+ "version": "6.2.4",
+ "resolved": "https://registry.npmjs.org/format-message-parse/-/format-message-parse-6.2.4.tgz",
+ "integrity": "sha512-k7WqXkEzgXkW4wkHdS6Cv2Ou0rIFtiDelZjgoe1saW4p7FT7zS8OeAUpAekhormqzpeecR97e4vBft1zMsfFOQ=="
},
"forwarded": {
"version": "0.1.2",
@@ -14940,20 +14940,20 @@
}
},
"scratch-blocks": {
- "version": "0.1.0-prerelease.20211022094652",
- "resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20211022094652.tgz",
- "integrity": "sha512-0Ng0K3LCjq942QqQHM+G+kTxRmVdkbJldTrsiHJcvpy54OsrxgM2E3bpgFI4VWXqmiQgIzOE9Y5uw/gjKLK0Kw==",
+ "version": "0.1.0-prerelease.20220223064322",
+ "resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20220223064322.tgz",
+ "integrity": "sha512-XBQRyUfGuM9JE9ZJDPij9vM96fMld7LUWx6gjR3sVH3RE0mbbZymsECUPRda1L56V07bozGc3fHmxvvHb2FUtw==",
"requires": {
"exports-loader": "0.6.3",
"google-closure-library": "20190301.0.0",
"imports-loader": "0.6.5",
- "scratch-l10n": "3.14.20211022031531"
+ "scratch-l10n": "3.14.20220223031520"
}
},
"scratch-l10n": {
- "version": "3.14.20211022031531",
- "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20211022031531.tgz",
- "integrity": "sha512-TAC8LJc1PU/cDzbo0b7tVlxHj0pSxerMUabZKoJ3PWASLLoWV2qrAhugqQQv2z1xAdYm6hndEJgUOED+CTt2NA==",
+ "version": "3.14.20220223031520",
+ "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220223031520.tgz",
+ "integrity": "sha512-dNaf+wAKT7ChtemwJ0MxlzNRWHB4leC+g8ArbVv2ucSlMRDN620k+tYWbrVIJMsaaOZ/dv1BSWofvxsCwp6H1A==",
"requires": {
"@babel/cli": "^7.1.2",
"@babel/core": "^7.1.2",
@@ -14962,9 +14962,9 @@
}
},
"scratch-paint": {
- "version": "0.2.0-prerelease.20211022045744",
- "resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-0.2.0-prerelease.20211022045744.tgz",
- "integrity": "sha512-M7VmHTHxPBj2j0/3TzAfb0BfGwgousXKhmzGKvkViPOW1/RL9mjXycCN5S++km1FdK7hSo0dOWe7zL8h66DMLg==",
+ "version": "0.2.0-prerelease.20211027080909",
+ "resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-0.2.0-prerelease.20211027080909.tgz",
+ "integrity": "sha512-Kgzr9hEE0AYCnMPvs5rhKx3S+h78+HMe0IDoTuEQWG/EyilEeQkITwymkK59ndnsxf0gfQd4pkUi2UjdHQqpBQ==",
"requires": {
"@scratch/paper": "0.11.20200728195508",
"classnames": "2.2.5",
@@ -15064,9 +15064,9 @@
}
},
"scratch-render": {
- "version": "0.1.0-prerelease.20210819221425",
- "resolved": "https://registry.npmjs.org/scratch-render/-/scratch-render-0.1.0-prerelease.20210819221425.tgz",
- "integrity": "sha512-2kB/NKEEqiXmHUDynA2O5tQJFF3o2s3JmcNecjgOCsR+FuthH2oIsHFwKbyLn93hXJICDRRW+oc3ikqj7G5O+w==",
+ "version": "0.1.0-prerelease.20211028200436",
+ "resolved": "https://registry.npmjs.org/scratch-render/-/scratch-render-0.1.0-prerelease.20211028200436.tgz",
+ "integrity": "sha512-6IU0mEQpx5ipm2PsmdJXA/MIbrgq5wisn0rOpmCJZQFssyPyZMeanvh6T9j/VlTn13kiDO+67Do2nKRrZa46bA==",
"requires": {
"grapheme-breaker": "0.3.2",
"hull.js": "0.2.10",
@@ -15147,9 +15147,9 @@
"integrity": "sha512-r0lvpgQjPMjbhI2wROrgoXzBhCvWJdkbAqJMfl2CdNqrwBpUXqLvNNtI3VtNLPJAcp9VfxEylkU9lVZ0gvU46Q=="
},
"scratch-vm": {
- "version": "0.2.0-prerelease.20211022115153",
- "resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-0.2.0-prerelease.20211022115153.tgz",
- "integrity": "sha512-oEoG65HtUkG21llTd6ei9nvP2QWyLmVcgq/j89XNLs1XWufP0gjHlqDEPJ4wkvThTLcGvxpAEjSdimkvXAgE6w==",
+ "version": "0.2.0-prerelease.20220223123949",
+ "resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-0.2.0-prerelease.20220223123949.tgz",
+ "integrity": "sha512-aGNADWsj4pMggxq5uvEK5eZbN6wANcUphJFq3fI0WhepWI7ihrkhKC/klhCjpQtt3jtMfYTj5UCWTOHYB0QkBA==",
"requires": {
"@vernier/godirect": "1.5.0",
"arraybuffer-loader": "^1.0.6",
diff --git a/package.json b/package.json
index 36fd800ee02..8883ed31721 100644
--- a/package.json
+++ b/package.json
@@ -77,10 +77,10 @@
"redux": "3.7.2",
"redux-throttle": "0.1.1",
"scratch-audio": "0.1.0-prerelease.20200528195344",
- "scratch-blocks": "0.1.0-prerelease.20211022094652",
- "scratch-l10n": "3.14.20211022031531",
- "scratch-paint": "0.2.0-prerelease.20211022045744",
- "scratch-render": "0.1.0-prerelease.20210819221425",
+ "scratch-blocks": "0.1.0-prerelease.20220223064322",
+ "scratch-l10n": "3.14.20220223031520",
+ "scratch-paint": "0.2.0-prerelease.20211027080909",
+ "scratch-render": "0.1.0-prerelease.20211028200436",
"scratch-render-fonts": "1.0.0-prerelease.20210401210003",
"scratch-storage": "1.3.5",
"scratch-svg-renderer": "0.2.0-prerelease.20210727023023",
diff --git a/src/components/monitor/monitor.jsx b/src/components/monitor/monitor.jsx
index 5d52655c0e3..ddb2f2e57b5 100644
--- a/src/components/monitor/monitor.jsx
+++ b/src/components/monitor/monitor.jsx
@@ -108,6 +108,14 @@ const MonitorComponent = props => (
id="gui.monitor.contextMenu.export"
/>
}
+ {props.onHide &&
+