diff --git a/.circleci/config.yml b/.circleci/config.yml index 6b1e671ea..91b7230b2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -41,6 +41,19 @@ jobs: - checkout - install-dependencies - build-site + - persist_to_workspace: + root: "." + paths: + - "_site" + + test: + docker: + - image: circleci/ruby:2.6-node-browsers + steps: + - checkout + - install-dependencies + - attach_workspace: + at: "." - run: name: run tests command: bundle exec rspec spec @@ -54,11 +67,13 @@ jobs: accessibility: docker: - image: circleci/ruby:2.6-node-browsers + environment: + SKIP_BUILD: true steps: - checkout - install-dependencies - # It's not necessary to build the site prior to running end-to-end tests, as it's done as a - # pre-step of the npm test script. + - attach_workspace: + at: "." - run: name: run end-to-end tests command: npm test @@ -83,6 +98,18 @@ jobs: name: check optimized images command: make lint-assets + check-javascript-syntax: + docker: + - image: circleci/ruby:2.6-node-browsers + steps: + - checkout + - install-dependencies + - attach_workspace: + at: "." + - run: + name: check es5 syntax + command: npm run es5-safe + # Running external links as a separate job so we don't fail the build directly # but do get the feedback/info test-external-links: @@ -91,7 +118,8 @@ jobs: steps: - checkout - install-dependencies - - build-site + - attach_workspace: + at: "." - run: name: Run htmlproofer (external links only) command: make htmlproofer_external @@ -107,11 +135,24 @@ workflows: - build - eslint - check-optimized-assets - - test-external-links - - accessibility + - test: + requires: + - build + - check-javascript-syntax: + requires: + - build + - test-external-links: + requires: + - build + - accessibility: + requires: + - build daily-external-link-checker: jobs: - - test-external-links + - build + - test-external-links: + requires: + - build triggers: - schedule: # Once a day at 12pm diff --git a/package-lock.json b/package-lock.json index ebb3248f5..94e97fb90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ }, "devDependencies": { "@axe-core/puppeteer": "^4.1.0", + "acorn": "^8.1.0", "eslint": "^7.15.0", "eslint-plugin-prettier": "^3.2.0", "get-port": "^5.1.1", @@ -2484,9 +2485,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", - "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz", + "integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==", "bin": { "acorn": "bin/acorn" }, @@ -4462,8 +4463,7 @@ "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" + "optionator": "^0.8.1" }, "bin": { "escodegen": "bin/escodegen.js", @@ -5180,7 +5180,6 @@ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, "dependencies": { - "@types/yauzl": "^2.9.1", "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" @@ -6996,7 +6995,6 @@ "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", "graceful-fs": "^4.2.4", "jest-regex-util": "^26.0.0", "jest-serializer": "^26.6.2", @@ -15056,9 +15054,9 @@ "dev": true }, "acorn": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", - "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==" + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz", + "integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==" }, "acorn-globals": { "version": "6.0.0", diff --git a/package.json b/package.json index a4084d664..98a73084e 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "federalist": "npm run build-js", "watch-js": "webpack -w --config webpack.config.js --progress --color", "optimize-assets": "svgo --disable=removeViewBox -r -f assets/img", + "es5-safe": "find _site/assets/js/build -name '*.js' -exec cat {} \\; | acorn --ecma5 --silent", "viewbox": "./node_modules/.bin/svglint 'assets/img/**/*.svg'", "lint": "eslint spec webpack.config.js assets", "pretest": "if [ -z $SKIP_BUILD ]; then make build; fi", @@ -29,6 +30,7 @@ "keywords": [], "devDependencies": { "@axe-core/puppeteer": "^4.1.0", + "acorn": "^8.1.0", "eslint": "^7.15.0", "eslint-plugin-prettier": "^3.2.0", "get-port": "^5.1.1",