From 74430ff13e5b0dfa68c898456563bc62dab19505 Mon Sep 17 00:00:00 2001 From: "Morten N.O. Henriksen" Date: Thu, 15 Oct 2020 18:21:09 +0000 Subject: [PATCH 1/4] fix e2e:docker lerna publish errors --- tasks/local-registry.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tasks/local-registry.sh b/tasks/local-registry.sh index 34bdd260c02..0388d357e78 100644 --- a/tasks/local-registry.sh +++ b/tasks/local-registry.sh @@ -6,6 +6,8 @@ original_yarn_registry_url=`yarn config get registry` default_verdaccio_package=verdaccio@^4.5.1 function startLocalRegistry { + clearLocalPackagesFromLocalRegistryStorage + # Start local registry tmp_registry_log=`mktemp` echo "Registry output file: $tmp_registry_log" @@ -28,3 +30,9 @@ function publishToLocalRegistry { git clean -df ./tasks/publish.sh prerelease --yes --force-publish=* --no-git-tag-version --no-commit-hooks --no-push --exact --dist-tag=latest } + +function clearLocalPackagesFromLocalRegistryStorage { + for f in ./packages/*; do + [ -d $f ] && [[ "$f" =~ ^\./packages/(.*) ]] && rm -rf ./tasks/storage/${BASH_REMATCH[1]}; + done; +} From 0f700d432f48bfbcae2737480f45366eef43c336 Mon Sep 17 00:00:00 2001 From: "Morten N.O. Henriksen" Date: Thu, 15 Oct 2020 18:25:25 +0000 Subject: [PATCH 2/4] Add default test to verify puppeteer config --- .eslintignore | 1 + test/default/puppeteer.test.js | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 test/default/puppeteer.test.js diff --git a/.eslintignore b/.eslintignore index 27c694cea55..d1bbf322360 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,3 +4,4 @@ my-app* packages/react-scripts/template packages/react-scripts/fixtures fixtures/ +default/ diff --git a/test/default/puppeteer.test.js b/test/default/puppeteer.test.js new file mode 100644 index 00000000000..c3c963f3b7d --- /dev/null +++ b/test/default/puppeteer.test.js @@ -0,0 +1,28 @@ +const puppeteer = require('puppeteer'); + +describe('verify puppeteer config', () => { + let browser = null; + + afterEach(() => { + if (browser != null) { + browser.close(); + browser = null; + } + }); + + it('should start up', async () => { + browser = await puppeteer.launch({ + headless: true, + args: ['--no-sandbox'], + }); + const page = await browser.newPage(); + page.setContent(` + + Hello + + `); + const element = await page.waitForSelector('.hello', { timeout: 0 }); + const text = await page.evaluate(el => el.innerText, element); + expect(text).toBe('Hello'); + }); +}); From b9f6092b3c764847f31f7256347d4c8b33f54c55 Mon Sep 17 00:00:00 2001 From: "Morten N.O. Henriksen" Date: Thu, 15 Oct 2020 18:28:08 +0000 Subject: [PATCH 3/4] Add development container with puppeteer dependencies --- .devcontainer/Dockerfile | 29 +++++++++++++++++++++++++++++ .devcontainer/devcontainer.json | 14 ++++++++++++++ .dockerignore | 17 +++++++++++++++++ tasks/local-test.sh | 19 +++++++++++++------ 4 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json create mode 100644 .dockerignore diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000000..ead5c8741d4 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,29 @@ +ARG VARIANT="12" +FROM node:${VARIANT} +# FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:0-${VARIANT} + +RUN apt-get update \ + && apt-get install -y wget gnupg \ + && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ + && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \ + && apt-get update \ + && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 libxtst6 \ + --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* +# Ref: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md#running-puppeteer-in-docker + +# Tell Puppeteer to skip installing Chrome. We'll be using the installed package. +ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \ + PUPPETEER_EXECUTABLE_PATH=/usr/bin/google-chrome-stable + +USER node +WORKDIR /home/node + +ENV NPM_CONFIG_PREFIX=/home/node/.npm +ENV NPM_CONFIG_QUIET=true +RUN echo "prefix=~/.npm" > ~/.npmrc + +RUN git config --global core.autocrlf false + +RUN node --version +RUN npm --version diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000000..b01b80faeb9 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,14 @@ +{ + "name": "Create React App Development", + "build": { + "dockerfile": "Dockerfile", + "args": { "VARIANT": "12" } + }, + "settings": { + "terminal.integrated.shell.linux": "/bin/bash" + }, + "extensions": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"], + "forwardPorts": [], + "postCreateCommand": "yarn install", + "remoteUser": "node" +} diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000000..b44969e3204 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,17 @@ +.idea +.vscode +node_modules +build +lib +storage +.DS_Store +*.tgz +my-app* +__snapshots__ +lerna-debug.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.changelog +.npm +yarn.lock diff --git a/tasks/local-test.sh b/tasks/local-test.sh index d8005eda154..ec12ff3c301 100755 --- a/tasks/local-test.sh +++ b/tasks/local-test.sh @@ -91,9 +91,6 @@ if [ ${git_branch} != ${current_git_branch} ]; then fi read -r -d '' command <<- CMD -echo "prefix=~/.npm" > ~/.npmrc -mkdir ~/.npm -export PATH=\$PATH:~/.npm/bin set -x git clone /var/create-react-app create-react-app --branch ${git_branch} cd create-react-app @@ -112,15 +109,25 @@ $([[ ${interactive} == 'true' ]] && echo 'bash') exit \$result_code CMD +if $(git diff-index --quiet HEAD --); then + echo "Git working tree clean, ready to begin testing" +else + echo "Cannot run tests with untracked changes, please commit and try again" + exit 1 +fi + +echo "Building local test image based on node:${node_version}" +docker build -t create-react-app-local-test -f ../.devcontainer/Dockerfile --build-arg VARIANT=${node_version} . + +echo "Current folder: ${PWD}" + docker run \ --env CI=true \ - --env NPM_CONFIG_PREFIX=/home/node/.npm \ - --env NPM_CONFIG_QUIET=true \ --tty \ --rm \ --user node \ --volume ${PWD}/..:/var/create-react-app \ --workdir /home/node \ $([[ ${interactive} == 'true' ]] && echo '--interactive') \ - node:${node_version} \ + create-react-app-local-test \ bash -c "${command}" From b1ac4345c16a0cee9c0a72e37adb5c1a9cc4bfce Mon Sep 17 00:00:00 2001 From: "Morten N.O. Henriksen" Date: Thu, 15 Oct 2020 18:29:11 +0000 Subject: [PATCH 4/4] fix puppeteer adding --no-sandbox for now --- test/fixtures/mjs-support/index.test.js | 10 ++++++++-- test/fixtures/typescript-typecheck/index.test.js | 5 ++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/test/fixtures/mjs-support/index.test.js b/test/fixtures/mjs-support/index.test.js index 97f931e95bf..affb2505343 100644 --- a/test/fixtures/mjs-support/index.test.js +++ b/test/fixtures/mjs-support/index.test.js @@ -5,7 +5,10 @@ const puppeteer = require('puppeteer'); test('can use mjs library in development', async () => { const { port, done } = await testSetup.scripts.start(); - const browser = await puppeteer.launch({ headless: true }); + const browser = await puppeteer.launch({ + headless: true, + args: ['--no-sandbox'], + }); try { const page = await browser.newPage(); await page.goto(`http://localhost:${port}/`); @@ -24,7 +27,10 @@ test('can use mjs library in production', async () => { await testSetup.scripts.build(); const { port, done } = await testSetup.scripts.serve(); - const browser = await puppeteer.launch({ headless: true }); + const browser = await puppeteer.launch({ + headless: true, + args: ['--no-sandbox'], + }); try { const page = await browser.newPage(); await page.goto(`http://localhost:${port}/`); diff --git a/test/fixtures/typescript-typecheck/index.test.js b/test/fixtures/typescript-typecheck/index.test.js index c4978c735e9..9c42746a24c 100644 --- a/test/fixtures/typescript-typecheck/index.test.js +++ b/test/fixtures/typescript-typecheck/index.test.js @@ -6,7 +6,10 @@ const expectedErrorMsg = `Argument of type '123' is not assignable to parameter test('shows error overlay in browser', async () => { const { port, done } = await testSetup.scripts.start(); - const browser = await puppeteer.launch({ headless: true }); + const browser = await puppeteer.launch({ + headless: true, + args: ['--no-sandbox'], + }); try { const page = await browser.newPage(); await page.goto(`http://localhost:${port}/`);