From bcd2c2099f773864cc70b5d76989f5daafd23d1d Mon Sep 17 00:00:00 2001 From: Alexander Zheka <64766323+AlexanderZheka@users.noreply.github.com> Date: Wed, 10 Nov 2021 16:56:27 +0100 Subject: [PATCH 001/371] Add Base image for node 16.13.0 (#551) --- base/16.13.0/Dockerfile | 67 +++++++++++++++++++++++++++++++++++++++++ base/16.13.0/README.md | 18 +++++++++++ base/16.13.0/build.sh | 8 +++++ base/README.md | 1 + buildspec.yml | 10 ++++++ circle.yml | 3 ++ 6 files changed, 107 insertions(+) create mode 100644 base/16.13.0/Dockerfile create mode 100644 base/16.13.0/README.md create mode 100755 base/16.13.0/build.sh diff --git a/base/16.13.0/Dockerfile b/base/16.13.0/Dockerfile new file mode 100644 index 0000000000..c31a7749a3 --- /dev/null +++ b/base/16.13.0/Dockerfile @@ -0,0 +1,67 @@ +# WARNING: this file was autogenerated by generate-base-image.js +# contains all dependencies for running Cypress.io Test Runner +# https://on.cypress.io/docker and https://on.cypress.io/ci +# +# build it with command +# docker build -t cypress/base:16.13.0 . +# +FROM node:16.13.0-buster + +RUN apt-get update && \ + apt-get install --no-install-recommends -y \ + libgtk2.0-0 \ + libgtk-3-0 \ + libnotify-dev \ + libgconf-2-4 \ + libgbm-dev \ + libnss3 \ + libxss1 \ + libasound2 \ + libxtst6 \ + xauth \ + xvfb \ + # install text editors + vim-tiny \ + nano \ + # install emoji font + fonts-noto-color-emoji \ + # install Chinese fonts + # this list was copied from https://github.com/jim3ma/docker-leanote + fonts-arphic-bkai00mp \ + fonts-arphic-bsmi00lp \ + fonts-arphic-gbsn00lp \ + fonts-arphic-gkai00mp \ + fonts-arphic-ukai \ + fonts-arphic-uming \ + ttf-wqy-zenhei \ + ttf-wqy-microhei \ + xfonts-wqy \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +RUN npm --version + +RUN npm install -g yarn@latest --force +RUN yarn --version + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM xterm +# avoid million NPM install messages +ENV npm_config_loglevel warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm true + +# Node libraries +RUN node -p process.versions + +# Show where Node loads required modules from +RUN node -p 'module.paths' + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" diff --git a/base/16.13.0/README.md b/base/16.13.0/README.md new file mode 100644 index 0000000000..f69ed4b9b1 --- /dev/null +++ b/base/16.13.0/README.md @@ -0,0 +1,18 @@ + +# cypress/base:16.13.0 + +A Docker image with all dependencies pre-installed. +Just add your NPM packages (including Cypress) and run the tests. +See [Cypress Docker docs](https://on.cypress.io/docker) and +[Cypress CI guide](https://on.cypress.io/ci). + +## Example + +Sample Dockerfile + +``` +FROM cypress/base:16.13.0 +RUN npm install --save-dev cypress +RUN $(npm bin)/cypress verify +RUN $(npm bin)/cypress run +``` diff --git a/base/16.13.0/build.sh b/base/16.13.0/build.sh new file mode 100755 index 0000000000..d4e9aed077 --- /dev/null +++ b/base/16.13.0/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-base-image.js +set e+x + +# build image with Cypress dependencies +LOCAL_NAME=cypress/base:16.13.0 + +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/base/README.md b/base/README.md index dbed6dc947..8e18ec002c 100644 --- a/base/README.md +++ b/base/README.md @@ -65,6 +65,7 @@ Image `cypress/base:12` is tagged [`latest`](https://hub.docker.com/r/cypress/ba | cypress/base:16.3.0 | 16.3.0 | Debian 10.9 | [/16.3.0](16.3.0) | 7.10.0 | 1.22.10 | [1](#note1) | | cypress/base:16.4.0 | 16.4.0 | Debian 10.9 | [/16.4.0](16.4.0) | 7.10.0 | 1.22.10 | [1](#note1) | | cypress/base:16.5.0 | 16.5.0 | Debian 10.9 | [/16.5.0](16.5.0) | 7.10.0 | 1.22.10 | [1](#note1) | +| cypress/base:16.13.0 | 16.13.0 | Debian 10.9 | [/16.13.0](16.13.0) | 7.10.0 | 1.22.10 | [1](#note1) | | cypress/base:centos7 | 6 | CentOS | [/centos7](centos7) | 3.10.10 | 🚫 | | cypress/base:centos7-12.4.0 | 12.4.0 | CentOS | [/centos7](centos7) | 6.9.0 | 1.16.0 | | cypress/base:ubuntu16 | 6 | Ubuntu | [/ubuntu16](ubuntu16) | 3.10.10 | 🚫 | diff --git a/buildspec.yml b/buildspec.yml index ee0dada6fc..21bcb80c06 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -156,6 +156,16 @@ batch: IMAGE_REPO_NAME: "cypress/base" IMAGE_DIR: "base" IMAGE_TAG: "16.1.0" + - identifier: base16130 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/base" + IMAGE_DIR: "base" + IMAGE_TAG: "16.13.0" - identifier: base1620 env: image: aws/codebuild/standard:5.0 diff --git a/circle.yml b/circle.yml index 7d14d38210..72754db449 100644 --- a/circle.yml +++ b/circle.yml @@ -540,6 +540,9 @@ workflows: - build-base-image: name: "base 16.1.0" dockerTag: "16.1.0" + - build-base-image: + name: "base 16.13.0" + dockerTag: "16.13.0" - build-base-image: name: "base 16.2.0" dockerTag: "16.2.0" From a82f1c8b870b4364c0568ca1a387774d1f44f2b4 Mon Sep 17 00:00:00 2001 From: Chris Breiding Date: Wed, 10 Nov 2021 17:35:12 -0500 Subject: [PATCH 002/371] included 9.0.0 (#553) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: MichaΕ‚ Bundyra Co-authored-by: Zach Bloomquist --- buildspec.yml | 14 ++++++-- circle.yml | 3 ++ included/9.0.0/Dockerfile | 69 +++++++++++++++++++++++++++++++++++++++ included/9.0.0/README.md | 18 ++++++++++ included/9.0.0/build.sh | 8 +++++ included/README.md | 1 + 6 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 included/9.0.0/Dockerfile create mode 100644 included/9.0.0/README.md create mode 100755 included/9.0.0/build.sh diff --git a/buildspec.yml b/buildspec.yml index 21bcb80c06..07a11c6578 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -1058,6 +1058,16 @@ batch: IMAGE_REPO_NAME: "cypress/included" IMAGE_DIR: "included" IMAGE_TAG: "8.7.0" + - identifier: included900 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/included" + IMAGE_DIR: "included" + IMAGE_TAG: "9.0.0" phases: pre_build: @@ -1070,11 +1080,11 @@ phases: - aws ecr-public get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin public.ecr.aws/$PUBLIC_ECR_ALIAS build: commands: - - echo Building the Docker image... + - echo Building the Docker image... - cd $IMAGE_DIR/$IMAGE_TAG - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG post_build: commands: - echo Pushing the Docker image... - - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG \ No newline at end of file + - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG diff --git a/circle.yml b/circle.yml index 72754db449..186e52aaf9 100644 --- a/circle.yml +++ b/circle.yml @@ -735,3 +735,6 @@ workflows: - build-included-image: name: "included 8.7.0" dockerTag: "8.7.0" + - build-included-image: + name: "included 9.0.0" + dockerTag: "9.0.0" diff --git a/included/9.0.0/Dockerfile b/included/9.0.0/Dockerfile new file mode 100644 index 0000000000..896ef11234 --- /dev/null +++ b/included/9.0.0/Dockerfile @@ -0,0 +1,69 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.0.0 cypress/browsers:node16.5.0-chrome94-ff93 +# +# build this image with command +# docker build -t cypress/included:9.0.0 . +# +FROM cypress/browsers:node16.5.0-chrome94-ff93 + +# Update the dependencies to get the latest and greatest (and safest!) packages. +RUN apt update && apt upgrade -y + +# avoid too many progress messages +# https://github.com/cypress-io/cypress/issues/1243 +ENV CI=1 + +# disable shared memory X11 affecting Cypress v4 and Chrome +# https://github.com/cypress-io/cypress-docker-images/issues/270 +ENV QT_X11_NO_MITSHM=1 +ENV _X11_NO_MITSHM=1 +ENV _MITSHM=0 + +# should be root user +RUN echo "whoami: $(whoami)" +RUN npm config -g set user $(whoami) + +# command "id" should print: +# uid=0(root) gid=0(root) groups=0(root) +# which means the current user is root +RUN id + +# point Cypress at the /root/cache no matter what user account is used +# see https://on.cypress.io/caching +ENV CYPRESS_CACHE_FOLDER=/root/.cache/Cypress +RUN npm install -g "cypress@9.0.0" +RUN cypress verify + +# Cypress cache and installed version +# should be in the root user's home folder +RUN cypress cache path +RUN cypress cache list +RUN cypress info +RUN cypress version + +# give every user read access to the "/root" folder where the binary is cached +# we really only need to worry about the top folder, fortunately +RUN ls -la /root +RUN chmod 755 /root + +# always grab the latest Yarn +# otherwise the base image might have old versions +# NPM does not need to be installed as it is already included with Node. +RUN npm i -g yarn@latest + +# Show where Node loads required modules from +RUN node -p 'module.paths' + +# should print Cypress version +# plus Electron and bundled Node versions +RUN cypress version +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" \ + "chrome: $(google-chrome --version || true) \n" \ + "firefox: $(firefox --version || true) \n" + +ENTRYPOINT ["cypress", "run"] diff --git a/included/9.0.0/README.md b/included/9.0.0/README.md new file mode 100644 index 0000000000..663fb8e98a --- /dev/null +++ b/included/9.0.0/README.md @@ -0,0 +1,18 @@ + + +# cypress/included:9.0.0 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.0.0 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/9.0.0/build.sh b/included/9.0.0/build.sh new file mode 100755 index 0000000000..394009bd10 --- /dev/null +++ b/included/9.0.0/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.0.0 cypress/browsers:node16.5.0-chrome94-ff93 +set e+x + +LOCAL_NAME=cypress/included:9.0.0 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/included/README.md b/included/README.md index 13f7cb4fec..96d6fd232d 100644 --- a/included/README.md +++ b/included/README.md @@ -74,6 +74,7 @@ Name + Tag | Base image [cypress/included:8.5.0](8.5.0) | `cypress/browsers:node14.17.0-chrome91-ff89` [cypress/included:8.6.0](8.6.0) | `cypress/browsers:node14.17.0-chrome91-ff89` [cypress/included:8.7.0](8.7.0) | `cypress/browsers:node14.17.0-chrome91-ff89` +[cypress/included:9.0.0](9.0.0) | `cypress/browsers:node16.5.0-chrome94-ff93` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: From 25f7755f487a341e4ae4674a06129c0f25d25c69 Mon Sep 17 00:00:00 2001 From: Emily Rohrbough Date: Tue, 23 Nov 2021 10:15:53 -0500 Subject: [PATCH 003/371] included 9.1.0 (#556) --- buildspec.yml | 14 ++++++-- circle.yml | 3 ++ included/9.1.0/Dockerfile | 69 +++++++++++++++++++++++++++++++++++++++ included/9.1.0/README.md | 18 ++++++++++ included/9.1.0/build.sh | 8 +++++ included/README.md | 1 + 6 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 included/9.1.0/Dockerfile create mode 100644 included/9.1.0/README.md create mode 100755 included/9.1.0/build.sh diff --git a/buildspec.yml b/buildspec.yml index 07a11c6578..6299777d41 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -1068,6 +1068,16 @@ batch: IMAGE_REPO_NAME: "cypress/included" IMAGE_DIR: "included" IMAGE_TAG: "9.0.0" + - identifier: included910 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/included" + IMAGE_DIR: "included" + IMAGE_TAG: "9.1.0" phases: pre_build: @@ -1080,11 +1090,11 @@ phases: - aws ecr-public get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin public.ecr.aws/$PUBLIC_ECR_ALIAS build: commands: - - echo Building the Docker image... + - echo Building the Docker image... - cd $IMAGE_DIR/$IMAGE_TAG - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG post_build: commands: - echo Pushing the Docker image... - - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG + - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG \ No newline at end of file diff --git a/circle.yml b/circle.yml index 186e52aaf9..436e3e85ed 100644 --- a/circle.yml +++ b/circle.yml @@ -738,3 +738,6 @@ workflows: - build-included-image: name: "included 9.0.0" dockerTag: "9.0.0" + - build-included-image: + name: "included 9.1.0" + dockerTag: "9.1.0" diff --git a/included/9.1.0/Dockerfile b/included/9.1.0/Dockerfile new file mode 100644 index 0000000000..16a18cd4c7 --- /dev/null +++ b/included/9.1.0/Dockerfile @@ -0,0 +1,69 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.1.0 cypress/browsers:node16.5.0-chrome94-ff93 +# +# build this image with command +# docker build -t cypress/included:9.1.0 . +# +FROM cypress/browsers:node16.5.0-chrome94-ff93 + +# Update the dependencies to get the latest and greatest (and safest!) packages. +RUN apt update && apt upgrade -y + +# avoid too many progress messages +# https://github.com/cypress-io/cypress/issues/1243 +ENV CI=1 + +# disable shared memory X11 affecting Cypress v4 and Chrome +# https://github.com/cypress-io/cypress-docker-images/issues/270 +ENV QT_X11_NO_MITSHM=1 +ENV _X11_NO_MITSHM=1 +ENV _MITSHM=0 + +# should be root user +RUN echo "whoami: $(whoami)" +RUN npm config -g set user $(whoami) + +# command "id" should print: +# uid=0(root) gid=0(root) groups=0(root) +# which means the current user is root +RUN id + +# point Cypress at the /root/cache no matter what user account is used +# see https://on.cypress.io/caching +ENV CYPRESS_CACHE_FOLDER=/root/.cache/Cypress +RUN npm install -g "cypress@9.1.0" +RUN cypress verify + +# Cypress cache and installed version +# should be in the root user's home folder +RUN cypress cache path +RUN cypress cache list +RUN cypress info +RUN cypress version + +# give every user read access to the "/root" folder where the binary is cached +# we really only need to worry about the top folder, fortunately +RUN ls -la /root +RUN chmod 755 /root + +# always grab the latest Yarn +# otherwise the base image might have old versions +# NPM does not need to be installed as it is already included with Node. +RUN npm i -g yarn@latest + +# Show where Node loads required modules from +RUN node -p 'module.paths' + +# should print Cypress version +# plus Electron and bundled Node versions +RUN cypress version +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" \ + "chrome: $(google-chrome --version || true) \n" \ + "firefox: $(firefox --version || true) \n" + +ENTRYPOINT ["cypress", "run"] diff --git a/included/9.1.0/README.md b/included/9.1.0/README.md new file mode 100644 index 0000000000..2cf202175c --- /dev/null +++ b/included/9.1.0/README.md @@ -0,0 +1,18 @@ + + +# cypress/included:9.1.0 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.1.0 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/9.1.0/build.sh b/included/9.1.0/build.sh new file mode 100755 index 0000000000..af7d9d2392 --- /dev/null +++ b/included/9.1.0/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.1.0 cypress/browsers:node16.5.0-chrome94-ff93 +set e+x + +LOCAL_NAME=cypress/included:9.1.0 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/included/README.md b/included/README.md index 96d6fd232d..4048b96ca1 100644 --- a/included/README.md +++ b/included/README.md @@ -75,6 +75,7 @@ Name + Tag | Base image [cypress/included:8.6.0](8.6.0) | `cypress/browsers:node14.17.0-chrome91-ff89` [cypress/included:8.7.0](8.7.0) | `cypress/browsers:node14.17.0-chrome91-ff89` [cypress/included:9.0.0](9.0.0) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.1.0](9.1.0) | `cypress/browsers:node16.5.0-chrome94-ff93` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: From eba19c2050cf7fe97441364d2b83b32507225b8f Mon Sep 17 00:00:00 2001 From: Chris Breiding Date: Fri, 3 Dec 2021 21:13:13 -0500 Subject: [PATCH 004/371] included 9.1.1 (#558) --- buildspec.yml | 14 ++++++-- circle.yml | 3 ++ included/9.1.1/Dockerfile | 69 +++++++++++++++++++++++++++++++++++++++ included/9.1.1/README.md | 18 ++++++++++ included/9.1.1/build.sh | 8 +++++ included/README.md | 1 + 6 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 included/9.1.1/Dockerfile create mode 100644 included/9.1.1/README.md create mode 100755 included/9.1.1/build.sh diff --git a/buildspec.yml b/buildspec.yml index 6299777d41..b4db12ce68 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -1078,6 +1078,16 @@ batch: IMAGE_REPO_NAME: "cypress/included" IMAGE_DIR: "included" IMAGE_TAG: "9.1.0" + - identifier: included911 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/included" + IMAGE_DIR: "included" + IMAGE_TAG: "9.1.1" phases: pre_build: @@ -1090,11 +1100,11 @@ phases: - aws ecr-public get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin public.ecr.aws/$PUBLIC_ECR_ALIAS build: commands: - - echo Building the Docker image... + - echo Building the Docker image... - cd $IMAGE_DIR/$IMAGE_TAG - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG post_build: commands: - echo Pushing the Docker image... - - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG \ No newline at end of file + - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG diff --git a/circle.yml b/circle.yml index 436e3e85ed..3fc00ecd4c 100644 --- a/circle.yml +++ b/circle.yml @@ -741,3 +741,6 @@ workflows: - build-included-image: name: "included 9.1.0" dockerTag: "9.1.0" + - build-included-image: + name: "included 9.1.1" + dockerTag: "9.1.1" diff --git a/included/9.1.1/Dockerfile b/included/9.1.1/Dockerfile new file mode 100644 index 0000000000..bdd541834a --- /dev/null +++ b/included/9.1.1/Dockerfile @@ -0,0 +1,69 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.1.1 cypress/browsers:node16.5.0-chrome94-ff93 +# +# build this image with command +# docker build -t cypress/included:9.1.1 . +# +FROM cypress/browsers:node16.5.0-chrome94-ff93 + +# Update the dependencies to get the latest and greatest (and safest!) packages. +RUN apt update && apt upgrade -y + +# avoid too many progress messages +# https://github.com/cypress-io/cypress/issues/1243 +ENV CI=1 + +# disable shared memory X11 affecting Cypress v4 and Chrome +# https://github.com/cypress-io/cypress-docker-images/issues/270 +ENV QT_X11_NO_MITSHM=1 +ENV _X11_NO_MITSHM=1 +ENV _MITSHM=0 + +# should be root user +RUN echo "whoami: $(whoami)" +RUN npm config -g set user $(whoami) + +# command "id" should print: +# uid=0(root) gid=0(root) groups=0(root) +# which means the current user is root +RUN id + +# point Cypress at the /root/cache no matter what user account is used +# see https://on.cypress.io/caching +ENV CYPRESS_CACHE_FOLDER=/root/.cache/Cypress +RUN npm install -g "cypress@9.1.1" +RUN cypress verify + +# Cypress cache and installed version +# should be in the root user's home folder +RUN cypress cache path +RUN cypress cache list +RUN cypress info +RUN cypress version + +# give every user read access to the "/root" folder where the binary is cached +# we really only need to worry about the top folder, fortunately +RUN ls -la /root +RUN chmod 755 /root + +# always grab the latest Yarn +# otherwise the base image might have old versions +# NPM does not need to be installed as it is already included with Node. +RUN npm i -g yarn@latest + +# Show where Node loads required modules from +RUN node -p 'module.paths' + +# should print Cypress version +# plus Electron and bundled Node versions +RUN cypress version +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" \ + "chrome: $(google-chrome --version || true) \n" \ + "firefox: $(firefox --version || true) \n" + +ENTRYPOINT ["cypress", "run"] diff --git a/included/9.1.1/README.md b/included/9.1.1/README.md new file mode 100644 index 0000000000..40518e0a8e --- /dev/null +++ b/included/9.1.1/README.md @@ -0,0 +1,18 @@ + + +# cypress/included:9.1.1 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.1.1 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/9.1.1/build.sh b/included/9.1.1/build.sh new file mode 100755 index 0000000000..90b3c10d71 --- /dev/null +++ b/included/9.1.1/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.1.1 cypress/browsers:node16.5.0-chrome94-ff93 +set e+x + +LOCAL_NAME=cypress/included:9.1.1 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/included/README.md b/included/README.md index 4048b96ca1..a2f0741e15 100644 --- a/included/README.md +++ b/included/README.md @@ -76,6 +76,7 @@ Name + Tag | Base image [cypress/included:8.7.0](8.7.0) | `cypress/browsers:node14.17.0-chrome91-ff89` [cypress/included:9.0.0](9.0.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.1.0](9.1.0) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.1.1](9.1.1) | `cypress/browsers:node16.5.0-chrome94-ff93` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: From cf393a11cd2d15c88b08f8930a1871f238d00b93 Mon Sep 17 00:00:00 2001 From: mjhenkes Date: Tue, 21 Dec 2021 10:53:49 -0600 Subject: [PATCH 005/371] included 9.2.0 --- included/9.2.0/Dockerfile | 69 +++++++++++++++++++++++++++++++++++++++ included/9.2.0/README.md | 18 ++++++++++ included/9.2.0/build.sh | 8 +++++ 3 files changed, 95 insertions(+) create mode 100644 included/9.2.0/Dockerfile create mode 100644 included/9.2.0/README.md create mode 100755 included/9.2.0/build.sh diff --git a/included/9.2.0/Dockerfile b/included/9.2.0/Dockerfile new file mode 100644 index 0000000000..eca430bd02 --- /dev/null +++ b/included/9.2.0/Dockerfile @@ -0,0 +1,69 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.2.0 cypress/browsers:node16.5.0-chrome94ff93 +# +# build this image with command +# docker build -t cypress/included:9.2.0 . +# +FROM cypress/browsers:node16.5.0-chrome94ff93 + +# Update the dependencies to get the latest and greatest (and safest!) packages. +RUN apt update && apt upgrade -y + +# avoid too many progress messages +# https://github.com/cypress-io/cypress/issues/1243 +ENV CI=1 + +# disable shared memory X11 affecting Cypress v4 and Chrome +# https://github.com/cypress-io/cypress-docker-images/issues/270 +ENV QT_X11_NO_MITSHM=1 +ENV _X11_NO_MITSHM=1 +ENV _MITSHM=0 + +# should be root user +RUN echo "whoami: $(whoami)" +RUN npm config -g set user $(whoami) + +# command "id" should print: +# uid=0(root) gid=0(root) groups=0(root) +# which means the current user is root +RUN id + +# point Cypress at the /root/cache no matter what user account is used +# see https://on.cypress.io/caching +ENV CYPRESS_CACHE_FOLDER=/root/.cache/Cypress +RUN npm install -g "cypress@9.2.0" +RUN cypress verify + +# Cypress cache and installed version +# should be in the root user's home folder +RUN cypress cache path +RUN cypress cache list +RUN cypress info +RUN cypress version + +# give every user read access to the "/root" folder where the binary is cached +# we really only need to worry about the top folder, fortunately +RUN ls -la /root +RUN chmod 755 /root + +# always grab the latest Yarn +# otherwise the base image might have old versions +# NPM does not need to be installed as it is already included with Node. +RUN npm i -g yarn@latest + +# Show where Node loads required modules from +RUN node -p 'module.paths' + +# should print Cypress version +# plus Electron and bundled Node versions +RUN cypress version +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" \ + "chrome: $(google-chrome --version || true) \n" \ + "firefox: $(firefox --version || true) \n" + +ENTRYPOINT ["cypress", "run"] diff --git a/included/9.2.0/README.md b/included/9.2.0/README.md new file mode 100644 index 0000000000..58e28a1d14 --- /dev/null +++ b/included/9.2.0/README.md @@ -0,0 +1,18 @@ + + +# cypress/included:9.2.0 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.2.0 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/9.2.0/build.sh b/included/9.2.0/build.sh new file mode 100755 index 0000000000..55be14e2ce --- /dev/null +++ b/included/9.2.0/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.2.0 cypress/browsers:node16.5.0-chrome94ff93 +set e+x + +LOCAL_NAME=cypress/included:9.2.0 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . From 62bcc6b58838b1419e1448525d5a5f2956c33153 Mon Sep 17 00:00:00 2001 From: Matt Henkes Date: Tue, 21 Dec 2021 11:08:56 -0600 Subject: [PATCH 006/371] Apply suggestions from code review Co-authored-by: Bill Glesias --- included/9.2.0/Dockerfile | 4 ++-- included/9.2.0/README.md | 2 +- included/9.2.0/build.sh | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/included/9.2.0/Dockerfile b/included/9.2.0/Dockerfile index eca430bd02..b4dd88cbc7 100644 --- a/included/9.2.0/Dockerfile +++ b/included/9.2.0/Dockerfile @@ -1,11 +1,11 @@ # WARNING: this file was autogenerated by generate-included-image.js # using -# npm run add:included -- 9.2.0 cypress/browsers:node16.5.0-chrome94ff93 +# npm run add:included -- 9.2.0 cypress/browsers:node16.5.0-chrome94-ff93 # # build this image with command # docker build -t cypress/included:9.2.0 . # -FROM cypress/browsers:node16.5.0-chrome94ff93 +FROM cypress/browsers:node16.5.0-chrome94-ff93 # Update the dependencies to get the latest and greatest (and safest!) packages. RUN apt update && apt upgrade -y diff --git a/included/9.2.0/README.md b/included/9.2.0/README.md index 58e28a1d14..07dac439c9 100644 --- a/included/9.2.0/README.md +++ b/included/9.2.0/README.md @@ -1,7 +1,7 @@ # cypress/included:9.2.0 diff --git a/included/9.2.0/build.sh b/included/9.2.0/build.sh index 55be14e2ce..219ca40600 100755 --- a/included/9.2.0/build.sh +++ b/included/9.2.0/build.sh @@ -1,6 +1,6 @@ # WARNING: this file was autogenerated by generate-included-image.js # using -# npm run add:included -- 9.2.0 cypress/browsers:node16.5.0-chrome94ff93 +# npm run add:included -- 9.2.0 cypress/browsers:node16.5.0-chrome94-ff93 set e+x LOCAL_NAME=cypress/included:9.2.0 From 020d29ea776f1d11ec80be69839a174a32332c71 Mon Sep 17 00:00:00 2001 From: Bill Glesias Date: Tue, 21 Dec 2021 12:13:35 -0500 Subject: [PATCH 007/371] update included/README.md with name + tag | base image for 9.2.0 --- included/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/included/README.md b/included/README.md index a2f0741e15..2e30230b55 100644 --- a/included/README.md +++ b/included/README.md @@ -77,6 +77,7 @@ Name + Tag | Base image [cypress/included:9.0.0](9.0.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.1.0](9.1.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.1.1](9.1.1) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: From 608f56013e16717b40a8cda431f0d93b96574b03 Mon Sep 17 00:00:00 2001 From: Jennifer Shehane Date: Wed, 22 Dec 2021 09:48:35 -0600 Subject: [PATCH 008/371] Try to trigger release (#563) --- browsers/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browsers/README.md b/browsers/README.md index 0f9ce35c0e..7b76dda835 100644 --- a/browsers/README.md +++ b/browsers/README.md @@ -34,7 +34,7 @@ Name + Tag | Base image | Chrome | Firefox | Edge [cypress/browsers:node14.17.0-chrome91-ff89](./node14.17.0-chrome91-ff89) | `cypress/base:14.17.0` | `91.0.4472.114` | `89.0.2` [cypress/browsers:node16.5.0-chrome94-ff93](./node16.5.0-chrome94-ff93) | `cypress/base:16.5.0` | `94.0.4606.71` | `93.0` -To find the available Chrome versions, check [https://chromium.cypress.io/](https://chromium.cypress.io/) +To find the available Chrome versions, check [https://chromium.cypress.io/](https://chromium.cypress.io/). ## Naming scheme From 540a3d7079bb076d7b9599576e9cc69766880e8c Mon Sep 17 00:00:00 2001 From: mjhenkes Date: Wed, 22 Dec 2021 09:50:35 -0600 Subject: [PATCH 009/371] Update yml to build image --- buildspec.yml | 14 ++++++++++++-- circle.yml | 3 +++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/buildspec.yml b/buildspec.yml index b4db12ce68..fd8df4195e 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -1088,6 +1088,16 @@ batch: IMAGE_REPO_NAME: "cypress/included" IMAGE_DIR: "included" IMAGE_TAG: "9.1.1" + - identifier: included920 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/included" + IMAGE_DIR: "included" + IMAGE_TAG: "9.2.0" phases: pre_build: @@ -1100,11 +1110,11 @@ phases: - aws ecr-public get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin public.ecr.aws/$PUBLIC_ECR_ALIAS build: commands: - - echo Building the Docker image... + - echo Building the Docker image... - cd $IMAGE_DIR/$IMAGE_TAG - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG post_build: commands: - echo Pushing the Docker image... - - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG + - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG \ No newline at end of file diff --git a/circle.yml b/circle.yml index 3fc00ecd4c..b81e5ec068 100644 --- a/circle.yml +++ b/circle.yml @@ -744,3 +744,6 @@ workflows: - build-included-image: name: "included 9.1.1" dockerTag: "9.1.1" + - build-included-image: + name: "included 9.2.0" + dockerTag: "9.2.0" From c23a30316bdac177ee6c35794ebe54c2550d685f Mon Sep 17 00:00:00 2001 From: Matt Henkes Date: Tue, 4 Jan 2022 12:47:09 -0600 Subject: [PATCH 010/371] chore: remove-github-action (#564) --- .github/workflows/main.yml | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 7422c80d68..0000000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: Generate config -on: - push: - branches: - - master - -jobs: - build: - name: Generate - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - uses: bahmutov/npm-install@v1 - - run: npm run build - - run: git status - - - run: echo Current ref is ${{ github.ref }} - - # if there is a change to the circle.yml file - # then commit and push it. Only do this on "master" branch - # https://github.com/mikeal/publish-to-github-action - - uses: mikeal/publish-to-github-action@master - if: github.ref == 'refs/heads/master' - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 46a32333d5b9fb10a71578d97075cb66b4adec79 Mon Sep 17 00:00:00 2001 From: C-A de Salaberry Date: Tue, 4 Jan 2022 22:44:48 +0100 Subject: [PATCH 011/371] chore: add 14.18.1 base image (#545) --- base/14.18.1/Dockerfile | 67 +++++++++++++++++++++++++++++++++++++++++ base/14.18.1/README.md | 18 +++++++++++ base/14.18.1/build.sh | 8 +++++ base/README.md | 1 + buildspec.yml | 14 +++++++-- circle.yml | 3 ++ 6 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 base/14.18.1/Dockerfile create mode 100644 base/14.18.1/README.md create mode 100755 base/14.18.1/build.sh diff --git a/base/14.18.1/Dockerfile b/base/14.18.1/Dockerfile new file mode 100644 index 0000000000..d56bd576af --- /dev/null +++ b/base/14.18.1/Dockerfile @@ -0,0 +1,67 @@ +# WARNING: this file was autogenerated by generate-base-image.js +# contains all dependencies for running Cypress.io Test Runner +# https://on.cypress.io/docker and https://on.cypress.io/ci +# +# build it with command +# docker build -t cypress/base:14.18.1 . +# +FROM node:14.18.1-buster + +RUN apt-get update && \ + apt-get install --no-install-recommends -y \ + libgtk2.0-0 \ + libgtk-3-0 \ + libnotify-dev \ + libgconf-2-4 \ + libgbm-dev \ + libnss3 \ + libxss1 \ + libasound2 \ + libxtst6 \ + xauth \ + xvfb \ + # install text editors + vim-tiny \ + nano \ + # install emoji font + fonts-noto-color-emoji \ + # install Chinese fonts + # this list was copied from https://github.com/jim3ma/docker-leanote + fonts-arphic-bkai00mp \ + fonts-arphic-bsmi00lp \ + fonts-arphic-gbsn00lp \ + fonts-arphic-gkai00mp \ + fonts-arphic-ukai \ + fonts-arphic-uming \ + ttf-wqy-zenhei \ + ttf-wqy-microhei \ + xfonts-wqy \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +RUN npm --version + +RUN npm install -g yarn@latest --force +RUN yarn --version + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM xterm +# avoid million NPM install messages +ENV npm_config_loglevel warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm true + +# Node libraries +RUN node -p process.versions + +# Show where Node loads required modules from +RUN node -p 'module.paths' + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" diff --git a/base/14.18.1/README.md b/base/14.18.1/README.md new file mode 100644 index 0000000000..e7a81e800c --- /dev/null +++ b/base/14.18.1/README.md @@ -0,0 +1,18 @@ + +# cypress/base:14.18.1 + +A Docker image with all dependencies pre-installed. +Just add your NPM packages (including Cypress) and run the tests. +See [Cypress Docker docs](https://on.cypress.io/docker) and +[Cypress CI guide](https://on.cypress.io/ci). + +## Example + +Sample Dockerfile + +``` +FROM cypress/base:14.18.1 +RUN npm install --save-dev cypress +RUN $(npm bin)/cypress verify +RUN $(npm bin)/cypress run +``` diff --git a/base/14.18.1/build.sh b/base/14.18.1/build.sh new file mode 100755 index 0000000000..8b7c2d7247 --- /dev/null +++ b/base/14.18.1/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-base-image.js +set e+x + +# build image with Cypress dependencies +LOCAL_NAME=cypress/base:14.18.1 + +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/base/README.md b/base/README.md index 8e18ec002c..f577befbc4 100644 --- a/base/README.md +++ b/base/README.md @@ -59,6 +59,7 @@ Image `cypress/base:12` is tagged [`latest`](https://hub.docker.com/r/cypress/ba | cypress/base:14.16.0 | 14.16.0 | Debian 10.8 | [/14.16.0](14.16.0) | 7.6.0 | 1.22.10 | [1](#note1) | | cypress/base:14.17.0 | 14.17.0 | Debian 10.9 | [/14.17.0](14.17.0) | 6.14.13 | 1.22.10 | [1](#note1) | | cypress/base:14.17.3 | 14.17.3 | Debian 10.10 | [/14.17.3](14.17.3) | 6.14.13 | 1.22.10 | [1](#note1) | +| cypress/base:14.18.1 | 14.18.1 | Debian 10.10 | [/14.18.1](14.18.1) | 6.14.15 | 1.22.15 | [1](#note1) | | cypress/base:16.0.0 | 16.0.0 | Debian 10.9 | [/16.0.0](16.0.0) | 7.10.0 | 1.22.10 | [1](#note1) | | cypress/base:16.1.0 | 16.1.0 | Debian 10.9 | [/16.1.0](16.1.0) | 7.10.0 | 1.22.10 | [1](#note1) | | cypress/base:16.2.0 | 16.2.0 | Debian 10.9 | [/16.2.0](16.2.0) | 7.10.0 | 1.22.10 | [1](#note1) | diff --git a/buildspec.yml b/buildspec.yml index fd8df4195e..83b8a63b44 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -116,6 +116,16 @@ batch: IMAGE_REPO_NAME: "cypress/base" IMAGE_DIR: "base" IMAGE_TAG: "14.17.3" + - identifier: base14181 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/base" + IMAGE_DIR: "base" + IMAGE_TAG: "14.18.1" - identifier: base1450 env: image: aws/codebuild/standard:5.0 @@ -1110,11 +1120,11 @@ phases: - aws ecr-public get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin public.ecr.aws/$PUBLIC_ECR_ALIAS build: commands: - - echo Building the Docker image... + - echo Building the Docker image... - cd $IMAGE_DIR/$IMAGE_TAG - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG post_build: commands: - echo Pushing the Docker image... - - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG \ No newline at end of file + - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG diff --git a/circle.yml b/circle.yml index b81e5ec068..3670a6af2d 100644 --- a/circle.yml +++ b/circle.yml @@ -528,6 +528,9 @@ workflows: - build-base-image: name: "base 14.17.3" dockerTag: "14.17.3" + - build-base-image: + name: "base 14.18.1" + dockerTag: "14.18.1" - build-base-image: name: "base 14.5.0" dockerTag: "14.5.0" From 78761316453fb3b278edc0d98ae0b3c46a6d5369 Mon Sep 17 00:00:00 2001 From: Emily Rohrbough Date: Wed, 5 Jan 2022 08:24:18 -0600 Subject: [PATCH 012/371] add cypress/base:17.3.0 image (#568) --- base/17.3.0/Dockerfile | 67 ++++++++++++++++++++++++++++++++++++++++++ base/17.3.0/README.md | 18 ++++++++++++ base/17.3.0/build.sh | 8 +++++ base/README.md | 3 +- circle.yml | 3 ++ 5 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 base/17.3.0/Dockerfile create mode 100644 base/17.3.0/README.md create mode 100755 base/17.3.0/build.sh diff --git a/base/17.3.0/Dockerfile b/base/17.3.0/Dockerfile new file mode 100644 index 0000000000..3d0f5bfb0a --- /dev/null +++ b/base/17.3.0/Dockerfile @@ -0,0 +1,67 @@ +# WARNING: this file was autogenerated by generate-base-image.js +# contains all dependencies for running Cypress.io Test Runner +# https://on.cypress.io/docker and https://on.cypress.io/ci +# +# build it with command +# docker build -t cypress/base:17.3.0 . +# +FROM node:17.3.0-buster + +RUN apt-get update && \ + apt-get install --no-install-recommends -y \ + libgtk2.0-0 \ + libgtk-3-0 \ + libnotify-dev \ + libgconf-2-4 \ + libgbm-dev \ + libnss3 \ + libxss1 \ + libasound2 \ + libxtst6 \ + xauth \ + xvfb \ + # install text editors + vim-tiny \ + nano \ + # install emoji font + fonts-noto-color-emoji \ + # install Chinese fonts + # this list was copied from https://github.com/jim3ma/docker-leanote + fonts-arphic-bkai00mp \ + fonts-arphic-bsmi00lp \ + fonts-arphic-gbsn00lp \ + fonts-arphic-gkai00mp \ + fonts-arphic-ukai \ + fonts-arphic-uming \ + ttf-wqy-zenhei \ + ttf-wqy-microhei \ + xfonts-wqy \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +RUN npm --version + +RUN npm install -g yarn@latest --force +RUN yarn --version + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM xterm +# avoid million NPM install messages +ENV npm_config_loglevel warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm true + +# Node libraries +RUN node -p process.versions + +# Show where Node loads required modules from +RUN node -p 'module.paths' + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" diff --git a/base/17.3.0/README.md b/base/17.3.0/README.md new file mode 100644 index 0000000000..459bd53806 --- /dev/null +++ b/base/17.3.0/README.md @@ -0,0 +1,18 @@ + +# cypress/base:17.3.0 + +A Docker image with all dependencies pre-installed. +Just add your NPM packages (including Cypress) and run the tests. +See [Cypress Docker docs](https://on.cypress.io/docker) and +[Cypress CI guide](https://on.cypress.io/ci). + +## Example + +Sample Dockerfile + +``` +FROM cypress/base:17.3.0 +RUN npm install --save-dev cypress +RUN $(npm bin)/cypress verify +RUN $(npm bin)/cypress run +``` diff --git a/base/17.3.0/build.sh b/base/17.3.0/build.sh new file mode 100755 index 0000000000..e263efcef0 --- /dev/null +++ b/base/17.3.0/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-base-image.js +set e+x + +# build image with Cypress dependencies +LOCAL_NAME=cypress/base:17.3.0 + +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/base/README.md b/base/README.md index f577befbc4..5a1d539ce3 100644 --- a/base/README.md +++ b/base/README.md @@ -66,7 +66,8 @@ Image `cypress/base:12` is tagged [`latest`](https://hub.docker.com/r/cypress/ba | cypress/base:16.3.0 | 16.3.0 | Debian 10.9 | [/16.3.0](16.3.0) | 7.10.0 | 1.22.10 | [1](#note1) | | cypress/base:16.4.0 | 16.4.0 | Debian 10.9 | [/16.4.0](16.4.0) | 7.10.0 | 1.22.10 | [1](#note1) | | cypress/base:16.5.0 | 16.5.0 | Debian 10.9 | [/16.5.0](16.5.0) | 7.10.0 | 1.22.10 | [1](#note1) | -| cypress/base:16.13.0 | 16.13.0 | Debian 10.9 | [/16.13.0](16.13.0) | 7.10.0 | 1.22.10 | [1](#note1) | +| cypress/base:16.13.0 | 16.13.0 | Debian 10.9 | [/16.13.0](16.13.0) | 7.10.0 | 1.22.10 | [1](#note1) | +| cypress/base:17.3.0 | 17.3.0 | Debian 10.9 | [/17.3.0](17.3.0) | 8.3.0 | 1.22.17 | [1](#note1) | | cypress/base:centos7 | 6 | CentOS | [/centos7](centos7) | 3.10.10 | 🚫 | | cypress/base:centos7-12.4.0 | 12.4.0 | CentOS | [/centos7](centos7) | 6.9.0 | 1.16.0 | | cypress/base:ubuntu16 | 6 | Ubuntu | [/ubuntu16](ubuntu16) | 3.10.10 | 🚫 | diff --git a/circle.yml b/circle.yml index 3670a6af2d..438455fe6f 100644 --- a/circle.yml +++ b/circle.yml @@ -558,6 +558,9 @@ workflows: - build-base-image: name: "base 16.5.0" dockerTag: "16.5.0" + - build-base-image: + name: "base 17.3.0" + dockerTag: "17.3.0" - build-base-image: name: "base manjaro-14.12.0" dockerTag: "manjaro-14.12.0" From 96dd6f1fc863a5a5916088af21ceb369e56fe067 Mon Sep 17 00:00:00 2001 From: Filipe Nunes Date: Thu, 6 Jan 2022 14:30:14 +0000 Subject: [PATCH 013/371] Add chrome96 and Firefox94 to existing node image (#557) Co-authored-by: Filipe Nunes --- browsers/node14.15.0-chrome96-ff94/Dockerfile | 53 +++++++++++++++++++ browsers/node14.15.0-chrome96-ff94/README.md | 19 +++++++ browsers/node14.15.0-chrome96-ff94/build.sh | 6 +++ buildspec.yml | 10 ++++ circle.yml | 5 ++ 5 files changed, 93 insertions(+) create mode 100644 browsers/node14.15.0-chrome96-ff94/Dockerfile create mode 100644 browsers/node14.15.0-chrome96-ff94/README.md create mode 100755 browsers/node14.15.0-chrome96-ff94/build.sh diff --git a/browsers/node14.15.0-chrome96-ff94/Dockerfile b/browsers/node14.15.0-chrome96-ff94/Dockerfile new file mode 100644 index 0000000000..50f8d80301 --- /dev/null +++ b/browsers/node14.15.0-chrome96-ff94/Dockerfile @@ -0,0 +1,53 @@ +FROM cypress/base:14.15.0 + +USER root + +RUN node --version + +# Chrome dependencies +RUN apt-get update +RUN apt-get install -y fonts-liberation libappindicator3-1 xdg-utils + +# install Chrome browser +ENV CHROME_VERSION 96.0.4664.45 +RUN wget -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}-1_amd64.deb" && \ + dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/google-chrome-stable_current_amd64.deb +RUN google-chrome --version + +# "fake" dbus address to prevent errors +# https://github.com/SeleniumHQ/docker-selenium/issues/87 +ENV DBUS_SESSION_BUS_ADDRESS=/dev/null + +# Add zip utility - it comes in very handy +RUN apt-get update && apt-get install -y zip + +# add codecs needed for video playback in firefox +# https://github.com/cypress-io/cypress-docker-images/issues/150 +RUN apt-get install mplayer -y + +# install Firefox browser +ARG FIREFOX_VERSION=94.0.2 +RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/$FIREFOX_VERSION/linux-x86_64/en-US/firefox-$FIREFOX_VERSION.tar.bz2 \ + && tar -C /opt -xjf /tmp/firefox.tar.bz2 \ + && rm /tmp/firefox.tar.bz2 \ + && ln -fs /opt/firefox/firefox /usr/bin/firefox + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "Chrome version: $(google-chrome --version) \n" \ + "Firefox version: $(firefox --version) \n" \ + "git version: $(git --version) \n" \ + "whoami: $(whoami) \n" + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM xterm +# avoid million NPM install messages +ENV npm_config_loglevel warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm true diff --git a/browsers/node14.15.0-chrome96-ff94/README.md b/browsers/node14.15.0-chrome96-ff94/README.md new file mode 100644 index 0000000000..745dce8545 --- /dev/null +++ b/browsers/node14.15.0-chrome96-ff94/README.md @@ -0,0 +1,19 @@ +# cypress/browsers:node14.15.0-chrome86-ff82 + +A complete image with all operating system dependencies for Cypress, Chrome +96 and Firefox 94 browsers. + +[Dockerfile](Dockerfile) + +```text +node version: v14.15.0 +npm version: 6.14.8 +yarn version: 1.22.10 +debian version: 10.6 +Chrome version: Google Chrome 96.0.4664.45 +Firefox version: Mozilla Firefox 94.0.2 +git version: git version 2.20.1 +``` + +**Note:** this image uses the `root` user. You might want to switch to non-root +user like `node` when running this container for security. diff --git a/browsers/node14.15.0-chrome96-ff94/build.sh b/browsers/node14.15.0-chrome96-ff94/build.sh new file mode 100755 index 0000000000..5f2a187f46 --- /dev/null +++ b/browsers/node14.15.0-chrome96-ff94/build.sh @@ -0,0 +1,6 @@ +set e+x + +LOCAL_NAME=cypress/browsers:node14.15.0-chrome96-ff94 + +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/buildspec.yml b/buildspec.yml index 83b8a63b44..fba70354e3 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -317,6 +317,16 @@ batch: IMAGE_REPO_NAME: "cypress/browsers" IMAGE_DIR: "browsers" IMAGE_TAG: "node14.15.0-chrome86-ff82" + - identifier: browsersnode14150Chrome96Ff94 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/browsers" + IMAGE_DIR: "browsers" + IMAGE_TAG: "node14.15.0-chrome96-ff94" - identifier: browsersnode14160Chrome89Ff77 env: image: aws/codebuild/standard:5.0 diff --git a/circle.yml b/circle.yml index 438455fe6f..61588f3964 100644 --- a/circle.yml +++ b/circle.yml @@ -611,6 +611,11 @@ workflows: dockerTag: "node14.15.0-chrome86-ff82" chromeVersion: "Google Chrome 86" firefoxVersion: "Mozilla Firefox 82" + - build-browser-image: + name: "browsers node14.15.0-chrome96-ff94" + dockerTag: "node14.15.0-chrome96-ff94" + chromeVersion: "Google Chrome 96" + firefoxVersion: "Mozilla Firefox 94" - build-browser-image: name: "browsers node14.16.0-chrome89-ff77" dockerTag: "node14.16.0-chrome89-ff77" From df81976a13da08fc5acfcc190c49340a2f6456cf Mon Sep 17 00:00:00 2001 From: Tatiana Shepeleva Date: Thu, 6 Jan 2022 17:31:08 +0300 Subject: [PATCH 014/371] Chore: add 12.22.8 base image (#569) --- base/12.22.8/Dockerfile | 67 +++++++++++++++++++++++++++++++++++++++++ base/12.22.8/README.md | 18 +++++++++++ base/12.22.8/build.sh | 8 +++++ base/README.md | 1 + buildspec.yml | 10 ++++++ circle.yml | 3 ++ 6 files changed, 107 insertions(+) create mode 100644 base/12.22.8/Dockerfile create mode 100644 base/12.22.8/README.md create mode 100755 base/12.22.8/build.sh diff --git a/base/12.22.8/Dockerfile b/base/12.22.8/Dockerfile new file mode 100644 index 0000000000..cce561ad83 --- /dev/null +++ b/base/12.22.8/Dockerfile @@ -0,0 +1,67 @@ +# WARNING: this file was autogenerated by generate-base-image.js +# contains all dependencies for running Cypress.io Test Runner +# https://on.cypress.io/docker and https://on.cypress.io/ci +# +# build it with command +# docker build -t cypress/base:12.22.8 . +# +FROM node:12.22.8-buster + +RUN apt-get update && \ + apt-get install --no-install-recommends -y \ + libgtk2.0-0 \ + libgtk-3-0 \ + libnotify-dev \ + libgconf-2-4 \ + libgbm-dev \ + libnss3 \ + libxss1 \ + libasound2 \ + libxtst6 \ + xauth \ + xvfb \ + # install text editors + vim-tiny \ + nano \ + # install emoji font + fonts-noto-color-emoji \ + # install Chinese fonts + # this list was copied from https://github.com/jim3ma/docker-leanote + fonts-arphic-bkai00mp \ + fonts-arphic-bsmi00lp \ + fonts-arphic-gbsn00lp \ + fonts-arphic-gkai00mp \ + fonts-arphic-ukai \ + fonts-arphic-uming \ + ttf-wqy-zenhei \ + ttf-wqy-microhei \ + xfonts-wqy \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +RUN npm --version + +RUN npm install -g yarn@latest --force +RUN yarn --version + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM xterm +# avoid million NPM install messages +ENV npm_config_loglevel warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm true + +# Node libraries +RUN node -p process.versions + +# Show where Node loads required modules from +RUN node -p 'module.paths' + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" diff --git a/base/12.22.8/README.md b/base/12.22.8/README.md new file mode 100644 index 0000000000..c2df48d071 --- /dev/null +++ b/base/12.22.8/README.md @@ -0,0 +1,18 @@ + +# cypress/base:12.22.8 + +A Docker image with all dependencies pre-installed. +Just add your NPM packages (including Cypress) and run the tests. +See [Cypress Docker docs](https://on.cypress.io/docker) and +[Cypress CI guide](https://on.cypress.io/ci). + +## Example + +Sample Dockerfile + +``` +FROM cypress/base:12.22.8 +RUN npm install --save-dev cypress +RUN $(npm bin)/cypress verify +RUN $(npm bin)/cypress run +``` diff --git a/base/12.22.8/build.sh b/base/12.22.8/build.sh new file mode 100755 index 0000000000..0986bf65b0 --- /dev/null +++ b/base/12.22.8/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-base-image.js +set e+x + +# build image with Cypress dependencies +LOCAL_NAME=cypress/base:12.22.8 + +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/base/README.md b/base/README.md index 5a1d539ce3..b88888ab76 100644 --- a/base/README.md +++ b/base/README.md @@ -46,6 +46,7 @@ Image `cypress/base:12` is tagged [`latest`](https://hub.docker.com/r/cypress/ba | cypress/base:12.18.3 | 12.18.3 | Debian 10.5 | [/12.18.3](12.18.3) | 6.14.8 | 1.22.4 | [1](#note1) | | cypress/base:12.18.4 | 12.18.4 | Debian 10.5 | [/12.18.4](12.18.4) | 6.14.8 | 1.22.10 | [1](#note1) | | cypress/base:12.19.0 | 12.19.0 | Debian 10.6 | [/12.19.0](12.19.0) | 6.14.8 | 1.22.10 | [1](#note1) | +| cypress/base:12.22.8 | 12.22.8 | Debian 10.11 | [/12.22.8](12.22.8) | 6.14.15 | 1.22.17 | [1](#note1) | | cypress/base:13.1.0 | 13.1.0 | Debian | [/13.1.0](13.1.0) | 6.13.1 | 1.19.1 | [1](#note1) | | cypress/base:13.3.0 | 13.3.0 | Debian | [/13.3.0](13.3.0) | 6.13.4 | 1.21.1 | [1](#note1) | | cypress/base:13.6.0 | 13.6.0 | Debian 10.2 | [/13.6.0](13.6.0) | 6.13.6 | 1.21.1 | [1](#note1) | diff --git a/buildspec.yml b/buildspec.yml index fba70354e3..7491879830 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -56,6 +56,16 @@ batch: IMAGE_REPO_NAME: "cypress/base" IMAGE_DIR: "base" IMAGE_TAG: "12.19.0" + - identifier: base12228 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/base" + IMAGE_DIR: "base" + IMAGE_TAG: "12.22.8" - identifier: base14101 env: image: aws/codebuild/standard:5.0 diff --git a/circle.yml b/circle.yml index 61588f3964..3c182090d7 100644 --- a/circle.yml +++ b/circle.yml @@ -510,6 +510,9 @@ workflows: - build-base-image: name: "base 12.19.0" dockerTag: "12.19.0" + - build-base-image: + name: "base 12.22.8" + dockerTag: "12.22.8" - build-base-image: name: "base 14.10.1" dockerTag: "14.10.1" From cca441214e565cefc40b6d843f35d3c50bc24149 Mon Sep 17 00:00:00 2001 From: Filipe Nunes Date: Fri, 7 Jan 2022 12:42:13 +0000 Subject: [PATCH 015/371] Fix README files on cypress/browsers:node14.15.0-chrome96-ff94 (#575) --- browsers/README.md | 1 + browsers/node14.15.0-chrome96-ff94/README.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/browsers/README.md b/browsers/README.md index 7b76dda835..b91cb24d7b 100644 --- a/browsers/README.md +++ b/browsers/README.md @@ -28,6 +28,7 @@ Name + Tag | Base image | Chrome | Firefox | Edge [cypress/browsers:node12.14.1-chrome85-ff81](./node12.14.1-chrome85-ff81) | `cypress/base:12.14.1` | `85.0.4183.121` | `81.0` [cypress/browsers:node14.10.1-edge88](./node14.10.1-edge88) | `cypress/base:14.10.1` | 🚫 | 🚫 | `88.0.673.0 dev` [cypress/browsers:node14.15.0-chrome86-ff82](./node14.15.0-chrome86-ff82) | `cypress/base:14.15.0` | `86.0.4240.193` | `82.0.3` +[cypress/browsers:node14.15.0-chrome96-ff94](./node14.15.0-chrome86-ff82) | `cypress/base:14.15.0` | `96.0.4664.45` | `94.0.2` [cypress/browsers:node14.17.0-chrome88-ff89](./node14.17.0-chrome88-ff89) | `cypress/base:14.17.0` | `88.0.4324.96` | `89.0.2` [cypress/browsers:node14.16.0-chrome89-ff77](./node14.16.0-chrome89-ff77) | `cypress/base:14.16.0` | `89.0.4389.72` | `77.0` [cypress/browsers:node14.16.0-chrome89-ff86](./node14.16.0-chrome89-ff86) | `cypress/base:14.16.0` | `89.0.4389.72` | `86.0.1` diff --git a/browsers/node14.15.0-chrome96-ff94/README.md b/browsers/node14.15.0-chrome96-ff94/README.md index 745dce8545..5c51cf0a0f 100644 --- a/browsers/node14.15.0-chrome96-ff94/README.md +++ b/browsers/node14.15.0-chrome96-ff94/README.md @@ -1,4 +1,4 @@ -# cypress/browsers:node14.15.0-chrome86-ff82 +# cypress/browsers:node14.15.0-chrome96-ff94 A complete image with all operating system dependencies for Cypress, Chrome 96 and Firefox 94 browsers. From 707ec1d1e9657d4b4ecd1d06e813214453bcded0 Mon Sep 17 00:00:00 2001 From: Alexander Zheka <64766323+AlexanderZheka@users.noreply.github.com> Date: Fri, 7 Jan 2022 19:25:28 +0100 Subject: [PATCH 016/371] Add chrome 95, ff 94 and node 16.13.0 platform (#554) --- browsers/README.md | 1 + browsers/node16.13.0-chrome95-ff94/Dockerfile | 53 +++++++++++++++++++ browsers/node16.13.0-chrome95-ff94/README.md | 20 +++++++ browsers/node16.13.0-chrome95-ff94/build.sh | 6 +++ buildspec.yml | 14 ++++- circle.yml | 7 +++ 6 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 browsers/node16.13.0-chrome95-ff94/Dockerfile create mode 100644 browsers/node16.13.0-chrome95-ff94/README.md create mode 100755 browsers/node16.13.0-chrome95-ff94/build.sh diff --git a/browsers/README.md b/browsers/README.md index b91cb24d7b..bc30bfd30b 100644 --- a/browsers/README.md +++ b/browsers/README.md @@ -34,6 +34,7 @@ Name + Tag | Base image | Chrome | Firefox | Edge [cypress/browsers:node14.16.0-chrome89-ff86](./node14.16.0-chrome89-ff86) | `cypress/base:14.16.0` | `89.0.4389.72` | `86.0.1` [cypress/browsers:node14.17.0-chrome91-ff89](./node14.17.0-chrome91-ff89) | `cypress/base:14.17.0` | `91.0.4472.114` | `89.0.2` [cypress/browsers:node16.5.0-chrome94-ff93](./node16.5.0-chrome94-ff93) | `cypress/base:16.5.0` | `94.0.4606.71` | `93.0` +[cypress/browsers:node16.13.0-chrome95-ff94](./node16.13.0-chrome95-ff94) | `cypress/base:16.13.0` | `95.0.4638.69` | `94.0` To find the available Chrome versions, check [https://chromium.cypress.io/](https://chromium.cypress.io/). diff --git a/browsers/node16.13.0-chrome95-ff94/Dockerfile b/browsers/node16.13.0-chrome95-ff94/Dockerfile new file mode 100644 index 0000000000..968a2131c8 --- /dev/null +++ b/browsers/node16.13.0-chrome95-ff94/Dockerfile @@ -0,0 +1,53 @@ +FROM cypress/base:16.13.0 + +USER root + +RUN node --version + +# Chrome dependencies +RUN apt-get update +RUN apt-get install -y fonts-liberation libappindicator3-1 xdg-utils + +# install Chrome browser +ENV CHROME_VERSION 95.0.4638.69 +RUN wget -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}-1_amd64.deb" && \ + dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/google-chrome-stable_current_amd64.deb +RUN google-chrome --version + +# "fake" dbus address to prevent errors +# https://github.com/SeleniumHQ/docker-selenium/issues/87 +ENV DBUS_SESSION_BUS_ADDRESS=/dev/null + +# Add zip utility - it comes in very handy +RUN apt-get update && apt-get install -y zip + +# add codecs needed for video playback in firefox +# https://github.com/cypress-io/cypress-docker-images/issues/150 +RUN apt-get install mplayer -y + +# install Firefox browser +ARG FIREFOX_VERSION=94.0 +RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/$FIREFOX_VERSION/linux-x86_64/en-US/firefox-$FIREFOX_VERSION.tar.bz2 \ + && tar -C /opt -xjf /tmp/firefox.tar.bz2 \ + && rm /tmp/firefox.tar.bz2 \ + && ln -fs /opt/firefox/firefox /usr/bin/firefox + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "Chrome version: $(google-chrome --version) \n" \ + "Firefox version: $(firefox --version) \n" \ + "git version: $(git --version) \n" \ + "whoami: $(whoami) \n" + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM xterm +# avoid million NPM install messages +ENV npm_config_loglevel warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm true diff --git a/browsers/node16.13.0-chrome95-ff94/README.md b/browsers/node16.13.0-chrome95-ff94/README.md new file mode 100644 index 0000000000..7af806dcdf --- /dev/null +++ b/browsers/node16.13.0-chrome95-ff94/README.md @@ -0,0 +1,20 @@ +# cypress/browsers:node16.13.0-chrome95-ff94 + +A complete image with all operating system dependencies for Cypress, Chrome +95 and Firefox 94 browsers. + +[Dockerfile](Dockerfile) + +```text + node version: v16.13.0 + npm version: 8.1.0 + yarn version: 1.22.17 + debian version: 10.11 + Chrome version: Google Chrome 95.0.4638.69 + Firefox version: Mozilla Firefox 94.0 + git version: git version 2.20.1 + whoami: root +``` + +**Note:** this image uses the `root` user. You might want to switch to non-root +user like `node` when running this container for security. diff --git a/browsers/node16.13.0-chrome95-ff94/build.sh b/browsers/node16.13.0-chrome95-ff94/build.sh new file mode 100755 index 0000000000..e02f2e3fd0 --- /dev/null +++ b/browsers/node16.13.0-chrome95-ff94/build.sh @@ -0,0 +1,6 @@ +set e+x + +LOCAL_NAME=cypress/browsers:node16.13.0-chrome95-ff94 + +echo "Building $LOCAL_NAME" +docker build --no-cache -t $LOCAL_NAME . diff --git a/buildspec.yml b/buildspec.yml index 7491879830..dceca95ed8 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -397,6 +397,16 @@ batch: IMAGE_REPO_NAME: "cypress/browsers" IMAGE_DIR: "browsers" IMAGE_TAG: "node14.7.0-chrome84" + - identifier: browsersnode16130Chrome95Ff94 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/browsers" + IMAGE_DIR: "browsers" + IMAGE_TAG: "node16.13.0-chrome95-ff94" - identifier: browsersnode1650Chrome94Ff93 env: image: aws/codebuild/standard:5.0 @@ -1140,11 +1150,11 @@ phases: - aws ecr-public get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin public.ecr.aws/$PUBLIC_ECR_ALIAS build: commands: - - echo Building the Docker image... + - echo Building the Docker image... - cd $IMAGE_DIR/$IMAGE_TAG - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG post_build: commands: - echo Pushing the Docker image... - - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG + - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG \ No newline at end of file diff --git a/circle.yml b/circle.yml index 3c182090d7..e9de1237bf 100644 --- a/circle.yml +++ b/circle.yml @@ -183,6 +183,7 @@ commands: FROM << parameters.imageName >> RUN echo "current user: $(whoami)" ENV CI=1 + WORKDIR /app RUN npm init --yes RUN npm install --save-dev cypress RUN ./node_modules/.bin/cypress verify @@ -227,6 +228,7 @@ commands: RUN echo "current user: $(whoami)" ENV CI=1 ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 + WORKDIR /app RUN npm init --yes RUN npm install --save-dev cypress RUN ./node_modules/.bin/cypress verify @@ -648,6 +650,11 @@ workflows: name: "browsers node14.7.0-chrome84" dockerTag: "node14.7.0-chrome84" chromeVersion: "Google Chrome 84" + - build-browser-image: + name: "browsers node16.13.0-chrome95-ff94" + dockerTag: "node16.13.0-chrome95-ff94" + chromeVersion: "Google Chrome 95" + firefoxVersion: "Mozilla Firefox 94" - build-browser-image: name: "browsers node16.5.0-chrome94-ff93" dockerTag: "node16.5.0-chrome94-ff93" From 08f007f1fdb59edf884409b42ca6420c16d7ff22 Mon Sep 17 00:00:00 2001 From: Ryan Manuel Date: Mon, 10 Jan 2022 16:11:20 -0600 Subject: [PATCH 017/371] included 9.2.1 (#577) --- buildspec.yml | 20 + circle.yml | 5 +- included/9.2.1/Dockerfile | 69 +++ included/9.2.1/README.md | 18 + included/9.2.1/build.sh | 8 + included/README.md | 1 + package-lock.json | 1107 +------------------------------------ 7 files changed, 120 insertions(+), 1108 deletions(-) create mode 100644 included/9.2.1/Dockerfile create mode 100644 included/9.2.1/README.md create mode 100755 included/9.2.1/build.sh diff --git a/buildspec.yml b/buildspec.yml index dceca95ed8..ff3c4265ab 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -226,6 +226,16 @@ batch: IMAGE_REPO_NAME: "cypress/base" IMAGE_DIR: "base" IMAGE_TAG: "16.5.0" + - identifier: base1730 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/base" + IMAGE_DIR: "base" + IMAGE_TAG: "17.3.0" - identifier: basemanjaro14120 env: image: aws/codebuild/standard:5.0 @@ -1138,6 +1148,16 @@ batch: IMAGE_REPO_NAME: "cypress/included" IMAGE_DIR: "included" IMAGE_TAG: "9.2.0" + - identifier: included921 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/included" + IMAGE_DIR: "included" + IMAGE_TAG: "9.2.1" phases: pre_build: diff --git a/circle.yml b/circle.yml index e9de1237bf..911624349b 100644 --- a/circle.yml +++ b/circle.yml @@ -183,7 +183,6 @@ commands: FROM << parameters.imageName >> RUN echo "current user: $(whoami)" ENV CI=1 - WORKDIR /app RUN npm init --yes RUN npm install --save-dev cypress RUN ./node_modules/.bin/cypress verify @@ -228,7 +227,6 @@ commands: RUN echo "current user: $(whoami)" ENV CI=1 ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 - WORKDIR /app RUN npm init --yes RUN npm install --save-dev cypress RUN ./node_modules/.bin/cypress verify @@ -768,3 +766,6 @@ workflows: - build-included-image: name: "included 9.2.0" dockerTag: "9.2.0" + - build-included-image: + name: "included 9.2.1" + dockerTag: "9.2.1" diff --git a/included/9.2.1/Dockerfile b/included/9.2.1/Dockerfile new file mode 100644 index 0000000000..556fdda105 --- /dev/null +++ b/included/9.2.1/Dockerfile @@ -0,0 +1,69 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.2.1 cypress/browsers:node16.5.0-chrome94-ff93 +# +# build this image with command +# docker build -t cypress/included:9.2.1 . +# +FROM cypress/browsers:node16.5.0-chrome94-ff93 + +# Update the dependencies to get the latest and greatest (and safest!) packages. +RUN apt update && apt upgrade -y + +# avoid too many progress messages +# https://github.com/cypress-io/cypress/issues/1243 +ENV CI=1 + +# disable shared memory X11 affecting Cypress v4 and Chrome +# https://github.com/cypress-io/cypress-docker-images/issues/270 +ENV QT_X11_NO_MITSHM=1 +ENV _X11_NO_MITSHM=1 +ENV _MITSHM=0 + +# should be root user +RUN echo "whoami: $(whoami)" +RUN npm config -g set user $(whoami) + +# command "id" should print: +# uid=0(root) gid=0(root) groups=0(root) +# which means the current user is root +RUN id + +# point Cypress at the /root/cache no matter what user account is used +# see https://on.cypress.io/caching +ENV CYPRESS_CACHE_FOLDER=/root/.cache/Cypress +RUN npm install -g "cypress@9.2.1" +RUN cypress verify + +# Cypress cache and installed version +# should be in the root user's home folder +RUN cypress cache path +RUN cypress cache list +RUN cypress info +RUN cypress version + +# give every user read access to the "/root" folder where the binary is cached +# we really only need to worry about the top folder, fortunately +RUN ls -la /root +RUN chmod 755 /root + +# always grab the latest Yarn +# otherwise the base image might have old versions +# NPM does not need to be installed as it is already included with Node. +RUN npm i -g yarn@latest + +# Show where Node loads required modules from +RUN node -p 'module.paths' + +# should print Cypress version +# plus Electron and bundled Node versions +RUN cypress version +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" \ + "chrome: $(google-chrome --version || true) \n" \ + "firefox: $(firefox --version || true) \n" + +ENTRYPOINT ["cypress", "run"] diff --git a/included/9.2.1/README.md b/included/9.2.1/README.md new file mode 100644 index 0000000000..1183c52197 --- /dev/null +++ b/included/9.2.1/README.md @@ -0,0 +1,18 @@ + + +# cypress/included:9.2.1 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.2.1 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/9.2.1/build.sh b/included/9.2.1/build.sh new file mode 100755 index 0000000000..3426fbfbff --- /dev/null +++ b/included/9.2.1/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.2.1 cypress/browsers:node16.5.0-chrome94-ff93 +set e+x + +LOCAL_NAME=cypress/included:9.2.1 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/included/README.md b/included/README.md index 2e30230b55..ad44dbe844 100644 --- a/included/README.md +++ b/included/README.md @@ -78,6 +78,7 @@ Name + Tag | Base image [cypress/included:9.1.0](9.1.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.1.1](9.1.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.2.1](9.2.1) | `cypress/browsers:node16.5.0-chrome94-ff93` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: diff --git a/package-lock.json b/package-lock.json index 92554b5cb0..2291d425f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,1113 +1,8 @@ { "name": "cypress-docker-images", "version": "1.0.0", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "globby": "10.0.1", - "markdown-link-check": "3.8.0", - "semver": "7.1.3", - "shelljs": "0.8.3", - "slugify": "^1.4.7" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "node_modules/@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "dependencies": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.2.tgz", - "integrity": "sha512-B8emQA1qeKerqd1dmIsQYnXi+mmAzTB7flExjmy5X1aVAKFNNNDubkavwR13kR6JnpeLp3aLoJhwn9trWPAyFQ==", - "dev": true - }, - "node_modules/ajv": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", - "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/async": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/async/-/async-3.1.1.tgz", - "integrity": "sha512-X5Dj8hK1pJNC2Wzo2Rcp9FBVdJMGRR/S7V+lH46s8GVFhtbo5O4Le5GECCF/8PISVdkUA6mMPvgz7qTTD1rf1g==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz", - "integrity": "sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", - "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", - "dev": true, - "dependencies": { - "reusify": "^1.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", - "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "dependencies": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-relative-url": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-relative-url/-/is-relative-url-3.0.0.tgz", - "integrity": "sha512-U1iSYRlY2GIMGuZx7gezlB5dp1Kheaym7zKzO1PV06mOihiWTXejLwm4poEJysPyXF+HtK/BEd0DVlcCh30pEA==", - "dev": true, - "dependencies": { - "is-absolute-url": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "dev": true, - "dependencies": { - "punycode": "2.x.x" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "node_modules/link-check": { - "version": "4.4.7", - "resolved": "https://registry.npmjs.org/link-check/-/link-check-4.4.7.tgz", - "integrity": "sha512-E5MJf3+4OiHJzqDw9CQpOeJT3yOoKUxLHVaPPzNPXvaYPJ20C5MRzk1lPoojWnf5xwoRZjK+ydzfq2kPTwJr/g==", - "dev": true, - "dependencies": { - "is-relative-url": "^3.0.0", - "isemail": "^3.2.0", - "ms": "^2.1.2", - "request": "^2.88.0" - } - }, - "node_modules/lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "node_modules/markdown-link-check": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/markdown-link-check/-/markdown-link-check-3.8.0.tgz", - "integrity": "sha512-tpBlUsnJfJ5xMHAjBC/10s8Un/WT/FmF+xXaZjeaegESmjcPlEcxZ+UuCtxArETovLS5gZ8lZXzdhgslHziLsg==", - "dev": true, - "dependencies": { - "async": "^3.1.0", - "chalk": "^2.4.2", - "commander": "^3.0.2", - "link-check": "^4.4.6", - "lodash": "^4.17.15", - "markdown-link-extractor": "^1.2.2", - "progress": "^2.0.3", - "request": "^2.88.0" - }, - "bin": { - "markdown-link-check": "markdown-link-check" - } - }, - "node_modules/markdown-link-extractor": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/markdown-link-extractor/-/markdown-link-extractor-1.2.2.tgz", - "integrity": "sha512-VYDUhlC70hKl0coCY6dXyJ4OCRAX5dTh0/oSTdidhYS7dYIJ9kYAez6KR0vc3HWySMuo564J1rN0NOAPBDI0iA==", - "dev": true, - "dependencies": { - "marked": "^0.7.0" - } - }, - "node_modules/marked": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", - "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==", - "dev": true, - "bin": { - "marked": "bin/marked" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/merge2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", - "dev": true, - "dependencies": { - "mime-db": "1.43.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", - "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==", - "dev": true, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/psl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", - "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/resolve": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz", - "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.6" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/semver": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.3.tgz", - "integrity": "sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shelljs": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", - "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slugify": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.7.tgz", - "integrity": "sha512-tf+h5W1IrjNm/9rKKj0JU2MDMruiopx0jjVA5zCdBtcGjfp0+c5rHw/zADLC3IeKlGHtVbHtpfzvYA0OYT+HKg==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "node_modules/uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - } - }, "dependencies": { "@nodelib/fs.scandir": { "version": "2.1.3", From 04752e01e14879a538709d42a63785c7d29de89c Mon Sep 17 00:00:00 2001 From: Tyler Biethman Date: Tue, 18 Jan 2022 18:07:01 -0600 Subject: [PATCH 018/371] included 9.3.0 (#581) * included 9.3.0 --- buildspec.yml | 10 ++++++ circle.yml | 3 ++ included/9.3.0/Dockerfile | 69 +++++++++++++++++++++++++++++++++++++++ included/9.3.0/README.md | 18 ++++++++++ included/9.3.0/build.sh | 8 +++++ included/README.md | 1 + 6 files changed, 109 insertions(+) create mode 100644 included/9.3.0/Dockerfile create mode 100644 included/9.3.0/README.md create mode 100755 included/9.3.0/build.sh diff --git a/buildspec.yml b/buildspec.yml index ff3c4265ab..474085ad21 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -1158,6 +1158,16 @@ batch: IMAGE_REPO_NAME: "cypress/included" IMAGE_DIR: "included" IMAGE_TAG: "9.2.1" + - identifier: included930 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/included" + IMAGE_DIR: "included" + IMAGE_TAG: "9.3.0" phases: pre_build: diff --git a/circle.yml b/circle.yml index 911624349b..c097c07e8f 100644 --- a/circle.yml +++ b/circle.yml @@ -769,3 +769,6 @@ workflows: - build-included-image: name: "included 9.2.1" dockerTag: "9.2.1" + - build-included-image: + name: "included 9.3.0" + dockerTag: "9.3.0" diff --git a/included/9.3.0/Dockerfile b/included/9.3.0/Dockerfile new file mode 100644 index 0000000000..6d3a157cdd --- /dev/null +++ b/included/9.3.0/Dockerfile @@ -0,0 +1,69 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.3.0 cypress/browsers:node16.5.0-chrome94-ff93 +# +# build this image with command +# docker build -t cypress/included:9.3.0 . +# +FROM cypress/browsers:node16.5.0-chrome94-ff93 + +# Update the dependencies to get the latest and greatest (and safest!) packages. +RUN apt update && apt upgrade -y + +# avoid too many progress messages +# https://github.com/cypress-io/cypress/issues/1243 +ENV CI=1 + +# disable shared memory X11 affecting Cypress v4 and Chrome +# https://github.com/cypress-io/cypress-docker-images/issues/270 +ENV QT_X11_NO_MITSHM=1 +ENV _X11_NO_MITSHM=1 +ENV _MITSHM=0 + +# should be root user +RUN echo "whoami: $(whoami)" +RUN npm config -g set user $(whoami) + +# command "id" should print: +# uid=0(root) gid=0(root) groups=0(root) +# which means the current user is root +RUN id + +# point Cypress at the /root/cache no matter what user account is used +# see https://on.cypress.io/caching +ENV CYPRESS_CACHE_FOLDER=/root/.cache/Cypress +RUN npm install -g "cypress@9.3.0" +RUN cypress verify + +# Cypress cache and installed version +# should be in the root user's home folder +RUN cypress cache path +RUN cypress cache list +RUN cypress info +RUN cypress version + +# give every user read access to the "/root" folder where the binary is cached +# we really only need to worry about the top folder, fortunately +RUN ls -la /root +RUN chmod 755 /root + +# always grab the latest Yarn +# otherwise the base image might have old versions +# NPM does not need to be installed as it is already included with Node. +RUN npm i -g yarn@latest + +# Show where Node loads required modules from +RUN node -p 'module.paths' + +# should print Cypress version +# plus Electron and bundled Node versions +RUN cypress version +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" \ + "chrome: $(google-chrome --version || true) \n" \ + "firefox: $(firefox --version || true) \n" + +ENTRYPOINT ["cypress", "run"] diff --git a/included/9.3.0/README.md b/included/9.3.0/README.md new file mode 100644 index 0000000000..337bc10ffb --- /dev/null +++ b/included/9.3.0/README.md @@ -0,0 +1,18 @@ + + +# cypress/included:9.3.0 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.3.0 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/9.3.0/build.sh b/included/9.3.0/build.sh new file mode 100755 index 0000000000..77aff08ae8 --- /dev/null +++ b/included/9.3.0/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.3.0 cypress/browsers:node16.5.0-chrome94-ff93 +set e+x + +LOCAL_NAME=cypress/included:9.3.0 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/included/README.md b/included/README.md index ad44dbe844..7fcdfcad02 100644 --- a/included/README.md +++ b/included/README.md @@ -79,6 +79,7 @@ Name + Tag | Base image [cypress/included:9.1.1](9.1.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.2.1](9.2.1) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.3.0](9.3.0) | `cypress/browsers:node16.5.0-chrome94-ff93` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: From 57b120a5c39ff9599b440b98f3b1100bfbeceda6 Mon Sep 17 00:00:00 2001 From: Matt Henkes Date: Wed, 19 Jan 2022 00:31:25 -0600 Subject: [PATCH 019/371] included 9.3.1 (#582) * included 9.3.1 * Update included/README.md Co-authored-by: Tyler Biethman Co-authored-by: Tyler Biethman --- buildspec.yml | 10 ++++++ circle.yml | 3 ++ included/9.3.1/Dockerfile | 69 +++++++++++++++++++++++++++++++++++++++ included/9.3.1/README.md | 18 ++++++++++ included/9.3.1/build.sh | 8 +++++ included/README.md | 1 + 6 files changed, 109 insertions(+) create mode 100644 included/9.3.1/Dockerfile create mode 100644 included/9.3.1/README.md create mode 100755 included/9.3.1/build.sh diff --git a/buildspec.yml b/buildspec.yml index 474085ad21..6dbb5f7d33 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -1168,6 +1168,16 @@ batch: IMAGE_REPO_NAME: "cypress/included" IMAGE_DIR: "included" IMAGE_TAG: "9.3.0" + - identifier: included931 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/included" + IMAGE_DIR: "included" + IMAGE_TAG: "9.3.1" phases: pre_build: diff --git a/circle.yml b/circle.yml index c097c07e8f..d5bd4984ad 100644 --- a/circle.yml +++ b/circle.yml @@ -772,3 +772,6 @@ workflows: - build-included-image: name: "included 9.3.0" dockerTag: "9.3.0" + - build-included-image: + name: "included 9.3.1" + dockerTag: "9.3.1" diff --git a/included/9.3.1/Dockerfile b/included/9.3.1/Dockerfile new file mode 100644 index 0000000000..5acdb8364c --- /dev/null +++ b/included/9.3.1/Dockerfile @@ -0,0 +1,69 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.3.1 cypress/browsers:node16.5.0-chrome94-ff93 +# +# build this image with command +# docker build -t cypress/included:9.3.1 . +# +FROM cypress/browsers:node16.5.0-chrome94-ff93 + +# Update the dependencies to get the latest and greatest (and safest!) packages. +RUN apt update && apt upgrade -y + +# avoid too many progress messages +# https://github.com/cypress-io/cypress/issues/1243 +ENV CI=1 + +# disable shared memory X11 affecting Cypress v4 and Chrome +# https://github.com/cypress-io/cypress-docker-images/issues/270 +ENV QT_X11_NO_MITSHM=1 +ENV _X11_NO_MITSHM=1 +ENV _MITSHM=0 + +# should be root user +RUN echo "whoami: $(whoami)" +RUN npm config -g set user $(whoami) + +# command "id" should print: +# uid=0(root) gid=0(root) groups=0(root) +# which means the current user is root +RUN id + +# point Cypress at the /root/cache no matter what user account is used +# see https://on.cypress.io/caching +ENV CYPRESS_CACHE_FOLDER=/root/.cache/Cypress +RUN npm install -g "cypress@9.3.1" +RUN cypress verify + +# Cypress cache and installed version +# should be in the root user's home folder +RUN cypress cache path +RUN cypress cache list +RUN cypress info +RUN cypress version + +# give every user read access to the "/root" folder where the binary is cached +# we really only need to worry about the top folder, fortunately +RUN ls -la /root +RUN chmod 755 /root + +# always grab the latest Yarn +# otherwise the base image might have old versions +# NPM does not need to be installed as it is already included with Node. +RUN npm i -g yarn@latest + +# Show where Node loads required modules from +RUN node -p 'module.paths' + +# should print Cypress version +# plus Electron and bundled Node versions +RUN cypress version +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" \ + "chrome: $(google-chrome --version || true) \n" \ + "firefox: $(firefox --version || true) \n" + +ENTRYPOINT ["cypress", "run"] diff --git a/included/9.3.1/README.md b/included/9.3.1/README.md new file mode 100644 index 0000000000..1cc1431732 --- /dev/null +++ b/included/9.3.1/README.md @@ -0,0 +1,18 @@ + + +# cypress/included:9.3.1 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.3.1 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/9.3.1/build.sh b/included/9.3.1/build.sh new file mode 100755 index 0000000000..55a03be939 --- /dev/null +++ b/included/9.3.1/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.3.1 cypress/browsers:node16.5.0-chrome94-ff93 +set e+x + +LOCAL_NAME=cypress/included:9.3.1 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/included/README.md b/included/README.md index 7fcdfcad02..15db54355a 100644 --- a/included/README.md +++ b/included/README.md @@ -80,6 +80,7 @@ Name + Tag | Base image [cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.2.1](9.2.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.3.0](9.3.0) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.3.1](9.3.1) | `cypress/browsers:node16.5.0-chrome94-ff93` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: From e19b0f752111cbb1e4479e5c6a7a4883a6699402 Mon Sep 17 00:00:00 2001 From: Tyler Biethman Date: Fri, 28 Jan 2022 15:42:49 -0600 Subject: [PATCH 020/371] Adding node16.5.0-chrome97-ff96 image (#585) --- browsers/README.md | 1 + browsers/node16.5.0-chrome97-ff96/Dockerfile | 53 ++++++++++++++++++++ browsers/node16.5.0-chrome97-ff96/README.md | 20 ++++++++ browsers/node16.5.0-chrome97-ff96/build.sh | 6 +++ buildspec.yml | 10 ++++ circle.yml | 7 +++ 6 files changed, 97 insertions(+) create mode 100644 browsers/node16.5.0-chrome97-ff96/Dockerfile create mode 100644 browsers/node16.5.0-chrome97-ff96/README.md create mode 100755 browsers/node16.5.0-chrome97-ff96/build.sh diff --git a/browsers/README.md b/browsers/README.md index bc30bfd30b..9db6f02e9a 100644 --- a/browsers/README.md +++ b/browsers/README.md @@ -34,6 +34,7 @@ Name + Tag | Base image | Chrome | Firefox | Edge [cypress/browsers:node14.16.0-chrome89-ff86](./node14.16.0-chrome89-ff86) | `cypress/base:14.16.0` | `89.0.4389.72` | `86.0.1` [cypress/browsers:node14.17.0-chrome91-ff89](./node14.17.0-chrome91-ff89) | `cypress/base:14.17.0` | `91.0.4472.114` | `89.0.2` [cypress/browsers:node16.5.0-chrome94-ff93](./node16.5.0-chrome94-ff93) | `cypress/base:16.5.0` | `94.0.4606.71` | `93.0` +[cypress/browsers:node16.5.0-chrome97-ff96](./node16.5.0-chrome97-ff96) | `cypress/base:16.5.0` | `97.0.4692.71` | `96.0.3` [cypress/browsers:node16.13.0-chrome95-ff94](./node16.13.0-chrome95-ff94) | `cypress/base:16.13.0` | `95.0.4638.69` | `94.0` To find the available Chrome versions, check [https://chromium.cypress.io/](https://chromium.cypress.io/). diff --git a/browsers/node16.5.0-chrome97-ff96/Dockerfile b/browsers/node16.5.0-chrome97-ff96/Dockerfile new file mode 100644 index 0000000000..120ac8f28c --- /dev/null +++ b/browsers/node16.5.0-chrome97-ff96/Dockerfile @@ -0,0 +1,53 @@ +FROM cypress/base:16.5.0 + +USER root + +RUN node --version + +# Chrome dependencies +RUN apt-get update +RUN apt-get install -y fonts-liberation libappindicator3-1 xdg-utils + +# install Chrome browser +ENV CHROME_VERSION 97.0.4692.71 +RUN wget -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}-1_amd64.deb" && \ + dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/google-chrome-stable_current_amd64.deb +RUN google-chrome --version + +# "fake" dbus address to prevent errors +# https://github.com/SeleniumHQ/docker-selenium/issues/87 +ENV DBUS_SESSION_BUS_ADDRESS=/dev/null + +# Add zip utility - it comes in very handy +RUN apt-get update && apt-get install -y zip + +# add codecs needed for video playback in firefox +# https://github.com/cypress-io/cypress-docker-images/issues/150 +RUN apt-get install mplayer -y + +# install Firefox browser +ARG FIREFOX_VERSION=96.0.3 +RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/$FIREFOX_VERSION/linux-x86_64/en-US/firefox-$FIREFOX_VERSION.tar.bz2 \ + && tar -C /opt -xjf /tmp/firefox.tar.bz2 \ + && rm /tmp/firefox.tar.bz2 \ + && ln -fs /opt/firefox/firefox /usr/bin/firefox + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "Chrome version: $(google-chrome --version) \n" \ + "Firefox version: $(firefox --version) \n" \ + "git version: $(git --version) \n" \ + "whoami: $(whoami) \n" + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM xterm +# avoid million NPM install messages +ENV npm_config_loglevel warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm true diff --git a/browsers/node16.5.0-chrome97-ff96/README.md b/browsers/node16.5.0-chrome97-ff96/README.md new file mode 100644 index 0000000000..21338ea564 --- /dev/null +++ b/browsers/node16.5.0-chrome97-ff96/README.md @@ -0,0 +1,20 @@ +# cypress/browsers:node16.5.0-chrome97-ff96 + +A complete image with all operating system dependencies for Cypress, Chrome +94 and Firefox 93 browsers. + +[Dockerfile](Dockerfile) + +```text + node version: v16.5.0 + npm version: 7.19.1 + yarn version: 1.22.15 + debian version: 10.10 + Chrome version: Google Chrome 97.0.4692.71 + Firefox version: Mozilla Firefox 96.0.3 + git version: git version 2.20.1 + whoami: root +``` + +**Note:** this image uses the `root` user. You might want to switch to non-root +user like `node` when running this container for security. diff --git a/browsers/node16.5.0-chrome97-ff96/build.sh b/browsers/node16.5.0-chrome97-ff96/build.sh new file mode 100755 index 0000000000..8307d2599d --- /dev/null +++ b/browsers/node16.5.0-chrome97-ff96/build.sh @@ -0,0 +1,6 @@ +set e+x + +LOCAL_NAME=cypress/browsers:node16.5.0-chrome97-ff96 + +echo "Building $LOCAL_NAME" +docker build --no-cache -t $LOCAL_NAME . diff --git a/buildspec.yml b/buildspec.yml index 6dbb5f7d33..3eb3253eda 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -427,6 +427,16 @@ batch: IMAGE_REPO_NAME: "cypress/browsers" IMAGE_DIR: "browsers" IMAGE_TAG: "node16.5.0-chrome94-ff93" + - identifier: browsersnode1650Chrome97Ff96 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/browsers" + IMAGE_DIR: "browsers" + IMAGE_TAG: "node16.5.0-chrome97-ff96" - identifier: included320 env: diff --git a/circle.yml b/circle.yml index d5bd4984ad..3556da13f2 100644 --- a/circle.yml +++ b/circle.yml @@ -183,6 +183,7 @@ commands: FROM << parameters.imageName >> RUN echo "current user: $(whoami)" ENV CI=1 + WORKDIR /app RUN npm init --yes RUN npm install --save-dev cypress RUN ./node_modules/.bin/cypress verify @@ -227,6 +228,7 @@ commands: RUN echo "current user: $(whoami)" ENV CI=1 ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 + WORKDIR /app RUN npm init --yes RUN npm install --save-dev cypress RUN ./node_modules/.bin/cypress verify @@ -658,6 +660,11 @@ workflows: dockerTag: "node16.5.0-chrome94-ff93" chromeVersion: "Google Chrome 94" firefoxVersion: "Mozilla Firefox 93" + - build-browser-image: + name: "browsers node16.5.0-chrome97-ff96" + dockerTag: "node16.5.0-chrome97-ff96" + chromeVersion: "Google Chrome 97" + firefoxVersion: "Mozilla Firefox 96" build-included-images: jobs: From 49a8f0fb8407e884cb4b06cd0a52d4eb70427bbb Mon Sep 17 00:00:00 2001 From: jscontrino Date: Mon, 31 Jan 2022 20:10:53 +0100 Subject: [PATCH 021/371] Add Node 16.13.2 Base Image / Chrome97 + Firefox 96 Browser Image (#583) --- base/16.13.2/Dockerfile | 67 +++++++++++++++++++ base/16.13.2/README.md | 18 +++++ base/16.13.2/build.sh | 8 +++ base/README.md | 1 + browsers/node16.13.2-chrome97-ff96/Dockerfile | 53 +++++++++++++++ browsers/node16.13.2-chrome97-ff96/README.md | 20 ++++++ browsers/node16.13.2-chrome97-ff96/build.sh | 6 ++ buildspec.yml | 20 ++++++ circle.yml | 8 +++ 9 files changed, 201 insertions(+) create mode 100644 base/16.13.2/Dockerfile create mode 100644 base/16.13.2/README.md create mode 100755 base/16.13.2/build.sh create mode 100644 browsers/node16.13.2-chrome97-ff96/Dockerfile create mode 100644 browsers/node16.13.2-chrome97-ff96/README.md create mode 100755 browsers/node16.13.2-chrome97-ff96/build.sh diff --git a/base/16.13.2/Dockerfile b/base/16.13.2/Dockerfile new file mode 100644 index 0000000000..bfc66b7c52 --- /dev/null +++ b/base/16.13.2/Dockerfile @@ -0,0 +1,67 @@ +# WARNING: this file was autogenerated by generate-base-image.js +# contains all dependencies for running Cypress.io Test Runner +# https://on.cypress.io/docker and https://on.cypress.io/ci +# +# build it with command +# docker build -t cypress/base:16.13.2 . +# +FROM node:16.13.2-buster + +RUN apt-get update && \ + apt-get install --no-install-recommends -y \ + libgtk2.0-0 \ + libgtk-3-0 \ + libnotify-dev \ + libgconf-2-4 \ + libgbm-dev \ + libnss3 \ + libxss1 \ + libasound2 \ + libxtst6 \ + xauth \ + xvfb \ + # install text editors + vim-tiny \ + nano \ + # install emoji font + fonts-noto-color-emoji \ + # install Chinese fonts + # this list was copied from https://github.com/jim3ma/docker-leanote + fonts-arphic-bkai00mp \ + fonts-arphic-bsmi00lp \ + fonts-arphic-gbsn00lp \ + fonts-arphic-gkai00mp \ + fonts-arphic-ukai \ + fonts-arphic-uming \ + ttf-wqy-zenhei \ + ttf-wqy-microhei \ + xfonts-wqy \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +RUN npm --version + +RUN npm install -g yarn@latest --force +RUN yarn --version + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM xterm +# avoid million NPM install messages +ENV npm_config_loglevel warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm true + +# Node libraries +RUN node -p process.versions + +# Show where Node loads required modules from +RUN node -p 'module.paths' + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" diff --git a/base/16.13.2/README.md b/base/16.13.2/README.md new file mode 100644 index 0000000000..25929fa176 --- /dev/null +++ b/base/16.13.2/README.md @@ -0,0 +1,18 @@ + +# cypress/base:16.13.2 + +A Docker image with all dependencies pre-installed. +Just add your NPM packages (including Cypress) and run the tests. +See [Cypress Docker docs](https://on.cypress.io/docker) and +[Cypress CI guide](https://on.cypress.io/ci). + +## Example + +Sample Dockerfile + +``` +FROM cypress/base:16.13.2 +RUN npm install --save-dev cypress +RUN $(npm bin)/cypress verify +RUN $(npm bin)/cypress run +``` diff --git a/base/16.13.2/build.sh b/base/16.13.2/build.sh new file mode 100755 index 0000000000..c9783dbebf --- /dev/null +++ b/base/16.13.2/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-base-image.js +set e+x + +# build image with Cypress dependencies +LOCAL_NAME=cypress/base:16.13.2 + +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/base/README.md b/base/README.md index b88888ab76..b5e5ab8477 100644 --- a/base/README.md +++ b/base/README.md @@ -68,6 +68,7 @@ Image `cypress/base:12` is tagged [`latest`](https://hub.docker.com/r/cypress/ba | cypress/base:16.4.0 | 16.4.0 | Debian 10.9 | [/16.4.0](16.4.0) | 7.10.0 | 1.22.10 | [1](#note1) | | cypress/base:16.5.0 | 16.5.0 | Debian 10.9 | [/16.5.0](16.5.0) | 7.10.0 | 1.22.10 | [1](#note1) | | cypress/base:16.13.0 | 16.13.0 | Debian 10.9 | [/16.13.0](16.13.0) | 7.10.0 | 1.22.10 | [1](#note1) | +| cypress/base:16.13.2 | 16.13.2 | Debian 10.9 | [/16.13.2](16.13.2) | 8.1.2 | 1.22.17 | [1](#note1) | | cypress/base:17.3.0 | 17.3.0 | Debian 10.9 | [/17.3.0](17.3.0) | 8.3.0 | 1.22.17 | [1](#note1) | | cypress/base:centos7 | 6 | CentOS | [/centos7](centos7) | 3.10.10 | 🚫 | | cypress/base:centos7-12.4.0 | 12.4.0 | CentOS | [/centos7](centos7) | 6.9.0 | 1.16.0 | diff --git a/browsers/node16.13.2-chrome97-ff96/Dockerfile b/browsers/node16.13.2-chrome97-ff96/Dockerfile new file mode 100644 index 0000000000..33590b03ff --- /dev/null +++ b/browsers/node16.13.2-chrome97-ff96/Dockerfile @@ -0,0 +1,53 @@ +FROM cypress/base:16.13.2 + +USER root + +RUN node --version + +# Chrome dependencies +RUN apt-get update +RUN apt-get install -y fonts-liberation libappindicator3-1 xdg-utils + +# install Chrome browser +ENV CHROME_VERSION 97.0.4692.71 +RUN wget -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}-1_amd64.deb" && \ + dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/google-chrome-stable_current_amd64.deb +RUN google-chrome --version + +# "fake" dbus address to prevent errors +# https://github.com/SeleniumHQ/docker-selenium/issues/87 +ENV DBUS_SESSION_BUS_ADDRESS=/dev/null + +# Add zip utility - it comes in very handy +RUN apt-get update && apt-get install -y zip + +# add codecs needed for video playback in firefox +# https://github.com/cypress-io/cypress-docker-images/issues/150 +RUN apt-get install mplayer -y + +# install Firefox browser +ARG FIREFOX_VERSION=96.0.2 +RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/$FIREFOX_VERSION/linux-x86_64/en-US/firefox-$FIREFOX_VERSION.tar.bz2 \ + && tar -C /opt -xjf /tmp/firefox.tar.bz2 \ + && rm /tmp/firefox.tar.bz2 \ + && ln -fs /opt/firefox/firefox /usr/bin/firefox + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "Chrome version: $(google-chrome --version) \n" \ + "Firefox version: $(firefox --version) \n" \ + "git version: $(git --version) \n" \ + "whoami: $(whoami) \n" + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM xterm +# avoid million NPM install messages +ENV npm_config_loglevel warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm true diff --git a/browsers/node16.13.2-chrome97-ff96/README.md b/browsers/node16.13.2-chrome97-ff96/README.md new file mode 100644 index 0000000000..cce2555b39 --- /dev/null +++ b/browsers/node16.13.2-chrome97-ff96/README.md @@ -0,0 +1,20 @@ +# cypress/browsers:node16.13.2-chrome97-ff96 + +A complete image with all operating system dependencies for Cypress, Chrome +97 and Firefox 96 browsers. + +[Dockerfile](Dockerfile) + +```text + node version: v16.13.2 + npm version: 8.1.2 + yarn version: 1.22.17 + debian version: 10.11 + Chrome version: Google Chrome 97.0.4692.71 + Firefox version: Mozilla Firefox 96.0.2 + git version: git version 2.20.1 + whoami: root +``` + +**Note:** this image uses the `root` user. You might want to switch to non-root +user like `node` when running this container for security. diff --git a/browsers/node16.13.2-chrome97-ff96/build.sh b/browsers/node16.13.2-chrome97-ff96/build.sh new file mode 100755 index 0000000000..893cc2df2f --- /dev/null +++ b/browsers/node16.13.2-chrome97-ff96/build.sh @@ -0,0 +1,6 @@ +set e+x + +LOCAL_NAME=cypress/browsers:node16.13.2-chrome97-ff96 + +echo "Building $LOCAL_NAME" +docker build --no-cache -t $LOCAL_NAME . diff --git a/buildspec.yml b/buildspec.yml index 3eb3253eda..b1b23d59a1 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -186,6 +186,16 @@ batch: IMAGE_REPO_NAME: "cypress/base" IMAGE_DIR: "base" IMAGE_TAG: "16.13.0" + - identifier: base16132 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/base" + IMAGE_DIR: "base" + IMAGE_TAG: "16.13.2" - identifier: base1620 env: image: aws/codebuild/standard:5.0 @@ -417,6 +427,16 @@ batch: IMAGE_REPO_NAME: "cypress/browsers" IMAGE_DIR: "browsers" IMAGE_TAG: "node16.13.0-chrome95-ff94" + - identifier: browsersnode16132Chrome97Ff96 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/browsers" + IMAGE_DIR: "browsers" + IMAGE_TAG: "node16.13.2-chrome97-ff96" - identifier: browsersnode1650Chrome94Ff93 env: image: aws/codebuild/standard:5.0 diff --git a/circle.yml b/circle.yml index 3556da13f2..6c15875e01 100644 --- a/circle.yml +++ b/circle.yml @@ -551,6 +551,9 @@ workflows: - build-base-image: name: "base 16.13.0" dockerTag: "16.13.0" + - build-base-image: + name: "base 16.13.2" + dockerTag: "16.13.2" - build-base-image: name: "base 16.2.0" dockerTag: "16.2.0" @@ -655,6 +658,11 @@ workflows: dockerTag: "node16.13.0-chrome95-ff94" chromeVersion: "Google Chrome 95" firefoxVersion: "Mozilla Firefox 94" + - build-browser-image: + name: "browsers node16.13.2-chrome97-ff96" + dockerTag: "node16.13.2-chrome97-ff96" + chromeVersion: "Google Chrome 97" + firefoxVersion: "Mozilla Firefox 96" - build-browser-image: name: "browsers node16.5.0-chrome94-ff93" dockerTag: "node16.5.0-chrome94-ff93" From 7264131c59560ac6b629e15008a0a0c844b2071a Mon Sep 17 00:00:00 2001 From: Zach Bloomquist Date: Mon, 31 Jan 2022 21:35:54 +0000 Subject: [PATCH 022/371] add included:9.4.1 (#587) --- buildspec.yml | 10 ++++++ circle.yml | 14 +++++--- generate-config.js | 2 +- included/9.4.1/Dockerfile | 69 +++++++++++++++++++++++++++++++++++++++ included/9.4.1/README.md | 18 ++++++++++ included/9.4.1/build.sh | 8 +++++ included/README.md | 1 + 7 files changed, 116 insertions(+), 6 deletions(-) create mode 100644 included/9.4.1/Dockerfile create mode 100644 included/9.4.1/README.md create mode 100755 included/9.4.1/build.sh diff --git a/buildspec.yml b/buildspec.yml index b1b23d59a1..49d58bf203 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -1208,6 +1208,16 @@ batch: IMAGE_REPO_NAME: "cypress/included" IMAGE_DIR: "included" IMAGE_TAG: "9.3.1" + - identifier: included940 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/included" + IMAGE_DIR: "included" + IMAGE_TAG: "9.4.1" phases: pre_build: diff --git a/circle.yml b/circle.yml index 6c15875e01..9790ca344e 100644 --- a/circle.yml +++ b/circle.yml @@ -183,7 +183,6 @@ commands: FROM << parameters.imageName >> RUN echo "current user: $(whoami)" ENV CI=1 - WORKDIR /app RUN npm init --yes RUN npm install --save-dev cypress RUN ./node_modules/.bin/cypress verify @@ -228,7 +227,6 @@ commands: RUN echo "current user: $(whoami)" ENV CI=1 ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 - WORKDIR /app RUN npm init --yes RUN npm install --save-dev cypress RUN ./node_modules/.bin/cypress verify @@ -382,7 +380,8 @@ jobs: - run: npm run check:markdown build-base-image: - machine: true + machine: + image: ubuntu-2004:202111-02 parameters: dockerName: type: string @@ -414,7 +413,8 @@ jobs: imageName: << parameters.dockerName >>:<< parameters.dockerTag >> build-browser-image: - machine: true + machine: + image: ubuntu-2004:202111-02 parameters: dockerName: type: string @@ -454,7 +454,8 @@ jobs: imageName: << parameters.dockerName >>:<< parameters.dockerTag >> build-included-image: - machine: true + machine: + image: ubuntu-2004:202111-02 parameters: dockerName: type: string @@ -790,3 +791,6 @@ workflows: - build-included-image: name: "included 9.3.1" dockerTag: "9.3.1" + - build-included-image: + name: "included 9.4.1" + dockerTag: "9.4.1" diff --git a/generate-config.js b/generate-config.js index 21485408bd..16b6b74344 100644 --- a/generate-config.js +++ b/generate-config.js @@ -136,7 +136,7 @@ const preamble = ` version: 2.1 orbs: - node: circleci/node@1.1 + node: circleci/node@5.0.0 commands: halt-on-branch: diff --git a/included/9.4.1/Dockerfile b/included/9.4.1/Dockerfile new file mode 100644 index 0000000000..aa5640c259 --- /dev/null +++ b/included/9.4.1/Dockerfile @@ -0,0 +1,69 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.4.1 cypress/browsers:node16.5.0-chrome94-ff93 +# +# build this image with command +# docker build -t cypress/included:9.4.1 . +# +FROM cypress/browsers:node16.5.0-chrome94-ff93 + +# Update the dependencies to get the latest and greatest (and safest!) packages. +RUN apt update && apt upgrade -y + +# avoid too many progress messages +# https://github.com/cypress-io/cypress/issues/1243 +ENV CI=1 + +# disable shared memory X11 affecting Cypress v4 and Chrome +# https://github.com/cypress-io/cypress-docker-images/issues/270 +ENV QT_X11_NO_MITSHM=1 +ENV _X11_NO_MITSHM=1 +ENV _MITSHM=0 + +# should be root user +RUN echo "whoami: $(whoami)" +RUN npm config -g set user $(whoami) + +# command "id" should print: +# uid=0(root) gid=0(root) groups=0(root) +# which means the current user is root +RUN id + +# point Cypress at the /root/cache no matter what user account is used +# see https://on.cypress.io/caching +ENV CYPRESS_CACHE_FOLDER=/root/.cache/Cypress +RUN npm install -g "cypress@9.4.1" +RUN cypress verify + +# Cypress cache and installed version +# should be in the root user's home folder +RUN cypress cache path +RUN cypress cache list +RUN cypress info +RUN cypress version + +# give every user read access to the "/root" folder where the binary is cached +# we really only need to worry about the top folder, fortunately +RUN ls -la /root +RUN chmod 755 /root + +# always grab the latest Yarn +# otherwise the base image might have old versions +# NPM does not need to be installed as it is already included with Node. +RUN npm i -g yarn@latest + +# Show where Node loads required modules from +RUN node -p 'module.paths' + +# should print Cypress version +# plus Electron and bundled Node versions +RUN cypress version +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" \ + "chrome: $(google-chrome --version || true) \n" \ + "firefox: $(firefox --version || true) \n" + +ENTRYPOINT ["cypress", "run"] diff --git a/included/9.4.1/README.md b/included/9.4.1/README.md new file mode 100644 index 0000000000..ce519e3ac7 --- /dev/null +++ b/included/9.4.1/README.md @@ -0,0 +1,18 @@ + + +# cypress/included:9.4.1 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.4.1 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/9.4.1/build.sh b/included/9.4.1/build.sh new file mode 100755 index 0000000000..2f374f794f --- /dev/null +++ b/included/9.4.1/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.4.1 cypress/browsers:node16.5.0-chrome94-ff93 +set e+x + +LOCAL_NAME=cypress/included:9.4.1 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/included/README.md b/included/README.md index 15db54355a..793a58e857 100644 --- a/included/README.md +++ b/included/README.md @@ -81,6 +81,7 @@ Name + Tag | Base image [cypress/included:9.2.1](9.2.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.3.0](9.3.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.3.1](9.3.1) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.4.1](9.4.1) | `cypress/browsers:node16.5.0-chrome94-ff93` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: From eda47582da9ff14fccc94a4306fc95d6e4ed415e Mon Sep 17 00:00:00 2001 From: Jordan Date: Mon, 7 Feb 2022 15:07:09 -0500 Subject: [PATCH 023/371] build(deps): update peer deps that have a security alert via dependabot (#579) --- circle.yml | 186 +++++----- package-lock.json | 897 ---------------------------------------------- package.json | 6 +- yarn.lock | 42 ++- 4 files changed, 126 insertions(+), 1005 deletions(-) delete mode 100644 package-lock.json diff --git a/circle.yml b/circle.yml index 9790ca344e..1d2d6d95bd 100644 --- a/circle.yml +++ b/circle.yml @@ -57,21 +57,21 @@ commands: - when: condition: << parameters.checkNodeVersion >> steps: - - run: - name: confirm image has Node << parameters.nodeVersion >> - # do not run Docker in the interactive mode - adds control characters! - command: | - version=$(docker run << parameters.imageName >> node --version) - if [ "$version" == "<< parameters.nodeVersion >>" ]; then - echo "Base image has the expected version of Node << parameters.nodeVersion >>"; - else - echo "Problem: base image has unexpected Node version" - echo "Expected << parameters.nodeVersion >> and got $version" - exit 1 - fi + - run: + name: confirm image has Node << parameters.nodeVersion >> + # do not run Docker in the interactive mode - adds control characters! + command: | + version=$(docker run << parameters.imageName >> node --version) + if [ "$version" == "<< parameters.nodeVersion >>" ]; then + echo "Base image has the expected version of Node << parameters.nodeVersion >>"; + else + echo "Problem: base image has unexpected Node version" + echo "Expected << parameters.nodeVersion >> and got $version" + exit 1 + fi - run: name: test image << parameters.imageName >> - no_output_timeout: '3m' + no_output_timeout: "3m" command: | docker build -t cypress/test -\<> @@ -90,7 +90,7 @@ commands: - run: name: test image << parameters.imageName >> using Kitchensink - no_output_timeout: '3m' + no_output_timeout: "3m" command: | docker build -t cypress/test-kitchensink -\<> @@ -114,75 +114,76 @@ commands: description: Cypress browser docker image to test chromeVersion: type: string - default: '' + default: "" description: Chrome version to expect in the base image, starts with "Google Chrome XX" firefoxVersion: type: string - default: '' + default: "" description: Firefox version to expect in the base image, starts with "Mozilla Firefox XX" edgeVersion: type: string - default: '' + default: "" description: Edge version to expect in the base image, starts with "Microsoft Edge XX" steps: - when: condition: << parameters.chromeVersion >> steps: - - run: - name: confirm image has Chrome << parameters.chromeVersion >> - # do not run Docker in the interactive mode - adds control characters! - # and use Bash regex string comparison - command: | - version=$(docker run << parameters.imageName >> google-chrome --version) - if [[ "$version" =~ ^"<< parameters.chromeVersion >>" ]]; then - echo "Image has the expected version of Chrome << parameters.chromeVersion >>" - echo "found $version" - else - echo "Problem: image has unexpected Chrome version" - echo "Expected << parameters.chromeVersion >> and got $version" - exit 1 - fi + - run: + name: confirm image has Chrome << parameters.chromeVersion >> + # do not run Docker in the interactive mode - adds control characters! + # and use Bash regex string comparison + command: | + version=$(docker run << parameters.imageName >> google-chrome --version) + if [[ "$version" =~ ^"<< parameters.chromeVersion >>" ]]; then + echo "Image has the expected version of Chrome << parameters.chromeVersion >>" + echo "found $version" + else + echo "Problem: image has unexpected Chrome version" + echo "Expected << parameters.chromeVersion >> and got $version" + exit 1 + fi - when: condition: << parameters.firefoxVersion >> steps: - - run: - name: confirm the image has Firefox << parameters.firefoxVersion >> - command: | - version=$(docker run << parameters.imageName >> firefox --version) - if [[ "$version" =~ ^"<< parameters.firefoxVersion >>" ]]; then - echo "Image has the expected version of Firefox << parameters.firefoxVersion >>" - echo "found $version" - else - echo "Problem: image has unexpected Firefox version" - echo "Expected << parameters.firefoxVersion >> and got $version" - exit 1 - fi + - run: + name: confirm the image has Firefox << parameters.firefoxVersion >> + command: | + version=$(docker run << parameters.imageName >> firefox --version) + if [[ "$version" =~ ^"<< parameters.firefoxVersion >>" ]]; then + echo "Image has the expected version of Firefox << parameters.firefoxVersion >>" + echo "found $version" + else + echo "Problem: image has unexpected Firefox version" + echo "Expected << parameters.firefoxVersion >> and got $version" + exit 1 + fi - when: condition: << parameters.edgeVersion >> steps: - - run: - name: confirm the image has Edge << parameters.edgeVersion >> - command: | - version=$(docker run << parameters.imageName >> edge --version) - if [[ "$version" =~ ^"<< parameters.edgeVersion >>" ]]; then - echo "Image has the expected version of Edge << parameters.edgeVersion >>" - echo "found $version" - else - echo "Problem: image has unexpected Edge version" - echo "Expected << parameters.edgeVersion >> and got $version" - exit 1 - fi + - run: + name: confirm the image has Edge << parameters.edgeVersion >> + command: | + version=$(docker run << parameters.imageName >> edge --version) + if [[ "$version" =~ ^"<< parameters.edgeVersion >>" ]]; then + echo "Image has the expected version of Edge << parameters.edgeVersion >>" + echo "found $version" + else + echo "Problem: image has unexpected Edge version" + echo "Expected << parameters.edgeVersion >> and got $version" + exit 1 + fi - run: name: test image << parameters.imageName >> - no_output_timeout: '3m' + no_output_timeout: "3m" command: | docker build -t cypress/test -\<> RUN echo "current user: $(whoami)" ENV CI=1 + WORKDIR /app RUN npm init --yes RUN npm install --save-dev cypress RUN ./node_modules/.bin/cypress verify @@ -191,42 +192,43 @@ commands: - run: name: Test built-in Electron browser - no_output_timeout: '1m' + no_output_timeout: "1m" command: docker run cypress/test ./node_modules/.bin/cypress run - when: condition: << parameters.chromeVersion >> steps: - - run: - name: Test << parameters.chromeVersion >> - no_output_timeout: '1m' - command: docker run cypress/test ./node_modules/.bin/cypress run --browser chrome + - run: + name: Test << parameters.chromeVersion >> + no_output_timeout: "1m" + command: docker run cypress/test ./node_modules/.bin/cypress run --browser chrome - when: condition: << parameters.firefoxVersion >> steps: - - run: - name: Test << parameters.firefoxVersion >> - no_output_timeout: '1m' - command: docker run cypress/test ./node_modules/.bin/cypress run --browser firefox + - run: + name: Test << parameters.firefoxVersion >> + no_output_timeout: "1m" + command: docker run cypress/test ./node_modules/.bin/cypress run --browser firefox - when: condition: << parameters.edgeVersion >> steps: - - run: - name: Test << parameters.edgeVersion >> - no_output_timeout: '1m' - command: docker run cypress/test ./node_modules/.bin/cypress run --browser edge + - run: + name: Test << parameters.edgeVersion >> + no_output_timeout: "1m" + command: docker run cypress/test ./node_modules/.bin/cypress run --browser edge - run: name: scaffold image << parameters.imageName >> using Kitchensink - no_output_timeout: '3m' + no_output_timeout: "3m" command: | docker build -t cypress/test-kitchensink -\<> RUN echo "current user: $(whoami)" ENV CI=1 ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 + WORKDIR /app RUN npm init --yes RUN npm install --save-dev cypress RUN ./node_modules/.bin/cypress verify @@ -236,26 +238,26 @@ commands: - when: condition: << parameters.chromeVersion >> steps: - - run: - name: Test << parameters.chromeVersion >> - no_output_timeout: '1m' - command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser chrome + - run: + name: Test << parameters.chromeVersion >> + no_output_timeout: "1m" + command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser chrome - when: condition: << parameters.firefoxVersion >> steps: - - run: - name: Test << parameters.firefoxVersion >> - no_output_timeout: '1m' - command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser firefox + - run: + name: Test << parameters.firefoxVersion >> + no_output_timeout: "1m" + command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser firefox - when: condition: << parameters.edgeVersion >> steps: - - run: - name: Test << parameters.edgeVersion >> - no_output_timeout: '1m' - command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser edge + - run: + name: Test << parameters.edgeVersion >> + no_output_timeout: "1m" + command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser edge test-included-image-versions: description: Testing pre-installed versions @@ -268,15 +270,15 @@ commands: description: Cypress included docker image to test steps: - run: - name: 'Print versions' + name: "Print versions" command: docker run -it --entrypoint cypress cypress/included:<< parameters.cypressVersion >> version - run: - name: 'Print info' + name: "Print info" command: docker run -it --entrypoint cypress cypress/included:<< parameters.cypressVersion >> info - run: - name: 'Check Node version' + name: "Check Node version" command: | export NODE_VERSION=$(docker run --entrypoint node cypress/included:<< parameters.cypressVersion >> --version) export CYPRESS_NODE_VERSION=$(docker run --entrypoint cypress cypress/included:<< parameters.cypressVersion >> version --component node) @@ -305,7 +307,7 @@ commands: steps: - run: name: New test project and testing - no_output_timeout: '3m' + no_output_timeout: "3m" command: | node --version mkdir test @@ -332,7 +334,7 @@ commands: steps: - run: name: Testing Kitchensink - no_output_timeout: '3m' + no_output_timeout: "3m" command: | node --version mkdir test-kitchensink @@ -371,12 +373,12 @@ jobs: lint-markdown: executor: name: node/default - tag: '12' + tag: "12" steps: - checkout - node/with-cache: steps: - - run: npm ci + - run: yarn install --frozen-lockfile - run: npm run check:markdown build-base-image: @@ -425,15 +427,15 @@ jobs: description: Image tag to build like "node12.4.0-chrome76" chromeVersion: type: string - default: '' + default: "" description: Chrome version to expect in the base image, starts with "Google Chrome XX" firefoxVersion: type: string - default: '' + default: "" description: Firefox version to expect in the base image, starts with "Mozilla Firefox XX" edgeVersion: type: string - default: '' + default: "" description: Edge version to expect in the base image, starts with "Microsoft Edge XX" steps: - checkout diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 2291d425f3..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,897 +0,0 @@ -{ - "name": "cypress-docker-images", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "^1.6.0" - } - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/node": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.2.tgz", - "integrity": "sha512-B8emQA1qeKerqd1dmIsQYnXi+mmAzTB7flExjmy5X1aVAKFNNNDubkavwR13kR6JnpeLp3aLoJhwn9trWPAyFQ==", - "dev": true - }, - "ajv": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", - "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "async": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/async/-/async-3.1.1.tgz", - "integrity": "sha512-X5Dj8hK1pJNC2Wzo2Rcp9FBVdJMGRR/S7V+lH46s8GVFhtbo5O4Le5GECCF/8PISVdkUA6mMPvgz7qTTD1rf1g==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", - "dev": true - }, - "fast-glob": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz", - "integrity": "sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fastq": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", - "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", - "dev": true, - "requires": { - "reusify": "^1.0.0" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", - "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-relative-url": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-relative-url/-/is-relative-url-3.0.0.tgz", - "integrity": "sha512-U1iSYRlY2GIMGuZx7gezlB5dp1Kheaym7zKzO1PV06mOihiWTXejLwm4poEJysPyXF+HtK/BEd0DVlcCh30pEA==", - "dev": true, - "requires": { - "is-absolute-url": "^3.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "dev": true, - "requires": { - "punycode": "2.x.x" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "link-check": { - "version": "4.4.7", - "resolved": "https://registry.npmjs.org/link-check/-/link-check-4.4.7.tgz", - "integrity": "sha512-E5MJf3+4OiHJzqDw9CQpOeJT3yOoKUxLHVaPPzNPXvaYPJ20C5MRzk1lPoojWnf5xwoRZjK+ydzfq2kPTwJr/g==", - "dev": true, - "requires": { - "is-relative-url": "^3.0.0", - "isemail": "^3.2.0", - "ms": "^2.1.2", - "request": "^2.88.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "markdown-link-check": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/markdown-link-check/-/markdown-link-check-3.8.0.tgz", - "integrity": "sha512-tpBlUsnJfJ5xMHAjBC/10s8Un/WT/FmF+xXaZjeaegESmjcPlEcxZ+UuCtxArETovLS5gZ8lZXzdhgslHziLsg==", - "dev": true, - "requires": { - "async": "^3.1.0", - "chalk": "^2.4.2", - "commander": "^3.0.2", - "link-check": "^4.4.6", - "lodash": "^4.17.15", - "markdown-link-extractor": "^1.2.2", - "progress": "^2.0.3", - "request": "^2.88.0" - } - }, - "markdown-link-extractor": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/markdown-link-extractor/-/markdown-link-extractor-1.2.2.tgz", - "integrity": "sha512-VYDUhlC70hKl0coCY6dXyJ4OCRAX5dTh0/oSTdidhYS7dYIJ9kYAez6KR0vc3HWySMuo564J1rN0NOAPBDI0iA==", - "dev": true, - "requires": { - "marked": "^0.7.0" - } - }, - "marked": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", - "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==", - "dev": true - }, - "merge2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", - "dev": true, - "requires": { - "mime-db": "1.43.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", - "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "psl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", - "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "resolve": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz", - "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.3.tgz", - "integrity": "sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==", - "dev": true - }, - "shelljs": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", - "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slugify": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.7.tgz", - "integrity": "sha512-tf+h5W1IrjNm/9rKKj0JU2MDMruiopx0jjVA5zCdBtcGjfp0+c5rHw/zADLC3IeKlGHtVbHtpfzvYA0OYT+HKg==", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - } - } -} diff --git a/package.json b/package.json index f3443c6486..8d148e1061 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,10 @@ "markdown-link-check": "3.8.0", "semver": "7.1.3", "shelljs": "0.8.3", - "slugify": "^1.4.7" + "slugify": "^1.4.7", + "lodash": "4.17.21", + "glob-parent": "^6.0.2", + "path-parse": "1.0.7", + "json-schema": "~0.4.0" } } diff --git a/yarn.lock b/yarn.lock index 461e4c5d1e..99ccca1202 100644 --- a/yarn.lock +++ b/yarn.lock @@ -280,12 +280,19 @@ "assert-plus" "^1.0.0" "glob-parent@^5.1.0": - "integrity" "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz" - "version" "5.1.0" + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" dependencies: "is-glob" "^4.0.1" +"glob-parent@^6.0.2": + "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "is-glob" "^4.0.3" + "glob@^7.0.0", "glob@^7.1.3": "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==" "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" @@ -372,10 +379,10 @@ "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" "version" "2.1.1" -"is-glob@^4.0.1": - "integrity" "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" - "version" "4.0.1" +"is-glob@^4.0.1", "is-glob@^4.0.3": + "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + "version" "4.0.3" dependencies: "is-extglob" "^2.1.1" @@ -418,6 +425,11 @@ "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" "version" "0.4.1" +"json-schema@~0.4.0": + "integrity" "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + "version" "0.4.0" + "json-schema@0.2.3": "integrity" "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz" @@ -448,10 +460,10 @@ "ms" "^2.1.2" "request" "^2.88.0" -"lodash@^4.17.15": - "integrity" "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz" - "version" "4.17.15" +"lodash@^4.17.15", "lodash@4.17.21": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" "markdown-link-check@3.8.0": "integrity" "sha512-tpBlUsnJfJ5xMHAjBC/10s8Un/WT/FmF+xXaZjeaegESmjcPlEcxZ+UuCtxArETovLS5gZ8lZXzdhgslHziLsg==" @@ -533,10 +545,10 @@ "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" "version" "1.0.1" -"path-parse@^1.0.6": - "integrity" "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz" - "version" "1.0.6" +"path-parse@^1.0.6", "path-parse@1.0.7": + "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + "version" "1.0.7" "path-type@^4.0.0": "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" From 607acb524a96e5c545c42b5244489e6bc993d205 Mon Sep 17 00:00:00 2001 From: Jordan Date: Mon, 14 Feb 2022 11:06:09 -0500 Subject: [PATCH 024/371] feat(scripts): Automate the script generation for images (#590) Co-authored-by: Adam Murray Co-authored-by: Adam Murray --- .prettierignore | 5 + .prettierrc | 6 + CODE_OF_CONDUCT.md | 52 - CONTRIBUTING.md | 36 +- README.md | 10 +- base/CHANGELOG.md | 69 + base/README.md | 1 + browsers/CHANGELOG.md | 29 + browsers/node16.5.0-chrome94-ff93/Dockerfile | 2 +- browsers/node16.5.0-chrome94-ff93/README.md | 2 +- browsers/node16.5.0-chrome94-ff93/build.sh | 2 +- buildspec.yml | 1214 +------------- circle.yml | 305 +--- .../src/cypress/integration/spec.js | 8 +- .../src/index.html | 4 +- .../src/cypress/integration/spec.js | 8 +- .../src/index.html | 4 +- .../src/cypress/integration/spec.js | 8 +- examples/included-as-non-root/src/index.html | 4 +- .../src/cypress/integration/spec.js | 22 +- .../src/cypress/plugins/index.js | 6 +- .../src/cypress/support/index.js | 2 +- examples/included-with-plugins/src/index.html | 4 +- generate-config.js | 902 ----------- included/CHANGELOG.md | 74 + included/README.md | 27 +- package.json | 13 +- scripts/create-commit.sh | 12 + .../generate-base-image.js | 47 +- scripts/generate-base-readme.js | 75 + scripts/generate-browser-image.js | 181 +++ scripts/generate-browser-readme.js | 106 ++ scripts/generate-commit.js | 28 + scripts/generate-config.js | 624 +++++++ .../generate-included-image.js | 59 +- scripts/generate-included-readme.js | 253 +++ test/src/cypress/integration/spec.js | 8 +- test/src/index.html | 4 +- utils.js | 8 +- yarn.lock | 1435 +++++++++-------- 40 files changed, 2343 insertions(+), 3316 deletions(-) create mode 100644 .prettierignore create mode 100644 .prettierrc delete mode 100644 CODE_OF_CONDUCT.md create mode 100644 base/CHANGELOG.md create mode 100644 browsers/CHANGELOG.md delete mode 100644 generate-config.js create mode 100644 included/CHANGELOG.md create mode 100644 scripts/create-commit.sh rename generate-base-image.js => scripts/generate-base-image.js (69%) create mode 100644 scripts/generate-base-readme.js create mode 100644 scripts/generate-browser-image.js create mode 100644 scripts/generate-browser-readme.js create mode 100644 scripts/generate-commit.js create mode 100644 scripts/generate-config.js rename generate-included-image.js => scripts/generate-included-image.js (68%) create mode 100644 scripts/generate-included-readme.js diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..d08c491379 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,5 @@ +# Add files here to ignore them from prettier formatting + +/base +/browsers +/included \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000..872c8787c7 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "printWidth": 120, + "semi": false, + "trailingComma": "all", + "arrowParens": "always" +} diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index cb65de563b..0000000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,52 +0,0 @@ -# Contributor Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [hello@cypress.io](mailto:hello@cypress.io). All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html - -[homepage]: https://www.contributor-covenant.org diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5a537ac63c..678c1afdcf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,7 +4,7 @@ Thanks for taking the time to contribute! :smile: ## Code of Conduct -All contributors are expecting to abide by our [Code of Conduct](CODE_OF_CONDUCT.md). +All contributors are expecting to abide by our [Code of Conduct](https://github.com/cypress-io/cypress/blob/develop/CODE_OF_CONDUCT.md). ## Development @@ -16,43 +16,39 @@ All contributors are expecting to abide by our [Code of Conduct](CODE_OF_CONDUCT To create a new base image follow these steps -1. run `npm run add:base -- ` script. For example `npm run add:base -- 13.6.0` +1. run `yarn add:base -- ` script. For example `yarn add:base -- 13.6.0` -It will create a new folder `base/` and output versions of tools installed: Node, npm, yarn, etc. See [generate-base-image.js](generate-base-image.js) file for details. +It will create a new folder `base/` and output versions of tools installed: Node, npm, yarn, etc. See [generate-base-image.js](scripts/generate-base-image.js) file for details. -2. add new line to [base/README.md](base/README.md) with new image information. -3. add new folder to Git -4. update [circle.yml](circle.yml) file by running `npm run build` and commit the changes. -4. open a pull request. +2. open a pull request. The new image will be built and tested on CI and pushed to Docker Hub once the PR is approved and merged to `master`. -**note:** we should install the latest NPM and Yarn versions in the base image to ensure old images do not include NPM and Yarn with known issues that have been fixed already. +**note:** we install Chinese fonts in the base image to allow correct testing of [cypress-documentation](https://github.com/cypress-io/cypress-documentation) site that includes several translations of the Cypress docs. Without Chinese fonts the pages have broken rendering. -**note 2:** we install Chinese fonts in the base image to allow correct testing of [cypress-documentation](https://github.com/cypress-io/cypress-documentation) site that includes several translations of the Cypress docs. Without Chinese fonts the pages have broken rendering. +### Add new browser image -### Add new image with browsers +To create a new image with the specific browser versions needed to run your cypress tests. -TODO: https://github.com/cypress-io/cypress-docker-images/issues/215 +1. Run `yarn add:browser --chrome= --firefox= --edge=`. For example `yarn add:browser 16.5.0 --chrome=94.0.4606.71 --firefox=93.0`. -**Important:** prefer to use exact browser versions for repeatable builds. You can find the previous official Chrome version numbers at [https://chromereleases.googleblog.com/](https://chromereleases.googleblog.com/). +This will create a new folder `browser/node-chrome-ff-edge` See [generate-browser-image.js](scripts/generate-browser-image.js) file for details. -**Important:** use `https:` to download browsers +2. Open a pull request. + +**Important ⚠️** In order to properly generate a browser image, you must specify a version of Chrome, or a version of Firefox, or a version of Edge. ### Add new included image To create a new image with Cypress pre-installed globally -1. run `npm run add:included -- `. For example `npm run add:included -- 3.8.3 cypress/browsers:node12.6.0-chrome77`. +1. Run `yarn add:included -- `. For example `yarn add:included -- 9.4.1 cypress/browsers:node16.13.2-chrome97-ff96`. -**important ⚠️** please use `cypress/browsers` Docker image with the Node version that **matches** the Node version bundled inside Cypress you are about to install there. +**Important ⚠️** please use `cypress/browsers` Docker image with the Node version that **matches** the Node version bundled inside Cypress you are about to install there. -This will create new folder `included/` +This will create a new folder `included/` See [generate-included-image.js](scripts/generate-included-image.js) file for details. -2. add new line to [included/README.md](included/README.md) file with the new image information -3. add new folder to Git -4. update [circle.yml](circle.yml) file by running `npm run build` and commit the changes. -4. open a pull request. +2. Open a pull request. ## Tagging the latest image diff --git a/README.md b/README.md index 6524d19d94..93b762beac 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,11 @@ These images provide all of the required dependencies for running Cypress in Doc We build three main images, click on the image name to see the available tags and versions. -Image | Default | Description | Monthly pulls ---- | --- | --- | --- -[cypress/base](base) | `cypress/base:12` | All operating system dependencies, no Cypress, and no browsers. | [![Docker Pulls](https://img.shields.io/docker/pulls/cypress/base.svg?maxAge=604800)](https://hub.docker.com/r/cypress/base/) -[cypress/browsers](browsers) | `cypress/browsers:chrome67` | All operating system dependencies and some browsers. | [![Docker Pulls](https://img.shields.io/docker/pulls/cypress/browsers.svg?maxAge=604800)](https://hub.docker.com/r/cypress/browsers/) -[cypress/included](included) | `cypress/included:3.2.0` | All operating system dependencies, Cypress, and some browsers installed globally. | [![Docker Pulls](https://img.shields.io/docker/pulls/cypress/included.svg?maxAge=604800)](https://hub.docker.com/r/cypress/included/) +| Image | Default | Description | Monthly pulls | +| ---------------------------- | --------------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| [cypress/base](base) | `cypress/base:12` | All operating system dependencies, no Cypress, and no browsers. | [![Docker Pulls](https://img.shields.io/docker/pulls/cypress/base.svg?maxAge=604800)](https://hub.docker.com/r/cypress/base/) | +| [cypress/browsers](browsers) | `cypress/browsers:chrome67` | All operating system dependencies and some browsers. | [![Docker Pulls](https://img.shields.io/docker/pulls/cypress/browsers.svg?maxAge=604800)](https://hub.docker.com/r/cypress/browsers/) | +| [cypress/included](included) | `cypress/included:3.2.0` | All operating system dependencies, Cypress, and some browsers installed globally. | [![Docker Pulls](https://img.shields.io/docker/pulls/cypress/included.svg?maxAge=604800)](https://hub.docker.com/r/cypress/included/) | Of these images, we provide multiple tags for various operating systems and specific browser versions. These allow you to target specific combinations you need. diff --git a/base/CHANGELOG.md b/base/CHANGELOG.md new file mode 100644 index 0000000000..2c09f0a71f --- /dev/null +++ b/base/CHANGELOG.md @@ -0,0 +1,69 @@ +| Name + Tag | Node | Operating System | Link | NPM version | Yarn version | Notes | +| --------------------------------- | ------- | ---------------- | -------------------------------------------- | ----------- | ------------ | ----------- | +| cypress/base:6 | 6 | Debian | [/6](6) | 3.10.10 | 1.6.0 | +| cypress/base:8 | 8 | Debian | [/8](8) | 6.4.1 | 1.9.4 | +| cypress/base:8.0.0 | 8.0.0 | Debian | [/8.0.0](8.0.0) | 6.14.1 | 1.22.0 | +| cypress/base:8.2.1 | 8.2.1 | Debian | [/8.2.1](8.2.1) | 5.3.0 | 1.12.3 | +| cypress/base:8.9.3 | 8.9.3 | Debian | [/8.9.3](8.9.3) | 5.5.1 | 1.12.3 | +| cypress/base:8.9.3-npm-6.10.1 | 8.9.3 | Debian | [/8.9.3](8.9.3-npm-6.10.1) | 6.10.1 | 1.17.3 | +| cypress/base:8.15.1 | 8.15.1 | Debian | [/8.15.1](8.15.1) | 6.9.0 | 1.15.2 | +| cypress/base:8.16.0 | 8.16.0 | Debian | [/8.16.0](8.16.0) | 6.9.0 | 1.16.0 | [1](#note1) | +| cypress/base:10.0.0 | 10.0.0 | Debian 8.10 | [/10.0.0](10.0.0) | 6.14.5 | 1.22.4 | [1](#note1) | +| cypress/base:10 | 10.13 | Debian | [/10](10) | 6.4.1 | 1.9.4 | +| cypress/base:10.2.1 | 10.2.1 | Debian | [/10.2.1](10.2.1) | 6.9.0 | 1.16.0 | [1](#note1) | +| cypress/base:10.11.0 | 10.11.0 | Debian | [/10.11.0](10.11.0) | 6.9.0 | 1.16.0 | [1](#note1) | +| cypress/base:10.15.3 | 10.15.3 | Debian | [/10.15.3](10.15.3) | 6.9.0 | 1.15.2 | +| cypress/base:10.16.0 | 10.16.0 | Debian | [/10.16.0](10.16.0) | 6.9.0 | 1.16.0 | +| cypress/base:10.16.3 | 10.16.3 | Debian | [/10.16.3](10.16.3) | 6.14.1 | 1.22.0 | +| cypress/base:10.18.0 | 10.18.0 | Debian | [/10.18.0](10.18.0) | 6.13.4 | 1.21.1 | +| cypress/base:10.22.0 | 10.22.0 | Debian 10.5 | [/10.22.0](10.22.0) | 6.14.8 | 1.22.4 | +| cypress/base:11.13.0 | 11.13.0 | Debian | [/11.13.0](11.13.0) | 6.9.0 | 1.15.2 | +| cypress/base:12.0.0 | 12.0.0 | Debian | [/12.0.0](12.0.0) | 6.10.0 | 1.16.0 | [1](#note1) | +| cypress/base:12.0.0-libgbm | 12.0.0 | Debian 9.8 | [/12.0.0-libgbm](12.0.0-libgbm) | 6.9.0 | 1.15.2 | [1](#note1) | +| cypress/base:12.1.0 | 12.1.0 | Debian | [/12.1.0](12.1.0) | 6.9.0 | 1.15.2 | +| cypress/base:12.4.0 | 12.4.0 | Debian | [/12.4.0](12.4.0) | 6.10.2 | 1.17.3 | [1](#note1) | +| cypress/base:12.6.0 | 12.6.0 | Debian | [/12.6.0](12.6.0) | 6.10.0 | 1.16.0 | [1](#note1) | +| cypress/base:12.8.1 | 12.8.1 | Debian | [/12.8.1](12.8.1) | 6.13.7 | 1.22.0 | [1](#note1) | +| cypress/base:12.12.0 | 12.12.0 | Debian | [/12.12.0](12.12.0) | 6.12.0 | 1.19.1 | [1](#note1) | +| cypress/base:12.13.0 | 12.13.0 | Debian | [/12.13.0](12.13.0) | 6.13.0 | 1.19.1 | [1](#note1) | +| cypress/base:12.14.0 | 12.14.0 | Debian | [/12.14.0](12.14.0) | 6.13.4 | 1.21.1 | [1](#note1) | +| cypress/base:12.14.1 | 12.14.1 | Debian | [/12.14.1](12.14.1) | 6.14.5 | 1.22.4 | [1](#note1) | +| cypress/base:12.16.0 | 12.16.0 | Debian | [/12.16.0](12.16.0) | 6.13.7 | 1.22.0 | [1](#note1) | +| cypress/base:12.16.1 | 12.16.1 | Debian | [/12.16.1](12.16.1) | 6.14.1 | 1.22.0 | [1](#note1) | +| cypress/base:12.16.2 | 12.16.2 | Debian | [/12.16.2](12.16.2) | 6.14.5 | 1.22.4 | [1](#note1) | +| cypress/base:12.18.0 | 12.18.0 | Debian | [/12.18.0](12.18.0) | 6.14.4 | 1.22.4 | [1](#note1) | +| cypress/base:12.18.2 | 12.18.2 | Debian 10.4 | [/12.18.2](12.18.2) | 6.14.7 | 1.22.4 | [1](#note1) | +| cypress/base:12.18.3 | 12.18.3 | Debian 10.5 | [/12.18.3](12.18.3) | 6.14.8 | 1.22.4 | [1](#note1) | +| cypress/base:12.18.4 | 12.18.4 | Debian 10.5 | [/12.18.4](12.18.4) | 6.14.8 | 1.22.10 | [1](#note1) | +| cypress/base:12.19.0 | 12.19.0 | Debian 10.6 | [/12.19.0](12.19.0) | 6.14.8 | 1.22.10 | [1](#note1) | +| cypress/base:12.22.8 | 12.22.8 | Debian 10.11 | [/12.22.8](12.22.8) | 6.14.15 | 1.22.17 | [1](#note1) | +| cypress/base:13.1.0 | 13.1.0 | Debian | [/13.1.0](13.1.0) | 6.13.1 | 1.19.1 | [1](#note1) | +| cypress/base:13.3.0 | 13.3.0 | Debian | [/13.3.0](13.3.0) | 6.13.4 | 1.21.1 | [1](#note1) | +| cypress/base:13.6.0 | 13.6.0 | Debian 10.2 | [/13.6.0](13.6.0) | 6.13.6 | 1.21.1 | [1](#note1) | +| cypress/base:13.6.0 | 13.8.0 | Debian 10.2 | [/13.8.0](13.8.0) | 6.13.6 | 1.21.1 | [1](#note1) | +| cypress/base:14.0.0 | 14.0.0 | Debian 10.3 | [/14.0.0](14.0.0) | 6.14.4 | 1.22.4 | [1](#note1) | +| cypress/base:14.5.0 | 14.5.0 | Debian 10.4 | [/14.5.0](14.5.0) | 6.14.7 | 1.22.4 | [1](#note1) | +| cypress/base:14.7.0 | 14.7.0 | Debian 10.5 | [/14.7.0](14.7.0) | 6.14.7 | 1.22.4 | [1](#note1) | +| cypress/base:14.10.1 | 14.10.1 | Debian 10.5 | [/14.10.1](14.10.1) | 6.14.8 | 1.22.5 | [1](#note1) | +| cypress/base:14.15.0 | 14.15.0 | Debian 10.5 | [/14.15.0](14.15.0) | 6.14.8 | 1.22.10 | [1](#note1) | +| cypress/base:14.15.4 | 14.15.4 | Debian 10.5 | [/14.15.4](14.15.4) | 6.14.11 | 1.22.10 | [1](#note1) | +| cypress/base:14.16.0 | 14.16.0 | Debian 10.8 | [/14.16.0](14.16.0) | 7.6.0 | 1.22.10 | [1](#note1) | +| cypress/base:14.17.0 | 14.17.0 | Debian 10.9 | [/14.17.0](14.17.0) | 6.14.13 | 1.22.10 | [1](#note1) | +| cypress/base:14.17.3 | 14.17.3 | Debian 10.10 | [/14.17.3](14.17.3) | 6.14.13 | 1.22.10 | [1](#note1) | +| cypress/base:14.18.1 | 14.18.1 | Debian 10.10 | [/14.18.1](14.18.1) | 6.14.15 | 1.22.15 | [1](#note1) | +| cypress/base:16.0.0 | 16.0.0 | Debian 10.9 | [/16.0.0](16.0.0) | 7.10.0 | 1.22.10 | [1](#note1) | +| cypress/base:16.1.0 | 16.1.0 | Debian 10.9 | [/16.1.0](16.1.0) | 7.10.0 | 1.22.10 | [1](#note1) | +| cypress/base:16.2.0 | 16.2.0 | Debian 10.9 | [/16.2.0](16.2.0) | 7.10.0 | 1.22.10 | [1](#note1) | +| cypress/base:16.3.0 | 16.3.0 | Debian 10.9 | [/16.3.0](16.3.0) | 7.10.0 | 1.22.10 | [1](#note1) | +| cypress/base:16.4.0 | 16.4.0 | Debian 10.9 | [/16.4.0](16.4.0) | 7.10.0 | 1.22.10 | [1](#note1) | +| cypress/base:16.5.0 | 16.5.0 | Debian 10.9 | [/16.5.0](16.5.0) | 7.10.0 | 1.22.10 | [1](#note1) | +| cypress/base:16.13.0 | 16.13.0 | Debian 10.9 | [/16.13.0](16.13.0) | 7.10.0 | 1.22.10 | [1](#note1) | +| cypress/base:17.3.0 | 17.3.0 | Debian 10.9 | [/17.3.0](17.3.0) | 8.3.0 | 1.22.17 | [1](#note1) | +| cypress/base:centos7 | 6 | CentOS | [/centos7](centos7) | 3.10.10 | 🚫 | +| cypress/base:centos7-12.4.0 | 12.4.0 | CentOS | [/centos7](centos7) | 6.9.0 | 1.16.0 | +| cypress/base:ubuntu16 | 6 | Ubuntu | [/ubuntu16](ubuntu16) | 3.10.10 | 🚫 | +| cypress/base:ubuntu16-8 | 8.16.2 | Ubuntu | [/ubuntu16-8](ubuntu16-8) | 6.4.1 | 🚫 | +| cypress/base:ubuntu16-12.13.1 | 12.13.1 | Ubuntu | [/ubuntu16-12.13.1](ubuntu16-12.13.1) | 6.12.1 | 🚫 | +| cypress/base:ubuntu18-node12.14.1 | 12.14.1 | Ubuntu 18.04.3 | [ubuntu18-node12.14.1](ubuntu18-node12.14.1) | 6.13.6 | 1.21.1 | +| cypress/base:ubuntu19-node12.14.1 | 12.14.1 | Ubuntu 19.0.4 | [ubuntu19-node12.14.1](ubuntu19-node12.14.1) | 6.13.6 | 1.21.1 | +| cypress/base:manjaro-node14.12.0 | 14.12.0 | Manjaro | [manjaro-14.12.0](manjaro-14.12.0) | 6.14.8 | 1.22.10 | diff --git a/base/README.md b/base/README.md index b5e5ab8477..e73fd9d48d 100644 --- a/base/README.md +++ b/base/README.md @@ -79,6 +79,7 @@ Image `cypress/base:12` is tagged [`latest`](https://hub.docker.com/r/cypress/ba | cypress/base:ubuntu19-node12.14.1 | 12.14.1 | Ubuntu 19.0.4 | [ubuntu19-node12.14.1](ubuntu19-node12.14.1) | 6.13.6 | 1.21.1 | | cypress/base:manjaro-node14.12.0 | 14.12.0 | Manjaro | [manjaro-14.12.0](manjaro-14.12.0) | 6.14.8 | 1.22.10 | +> **Note** All Base Images install the latest versions of NPM & Yarn ## ⚠️ Node.js Support Cypress 4.0+ no longer supports Node.js versions below 8.0.0. See our [Migration Guide](https://on.cypress.io/migration-guide#Node-js-8-support). diff --git a/browsers/CHANGELOG.md b/browsers/CHANGELOG.md new file mode 100644 index 0000000000..6102c26fac --- /dev/null +++ b/browsers/CHANGELOG.md @@ -0,0 +1,29 @@ +Name + Tag | Base image | Chrome | Firefox | Edge +--- | --- | --- | --- | --- +[cypress/browsers:node8.9.3-npm6.10.1-chrome75](./node8.9.3-npm6.10.1-chrome75) | `cypress/base:8.9.3-npm-6.10.1` | `75.0.3770.100` | 🚫 +[cypress/browsers:node10.16.0-chrome77-ff71](./node10.16.0-chrome77-ff71) | `cypress/browsers:node10.16.0-chrome77` | `77.0.3865.90` | `71.0` +[cypress/browsers:node12.4.0-chrome76](./node12.4.0-chrome76) | `cypress/base:12.4.0` | `76.0.3809.87` | 🚫 +[cypress/browsers:node12.6.0-chrome75](./node12.6.0-chrome75) | `cypress/base:12.6.0` | `75.0.3770.100` | 🚫 +[cypress/browsers:node12.8.1-chrome78-ff70](./node12.8.1-chrome78-ff70) | `cypress/browsers:node12.13.0-chrome78-ff70` | `78.0.3904.97` | `70.0.1` +[cypress/browsers:node12.13.0-chrome78-ff70](./node12.13.0-chrome78-ff70) | `cypress/base:12.13.0` | `78.0.3904.97` | `70.0.1` +[cypress/browsers:node12.13.0-chrome80-ff74](./node12.13.0-chrome80-ff74) | `node:12.13.0-buster` | `80.0.3987.116` | `74.0` +[cypress/browsers:node12.14.1-chrome83-ff77](./node12.14.1-chrome83-ff77) | `cypress/base:12.14.1` | `83.0.4103.61` | `77.0` +[cypress/browsers:node12.16.1-chrome80-ff73](./node12.16.1-chrome80-ff73) | `cypress/base:12.16.1` | `80.0.3987.122` | `73.0.1` +[cypress/browsers:node12.16.2-chrome81-ff75](./node12.16.2-chrome81-ff75) | `cypress/base:12.16.2` | `81.0.4044.113` | `75.0` +[cypress/browsers:node12.18.0-chrome83-ff77](./node12.18.0-chrome83-ff77) | `cypress/base:12.18.0` | `83.0.4103.61` | `77.0` +[cypress/browsers:node12.19.0-chrome86-ff82](./node12.19.0-chrome86-ff82) | `cypress/base:12.19.0` | `86.0.4240.193` | `82.0.3` +[cypress/browsers:node12.8.1-chrome80-ff72](./node12.8.1-chrome80-ff72) | `cypress/base:node12.8.1` | `80.0.3987.87` | `72.0.2` +[cypress/browsers:node12.18.3-chrome87-ff82](./node12.18.3-chrome87-ff82) | `cypress/base:node12.18.3` | `87.0.4280.66` | `82.0` +[cypress/browsers:node12.18.3-chrome89-ff86](./node12.18.3-chrome89-ff86) | `cypress/base:12.18.3` | `89.0.4389.72` | `86.0.1` +[cypress/browsers:node12.18.4-edge88](./node12.18.4-edge88) | `cypress/base:12.18.4` | 🚫 | 🚫 | `88.0.673.0 dev` +[cypress/browsers:node13.6.0-chrome80-ff72](./node13.6.0-chrome80-ff72) | `cypress/base:13.6.0` | `80.0.3987.87` | `72.0.2` +[cypress/browsers:node13.8.0-chrome81-ff75](./node13.8.0-chrome81-ff75) | `cypress/base:13.8.0` | `81.0.4044.113` | `75.0` +[cypress/browsers:node14.7.0-chrome84](./node14.7.0-chrome84) | `cypress/base:14.7.0` | `84.0.4147.105` | 🚫 +[cypress/browsers:node12.14.1-chrome85-ff81](./node12.14.1-chrome85-ff81) | `cypress/base:12.14.1` | `85.0.4183.121` | `81.0` +[cypress/browsers:node14.10.1-edge88](./node14.10.1-edge88) | `cypress/base:14.10.1` | 🚫 | 🚫 | `88.0.673.0 dev` +[cypress/browsers:node14.15.0-chrome86-ff82](./node14.15.0-chrome86-ff82) | `cypress/base:14.15.0` | `86.0.4240.193` | `82.0.3` +[cypress/browsers:node14.17.0-chrome88-ff89](./node14.17.0-chrome88-ff89) | `cypress/base:14.17.0` | `88.0.4324.96` | `89.0.2` +[cypress/browsers:node14.16.0-chrome89-ff77](./node14.16.0-chrome89-ff77) | `cypress/base:14.16.0` | `89.0.4389.72` | `77.0` +[cypress/browsers:node14.16.0-chrome89-ff86](./node14.16.0-chrome89-ff86) | `cypress/base:14.16.0` | `89.0.4389.72` | `86.0.1` +[cypress/browsers:node14.17.0-chrome91-ff89](./node14.17.0-chrome91-ff89) | `cypress/base:14.17.0` | `91.0.4472.114` | `89.0.2` +[cypress/browsers:node16.5.0-chrome94-ff93](./node16.5.0-chrome94-ff93) | `cypress/base:16.5.0` | `94.0.4606.71` | `93.0` \ No newline at end of file diff --git a/browsers/node16.5.0-chrome94-ff93/Dockerfile b/browsers/node16.5.0-chrome94-ff93/Dockerfile index 8adb7bea2b..7acf28dfa5 100644 --- a/browsers/node16.5.0-chrome94-ff93/Dockerfile +++ b/browsers/node16.5.0-chrome94-ff93/Dockerfile @@ -50,4 +50,4 @@ ENV TERM xterm # avoid million NPM install messages ENV npm_config_loglevel warn # allow installing when the main user is root -ENV npm_config_unsafe_perm true +ENV npm_config_unsafe_perm true \ No newline at end of file diff --git a/browsers/node16.5.0-chrome94-ff93/README.md b/browsers/node16.5.0-chrome94-ff93/README.md index 1e6441c882..9267a4d60c 100644 --- a/browsers/node16.5.0-chrome94-ff93/README.md +++ b/browsers/node16.5.0-chrome94-ff93/README.md @@ -17,4 +17,4 @@ A complete image with all operating system dependencies for Cypress, Chrome ``` **Note:** this image uses the `root` user. You might want to switch to non-root -user like `node` when running this container for security. +user like `node` when running this container for security. \ No newline at end of file diff --git a/browsers/node16.5.0-chrome94-ff93/build.sh b/browsers/node16.5.0-chrome94-ff93/build.sh index eaf8a61d3e..fac61deec9 100755 --- a/browsers/node16.5.0-chrome94-ff93/build.sh +++ b/browsers/node16.5.0-chrome94-ff93/build.sh @@ -3,4 +3,4 @@ set e+x LOCAL_NAME=cypress/browsers:node16.5.0-chrome94-ff93 echo "Building $LOCAL_NAME" -docker build --no-cache -t $LOCAL_NAME . +docker build --no-cache -t $LOCAL_NAME . \ No newline at end of file diff --git a/buildspec.yml b/buildspec.yml index 49d58bf203..19e86ed615 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,1218 +6,16 @@ env: batch: fast-fail: false build-list: - - identifier: base10220 + - identifier: browsernode1650Chrome94Ff93 env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_MEDIUM variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "10.22.0" - - identifier: base1200Libgbm - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "12.0.0-libgbm" - - identifier: base12183 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "12.18.3" - - identifier: base12184 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "12.18.4" - - identifier: base12190 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "12.19.0" - - identifier: base12228 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "12.22.8" - - identifier: base14101 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "14.10.1" - - identifier: base14150 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "14.15.0" - - identifier: base14154 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "14.15.4" - - identifier: base14160 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "14.16.0" - - identifier: base14170 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "14.17.0" - - identifier: base14173 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "14.17.3" - - identifier: base14181 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "14.18.1" - - identifier: base1450 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "14.5.0" - - identifier: base1470 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "14.7.0" - - identifier: base1600 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "16.0.0" - - identifier: base1610 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "16.1.0" - - identifier: base16130 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "16.13.0" - - identifier: base16132 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "16.13.2" - - identifier: base1620 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "16.2.0" - - identifier: base1630 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "16.3.0" - - identifier: base1640 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "16.4.0" - - identifier: base1650 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "16.5.0" - - identifier: base1730 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "17.3.0" - - identifier: basemanjaro14120 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "manjaro-14.12.0" - - - identifier: browsersnode12141Chrome85Ff81 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node12.14.1-chrome85-ff81" - - identifier: browsersnode12183Chrome83Ff77 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node12.18.3-chrome83-ff77" - - identifier: browsersnode12183Chrome87Ff82 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node12.18.3-chrome87-ff82" - - identifier: browsersnode12183Chrome89Ff86 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node12.18.3-chrome89-ff86" - - identifier: browsersnode12184Edge88 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node12.18.4-edge88" - - identifier: browsersnode12190Chrome86Ff82 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node12.19.0-chrome86-ff82" - - identifier: browsersnode1380Chrome81Ff75 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node13.8.0-chrome81-ff75" - - identifier: browsersnode14101Edge88 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node14.10.1-edge88" - - identifier: browsersnode14150Chrome86Ff82 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node14.15.0-chrome86-ff82" - - identifier: browsersnode14150Chrome96Ff94 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node14.15.0-chrome96-ff94" - - identifier: browsersnode14160Chrome89Ff77 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node14.16.0-chrome89-ff77" - - identifier: browsersnode14160Chrome89Ff86 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node14.16.0-chrome89-ff86" - - identifier: browsersnode14160Chrome90Ff88 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node14.16.0-chrome90-ff88" - - identifier: browsersnode14170Chrome88Ff89 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node14.17.0-chrome88-ff89" - - identifier: browsersnode14170Chrome91Ff89 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node14.17.0-chrome91-ff89" - - identifier: browsersnode1470Chrome84 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node14.7.0-chrome84" - - identifier: browsersnode16130Chrome95Ff94 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node16.13.0-chrome95-ff94" - - identifier: browsersnode16132Chrome97Ff96 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node16.13.2-chrome97-ff96" - - identifier: browsersnode1650Chrome94Ff93 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node16.5.0-chrome94-ff93" - - identifier: browsersnode1650Chrome97Ff96 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node16.5.0-chrome97-ff96" - - - identifier: included320 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "3.2.0" - - identifier: included330 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "3.3.0" - - identifier: included331 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "3.3.1" - - identifier: included332 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "3.3.2" - - identifier: included340 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "3.4.0" - - identifier: included341 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "3.4.1" - - identifier: included350 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "3.5.0" - - identifier: included360 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "3.6.0" - - identifier: included361 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "3.6.1" - - identifier: included370 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "3.7.0" - - identifier: included380 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "3.8.0" - - identifier: included381 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "3.8.1" - - identifier: included382 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "3.8.2" - - identifier: included383 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "3.8.3" - - identifier: included400 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "4.0.0" - - identifier: included401 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "4.0.1" - - identifier: included402 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "4.0.2" - - identifier: included410 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "4.1.0" - - identifier: included4100 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "4.10.0" - - identifier: included4110 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "4.11.0" - - identifier: included4120 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "4.12.0" - - identifier: included4121 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "4.12.1" - - identifier: included420 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "4.2.0" - - identifier: included430 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "4.3.0" - - identifier: included440 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "4.4.0" - - identifier: included441 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "4.4.1" - - identifier: included450 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "4.5.0" - - identifier: included460 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "4.6.0" - - identifier: included470 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "4.7.0" - - identifier: included480 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "4.8.0" - - identifier: included490 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "4.9.0" - - identifier: included500 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "5.0.0" - - identifier: included510 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "5.1.0" - - identifier: included520 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "5.2.0" - - identifier: included530 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "5.3.0" - - identifier: included540 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "5.4.0" - - identifier: included550 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "5.5.0" - - identifier: included560 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "5.6.0" - - identifier: included600 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "6.0.0" - - identifier: included601 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "6.0.1" - - identifier: included610 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "6.1.0" - - identifier: included620 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "6.2.0" - - identifier: included621 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "6.2.1" - - identifier: included630 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "6.3.0" - - identifier: included640 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "6.4.0" - - identifier: included650 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "6.5.0" - - identifier: included660 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "6.6.0" - - identifier: included670 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "6.7.0" - - identifier: included671 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "6.7.1" - - identifier: included680 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "6.8.0" - - identifier: included700 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "7.0.0" - - identifier: included701 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "7.0.1" - - identifier: included710 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "7.1.0" - - identifier: included720 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "7.2.0" - - identifier: included730 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "7.3.0" - - identifier: included740 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "7.4.0" - - identifier: included750 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "7.5.0" - - identifier: included760 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "7.6.0" - - identifier: included770 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "7.7.0" - - identifier: included810 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "8.1.0" - - identifier: included820 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "8.2.0" - - identifier: included830 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "8.3.0" - - identifier: included831 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "8.3.1" - - identifier: included840 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "8.4.0" - - identifier: included841 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "8.4.1" - - identifier: included850 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "8.5.0" - - identifier: included860 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "8.6.0" - - identifier: included870 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "8.7.0" - - identifier: included900 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "9.0.0" - - identifier: included910 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "9.1.0" - - identifier: included911 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "9.1.1" - - identifier: included920 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "9.2.0" - - identifier: included921 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "9.2.1" - - identifier: included930 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "9.3.0" - - identifier: included931 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "9.3.1" - - identifier: included940 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "9.4.1" + IMAGE_REPO_NAME: "cypress/browser" + IMAGE_DIR: "browser" + IMAGE_TAG: "node16.5.0-chrome94-ff93" phases: pre_build: @@ -1230,11 +28,11 @@ phases: - aws ecr-public get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin public.ecr.aws/$PUBLIC_ECR_ALIAS build: commands: - - echo Building the Docker image... + - echo Building the Docker image... - cd $IMAGE_DIR/$IMAGE_TAG - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG post_build: commands: - echo Pushing the Docker image... - - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG \ No newline at end of file + - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG diff --git a/circle.yml b/circle.yml index 1d2d6d95bd..5ee4ed29f4 100644 --- a/circle.yml +++ b/circle.yml @@ -227,8 +227,8 @@ commands: FROM << parameters.imageName >> RUN echo "current user: $(whoami)" ENV CI=1 - ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 WORKDIR /app + ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 RUN npm init --yes RUN npm install --save-dev cypress RUN ./node_modules/.bin/cypress verify @@ -382,8 +382,7 @@ jobs: - run: npm run check:markdown build-base-image: - machine: - image: ubuntu-2004:202111-02 + machine: true parameters: dockerName: type: string @@ -415,8 +414,7 @@ jobs: imageName: << parameters.dockerName >>:<< parameters.dockerTag >> build-browser-image: - machine: - image: ubuntu-2004:202111-02 + machine: true parameters: dockerName: type: string @@ -456,8 +454,7 @@ jobs: imageName: << parameters.dockerName >>:<< parameters.dockerTag >> build-included-image: - machine: - image: ubuntu-2004:202111-02 + machine: true parameters: dockerName: type: string @@ -497,302 +494,10 @@ workflows: lint: jobs: - lint-markdown - build-base-images: - jobs: - - build-base-image: - name: "base 10.22.0" - dockerTag: "10.22.0" - - build-base-image: - name: "base 12.0.0-libgbm" - dockerTag: "12.0.0-libgbm" - checkNodeVersion: false - - build-base-image: - name: "base 12.18.3" - dockerTag: "12.18.3" - - build-base-image: - name: "base 12.18.4" - dockerTag: "12.18.4" - - build-base-image: - name: "base 12.19.0" - dockerTag: "12.19.0" - - build-base-image: - name: "base 12.22.8" - dockerTag: "12.22.8" - - build-base-image: - name: "base 14.10.1" - dockerTag: "14.10.1" - - build-base-image: - name: "base 14.15.0" - dockerTag: "14.15.0" - - build-base-image: - name: "base 14.15.4" - dockerTag: "14.15.4" - - build-base-image: - name: "base 14.16.0" - dockerTag: "14.16.0" - - build-base-image: - name: "base 14.17.0" - dockerTag: "14.17.0" - - build-base-image: - name: "base 14.17.3" - dockerTag: "14.17.3" - - build-base-image: - name: "base 14.18.1" - dockerTag: "14.18.1" - - build-base-image: - name: "base 14.5.0" - dockerTag: "14.5.0" - - build-base-image: - name: "base 14.7.0" - dockerTag: "14.7.0" - - build-base-image: - name: "base 16.0.0" - dockerTag: "16.0.0" - - build-base-image: - name: "base 16.1.0" - dockerTag: "16.1.0" - - build-base-image: - name: "base 16.13.0" - dockerTag: "16.13.0" - - build-base-image: - name: "base 16.13.2" - dockerTag: "16.13.2" - - build-base-image: - name: "base 16.2.0" - dockerTag: "16.2.0" - - build-base-image: - name: "base 16.3.0" - dockerTag: "16.3.0" - - build-base-image: - name: "base 16.4.0" - dockerTag: "16.4.0" - - build-base-image: - name: "base 16.5.0" - dockerTag: "16.5.0" - - build-base-image: - name: "base 17.3.0" - dockerTag: "17.3.0" - - build-base-image: - name: "base manjaro-14.12.0" - dockerTag: "manjaro-14.12.0" - checkNodeVersion: false - build-browser-images: jobs: - build-browser-image: - name: "browsers node12.14.1-chrome85-ff81" - dockerTag: "node12.14.1-chrome85-ff81" - chromeVersion: "Google Chrome 85" - firefoxVersion: "Mozilla Firefox 81" - - build-browser-image: - name: "browsers node12.18.3-chrome83-ff77" - dockerTag: "node12.18.3-chrome83-ff77" - chromeVersion: "Google Chrome 83" - firefoxVersion: "Mozilla Firefox 77" - - build-browser-image: - name: "browsers node12.18.3-chrome87-ff82" - dockerTag: "node12.18.3-chrome87-ff82" - chromeVersion: "Google Chrome 87" - firefoxVersion: "Mozilla Firefox 82" - - build-browser-image: - name: "browsers node12.18.3-chrome89-ff86" - dockerTag: "node12.18.3-chrome89-ff86" - chromeVersion: "Google Chrome 89" - firefoxVersion: "Mozilla Firefox 86" - - build-browser-image: - name: "browsers node12.18.4-edge88" - dockerTag: "node12.18.4-edge88" - edgeVersion: "Microsoft Edge 88" - - build-browser-image: - name: "browsers node12.19.0-chrome86-ff82" - dockerTag: "node12.19.0-chrome86-ff82" - chromeVersion: "Google Chrome 86" - firefoxVersion: "Mozilla Firefox 82" - - build-browser-image: - name: "browsers node13.8.0-chrome81-ff75" - dockerTag: "node13.8.0-chrome81-ff75" - chromeVersion: "Google Chrome 81" - firefoxVersion: "Mozilla Firefox 75" - - build-browser-image: - name: "browsers node14.10.1-edge88" - dockerTag: "node14.10.1-edge88" - edgeVersion: "Microsoft Edge 88" - - build-browser-image: - name: "browsers node14.15.0-chrome86-ff82" - dockerTag: "node14.15.0-chrome86-ff82" - chromeVersion: "Google Chrome 86" - firefoxVersion: "Mozilla Firefox 82" - - build-browser-image: - name: "browsers node14.15.0-chrome96-ff94" - dockerTag: "node14.15.0-chrome96-ff94" - chromeVersion: "Google Chrome 96" - firefoxVersion: "Mozilla Firefox 94" - - build-browser-image: - name: "browsers node14.16.0-chrome89-ff77" - dockerTag: "node14.16.0-chrome89-ff77" - chromeVersion: "Google Chrome 89" - firefoxVersion: "Mozilla Firefox 77" - - build-browser-image: - name: "browsers node14.16.0-chrome89-ff86" - dockerTag: "node14.16.0-chrome89-ff86" - chromeVersion: "Google Chrome 89" - firefoxVersion: "Mozilla Firefox 86" - - build-browser-image: - name: "browsers node14.16.0-chrome90-ff88" - dockerTag: "node14.16.0-chrome90-ff88" - chromeVersion: "Google Chrome 90" - firefoxVersion: "Mozilla Firefox 88" - - build-browser-image: - name: "browsers node14.17.0-chrome88-ff89" - dockerTag: "node14.17.0-chrome88-ff89" - chromeVersion: "Google Chrome 88" - firefoxVersion: "Mozilla Firefox 89" - - build-browser-image: - name: "browsers node14.17.0-chrome91-ff89" - dockerTag: "node14.17.0-chrome91-ff89" - chromeVersion: "Google Chrome 91" - firefoxVersion: "Mozilla Firefox 89" - - build-browser-image: - name: "browsers node14.7.0-chrome84" - dockerTag: "node14.7.0-chrome84" - chromeVersion: "Google Chrome 84" - - build-browser-image: - name: "browsers node16.13.0-chrome95-ff94" - dockerTag: "node16.13.0-chrome95-ff94" - chromeVersion: "Google Chrome 95" - firefoxVersion: "Mozilla Firefox 94" - - build-browser-image: - name: "browsers node16.13.2-chrome97-ff96" - dockerTag: "node16.13.2-chrome97-ff96" - chromeVersion: "Google Chrome 97" - firefoxVersion: "Mozilla Firefox 96" - - build-browser-image: - name: "browsers node16.5.0-chrome94-ff93" + name: "browser node16.5.0-chrome94-ff93" dockerTag: "node16.5.0-chrome94-ff93" chromeVersion: "Google Chrome 94" firefoxVersion: "Mozilla Firefox 93" - - build-browser-image: - name: "browsers node16.5.0-chrome97-ff96" - dockerTag: "node16.5.0-chrome97-ff96" - chromeVersion: "Google Chrome 97" - firefoxVersion: "Mozilla Firefox 96" - - build-included-images: - jobs: - - build-included-image: - name: "included 6.0.0" - dockerTag: "6.0.0" - - build-included-image: - name: "included 6.0.1" - dockerTag: "6.0.1" - - build-included-image: - name: "included 6.1.0" - dockerTag: "6.1.0" - - build-included-image: - name: "included 6.2.0" - dockerTag: "6.2.0" - - build-included-image: - name: "included 6.2.1" - dockerTag: "6.2.1" - - build-included-image: - name: "included 6.3.0" - dockerTag: "6.3.0" - - build-included-image: - name: "included 6.4.0" - dockerTag: "6.4.0" - - build-included-image: - name: "included 6.5.0" - dockerTag: "6.5.0" - - build-included-image: - name: "included 6.6.0" - dockerTag: "6.6.0" - - build-included-image: - name: "included 6.7.0" - dockerTag: "6.7.0" - - build-included-image: - name: "included 6.7.1" - dockerTag: "6.7.1" - - build-included-image: - name: "included 6.8.0" - dockerTag: "6.8.0" - - build-included-image: - name: "included 7.0.0" - dockerTag: "7.0.0" - - build-included-image: - name: "included 7.0.1" - dockerTag: "7.0.1" - - build-included-image: - name: "included 7.1.0" - dockerTag: "7.1.0" - - build-included-image: - name: "included 7.2.0" - dockerTag: "7.2.0" - - build-included-image: - name: "included 7.3.0" - dockerTag: "7.3.0" - - build-included-image: - name: "included 7.4.0" - dockerTag: "7.4.0" - - build-included-image: - name: "included 7.5.0" - dockerTag: "7.5.0" - - build-included-image: - name: "included 7.6.0" - dockerTag: "7.6.0" - - build-included-image: - name: "included 7.7.0" - dockerTag: "7.7.0" - - build-included-image: - name: "included 8.0.0" - dockerTag: "8.0.0" - - build-included-image: - name: "included 8.1.0" - dockerTag: "8.1.0" - - build-included-image: - name: "included 8.2.0" - dockerTag: "8.2.0" - - build-included-image: - name: "included 8.3.0" - dockerTag: "8.3.0" - - build-included-image: - name: "included 8.3.1" - dockerTag: "8.3.1" - - build-included-image: - name: "included 8.4.0" - dockerTag: "8.4.0" - - build-included-image: - name: "included 8.4.1" - dockerTag: "8.4.1" - - build-included-image: - name: "included 8.5.0" - dockerTag: "8.5.0" - - build-included-image: - name: "included 8.6.0" - dockerTag: "8.6.0" - - build-included-image: - name: "included 8.7.0" - dockerTag: "8.7.0" - - build-included-image: - name: "included 9.0.0" - dockerTag: "9.0.0" - - build-included-image: - name: "included 9.1.0" - dockerTag: "9.1.0" - - build-included-image: - name: "included 9.1.1" - dockerTag: "9.1.1" - - build-included-image: - name: "included 9.2.0" - dockerTag: "9.2.0" - - build-included-image: - name: "included 9.2.1" - dockerTag: "9.2.1" - - build-included-image: - name: "included 9.3.0" - dockerTag: "9.3.0" - - build-included-image: - name: "included 9.3.1" - dockerTag: "9.3.1" - - build-included-image: - name: "included 9.4.1" - dockerTag: "9.4.1" diff --git a/examples/included-as-non-root-alternative/src/cypress/integration/spec.js b/examples/included-as-non-root-alternative/src/cypress/integration/spec.js index 4c664a5612..8937ff0b13 100644 --- a/examples/included-as-non-root-alternative/src/cypress/integration/spec.js +++ b/examples/included-as-non-root-alternative/src/cypress/integration/spec.js @@ -1,9 +1,9 @@ -describe('page', () => { +describe("page", () => { beforeEach(() => { - cy.visit('index.html') + cy.visit("index.html") }) - it('has h2', () => { - cy.contains('h2', 'test') + it("has h2", () => { + cy.contains("h2", "test") }) }) diff --git a/examples/included-as-non-root-alternative/src/index.html b/examples/included-as-non-root-alternative/src/index.html index 095e4ac23d..ce9f823989 100644 --- a/examples/included-as-non-root-alternative/src/index.html +++ b/examples/included-as-non-root-alternative/src/index.html @@ -1,4 +1,4 @@ -

A test

-

This is a test page

+

A test

+

This is a test page

diff --git a/examples/included-as-non-root-mapped/src/cypress/integration/spec.js b/examples/included-as-non-root-mapped/src/cypress/integration/spec.js index 4c664a5612..8937ff0b13 100644 --- a/examples/included-as-non-root-mapped/src/cypress/integration/spec.js +++ b/examples/included-as-non-root-mapped/src/cypress/integration/spec.js @@ -1,9 +1,9 @@ -describe('page', () => { +describe("page", () => { beforeEach(() => { - cy.visit('index.html') + cy.visit("index.html") }) - it('has h2', () => { - cy.contains('h2', 'test') + it("has h2", () => { + cy.contains("h2", "test") }) }) diff --git a/examples/included-as-non-root-mapped/src/index.html b/examples/included-as-non-root-mapped/src/index.html index 095e4ac23d..ce9f823989 100644 --- a/examples/included-as-non-root-mapped/src/index.html +++ b/examples/included-as-non-root-mapped/src/index.html @@ -1,4 +1,4 @@ -

A test

-

This is a test page

+

A test

+

This is a test page

diff --git a/examples/included-as-non-root/src/cypress/integration/spec.js b/examples/included-as-non-root/src/cypress/integration/spec.js index 4c664a5612..8937ff0b13 100644 --- a/examples/included-as-non-root/src/cypress/integration/spec.js +++ b/examples/included-as-non-root/src/cypress/integration/spec.js @@ -1,9 +1,9 @@ -describe('page', () => { +describe("page", () => { beforeEach(() => { - cy.visit('index.html') + cy.visit("index.html") }) - it('has h2', () => { - cy.contains('h2', 'test') + it("has h2", () => { + cy.contains("h2", "test") }) }) diff --git a/examples/included-as-non-root/src/index.html b/examples/included-as-non-root/src/index.html index 095e4ac23d..ce9f823989 100644 --- a/examples/included-as-non-root/src/index.html +++ b/examples/included-as-non-root/src/index.html @@ -1,4 +1,4 @@ -

A test

-

This is a test page

+

A test

+

This is a test page

diff --git a/examples/included-with-plugins/src/cypress/integration/spec.js b/examples/included-with-plugins/src/cypress/integration/spec.js index 9027ec9748..cfd8a5b4b6 100644 --- a/examples/included-with-plugins/src/cypress/integration/spec.js +++ b/examples/included-with-plugins/src/cypress/integration/spec.js @@ -1,19 +1,19 @@ -import { onlyOn, skipOn } from '@cypress/skip-test' +import { onlyOn, skipOn } from "@cypress/skip-test" -onlyOn('linux', () => { - describe('linux tests', () => { - it('has h2', () => { - cy.visit('index.html') - cy.contains('h2', 'test') +onlyOn("linux", () => { + describe("linux tests", () => { + it("has h2", () => { + cy.visit("index.html") + cy.contains("h2", "test") }) }) }) -skipOn('linux', () => { - describe('Tests on Mac or Windows', () => { - it('has h2', () => { - cy.visit('index.html') - cy.contains('h2', 'test') +skipOn("linux", () => { + describe("Tests on Mac or Windows", () => { + it("has h2", () => { + cy.visit("index.html") + cy.contains("h2", "test") }) }) }) diff --git a/examples/included-with-plugins/src/cypress/plugins/index.js b/examples/included-with-plugins/src/cypress/plugins/index.js index 3169433154..8b510e942a 100644 --- a/examples/included-with-plugins/src/cypress/plugins/index.js +++ b/examples/included-with-plugins/src/cypress/plugins/index.js @@ -1,6 +1,6 @@ -console.log('in plugins file') +console.log("in plugins file") module.exports = (on, config) => { - on('task', { - failed: require('cypress-failed-log/src/failed')(), + on("task", { + failed: require("cypress-failed-log/src/failed")(), }) } diff --git a/examples/included-with-plugins/src/cypress/support/index.js b/examples/included-with-plugins/src/cypress/support/index.js index 2453db4e23..7534b91900 100644 --- a/examples/included-with-plugins/src/cypress/support/index.js +++ b/examples/included-with-plugins/src/cypress/support/index.js @@ -1 +1 @@ -require('cypress-failed-log') +require("cypress-failed-log") diff --git a/examples/included-with-plugins/src/index.html b/examples/included-with-plugins/src/index.html index 095e4ac23d..ce9f823989 100644 --- a/examples/included-with-plugins/src/index.html +++ b/examples/included-with-plugins/src/index.html @@ -1,4 +1,4 @@ -

A test

-

This is a test page

+

A test

+

This is a test page

diff --git a/generate-config.js b/generate-config.js deleted file mode 100644 index 16b6b74344..0000000000 --- a/generate-config.js +++ /dev/null @@ -1,902 +0,0 @@ -// @ts-check -// this script generates CircleCI config file by looking at the "base/*" folders -// for each subfolder it creates a separate job -const globby = require('globby'); -const fs = require('fs') -const path = require('path') -const os = require('os') -const semver = require('semver') -const { camelCase } = require('lodash') -const slugify = require('slugify') - -const skipBaseImages = [ - '6', - '8', - '8.0.0', - '8.15.1', - '8.16.0', - '8.2.1', - '8.9.3', - '8.9.3-npm-6.10.1', - '10', - '10.0.0', - '10.11.0', - '10.15.3', - '10.16.0', - '10.16.3', - '10.18.0', - '10.18.1', - '10.2.1', - '11.13.0', - '12.0.0', - '12.1.0', - '12.12.0', - '12.13.0', - '12.14.0', - '12.14.1', - '12.16.0', - '12.16.1', - '12.16.2', - '12.18.0', - '12.18.2', - '12.4.0', - '12.6.0', - '12.8.1', - '13.1.0', - '13.3.0', - '13.6.0', - '13.8.0', - '14.0.0', - 'centos7', - 'centos7-12.4.0', - 'ubuntu16', - 'ubuntu16-12.13.1', - 'ubuntu16-8', - 'ubuntu18-node12.14.1', - 'ubuntu19-node12.14.1' -]; - -const skipBrowserImages = [ - 'chrome63-ff57', - 'chrome65-ff57', - 'chrome67', - 'chrome67-ff57', - 'chrome69', - 'node8.15.1-chrome73', - 'node8.2.1-chrome73', - 'node8.9.3-chrome73', - 'node8.9.3-npm6.10.1-chrome75', - 'node8.9.3-npm6.10.1-chrome76-ff68', - 'node10.11.0-chrome75', - 'node10.16.0-chrome76', - 'node10.16.0-chrome77', - 'node10.16.0-chrome77-ff71', - 'node10.16.3-chrome80-ff73', - 'node10.2.1-chrome74', - 'node11.13.0-chrome73', - 'node12.0.0-chrome73', - 'node12.0.0-chrome73-ff68', - 'node12.0.0-chrome75', - 'node12.13.0-chrome78-ff70', - 'node12.13.0-chrome78-ff70-brave78', - 'node12.13.0-chrome80-ff73', - 'node12.13.0-chrome80-ff74', - 'node12.14.0-chrome79-ff71', - 'node12.14.1-chrome83-ff77', - 'node12.16.1-chrome80-ff73', - 'node12.16.2-chrome81-ff75', - 'node12.18.0-chrome83-ff77', - 'node12.4.0-chrome76', - 'node12.6.0-chrome75', - 'node12.6.0-chrome77', - 'node12.8.1-chrome78-ff70', - 'node12.8.1-chrome80-ff72', - 'node13.1.0-chrome78-ff70', - 'node13.3.0-chrome79-ff70', - 'node13.6.0-chrome80-ff72' -] - -const awsCodeBuildPreamble = ` -version: 0.2 -env: - variables: - PUBLIC_ECR_ALIAS: "cypress-io" - -batch: - fast-fail: false - build-list:` - -const awsCodeBuildPostamble = ` - -phases: - pre_build: - commands: - - aws --version - - echo Check if $IMAGE_TAG is in ECR... - - ./find-ecr-image.sh $IMAGE_REPO_NAME $IMAGE_TAG -p - - echo Logging in to Amazon ECR... - - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com - - aws ecr-public get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin public.ecr.aws/$PUBLIC_ECR_ALIAS - build: - commands: - - echo Building the Docker image... - - cd $IMAGE_DIR/$IMAGE_TAG - - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG - post_build: - commands: - - echo Pushing the Docker image... - - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG -` - -const preamble = ` -# WARNING: this file is automatically generated by ${path.basename(__filename)} -# info on building Docker images on Circle -# https://circleci.com/docs/2.0/building-docker-images/ -version: 2.1 - -orbs: - node: circleci/node@5.0.0 - -commands: - halt-on-branch: - description: Halt current CircleCI job if not on master branch - steps: - - run: - name: Halting job if not on master branch - command: | - if [[ "$CIRCLE_BRANCH" != "master" ]]; then - echo "Not master branch, will skip the rest of commands" - circleci-agent step halt - else - echo "On master branch, can continue" - fi - - halt-if-docker-image-exists: - description: Halt current CircleCI job if Docker image exists already - parameters: - imageName: - type: string - description: Docker image name to test - steps: - - run: - name: Check if image << parameters.imageName >> exists or Docker hub does not respond - # using https://github.com/cypress-io/docker-image-not-found - # to check if Docker hub definitely does not have this image - command: | - if npx docker-image-not-found --repo << parameters.imageName >>; then - echo Docker hub says image << parameters.imageName >> does not exist - else - echo Docker hub has image << parameters.imageName >> or not responding - echo We should stop in this case - circleci-agent step halt - fi - - test-base-image: - description: Build a test image from base image and test it - parameters: - nodeVersion: - type: string - description: Node version to expect in the base image, starts with "v" - imageName: - type: string - description: Cypress base docker image to test - checkNodeVersion: - type: boolean - description: Check if the FROM image name is strict Node version - default: true - steps: - - when: - condition: << parameters.checkNodeVersion >> - steps: - - run: - name: confirm image has Node << parameters.nodeVersion >> - # do not run Docker in the interactive mode - adds control characters! - command: | - version=$(docker run << parameters.imageName >> node --version) - if [ "$version" == "<< parameters.nodeVersion >>" ]; then - echo "Base image has the expected version of Node << parameters.nodeVersion >>"; - else - echo "Problem: base image has unexpected Node version" - echo "Expected << parameters.nodeVersion >> and got $version" - exit 1 - fi - - run: - name: test image << parameters.imageName >> - no_output_timeout: '3m' - command: | - docker build -t cypress/test -\\<> - RUN echo "current user: $(whoami)" - ENV CI=1 - WORKDIR /app - RUN npm init --yes - RUN npm install --save-dev cypress cypress-expect - RUN ./node_modules/.bin/cypress verify - RUN npx @bahmutov/cly init - # run Cypress by itself - RUN ./node_modules/.bin/cypress run - # run Cypress using module API and confirm number of passing tests - RUN ./node_modules/.bin/cypress-expect run --passing 1 - EOF - - - run: - name: test image << parameters.imageName >> using Kitchensink - no_output_timeout: '3m' - command: | - docker build -t cypress/test-kitchensink -\\<> - RUN echo "current user: $(whoami)" - ENV CI=1 - ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 - WORKDIR /app - RUN npm init --yes - RUN npm install --save-dev cypress cypress-expect - RUN ./node_modules/.bin/cypress verify - RUN echo '{}' > cypress.json - # run Cypress and confirm minimum number of passing tets - RUN ./node_modules/.bin/cypress-expect run --min-passing 100 - EOF - - test-browser-image: - description: Build a test image from browser image and test it - parameters: - imageName: - type: string - description: Cypress browser docker image to test - chromeVersion: - type: string - default: '' - description: Chrome version to expect in the base image, starts with "Google Chrome XX" - firefoxVersion: - type: string - default: '' - description: Firefox version to expect in the base image, starts with "Mozilla Firefox XX" - edgeVersion: - type: string - default: '' - description: Edge version to expect in the base image, starts with "Microsoft Edge XX" - steps: - - when: - condition: << parameters.chromeVersion >> - steps: - - run: - name: confirm image has Chrome << parameters.chromeVersion >> - # do not run Docker in the interactive mode - adds control characters! - # and use Bash regex string comparison - command: | - version=$(docker run << parameters.imageName >> google-chrome --version) - if [[ "$version" =~ ^"<< parameters.chromeVersion >>" ]]; then - echo "Image has the expected version of Chrome << parameters.chromeVersion >>" - echo "found $version" - else - echo "Problem: image has unexpected Chrome version" - echo "Expected << parameters.chromeVersion >> and got $version" - exit 1 - fi - - - when: - condition: << parameters.firefoxVersion >> - steps: - - run: - name: confirm the image has Firefox << parameters.firefoxVersion >> - command: | - version=$(docker run << parameters.imageName >> firefox --version) - if [[ "$version" =~ ^"<< parameters.firefoxVersion >>" ]]; then - echo "Image has the expected version of Firefox << parameters.firefoxVersion >>" - echo "found $version" - else - echo "Problem: image has unexpected Firefox version" - echo "Expected << parameters.firefoxVersion >> and got $version" - exit 1 - fi - - - when: - condition: << parameters.edgeVersion >> - steps: - - run: - name: confirm the image has Edge << parameters.edgeVersion >> - command: | - version=$(docker run << parameters.imageName >> edge --version) - if [[ "$version" =~ ^"<< parameters.edgeVersion >>" ]]; then - echo "Image has the expected version of Edge << parameters.edgeVersion >>" - echo "found $version" - else - echo "Problem: image has unexpected Edge version" - echo "Expected << parameters.edgeVersion >> and got $version" - exit 1 - fi - - - run: - name: test image << parameters.imageName >> - no_output_timeout: '3m' - command: | - docker build -t cypress/test -\\<> - RUN echo "current user: $(whoami)" - ENV CI=1 - RUN npm init --yes - RUN npm install --save-dev cypress - RUN ./node_modules/.bin/cypress verify - RUN npx @bahmutov/cly init - EOF - - - run: - name: Test built-in Electron browser - no_output_timeout: '1m' - command: docker run cypress/test ./node_modules/.bin/cypress run - - - when: - condition: << parameters.chromeVersion >> - steps: - - run: - name: Test << parameters.chromeVersion >> - no_output_timeout: '1m' - command: docker run cypress/test ./node_modules/.bin/cypress run --browser chrome - - - when: - condition: << parameters.firefoxVersion >> - steps: - - run: - name: Test << parameters.firefoxVersion >> - no_output_timeout: '1m' - command: docker run cypress/test ./node_modules/.bin/cypress run --browser firefox - - - when: - condition: << parameters.edgeVersion >> - steps: - - run: - name: Test << parameters.edgeVersion >> - no_output_timeout: '1m' - command: docker run cypress/test ./node_modules/.bin/cypress run --browser edge - - - run: - name: scaffold image << parameters.imageName >> using Kitchensink - no_output_timeout: '3m' - command: | - docker build -t cypress/test-kitchensink -\\<> - RUN echo "current user: $(whoami)" - ENV CI=1 - ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 - RUN npm init --yes - RUN npm install --save-dev cypress - RUN ./node_modules/.bin/cypress verify - RUN echo '{}' > cypress.json - EOF - - - when: - condition: << parameters.chromeVersion >> - steps: - - run: - name: Test << parameters.chromeVersion >> - no_output_timeout: '1m' - command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser chrome - - - when: - condition: << parameters.firefoxVersion >> - steps: - - run: - name: Test << parameters.firefoxVersion >> - no_output_timeout: '1m' - command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser firefox - - - when: - condition: << parameters.edgeVersion >> - steps: - - run: - name: Test << parameters.edgeVersion >> - no_output_timeout: '1m' - command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser edge - - test-included-image-versions: - description: Testing pre-installed versions - parameters: - cypressVersion: - type: string - description: Cypress version to test, like "4.0.0" - imageName: - type: string - description: Cypress included docker image to test - steps: - - run: - name: 'Print versions' - command: docker run -it --entrypoint cypress cypress/included:<< parameters.cypressVersion >> version - - - run: - name: 'Print info' - command: docker run -it --entrypoint cypress cypress/included:<< parameters.cypressVersion >> info - - - run: - name: 'Check Node version' - command: | - export NODE_VERSION=$(docker run --entrypoint node cypress/included:<< parameters.cypressVersion >> --version) - export CYPRESS_NODE_VERSION=$(docker run --entrypoint cypress cypress/included:<< parameters.cypressVersion >> version --component node) - echo "Included Node $NODE_VERSION" - echo "Cypress includes Node $CYPRESS_NODE_VERSION" - # "node --version" returns something like "v12.1.2" - # and "cypres version ..." returns just "12.1.2" - if [ "$NODE_VERSION" = "v$CYPRESS_NODE_VERSION" ]; then - echo "Node versions match" - else - echo "Node version mismatch πŸ”₯" - # TODO make sure there are no extra characters in the versions - # https://github.com/cypress-io/cypress-docker-images/issues/411 - # exit 1 - fi - - test-included-image: - description: Testing Docker image with Cypress pre-installed - parameters: - cypressVersion: - type: string - description: Cypress version to test, like "4.0.0" - imageName: - type: string - description: Cypress included docker image to test - steps: - - run: - name: New test project and testing - no_output_timeout: '3m' - command: | - node --version - mkdir test - cd test - echo "Initializing test project" - npx @bahmutov/cly init --cypress-version << parameters.cypressVersion >> - - echo "Testing using Electron browser" - docker run -it -v $PWD:/e2e -w /e2e cypress/included:<< parameters.cypressVersion >> - - echo "Testing using Chrome browser" - docker run -it -v $PWD:/e2e -w /e2e cypress/included:<< parameters.cypressVersion >> --browser chrome - working_directory: /tmp - - test-included-image-using-kitchensink: - description: Testing Cypress pre-installed using Kitchensink - parameters: - cypressVersion: - type: string - description: Cypress version to test, like "4.0.0" - imageName: - type: string - description: Cypress included docker image to test - steps: - - run: - name: Testing Kitchensink - no_output_timeout: '3m' - command: | - node --version - mkdir test-kitchensink - cd test-kitchensink - - npm init -y - echo '{}' > cypress.json - - echo "Testing using Electron browser" - docker run -it -v $PWD:/e2e -w /e2e -e CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 cypress/included:<< parameters.cypressVersion >> - - echo "Testing using Chrome browser" - docker run -it -v $PWD:/e2e -w /e2e -e CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 cypress/included:<< parameters.cypressVersion >> --browser chrome - - working_directory: /tmp - - docker-push: - description: Log in and push a given image to Docker hub - parameters: - imageName: - type: string - description: Docker image name to push - steps: - # before pushing, let's check again that the Docker Hub does not have the image - # accidental rebuild and overwrite of an image is bad, since it can bump every tool - # https://github.com/cypress-io/cypress/issues/6335 - - halt-if-docker-image-exists: - imageName: << parameters.imageName >> - - run: - name: Pushing image << parameters.imageName >> to Docker Hub - command: | - echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin - docker push << parameters.imageName >> - -jobs: - lint-markdown: - executor: - name: node/default - tag: '12' - steps: - - checkout - - node/with-cache: - steps: - - run: npm ci - - run: npm run check:markdown - - build-base-image: - machine: true - parameters: - dockerName: - type: string - description: Image name to build - default: cypress/base - dockerTag: - type: string - description: Image tag to build like "12.14.0" - checkNodeVersion: - type: boolean - description: Check if the FROM image name is strict Node version - default: true - steps: - - checkout - - halt-if-docker-image-exists: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - run: - name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> - command: | - docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . - working_directory: base/<< parameters.dockerTag >> - - - test-base-image: - nodeVersion: v<< parameters.dockerTag >> - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - checkNodeVersion: << parameters.checkNodeVersion >> - - halt-on-branch - - docker-push: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - build-browser-image: - machine: true - parameters: - dockerName: - type: string - description: Image name to build - default: cypress/browsers - dockerTag: - type: string - description: Image tag to build like "node12.4.0-chrome76" - chromeVersion: - type: string - default: '' - description: Chrome version to expect in the base image, starts with "Google Chrome XX" - firefoxVersion: - type: string - default: '' - description: Firefox version to expect in the base image, starts with "Mozilla Firefox XX" - edgeVersion: - type: string - default: '' - description: Edge version to expect in the base image, starts with "Microsoft Edge XX" - steps: - - checkout - - halt-if-docker-image-exists: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - run: - name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> - command: | - docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . - working_directory: browsers/<< parameters.dockerTag >> - - test-browser-image: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - chromeVersion: << parameters.chromeVersion >> - firefoxVersion: << parameters.firefoxVersion >> - edgeVersion: << parameters.edgeVersion >> - - halt-on-branch - - docker-push: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - build-included-image: - machine: true - parameters: - dockerName: - type: string - description: Image name to build - default: cypress/included - dockerTag: - type: string - description: Image tag to build, should match Cypress version, like "3.8.1" - steps: - - checkout - - halt-if-docker-image-exists: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - run: - name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> - command: | - docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . - working_directory: included/<< parameters.dockerTag >> - - - test-included-image-versions: - cypressVersion: << parameters.dockerTag >> - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - - test-included-image: - cypressVersion: << parameters.dockerTag >> - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - - test-included-image-using-kitchensink: - cypressVersion: << parameters.dockerTag >> - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - - halt-on-branch - - docker-push: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - -workflows: - version: 2 - lint: - jobs: - - lint-markdown -` - -const formBaseWorkflow = (baseImages) => { - // skip images that already have been built - // one can update this list if the number of - // build jobs in circleci grows too long - const isSkipped = (tag) => skipBaseImages.includes(tag) - const isIncluded = (imageAndTag) => !isSkipped(imageAndTag.tag) - - const yml = baseImages.filter(isIncluded).map(imageAndTag => { - // important to have indent - let job = ' - build-base-image:\n' + - ` name: "base ${imageAndTag.tag}"\n` + - ` dockerTag: "${imageAndTag.tag}"\n` - // do not check Node versions in some custom images - if (imageAndTag.tag === '12.0.0-libgbm' || imageAndTag.tag === 'manjaro-14.12.0') { - job += ' checkNodeVersion: false\n' - } - return job - }) - - // indent is important - const workflowName = ' build-base-images:\n' + - ' jobs:\n' - - const text = workflowName + yml.join('') - return text -} - -const fullChromeVersion = (version) => - `Google Chrome ${version}` - -const fullFirefoxVersion = (version) => - `Mozilla Firefox ${version}` - -const fullEdgeVersion = (version) => - `Microsoft Edge ${version}` - -const findChromeVersion = (imageAndTag) => { - // image name like "nodeX.Y.Z-chromeXX..." - // the folder has "chromeXX" name, so extract the "XX" part - const matches = /chrome(\d+)/.exec(imageAndTag) - if (matches && matches[1]) { - return fullChromeVersion(matches[1]) - } - - return null -} - -const findFirefoxVersion = (imageAndTag) => { - // image name like "nodeX.Y.Z-chromeXX-ffYY..." - // the folder has "ffYY" name, so extract the "YY" part - const matches = /-ff(\d+)/.exec(imageAndTag) - if (matches && matches[1]) { - return fullFirefoxVersion(matches[1]) - } - - return null -} - -const findEdgeVersion = (imageAndTag) => { - // image name like "nodeX.Y.Z-edgeXX" - // so we will extract "XX" part - const matches = /-edge(\d+)/.exec(imageAndTag) - if (matches && matches[1]) { - return fullEdgeVersion(matches[1]) - } - - return null -} - -const formBrowserWorkflow = (browserImages) => { - // not every browser image can be tested - // some old images do not have NPX for example - // so let them be - const isSkipped = (tag) => skipBrowserImages.includes(tag) - const isIncluded = (imageAndTag) => !isSkipped(imageAndTag.tag) - - const yml = browserImages.filter(isIncluded).map(imageAndTag => { - const chromeVersion = findChromeVersion(imageAndTag.tag) - const firefoxVersion = findFirefoxVersion(imageAndTag.tag) - const edgeVersion = findEdgeVersion(imageAndTag.tag) - const foundBrowser = chromeVersion || firefoxVersion || edgeVersion - - if (!foundBrowser) { - throw new Error(`Cannot find any browsers from image tag "${imageAndTag.tag}"`) - } - - // important to have indent - let job = ' - build-browser-image:\n' + - ` name: "browsers ${imageAndTag.tag}"\n` + - ` dockerTag: "${imageAndTag.tag}"\n` - - if (chromeVersion) { - job += ` chromeVersion: "${chromeVersion}"\n` - } - - if (firefoxVersion) { - job += ` firefoxVersion: "${firefoxVersion}"\n` - } - - if (edgeVersion) { - job += ` edgeVersion: "${edgeVersion}"\n` - } - - return job - }) - - // indent is important - const workflowName = ' build-browser-images:\n' + - ' jobs:\n' - - const text = workflowName + yml.join('') - return text -} - -const formIncludedWorkflow = (images) => { - // skip images that have been built already - const isSkipped = (tag) => { - return semver.lt(tag, '6.0.0') - } - const isIncluded = (imageAndTag) => !isSkipped(imageAndTag.tag) - - const yml = images.filter(isIncluded).map(imageAndTag => { - // important to have indent - const job = ' - build-included-image:\n' + - ` name: "included ${imageAndTag.tag}"\n` + - ` dockerTag: "${imageAndTag.tag}"\n` - return job - }) - - // indent is important - const workflowName = ' build-included-images:\n' + - ' jobs:\n' - - const text = workflowName + yml.join('') - return text -} - -const writeConfigFile = (baseImages, browserImages, includedImages) => { - const base = formBaseWorkflow(baseImages) - const browsers = formBrowserWorkflow(browserImages) - const included = formIncludedWorkflow(includedImages) - - const text = preamble.trim() + os.EOL + base + os.EOL + browsers + os.EOL + included - fs.writeFileSync('circle.yml', text, 'utf8') - console.log('generated circle.yml') -} - -const splitImageFolderName = (folderName) => { - const [name, tag] = folderName.split('/') - return { - name, - tag - } -} - -const formAwsCodeBuildBaseWorkflow = (baseImages) => { - // skip images that already have been built - // one can update this list if the number of - // build jobs in AWS CodeBuild grows too long - const isSkipped = (tag) => skipBaseImages.includes(tag) - const isIncluded = (imageAndTag) => !isSkipped(imageAndTag.tag) - - const yml = baseImages.filter(isIncluded).map(imageAndTag => { - console.log('imageAndTag', imageAndTag) - // @ts-ignore - const tagSlug = slugify(imageAndTag.tag, '-') - console.log('tagSlug', tagSlug) - const identifier = camelCase(`${imageAndTag.name}${imageAndTag.tag}`) - let job = ` - identifier: ${identifier} - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/${imageAndTag.name}" - IMAGE_DIR: "${imageAndTag.name}" - IMAGE_TAG: "${imageAndTag.tag}"\n` - return job - }) - - const text = yml.join('') - return text -} - -const formAwsCodeBuildBrowserWorkflow = (baseImages) => { - // skip images that already have been built - // one can update this list if the number of - // build jobs in AWS CodeBuild grows too long - const isSkipped = (tag) => skipBrowserImages.includes(tag) - const isIncluded = (imageAndTag) => !isSkipped(imageAndTag.tag) - - const yml = baseImages.filter(isIncluded).map(imageAndTag => { - console.log('imageAndTag', imageAndTag) - // @ts-ignore - const tagSlug = slugify(imageAndTag.tag, '-') - console.log('tagSlug', tagSlug) - const identifier = camelCase(`${imageAndTag.name}${imageAndTag.tag}`) - let job = ` - identifier: ${identifier} - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/${imageAndTag.name}" - IMAGE_DIR: "${imageAndTag.name}" - IMAGE_TAG: "${imageAndTag.tag}"\n` - return job - }) - - const text = yml.join('') - return text -} - -const formAwsCodeBuildIncludedWorkflow = (baseImages) => { - // skip images that already have been built - // one can update this list if the number of - // build jobs in AWS CodeBuild grows too long - const isSkipped = (tag) => skipBaseImages.includes(tag) - const isIncluded = (imageAndTag) => !isSkipped(imageAndTag.tag) - - const yml = baseImages.filter(isIncluded).map(imageAndTag => { - console.log('imageAndTag', imageAndTag) - // @ts-ignore - const tagSlug = slugify(imageAndTag.tag, '-') - console.log('tagSlug', tagSlug) - const identifier = camelCase(`${imageAndTag.name}${imageAndTag.tag}`) - let job = ` - identifier: ${identifier} - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/${imageAndTag.name}" - IMAGE_DIR: "${imageAndTag.name}" - IMAGE_TAG: "${imageAndTag.tag}"\n` - return job - }) - - const text = yml.join('') - return text -} - -const writeBuildspecConfigFile = (baseImages, browserImages, includedImages) => { - const base = formAwsCodeBuildBaseWorkflow(baseImages) - const browsers = formAwsCodeBuildBrowserWorkflow(browserImages) - const included = formAwsCodeBuildIncludedWorkflow(includedImages) - - const text = awsCodeBuildPreamble.trim() + os.EOL + base + os.EOL + browsers + os.EOL + included + os.EOL + awsCodeBuildPostamble.trim() - fs.writeFileSync('buildspec.yml', text, 'utf8') - console.log('generated buildspec.yml') -} - -(async () => { - const basePaths = await globby('base/*', {onlyDirectories: true}); - const base = basePaths.map(splitImageFolderName) - console.log(' *** base images ***') - console.log(base) - - const browsersPaths = await globby('browsers/*', {onlyDirectories: true}); - const browsers = browsersPaths.map(splitImageFolderName) - console.log(' *** browser images ***') - console.log(browsers) - - const includedPaths = await globby('included/*', {onlyDirectories: true}); - const included = includedPaths.map(splitImageFolderName) - console.log(' *** included images ***') - console.log(included) - - writeConfigFile(base, browsers, included) - writeBuildspecConfigFile(base, browsers, included) -})(); diff --git a/included/CHANGELOG.md b/included/CHANGELOG.md new file mode 100644 index 0000000000..21cd89badf --- /dev/null +++ b/included/CHANGELOG.md @@ -0,0 +1,74 @@ +Name + Tag | Base image +--- | --- +[cypress/included:3.2.0](3.2.0) | `cypress/base:12.1.0` +[cypress/included:3.3.0](3.3.0) | `cypress/base:12.1.0` +[cypress/included:3.3.1](3.3.1) | `cypress/base:12.1.0` +[cypress/included:3.3.2](3.3.2) | `cypress/base:12.1.0` +[cypress/included:3.4.0](3.4.0) | `cypress/browsers:node12.6.0-chrome75` +[cypress/included:3.4.1](3.4.1) | `cypress/browsers:node12.6.0-chrome75` +[cypress/included:3.5.0](3.5.0) | `cypress/browsers:node12.6.0-chrome77` +[cypress/included:3.6.0](3.6.0) | `cypress/browsers:node12.6.0-chrome77` +[cypress/included:3.6.1](3.6.1) | `cypress/browsers:node12.6.0-chrome77` +[cypress/included:3.7.0](3.7.0) | `cypress/browsers:node12.6.0-chrome77` +[cypress/included:3.8.0](3.8.0) | `cypress/browsers:node12.6.0-chrome77` +[cypress/included:3.8.2](3.8.2) | `cypress/browsers:node12.6.0-chrome77` +[cypress/included:3.8.3](3.8.3) | `cypress/browsers:node12.6.0-chrome77` +[cypress/included:4.0.0](4.0.0) | `cypress/browsers:node13.6.0-chrome-80-ff72` +[cypress/included:4.0.1](4.0.1) | `cypress/browsers:node13.6.0-chrome-80-ff72` +[cypress/included:4.0.2](4.0.2) | `cypress/browsers:node13.6.0-chrome-80-ff72` +[cypress/included:4.1.0](4.1.0) | `cypress/browsers:node12.16.1-chrome-80-ff73` +[cypress/included:4.2.0](4.2.0) | `cypress/browsers:node12.13.0-chrome80-ff74` +[cypress/included:4.3.0](4.3.0) | `cypress/browsers:node12.13.0-chrome80-ff74` +[cypress/included:4.4.0](4.4.0) | `cypress/browsers:node12.13.0-chrome80-ff74` +[cypress/included:4.4.1](4.4.1) | `cypress/browsers:node12.13.0-chrome80-ff74` +[cypress/included:4.5.0](4.5.0) | `cypress/browsers:node12.13.0-chrome80-ff74` +[cypress/included:4.6.0](4.6.0) | `cypress/browsers:node12.16.2-chrome81-ff75` +[cypress/included:4.7.0](4.7.0) | `cypress/browsers:node12.16.2-chrome81-ff75` +[cypress/included:4.8.0](4.8.0) | `cypress/browsers:node12.16.2-chrome81-ff75` +[cypress/included:4.9.0](4.9.0) | `cypress/browsers:node12.16.2-chrome81-ff75` +[cypress/included:4.10.0](4.10.0) | `cypress/browsers:node12.14.1-chrome83-ff77` +[cypress/included:4.11.0](4.11.0) | `cypress/browsers:node12.14.1-chrome83-ff77` +[cypress/included:4.12.0](4.12.0) | `cypress/browsers:node12.18.0-chrome83-ff77` +[cypress/included:4.12.1](4.12.1) | `cypress/browsers:node12.18.0-chrome83-ff77` +[cypress/included:5.0.0](5.0.0) | `cypress/browsers:node12.18.0-chrome83-ff77` +[cypress/included:5.1.0](5.1.0) | `cypress/browsers:node12.18.0-chrome83-ff77` +[cypress/included:5.2.0](5.2.0) | `cypress/browsers:node12.18.0-chrome83-ff77` +[cypress/included:5.3.0](5.3.0) | `cypress/browsers:node12.14.1-chrome85-ff81` +[cypress/included:5.4.0](5.4.0) | `cypress/browsers:node12.14.1-chrome85-ff81` +[cypress/included:5.5.0](5.5.0) | `cypress/browsers:node12.14.1-chrome85-ff81` +[cypress/included:5.6.0](5.6.0) | `cypress/browsers:node12.14.1-chrome85-ff81` +[cypress/included:6.0.0](6.0.0) | `cypress/browsers:node12.18.3-chrome83-ff77` +[cypress/included:6.0.1](6.0.1) | `cypress/browsers:node12.18.3-chrome87-ff82` +[cypress/included:6.1.0](6.1.0) | `cypress/browsers:node12.18.3-chrome87-ff82` +[cypress/included:6.2.0](6.2.0) | `cypress/browsers:node12.18.3-chrome87-ff82` +[cypress/included:6.2.1](6.2.1) | `cypress/browsers:node12.18.3-chrome87-ff82` +[cypress/included:6.3.0](6.3.0) | `cypress/browsers:node12.18.3-chrome87-ff82` +[cypress/included:6.4.0](6.4.0) | `cypress/browsers:node12.18.3-chrome87-ff82` +[cypress/included:6.5.0](6.5.0) | `cypress/browsers:node12.18.3-chrome87-ff82` +[cypress/included:6.6.0](6.6.0) | `cypress/browsers:node12.18.3-chrome87-ff82` +[cypress/included:6.7.0](6.7.0) | `cypress/browsers:node12.18.3-chrome87-ff82` +[cypress/included:6.7.1](6.7.1) | `cypress/browsers:node12.18.3-chrome87-ff82` +[cypress/included:6.8.0](6.8.0) | `cypress/browsers:node12.18.3-chrome89-ff86` +[cypress/included:7.0.0](7.0.0) | `cypress/browsers:node12.18.3-chrome89-ff86` +[cypress/included:7.0.1](7.0.1) | `cypress/browsers:node14.16.0-chrome89-ff77` +[cypress/included:7.1.0](7.1.0) | `cypress/browsers:node14.16.0-chrome89-ff77` +[cypress/included:7.2.0](7.2.0) | `cypress/browsers:node14.16.0-chrome89-ff77` +[cypress/included:7.3.0](7.3.0) | `cypress/browsers:node14.16.0-chrome89-ff77` +[cypress/included:7.4.0](7.4.0) | `cypress/browsers:node14.16.0-chrome89-ff77` +[cypress/included:7.5.0](7.5.0) | `cypress/browsers:node14.16.0-chrome89-ff86` +[cypress/included:7.6.0](7.6.0) | `cypress/browsers:node14.16.0-chrome89-ff86` +[cypress/included:7.7.0](7.7.0) | `cypress/browsers:node14.16.0-chrome89-ff86` +[cypress/included:8.0.0](8.0.0) | `cypress/browsers:node14.16.0-chrome90-ff88` +[cypress/included:8.1.0](8.1.0) | `cypress/browsers:node14.16.0-chrome90-ff88` +[cypress/included:8.2.0](8.2.0) | `cypress/browsers:node14.16.0-chrome90-ff88` +[cypress/included:8.3.0](8.3.0) | `cypress/browsers:node14.16.0-chrome90-ff88` +[cypress/included:8.3.1](8.3.1) | `cypress/browsers:node14.17.0-chrome91-ff89` +[cypress/included:8.4.0](8.4.0) | `cypress/browsers:node14.17.0-chrome91-ff89` +[cypress/included:8.4.1](8.4.1) | `cypress/browsers:node14.17.0-chrome91-ff89` +[cypress/included:8.5.0](8.5.0) | `cypress/browsers:node14.17.0-chrome91-ff89` +[cypress/included:8.6.0](8.6.0) | `cypress/browsers:node14.17.0-chrome91-ff89` +[cypress/included:8.7.0](8.7.0) | `cypress/browsers:node14.17.0-chrome91-ff89` +[cypress/included:9.0.0](9.0.0) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.1.0](9.1.0) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.1.1](9.1.1) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` \ No newline at end of file diff --git a/included/README.md b/included/README.md index 793a58e857..fc519930b7 100644 --- a/included/README.md +++ b/included/README.md @@ -3,8 +3,8 @@ [![Docker Pulls](https://img.shields.io/docker/pulls/cypress/included.svg?maxAge=604800)](https://hub.docker.com/r/cypress/included/) > Docker images with all operating system dependencies, Cypress, and some pre-installed browsers. - -Name + Tag | Base image + + Name + Tag | Base image --- | --- [cypress/included:3.2.0](3.2.0) | `cypress/base:12.1.0` [cypress/included:3.3.0](3.3.0) | `cypress/base:12.1.0` @@ -163,8 +163,7 @@ System Memory: 2.09 GB free 285 MB If you want to provide Cypress command line arguments, specify the entry point and the arguments. For example to run tests with recording and parallel mode using custom build ID "abc123" we can use: ```shell -$ docker run -it --entrypoint=cypress cypress/included:7.5.0 \ - run --record --parallel --ci-build-id abc123 +$ docker run -it --entrypoint=cypress cypress/included:9.4.1 run --record --parallel --ci-build-id abc123 ``` ## Keep the container @@ -174,8 +173,7 @@ Every time you run `docker run` you spawn a new container. That container then s If you are running a lot of tests again and again, you might start the container once using Bash as the entrypoint, instead of the default `cypress` command. Then you can execute the `cypress run` or any other commands, while still in the same container: ``` -$ docker run -it -v $PWD:/e2e -w /e2e \ - --entrypoint=/bin/bash cypress/included:7.3.0 +$ docker run -it -v $PWD:/e2e -w /e2e --entrypoint=/bin/bash cypress/included:9.4.1 # we are inside the container # let's run the tests root@814ed01841fe:/e2e# cypress run @@ -200,7 +198,8 @@ $ docker run -it -v $PWD:/e2e -w /e2e --entrypoint=cypress cypress/included:3.8. β”‚ Browser: Chrome 77 β”‚ Specs: 1 found (spec.js) └───────────────────────────────── -... + + ... ``` For more information, read [Run Cypress with a single Docker command](https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/) and [End-to-End Testing Web Apps: The Painless Way](https://mtlynch.io/painless-web-app-testing/) @@ -264,12 +263,10 @@ If you want to run Cypress after a server has started, we suggest using [wait-on ```shell # execute the Cypress container once -docker run --rm \ # remove container after finish - -v ./e2e:/e2e \ # map current folder to "e2e" folder - --workdir=/e2e \ - --entrypoint="" \ # remove default entrypoint command - cypress/included:4.11.0 \ - # wait for the local site to respond +docker run --rm # remove container after finish + -v ./e2e:/e2e # map current folder to "e2e" folder + --workdir=/e2e --entrypoint="" # remove default entrypoint command + cypress/included:4.11.0 # wait for the local site to respond # then run Cypress tests /bin/bash -c 'npx wait-on http://127.0.0.1:3000 && cypress run' ``` @@ -279,7 +276,5 @@ docker run --rm \ # remove container after finish If you want to simulate slow container, run the Docker container with `--cpus` parameter, for example, let's debug the browser detection problems when the CPU is (very) slow: ```shell -docker run -it -v $PWD:/e2e -w /e2e --cpus=0.02 \ - -e DEBUG=cypress:launcher --entrypoint=cypress \ - cypress/included:7.2.0 info +docker run -it -v $PWD:/e2e -w /e2e --cpus=0.02 -e DEBUG=cypress:launcher --entrypoint=cypress cypress/included:9.4.1 info ``` diff --git a/package.json b/package.json index 8d148e1061..44b31161b5 100644 --- a/package.json +++ b/package.json @@ -9,10 +9,12 @@ }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "build": "node ./generate-config", - "add:base": "node ./generate-base-image", - "add:included": "node ./generate-included-image", - "check:markdown": "find . -type f -name '*.md' ! -path './node_modules/*' ! -path './examples/*' | xargs -L1 npx markdown-link-check --quiet" + "build": "node ./scripts/generate-config", + "add:base": "node ./scripts/generate-base-image", + "add:browser": "node ./scripts/generate-browser-image", + "add:included": "node ./scripts/generate-included-image", + "check:markdown": "find . -type f -name '*.md' ! -path './node_modules/*' ! -path './examples/*' | xargs -L1 npx markdown-link-check --quiet", + "format": "prettier --write ." }, "engines": { "node": ">=12" @@ -31,8 +33,9 @@ "devDependencies": { "globby": "10.0.1", "markdown-link-check": "3.8.0", + "prettier": "2.5.1", "semver": "7.1.3", - "shelljs": "0.8.3", + "shelljs": "0.8.5", "slugify": "^1.4.7", "lodash": "4.17.21", "glob-parent": "^6.0.2", diff --git a/scripts/create-commit.sh b/scripts/create-commit.sh new file mode 100644 index 0000000000..671a4701ae --- /dev/null +++ b/scripts/create-commit.sh @@ -0,0 +1,12 @@ +SCOPE=$1 +VERSION=$2 + +echo $SCOPE +echo $VERSION + +git add . +echo "Your changes were staged successfully" + +git commit -m "feat($SCOPE): generate new image with version $VERSION" +echo "Your changes were committed with the following message: +feat($SCOPE): generate new image with version $VERSION" \ No newline at end of file diff --git a/generate-base-image.js b/scripts/generate-base-image.js similarity index 69% rename from generate-base-image.js rename to scripts/generate-base-image.js index 2b3cafd36c..6a371feba5 100644 --- a/generate-base-image.js +++ b/scripts/generate-base-image.js @@ -1,8 +1,8 @@ // creates new folder base/ with Dockerfile and README file -const path = require('path') -const fs = require('fs') -const shelljs = require('shelljs') -const {isStrictSemver} = require('./utils') +const path = require("path") +const fs = require("fs") +const shelljs = require("shelljs") +const { isStrictSemver } = require("../utils") const versionTag = process.argv[2] @@ -11,10 +11,10 @@ if (!versionTag || !isStrictSemver(versionTag)) { process.exit(1) } -const outputFolder = path.join('base', versionTag) -if (shelljs.test('-d', outputFolder)) { +const outputFolder = path.join("base", versionTag) +if (shelljs.test("-d", outputFolder)) { console.log('removing existing folder "%s"', outputFolder) - shelljs.rm('-rf', outputFolder) + shelljs.rm("-rf", outputFolder) } console.log('creating "%s"', outputFolder) shelljs.mkdir(outputFolder) @@ -88,9 +88,9 @@ RUN echo " node version: $(node -v) \\n" \\ "debian version: $(cat /etc/debian_version) \\n" \\ "user: $(whoami) \\n" ` -const dockerFilename = path.join(outputFolder, 'Dockerfile') -fs.writeFileSync(dockerFilename, Dockerfile.trim() + '\n', 'utf8') -console.log('Saved %s', dockerFilename) +const dockerFilename = path.join(outputFolder, "Dockerfile") +fs.writeFileSync(dockerFilename, Dockerfile.trim() + "\n", "utf8") +console.log("Saved %s", dockerFilename) const README = ` @@ -113,9 +113,9 @@ RUN $(npm bin)/cypress run \`\`\` ` -const readmeFilename = path.join(outputFolder, 'README.md') -fs.writeFileSync(readmeFilename, README.trim() + '\n', 'utf8') -console.log('Saved %s', readmeFilename) +const readmeFilename = path.join(outputFolder, "README.md") +fs.writeFileSync(readmeFilename, README.trim() + "\n", "utf8") +console.log("Saved %s", readmeFilename) // to make building images simpler and to follow the same pattern as previous builds const buildScript = ` @@ -129,16 +129,19 @@ echo "Building $LOCAL_NAME" docker build -t $LOCAL_NAME . ` -const buildFilename = path.join(outputFolder, 'build.sh') -fs.writeFileSync(buildFilename, buildScript.trim() + '\n', 'utf8') -shelljs.chmod('a+x', buildFilename) -console.log('Saved %s', buildFilename) +const buildFilename = path.join(outputFolder, "build.sh") +fs.writeFileSync(buildFilename, buildScript.trim() + "\n", "utf8") +shelljs.chmod("a+x", buildFilename) +console.log("Saved %s", buildFilename) console.log(` -Please add the newly generated folder ${outputFolder} to Git and update CircleCI file with +Please add the newly generated folder ${outputFolder} to Git. Build the Docker container locally to make sure it is correct`) - npm run build +// Generate Base Config +require("child_process").fork(__dirname + "/generate-config.js", ["base", versionTag]) -Build the Docker container locally to make sure it is correct and update "base/README.md" list -of images with the new image information. -`) +// GENERATE BASE README WITH UPDATED CHANGELOG +require("child_process").fork(__dirname + "/generate-base-readme.js", [versionTag]) + +// ASK USER IF THEY WANT TO COMMIT CHANGES +require("child_process").fork(__dirname + "/generate-commit.js", ["base", versionTag]) diff --git a/scripts/generate-base-readme.js b/scripts/generate-base-readme.js new file mode 100644 index 0000000000..6001f41ab7 --- /dev/null +++ b/scripts/generate-base-readme.js @@ -0,0 +1,75 @@ +const fs = require("fs") +const path = require("path") +const { isStrictSemver } = require("../utils") + +const versionTag = process.argv[2] + +if (!versionTag || !isStrictSemver(versionTag)) { + console.error('expected version tag argument like "16.5.0"') + process.exit(1) +} + +const ReadMeDockerPulls = ` +# cypress/base + +[![Docker Pulls](https://img.shields.io/docker/pulls/cypress/base.svg?maxAge=604800)](https://hub.docker.com/r/cypress/base/) + +> Docker images that include all operating system dependencies necessary to run Cypress, **but NOT Cypress itself** and no pre-installed browsers. See [cypress/included](../included) images if you need Cypress pre-installed in the image. See [cypress/browsers](../browsers) images if you need some browsers pre-installed in the image. + +Each tag is in a sub folder, named after Node version or OS it is built on. + +Image \`cypress/base:12\` is tagged [\`latest\`](https://hub.docker.com/r/cypress/base/tags/) + +> **Note** All Base Images install the latest versions of NPM & Yarn` + +const ReadMeDockerInstructions = ` +## ⚠️ Node.js Support + +Cypress 4.0+ no longer supports Node.js versions below 8.0.0. See our [Migration Guide](https://on.cypress.io/migration-guide#Node-js-8-support). + +Using 6.x images is not recommended, and we do not plan to release new versions of Cypress tested on Node.js below 8.0.0. + +## Information + +Node release schedule at [nodejs/Release](https://github.com/nodejs/Release) and one can find LTS versions using [nvm](https://github.com/creationix/nvm) tool + +\`\`\`text +nvm ls-remote | grep LTS +... + v8.16.1 (LTS: Carbon) + v8.16.2 (LTS: Carbon) + v8.17.0 (Latest LTS: Carbon) +... + v10.18.0 (LTS: Dubnium) + v10.18.1 (LTS: Dubnium) + v10.19.0 (Latest LTS: Dubnium) +... + v12.14.1 (LTS: Erbium) + v12.15.0 (LTS: Erbium) + v12.16.0 (Latest LTS: Erbium) +\`\`\` + +## Notes + +
+ +**1:** this image includes fonts with Chinese characters` + +const generateNewChangeVersion = `| cypress/base:${versionTag} | ${versionTag} | Debian | [/${versionTag}](${versionTag}) | \`🚫\` | \`🚫\` | \`🚫\` |` + +const changeLogPath = path.resolve("base", "CHANGELOG.md") +const readmePath = path.resolve("base", "README.md") + +fs.readFile(changeLogPath, (err, data) => { + if (err) { + console.error(err) + } + + const updatedChangeLog = `${data.toString()} \n${generateNewChangeVersion}` + fs.writeFileSync(changeLogPath, updatedChangeLog.trim() + "\n", "utf8") + console.log("Saved CHANGELOG.md at %s", changeLogPath) + + const readme = `${ReadMeDockerPulls} \n ${updatedChangeLog} \n ${ReadMeDockerInstructions}` + fs.writeFileSync(readmePath, readme.trim() + "\n", "utf8") + console.log("Saved README.md at %s", readmePath) +}) diff --git a/scripts/generate-browser-image.js b/scripts/generate-browser-image.js new file mode 100644 index 0000000000..469906e44d --- /dev/null +++ b/scripts/generate-browser-image.js @@ -0,0 +1,181 @@ +const path = require("path") +const fs = require("fs") +const shelljs = require("shelljs") + +const nodeVersion = process.argv[2] +const chromeVersion = process.argv + .find((arg) => arg.includes("--chrome")) + ?.substring(process.argv.find((arg) => arg.includes("--chrome")).indexOf("=") + 1) +const firefoxVersion = process.argv + .find((arg) => arg.includes("--firefox")) + ?.substring(process.argv.find((arg) => arg.includes("--firefox")).indexOf("=") + 1) +const edgeVersion = process.argv + .find((arg) => arg.includes("--edge")) + ?.substring(process.argv.find((arg) => arg.includes("--edge")).indexOf("=") + 1) + +if (!nodeVersion) { + console.error("expected a base image version like 16.5.0") + process.exit(1) +} + +if (!chromeVersion && !firefoxVersion && !edgeVersion) { + console.error("expected at least one browser version like --chrome=94.0.4606.71") + process.exit(1) +} + +const generateNodeVersionFolderName = `node${nodeVersion}` +const generateChromeVersionFolderName = chromeVersion + ? `-chrome${chromeVersion.substring(0, chromeVersion.indexOf("."))}` + : "" +const generateFirefoxVersionFolderName = firefoxVersion + ? `-ff${firefoxVersion.substring(0, firefoxVersion.indexOf("."))}` + : "" +const generateEdgeVersionFolderName = edgeVersion ? `-edge${edgeVersion.substring(0, edgeVersion.indexOf("."))}` : "" +const imageVersion = `${generateNodeVersionFolderName}${generateChromeVersionFolderName}${generateFirefoxVersionFolderName}${generateEdgeVersionFolderName}` + +const outputFolder = path.join("browsers", imageVersion) + +let isExistingFolder = false + +if (shelljs.test("-d", outputFolder)) { + isExistingFolder = true + console.log("Removing existing folder: %s", outputFolder) + shelljs.rm("-rf", outputFolder) +} +console.log("Creating: %s \n", outputFolder) +shelljs.mkdir(outputFolder) + +const Dockerfile = ` +# WARNING: this file was autogenerated by ${path.basename(__filename)} +# using +# yarn add:browsers -- ${nodeVersion} ${process.argv + .filter((arg, i) => i > 2) + .map((arg) => arg) + .join(" ")} +# +# build this image with command +# docker build -t cypress/browsers:${imageVersion} . +# +# +FROM cypress/base${nodeVersion} + +USER root + +RUN node --version + +# Chrome dependencies +RUN apt-get update +RUN apt-get install -y fonts-liberation libappindicator3-1 xdg-utils + +# install Chrome browser +RUN wget -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${chromeVersion}-1_amd64.deb" && \ + dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/google-chrome-stable_current_amd64.deb +RUN google-chrome --version + +# "fake" dbus address to prevent errors +# https://github.com/SeleniumHQ/docker-selenium/issues/87 +ENV DBUS_SESSION_BUS_ADDRESS=/dev/null + +# Add zip utility - it comes in very handy +RUN apt-get update && apt-get install -y zip + +# add codecs needed for video playback in firefox +# https://github.com/cypress-io/cypress-docker-images/issues/150 +RUN apt-get install mplayer -y + + +# install Firefox browser +RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/$FIREFOX_VERSION/linux-x86_64/en-US/firefox-${firefoxVersion}.tar.bz2 \ + && tar -C /opt -xjf /tmp/firefox.tar.bz2 \ + && rm /tmp/firefox.tar.bz2 \ + && ln -fs /opt/firefox/firefox /usr/bin/firefox + + + +# versions of local tools +RUN echo " node version: $(node -v) \\n" \\ + "npm version: $(npm -v) \\n" \\ + "yarn version: $(yarn -v) \\n" \\ + "debian version: $(cat /etc/debian_version) \\n" \\ + "Chrome version: $(google-chrome --version) \\n" \\ + "Firefox version: $(firefox --version) \\n" \\ + "Edge version: $(edge --version) \\n" \\ + "git version: $(git --version) \\n" \\ + "whoami: $(whoami) \\n" + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM xterm +# avoid million NPM install messages +ENV npm_config_loglevel warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm true +` + +const dockerFilename = path.join(outputFolder, "Dockerfile") +fs.writeFileSync(dockerFilename, Dockerfile.trim() + "\n", "utf8") +console.log("Saved %s", dockerFilename) + +const README = ` + + +# cypress/browsers:${imageVersion} + +A complete image with all operating system depedencies for Cypress, and Chrome ${chromeVersion}, Firefox ${firefoxVersion}, Edge ${edgeVersion} browsers. + +[Dockerfile](Dockerfile) + +**Note:** this image uses the \`root\` user. You might want to switch to nonroot user like \`node\` when running this container for security +` + +const readmeFilename = path.join(outputFolder, "README.md") +fs.writeFileSync(readmeFilename, README.trim() + "\n", "utf8") +console.log("Saved %s", readmeFilename) + +// to make building images simpler and to follow the same pattern as previous builds +const buildScript = ` +# WARNING: this file was autogenerated by ${path.basename(__filename)} +# using +# yarn add:browsers -- ${nodeVersion} ${process.argv + .filter((arg, i) => i > 2) + .map((arg) => arg) + .join(" ")} +set e+x + +LOCAL_NAME=cypress/browsers:${imageVersion} +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . +` + +const buildFilename = path.join(outputFolder, "build.sh") +fs.writeFileSync(buildFilename, buildScript.trim() + "\n", "utf8") +shelljs.chmod("a+x", buildFilename) +console.log("Saved %s \n", buildFilename) + +console.log( + `Please add the newly generated folder ${outputFolder} to Git. Build the Docker container locally to make sure it is correct. \n`, +) + +// GENERATE BROWSER CONFIG +require("child_process").fork(__dirname + "/generate-config.js", ["browser", imageVersion]) + +// Do not update README and CHANGELOG for browsers folder if folder already existed +if (!isExistingFolder) { + // GENERATE BROWSER README & UPDATE CHANGELOG + require("child_process").fork(__dirname + "/generate-browser-readme.js", [ + `cypress/browsers:${imageVersion}`, + `--chrome=${chromeVersion} --firefox=${firefoxVersion} --edge=${edgeVersion}`, + ]) +} + +// ASK USER IF THEY WANT TO COMMIT CHANGES +require("child_process").fork(__dirname + "/generate-commit.js", ["browsers", imageVersion]) diff --git a/scripts/generate-browser-readme.js b/scripts/generate-browser-readme.js new file mode 100644 index 0000000000..5b13fb0d26 --- /dev/null +++ b/scripts/generate-browser-readme.js @@ -0,0 +1,106 @@ +const fs = require("fs") +const path = require("path") + +const baseImageTag = process.argv[2] + +const chromeVersion = process.argv.find((arg) => arg.includes("--chrome"))?.match(/(?<=--chrome=).*?(?=\s|$)/g)[0] +const firefoxVersion = process.argv.find((arg) => arg.includes("--firefox"))?.match(/(?<=--firefox=).*?(?=\s|$)/g)[0] +const edgeVersion = process.argv.find((arg) => arg.includes("--edge"))?.match(/(?<=--edge=).*?(?=\s|$)/g)[0] + +if (!baseImageTag) { + console.error('expected base Docker image tag like "cypress/browsers:node12.6.0-chrome77"') + process.exit(1) +} +if (!baseImageTag.startsWith("cypress/browsers:")) { + console.error('expected the base Docker image tag to be one of "cypress/browsers:*"') + console.error('but it was "%s"', baseImageTag) + process.exit(1) +} + +if (!chromeVersion && !firefoxVersion && !edgeVersion) { + console.error("expected at least one browser version like --chrome=94.0.4606.71") + process.exit(1) +} + +const ReadMeDockerPulls = ` +# cypress/browsers + +[![Docker Pulls](https://img.shields.io/docker/pulls/cypress/browsers.svg?maxAge=604800)](https://hub.docker.com/r/cypress/browsers/) + +> Docker image with all operating system dependencies and some pre-installed browsers, **but NOT Cypress itself**. See [cypress/included](../included) images if you need Cypress pre-installed in the image. +` + +const ReadMeInstructions = ` +To find the available Chrome versions, check [https://chromium.cypress.io/](https://chromium.cypress.io/). + +## Naming scheme + +Each Docker image is named \`cypress/browsers:node-chrome\`. If the image has Firefox browser, then it is named \`cypress/browsers:node-chrome-ff\`. + +## Other images + +Other (older) images: + +- Node 8 + Chrome 65 + Firefox 57 [/chrome65-ff57](chrome65-ff57) +- Node 8 + Chrome 67 + Firefox 57 [/chrome67-ff57](chrome67-ff57) +- Node 8 + Chrome 67 [/chrome67](chrome67) +- Node 8.2.1 + Chrome 73 [/node8.2.1-chrome73](node8.2.1-chrome73) +- Node 8.9.3 + Chrome 73 [/node8.9.3-chrome73](node8.9.3-chrome73) +- Node 8.9.3 + Chrome 76 + Firefox 68 [/node8.9.3-npm6.10.1-chrome76-ff68](node8.9.3-npm6.10.1-chrome76-ff68) +- Node 8.15.1 + Chrome 73 [/node8.15.1-chrome73](node8.15.1-chrome73) +- Node 10 + Chrome 69 [/chrome69](chrome69) +- Node 10.2.1 + Chrome 74 [/node10.2.1-chrome74](node10.2.1-chrome74) +- Node 10.11.0 + Chrome 75 [/node10.11.0-chrome75](node10.11.0-chrome75) +- Node 10.16.0 + Chrome 76 [/node10.16.0-chrome75](node10.16.0-chrome76) +- Node 10.16.0 + Chrome 77 [/node10.16.0-chrome77](node10.16.0-chrome77) +- Node 11.13.0 + Chrome 73 [/node11.13.0-chrome73](node11.13.0-chrome73) +- Node 12.0.0 + Chrome 73 [/node12.0.0-chrome73](node12.0.0-chrome73) +- Node 12.0.0 + Chrome 73 + Firefox 68 [/node12.0.0-chrome73-ff68](node12.0.0-chrome73-ff68) +- Node 12.0.0 + Chrome 75 [/node12.0.0-chrome75](node12.0.0-chrome75) +- Node 12.6.0 + Chrome 77 [/node12.6.0-chrome77](node12.6.0-chrome77) +- [/node12.13.0-chrome78-ff70-brave78](node12.13.0-chrome78-ff70-brave78) +- Node 13.1.0 + Chrome 78 + Firefox 70 [node13.1.0-chrome78-ff70](node13.1.0-chrome78-ff70) +- Node 13.3.0 + Chrome 79 + Firefox 70 [node13.3.0-chrome79-ff70](node13.3.0-chrome79-ff70) + +We only provide browsers for \`Debian\`, but you can use our base images and build your own. See Cypress [Docker documentation](https://on.cypress.io/docker). + +## Tags + +You can find all published image tags in the tables above or at [Docker Hub](https://hub.docker.com/r/cypress/browsers/tags/). We recommend using a full image tag, rather than \`latest\` for immutable builds. + +\`\`\` +# NOT RECOMMENDED +FROM cypress/browsers:latest + +# Best practice +FROM cypress/browsers:node13.6.0-chrome80-ff72 +\`\`\`` + +const generateBaseVersion = baseImageTag.substring(baseImageTag.indexOf("node") + 4, baseImageTag.indexOf("-")) + +const generateBrowserVersion = (version) => { + return version !== "undefined" ? version : `🚫` +} + +const generateNewChangeVersion = `[${baseImageTag}](./${baseImageTag.substring( + baseImageTag.indexOf("node"), +)}) | \`cypress/base:${generateBaseVersion}\` | \`${generateBrowserVersion( + chromeVersion, +)}\` | \`${generateBrowserVersion(firefoxVersion)}\` | \`${generateBrowserVersion(edgeVersion)}\`` + +const changeLogPath = path.resolve("browsers", "CHANGELOG.md") +const readmePath = path.resolve("browsers", "README.md") + +fs.readFile(changeLogPath, (err, data) => { + if (err) { + console.error(err) + } + + const updatedChangeLog = `${data.toString()} \n${generateNewChangeVersion}` + fs.writeFileSync(changeLogPath, updatedChangeLog.trim() + "\n", "utf8") + console.log("Saved CHANGELOG.md at %s", changeLogPath) + + const readme = `${ReadMeDockerPulls} \n ${updatedChangeLog} \n ${ReadMeInstructions}` + fs.writeFileSync(readmePath, readme.trim() + "\n", "utf8") + console.log("Saved README.md at %s", readmePath) +}) diff --git a/scripts/generate-commit.js b/scripts/generate-commit.js new file mode 100644 index 0000000000..4f24de3a66 --- /dev/null +++ b/scripts/generate-commit.js @@ -0,0 +1,28 @@ +const { isAValidImageScope } = require("../utils") +const shelljs = require("shelljs") + +const scope = process.argv[2] +const version = process.argv[3] + +if (!scope || !isAValidImageScope(scope)) { + console.error('expected a valid scope like "base", "browsers" or "included"') + process.exit(1) +} + +if (!version) { + console.error("expected the image version like node13.6.0-chrome79-ff72") + process.exit(1) +} + +const readline = require("readline").createInterface({ + input: process.stdin, + output: process.stdout, +}) + +readline.question(`Do you want to commit this change? (y/n)`, (answer) => { + if (answer.match(/^y(es)?$/i)) { + // execute bash script with scope & version + shelljs.exec(`sh scripts/create-commit.sh ${scope} ${version}`) + } + readline.close() +}) diff --git a/scripts/generate-config.js b/scripts/generate-config.js new file mode 100644 index 0000000000..3af028ce92 --- /dev/null +++ b/scripts/generate-config.js @@ -0,0 +1,624 @@ +const path = require("path") +const fs = require("fs") +const { camelCase } = require("lodash") +const os = require("os") + +const imageType = process.argv[2] +const versionTag = process.argv[3] + +if (!imageType) { + console.error("expected an image type like included") + process.exit(1) +} + +if (!versionTag) { + console.error("expected Cypress version argument like 3.8.3") + process.exit(1) +} + +const awsCodeBuildPreamble = `version: 0.2 +env: + variables: + PUBLIC_ECR_ALIAS: "cypress-io" + +batch: + fast-fail: false + build-list:` + +const awsCodeBuildPostamble = `phases: + pre_build: + commands: + - aws --version + - echo Check if $IMAGE_TAG is in ECR... + - ./find-ecr-image.sh $IMAGE_REPO_NAME $IMAGE_TAG -p + - echo Logging in to Amazon ECR... + - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com + - aws ecr-public get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin public.ecr.aws/$PUBLIC_ECR_ALIAS + build: + commands: + - echo Building the Docker image... + - cd $IMAGE_DIR/$IMAGE_TAG + - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . + - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG + post_build: + commands: + - echo Pushing the Docker image... + - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG +` + +const preamble = ` +# WARNING: this file is automatically generated by ${path.basename(__filename)} +# info on building Docker images on Circle +# https://circleci.com/docs/2.0/building-docker-images/ +version: 2.1 + +orbs: + node: circleci/node@5.0.0 + +commands: + halt-on-branch: + description: Halt current CircleCI job if not on master branch + steps: + - run: + name: Halting job if not on master branch + command: | + if [[ "$CIRCLE_BRANCH" != "master" ]]; then + echo "Not master branch, will skip the rest of commands" + circleci-agent step halt + else + echo "On master branch, can continue" + fi + + halt-if-docker-image-exists: + description: Halt current CircleCI job if Docker image exists already + parameters: + imageName: + type: string + description: Docker image name to test + steps: + - run: + name: Check if image << parameters.imageName >> exists or Docker hub does not respond + # using https://github.com/cypress-io/docker-image-not-found + # to check if Docker hub definitely does not have this image + command: | + if npx docker-image-not-found --repo << parameters.imageName >>; then + echo Docker hub says image << parameters.imageName >> does not exist + else + echo Docker hub has image << parameters.imageName >> or not responding + echo We should stop in this case + circleci-agent step halt + fi + + test-base-image: + description: Build a test image from base image and test it + parameters: + nodeVersion: + type: string + description: Node version to expect in the base image, starts with "v" + imageName: + type: string + description: Cypress base docker image to test + checkNodeVersion: + type: boolean + description: Check if the FROM image name is strict Node version + default: true + steps: + - when: + condition: << parameters.checkNodeVersion >> + steps: + - run: + name: confirm image has Node << parameters.nodeVersion >> + # do not run Docker in the interactive mode - adds control characters! + command: | + version=$(docker run << parameters.imageName >> node --version) + if [ "$version" == "<< parameters.nodeVersion >>" ]; then + echo "Base image has the expected version of Node << parameters.nodeVersion >>"; + else + echo "Problem: base image has unexpected Node version" + echo "Expected << parameters.nodeVersion >> and got $version" + exit 1 + fi + - run: + name: test image << parameters.imageName >> + no_output_timeout: '3m' + command: | + docker build -t cypress/test -\\<> + RUN echo "current user: $(whoami)" + ENV CI=1 + WORKDIR /app + RUN npm init --yes + RUN npm install --save-dev cypress cypress-expect + RUN ./node_modules/.bin/cypress verify + RUN npx @bahmutov/cly init + # run Cypress by itself + RUN ./node_modules/.bin/cypress run + # run Cypress using module API and confirm number of passing tests + RUN ./node_modules/.bin/cypress-expect run --passing 1 + EOF + + - run: + name: test image << parameters.imageName >> using Kitchensink + no_output_timeout: '3m' + command: | + docker build -t cypress/test-kitchensink -\\<> + RUN echo "current user: $(whoami)" + ENV CI=1 + ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 + WORKDIR /app + RUN npm init --yes + RUN npm install --save-dev cypress cypress-expect + RUN ./node_modules/.bin/cypress verify + RUN echo '{}' > cypress.json + # run Cypress and confirm minimum number of passing tets + RUN ./node_modules/.bin/cypress-expect run --min-passing 100 + EOF + + test-browser-image: + description: Build a test image from browser image and test it + parameters: + imageName: + type: string + description: Cypress browser docker image to test + chromeVersion: + type: string + default: '' + description: Chrome version to expect in the base image, starts with "Google Chrome XX" + firefoxVersion: + type: string + default: '' + description: Firefox version to expect in the base image, starts with "Mozilla Firefox XX" + edgeVersion: + type: string + default: '' + description: Edge version to expect in the base image, starts with "Microsoft Edge XX" + steps: + - when: + condition: << parameters.chromeVersion >> + steps: + - run: + name: confirm image has Chrome << parameters.chromeVersion >> + # do not run Docker in the interactive mode - adds control characters! + # and use Bash regex string comparison + command: | + version=$(docker run << parameters.imageName >> google-chrome --version) + if [[ "$version" =~ ^"<< parameters.chromeVersion >>" ]]; then + echo "Image has the expected version of Chrome << parameters.chromeVersion >>" + echo "found $version" + else + echo "Problem: image has unexpected Chrome version" + echo "Expected << parameters.chromeVersion >> and got $version" + exit 1 + fi + + - when: + condition: << parameters.firefoxVersion >> + steps: + - run: + name: confirm the image has Firefox << parameters.firefoxVersion >> + command: | + version=$(docker run << parameters.imageName >> firefox --version) + if [[ "$version" =~ ^"<< parameters.firefoxVersion >>" ]]; then + echo "Image has the expected version of Firefox << parameters.firefoxVersion >>" + echo "found $version" + else + echo "Problem: image has unexpected Firefox version" + echo "Expected << parameters.firefoxVersion >> and got $version" + exit 1 + fi + + - when: + condition: << parameters.edgeVersion >> + steps: + - run: + name: confirm the image has Edge << parameters.edgeVersion >> + command: | + version=$(docker run << parameters.imageName >> edge --version) + if [[ "$version" =~ ^"<< parameters.edgeVersion >>" ]]; then + echo "Image has the expected version of Edge << parameters.edgeVersion >>" + echo "found $version" + else + echo "Problem: image has unexpected Edge version" + echo "Expected << parameters.edgeVersion >> and got $version" + exit 1 + fi + + - run: + name: test image << parameters.imageName >> + no_output_timeout: '3m' + command: | + docker build -t cypress/test -\\<> + RUN echo "current user: $(whoami)" + ENV CI=1 + WORKDIR /app + RUN npm init --yes + RUN npm install --save-dev cypress + RUN ./node_modules/.bin/cypress verify + RUN npx @bahmutov/cly init + EOF + + - run: + name: Test built-in Electron browser + no_output_timeout: '1m' + command: docker run cypress/test ./node_modules/.bin/cypress run + + - when: + condition: << parameters.chromeVersion >> + steps: + - run: + name: Test << parameters.chromeVersion >> + no_output_timeout: '1m' + command: docker run cypress/test ./node_modules/.bin/cypress run --browser chrome + + - when: + condition: << parameters.firefoxVersion >> + steps: + - run: + name: Test << parameters.firefoxVersion >> + no_output_timeout: '1m' + command: docker run cypress/test ./node_modules/.bin/cypress run --browser firefox + + - when: + condition: << parameters.edgeVersion >> + steps: + - run: + name: Test << parameters.edgeVersion >> + no_output_timeout: '1m' + command: docker run cypress/test ./node_modules/.bin/cypress run --browser edge + + - run: + name: scaffold image << parameters.imageName >> using Kitchensink + no_output_timeout: '3m' + command: | + docker build -t cypress/test-kitchensink -\\<> + RUN echo "current user: $(whoami)" + ENV CI=1 + ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 + RUN npm init --yes + RUN npm install --save-dev cypress + RUN ./node_modules/.bin/cypress verify + RUN echo '{}' > cypress.json + EOF + + - when: + condition: << parameters.chromeVersion >> + steps: + - run: + name: Test << parameters.chromeVersion >> + no_output_timeout: '1m' + command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser chrome + + - when: + condition: << parameters.firefoxVersion >> + steps: + - run: + name: Test << parameters.firefoxVersion >> + no_output_timeout: '1m' + command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser firefox + + - when: + condition: << parameters.edgeVersion >> + steps: + - run: + name: Test << parameters.edgeVersion >> + no_output_timeout: '1m' + command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser edge + + test-included-image-versions: + description: Testing pre-installed versions + parameters: + cypressVersion: + type: string + description: Cypress version to test, like "4.0.0" + imageName: + type: string + description: Cypress included docker image to test + steps: + - run: + name: 'Print versions' + command: docker run -it --entrypoint cypress cypress/included:<< parameters.cypressVersion >> version + + - run: + name: 'Print info' + command: docker run -it --entrypoint cypress cypress/included:<< parameters.cypressVersion >> info + + - run: + name: 'Check Node version' + command: | + export NODE_VERSION=$(docker run --entrypoint node cypress/included:<< parameters.cypressVersion >> --version) + export CYPRESS_NODE_VERSION=$(docker run --entrypoint cypress cypress/included:<< parameters.cypressVersion >> version --component node) + echo "Included Node $NODE_VERSION" + echo "Cypress includes Node $CYPRESS_NODE_VERSION" + # "node --version" returns something like "v12.1.2" + # and "cypres version ..." returns just "12.1.2" + if [ "$NODE_VERSION" = "v$CYPRESS_NODE_VERSION" ]; then + echo "Node versions match" + else + echo "Node version mismatch πŸ”₯" + # TODO make sure there are no extra characters in the versions + # https://github.com/cypress-io/cypress-docker-images/issues/411 + # exit 1 + fi + + test-included-image: + description: Testing Docker image with Cypress pre-installed + parameters: + cypressVersion: + type: string + description: Cypress version to test, like "4.0.0" + imageName: + type: string + description: Cypress included docker image to test + steps: + - run: + name: New test project and testing + no_output_timeout: '3m' + command: | + node --version + mkdir test + cd test + echo "Initializing test project" + npx @bahmutov/cly init --cypress-version << parameters.cypressVersion >> + + echo "Testing using Electron browser" + docker run -it -v $PWD:/e2e -w /e2e cypress/included:<< parameters.cypressVersion >> + + echo "Testing using Chrome browser" + docker run -it -v $PWD:/e2e -w /e2e cypress/included:<< parameters.cypressVersion >> --browser chrome + working_directory: /tmp + + test-included-image-using-kitchensink: + description: Testing Cypress pre-installed using Kitchensink + parameters: + cypressVersion: + type: string + description: Cypress version to test, like "4.0.0" + imageName: + type: string + description: Cypress included docker image to test + steps: + - run: + name: Testing Kitchensink + no_output_timeout: '3m' + command: | + node --version + mkdir test-kitchensink + cd test-kitchensink + + npm init -y + echo '{}' > cypress.json + + echo "Testing using Electron browser" + docker run -it -v $PWD:/e2e -w /e2e -e CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 cypress/included:<< parameters.cypressVersion >> + + echo "Testing using Chrome browser" + docker run -it -v $PWD:/e2e -w /e2e -e CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 cypress/included:<< parameters.cypressVersion >> --browser chrome + + working_directory: /tmp + + docker-push: + description: Log in and push a given image to Docker hub + parameters: + imageName: + type: string + description: Docker image name to push + steps: + # before pushing, let's check again that the Docker Hub does not have the image + # accidental rebuild and overwrite of an image is bad, since it can bump every tool + # https://github.com/cypress-io/cypress/issues/6335 + - halt-if-docker-image-exists: + imageName: << parameters.imageName >> + - run: + name: Pushing image << parameters.imageName >> to Docker Hub + command: | + echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin + docker push << parameters.imageName >> + +jobs: + lint-markdown: + executor: + name: node/default + tag: '12' + steps: + - checkout + - node/with-cache: + steps: + - run: yarn install --frozen-lockfile + - run: npm run check:markdown + + build-base-image: + machine: true + parameters: + dockerName: + type: string + description: Image name to build + default: cypress/base + dockerTag: + type: string + description: Image tag to build like "12.14.0" + checkNodeVersion: + type: boolean + description: Check if the FROM image name is strict Node version + default: true + steps: + - checkout + - halt-if-docker-image-exists: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + - run: + name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> + command: | + docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . + working_directory: base/<< parameters.dockerTag >> + + - test-base-image: + nodeVersion: v<< parameters.dockerTag >> + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + checkNodeVersion: << parameters.checkNodeVersion >> + - halt-on-branch + - docker-push: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + + build-browser-image: + machine: true + parameters: + dockerName: + type: string + description: Image name to build + default: cypress/browsers + dockerTag: + type: string + description: Image tag to build like "node12.4.0-chrome76" + chromeVersion: + type: string + default: '' + description: Chrome version to expect in the base image, starts with "Google Chrome XX" + firefoxVersion: + type: string + default: '' + description: Firefox version to expect in the base image, starts with "Mozilla Firefox XX" + edgeVersion: + type: string + default: '' + description: Edge version to expect in the base image, starts with "Microsoft Edge XX" + steps: + - checkout + - halt-if-docker-image-exists: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + - run: + name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> + command: | + docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . + working_directory: browsers/<< parameters.dockerTag >> + - test-browser-image: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + chromeVersion: << parameters.chromeVersion >> + firefoxVersion: << parameters.firefoxVersion >> + edgeVersion: << parameters.edgeVersion >> + - halt-on-branch + - docker-push: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + + build-included-image: + machine: true + parameters: + dockerName: + type: string + description: Image name to build + default: cypress/included + dockerTag: + type: string + description: Image tag to build, should match Cypress version, like "3.8.1" + steps: + - checkout + - halt-if-docker-image-exists: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + - run: + name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> + command: | + docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . + working_directory: included/<< parameters.dockerTag >> + + - test-included-image-versions: + cypressVersion: << parameters.dockerTag >> + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + + - test-included-image: + cypressVersion: << parameters.dockerTag >> + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + + - test-included-image-using-kitchensink: + cypressVersion: << parameters.dockerTag >> + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + + - halt-on-branch + - docker-push: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + +workflows: + version: 2 + lint: + jobs: + - lint-markdown +` + +const splitImageFolderName = (folderName) => { + const [name, tag] = folderName.split("/") + return { name, tag } +} + +const getImageType = (image) => { + return image.name.includes("base") ? "base" : image.name.includes("browser") ? "browser" : "included" +} +const formWorkflow = (image) => { + let yml = ` build-${getImageType(image)}-images: + jobs: + - build-${getImageType(image)}-image: + name: "${getImageType(image)} ${image.tag}" + dockerTag: "${image.tag}"` + + // add browser versions + if (getImageType(image) === "browser") { + if (image.tag.includes("-chrome")) { + yml = + yml + + ` + chromeVersion: "Google Chrome ${image.tag.substr(image.tag.indexOf("-chrome") + 7, 2)}"` + } + + if (image.tag.includes("-ff")) { + yml = + yml + + ` + firefoxVersion: "Mozilla Firefox ${image.tag.substr(image.tag.indexOf("-ff") + 3, 2)}"` + } + + if (image.tag.includes("-edge")) { + yml = + yml + + ` + edgeVersion: "Microsoft Edge ${image.tag.substr(image.tag.indexOf("-edge") + 5, 2)}"` + } + } + return yml +} + +const formAwsBuildWorkflow = (image) => { + const identifier = camelCase(`${image.name}${image.tag}`) + const job = ` - identifier: ${identifier} + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/${image.name}" + IMAGE_DIR: "${image.name}" + IMAGE_TAG: "${image.tag}"\n` + return job +} + +const writeConfigFile = (image) => { + const workflow = formWorkflow(image) + const text = preamble.trim() + os.EOL + workflow + fs.writeFileSync("circle.yml", text, "utf8") + console.log("Generated circle.yml") +} + +const writeBuildSpecConfigFile = (image) => { + const workflow = formAwsBuildWorkflow(image) + const text = awsCodeBuildPreamble.trim() + os.EOL + workflow + os.EOL + awsCodeBuildPostamble.trim() + fs.writeFileSync("buildspec.yml", text, "utf8") + console.log("Generated buildspec.yml \n") +} + +const outputFolder = path.join(imageType, versionTag) +console.log("** outputFolder : %s", outputFolder) + +const image = splitImageFolderName(outputFolder) +console.log("** image : %s \n", image) + +writeConfigFile(image) +writeBuildSpecConfigFile(image) diff --git a/generate-included-image.js b/scripts/generate-included-image.js similarity index 68% rename from generate-included-image.js rename to scripts/generate-included-image.js index b8933e7e51..3406fe6842 100644 --- a/generate-included-image.js +++ b/scripts/generate-included-image.js @@ -1,8 +1,8 @@ // creates new folder included/ with Dockerfile and README file -const path = require('path') -const fs = require('fs') -const shelljs = require('shelljs') -const {isStrictSemver} = require('./utils') +const path = require("path") +const fs = require("fs") +const shelljs = require("shelljs") +const { isStrictSemver } = require("../utils") const versionTag = process.argv[2] const baseImageTag = process.argv[3] @@ -15,18 +15,21 @@ if (!baseImageTag) { console.error('expected base Docker image tag like "cypress/browsers:node12.6.0-chrome77"') process.exit(1) } -if (!baseImageTag.startsWith('cypress/browsers:')) { +if (!baseImageTag.startsWith("cypress/browsers:")) { console.error('expected the base Docker image tag to be one of "cypress/browsers:*"') console.error('but it was "%s"', baseImageTag) process.exit(1) } -const outputFolder = path.join('included', versionTag) -if (shelljs.test('-d', outputFolder)) { - console.log('removing existing folder "%s"', outputFolder) - shelljs.rm('-rf', outputFolder) +const outputFolder = path.join("included", versionTag) +let isExistingFolder = false + +if (shelljs.test("-d", outputFolder)) { + isExistingFolder = true + console.log("Removing existing folder: %s", outputFolder) + shelljs.rm("-rf", outputFolder) } -console.log('creating "%s"', outputFolder) +console.log("Creating: %s \n", outputFolder) shelljs.mkdir(outputFolder) const Dockerfile = ` @@ -100,9 +103,9 @@ RUN echo " node version: $(node -v) \\n" \\ ENTRYPOINT ["cypress", "run"] ` -const dockerFilename = path.join(outputFolder, 'Dockerfile') -fs.writeFileSync(dockerFilename, Dockerfile.trim() + '\n', 'utf8') -console.log('Saved %s', dockerFilename) +const dockerFilename = path.join(outputFolder, "Dockerfile") +fs.writeFileSync(dockerFilename, Dockerfile.trim() + "\n", "utf8") +console.log("Saved %s", dockerFilename) const README = ` + +# cypress/included:9.5.0 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.5.0 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/9.5.0/build.sh b/included/9.5.0/build.sh new file mode 100755 index 0000000000..59f7a6deb3 --- /dev/null +++ b/included/9.5.0/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.5.0 cypress/browsers:node16.5.0-chrome97-ff96 +set e+x + +LOCAL_NAME=cypress/included:9.5.0 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/included/CHANGELOG.md b/included/CHANGELOG.md index 21cd89badf..2e49dd5be0 100644 --- a/included/CHANGELOG.md +++ b/included/CHANGELOG.md @@ -71,4 +71,5 @@ Name + Tag | Base image [cypress/included:9.0.0](9.0.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.1.0](9.1.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.1.1](9.1.1) | `cypress/browsers:node16.5.0-chrome94-ff93` -[cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` \ No newline at end of file +[cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.5.0](9.5.0) | `cypress/browsers:node16.5.0-chrome97-ff96` diff --git a/included/README.md b/included/README.md index fc519930b7..4cf6a5675e 100644 --- a/included/README.md +++ b/included/README.md @@ -77,16 +77,13 @@ [cypress/included:9.0.0](9.0.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.1.0](9.1.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.1.1](9.1.1) | `cypress/browsers:node16.5.0-chrome94-ff93` -[cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` -[cypress/included:9.2.1](9.2.1) | `cypress/browsers:node16.5.0-chrome94-ff93` -[cypress/included:9.3.0](9.3.0) | `cypress/browsers:node16.5.0-chrome94-ff93` -[cypress/included:9.3.1](9.3.1) | `cypress/browsers:node16.5.0-chrome94-ff93` -[cypress/included:9.4.1](9.4.1) | `cypress/browsers:node16.5.0-chrome94-ff93` - +[cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.5.0](9.5.0) | `cypress/browsers:node16.5.0-chrome97-ff96` + This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: ```shell -$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:7.3.0 +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.4.1 ``` ## Debug @@ -94,7 +91,7 @@ $ docker run -it -v $PWD:/e2e -w /e2e cypress/included:7.3.0 If you want to see the [Cypress debug logs](https://on.cypress.io/debugging#Print-DEBUG-logs) during the run, pass environment variable `DEBUG`: ```shell -$ docker run -it -v $PWD:/e2e -w /e2e -e DEBUG=cypress:* cypress/included:3.8.1 +$ docker run -it -v $PWD:/e2e -w /e2e -e DEBUG=cypress:* cypress/included:9.4.1 cypress:cli:cli cli starts with arguments ["/usr/local/bin/node","/usr/local/bin/cypress","run"] +0ms cypress:cli NODE_OPTIONS is not set +0ms cypress:cli:cli program parsing arguments +3ms @@ -106,13 +103,13 @@ $ docker run -it -v $PWD:/e2e -w /e2e -e DEBUG=cypress:* cypress/included:3.8.1 These images have its entry point set to `cypress run` without any additional arguments. You can specify additional Cypress CLI arguments after the image name. For example to print the Help menu for the `cypress run` command: ```shell -$ docker run -it --entrypoint=cypress cypress/included:7.7.0 --help +$ docker run -it --entrypoint=cypress cypress/included:9.4.1 --help ``` To run a single spec using Chrome browser: ```shell -$ docker run -it --entrypoint=cypress cypress/included:7.7.0 --spec cypress/integration/spec-a.js --browser chrome +$ docker run -it --entrypoint=cypress cypress/included:9.4.1 --spec cypress/integration/spec-a.js --browser chrome ``` ## Entry @@ -120,7 +117,7 @@ $ docker run -it --entrypoint=cypress cypress/included:7.7.0 --spec cypress/inte These images have its entry point set to `cypress run`. If you want to run a different command, you need to set `--entrypoint=cypress` and specify arguments AFTER the image name. For example, to print the Cypress information using `cypress info` command ```shell -$ docker run -it --entrypoint=cypress cypress/included:4.2.0 info +$ docker run -it --entrypoint=cypress cypress/included:9.4.1 info Displaying Cypress info... Detected 2 browsers installed: @@ -153,7 +150,7 @@ Application Data: /root/.config/cypress/cy/development Browser Profiles: /root/.config/cypress/cy/development/browsers Binary Caches: /root/.cache/Cypress -Cypress Version: 4.2.0 +Cypress Version: 9.4.1 System Platform: linux (Debian - 10.1) System Memory: 2.09 GB free 285 MB ``` @@ -187,7 +184,7 @@ root@814ed01841fe:/e2e# cypress run If you want to use a different browser (assuming it is installed in the container) use: ```shell -$ docker run -it -v $PWD:/e2e -w /e2e --entrypoint=cypress cypress/included:3.8.1 run --browser chrome +$ docker run -it -v $PWD:/e2e -w /e2e --entrypoint=cypress cypress/included:9.4.1 run --browser chrome ============================================================ @@ -209,7 +206,7 @@ For more information, read [Run Cypress with a single Docker command](https://ww By default, the included images run as `root` user. You can switch the user to the second user in the image `node` or custom-mapped user, see [examples section](https://github.com/cypress-io/cypress-docker-images#examples). Starting with `cypress/included:3.8.1` we set permissions on the globally installed Cypress and set binary cache variable to allow other users read and execute access. Thus you will be able to run Cypress as non-root user by using `-u node` ```shell -$ docker run -it -v $PWD/src:/test -w /test -u node cypress/included:3.8.1 +$ docker run -it -v $PWD/src:/test -w /test -u node cypress/included:9.4.1 ``` ## Building and testing @@ -219,7 +216,7 @@ To build a new image use command from the root of the repo ```shell $ npm run add:included -- # example -$ npm run add:included -- 4.0.2 cypress/browsers:node13.6.0-chrome80-ff72 +$ npm run add:included -- 9.4.1 cypress/browsers:node13.6.0-chrome80-ff72 ``` You should also update the `circle.yml` file after creating the new image with @@ -238,7 +235,7 @@ npm init --yes npm i -D cypress npx @bahmutov/cly init rm -rf package-lock.json package.json node_modules -docker run -it -v $PWD:/e2e -w /e2e cypress/included:3.3.2 +docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.4.1 ``` **Tip:** the above commands are in the file [test.sh](test.sh) @@ -246,7 +243,7 @@ docker run -it -v $PWD:/e2e -w /e2e cypress/included:3.3.2 The tests should finish successfully using local image. Now push the image to the Docker hub ```shell -docker push cypress/included:3.3.2 +docker push cypress/included:9.4.1 ``` ## GitHub Action @@ -266,7 +263,7 @@ If you want to run Cypress after a server has started, we suggest using [wait-on docker run --rm # remove container after finish -v ./e2e:/e2e # map current folder to "e2e" folder --workdir=/e2e --entrypoint="" # remove default entrypoint command - cypress/included:4.11.0 # wait for the local site to respond + cypress/included:9.4.1 # wait for the local site to respond # then run Cypress tests /bin/bash -c 'npx wait-on http://127.0.0.1:3000 && cypress run' ``` diff --git a/scripts/generate-config.js b/scripts/generate-config.js index 3af028ce92..7d60cb243b 100644 --- a/scripts/generate-config.js +++ b/scripts/generate-config.js @@ -53,7 +53,7 @@ const preamble = ` version: 2.1 orbs: - node: circleci/node@5.0.0 + node: circleci/node@1.1 commands: halt-on-branch: @@ -126,7 +126,6 @@ commands: FROM << parameters.imageName >> RUN echo "current user: $(whoami)" ENV CI=1 - WORKDIR /app RUN npm init --yes RUN npm install --save-dev cypress cypress-expect RUN ./node_modules/.bin/cypress verify @@ -146,7 +145,6 @@ commands: RUN echo "current user: $(whoami)" ENV CI=1 ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 - WORKDIR /app RUN npm init --yes RUN npm install --save-dev cypress cypress-expect RUN ./node_modules/.bin/cypress verify @@ -430,7 +428,8 @@ jobs: - run: npm run check:markdown build-base-image: - machine: true + machine: + image: ubuntu-2004:202111-02 parameters: dockerName: type: string @@ -462,7 +461,8 @@ jobs: imageName: << parameters.dockerName >>:<< parameters.dockerTag >> build-browser-image: - machine: true + machine: + image: ubuntu-2004:202111-02 parameters: dockerName: type: string @@ -502,7 +502,8 @@ jobs: imageName: << parameters.dockerName >>:<< parameters.dockerTag >> build-included-image: - machine: true + machine: + image: ubuntu-2004:202111-02 parameters: dockerName: type: string From 8c87ee91ee5fa29efa8cc23ee2706092a788f00a Mon Sep 17 00:00:00 2001 From: twolfart Date: Thu, 17 Feb 2022 21:55:43 +0100 Subject: [PATCH 027/371] reduce logspam using same pattern as in FF download (#599) --- scripts/generate-browser-image.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate-browser-image.js b/scripts/generate-browser-image.js index ffc3d4a076..9a97a311c4 100644 --- a/scripts/generate-browser-image.js +++ b/scripts/generate-browser-image.js @@ -69,7 +69,7 @@ RUN apt-get update RUN apt-get install -y fonts-liberation libappindicator3-1 xdg-utils # install Chrome browser -RUN wget -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${chromeVersion}-1_amd64.deb" && \ +RUN wget --no-verbose -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${chromeVersion}-1_amd64.deb" && \ dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \ apt-get install -f -y && \ rm -f /usr/src/google-chrome-stable_current_amd64.deb From 2f1644965bbb728d6981e06f3d2df2247313ce8d Mon Sep 17 00:00:00 2001 From: Adam Murray Date: Fri, 18 Feb 2022 05:39:22 -0600 Subject: [PATCH 028/371] fix(base): fix issue where autogenerated README verion was spaced improperly. (#600) --- scripts/generate-base-readme.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scripts/generate-base-readme.js b/scripts/generate-base-readme.js index 6001f41ab7..8bf09fca99 100644 --- a/scripts/generate-base-readme.js +++ b/scripts/generate-base-readme.js @@ -20,9 +20,10 @@ Each tag is in a sub folder, named after Node version or OS it is built on. Image \`cypress/base:12\` is tagged [\`latest\`](https://hub.docker.com/r/cypress/base/tags/) -> **Note** All Base Images install the latest versions of NPM & Yarn` +> **Note** All Base Images install the latest versions of NPM & Yarn. +` -const ReadMeDockerInstructions = ` +const ReadMeInstructions = ` ## ⚠️ Node.js Support Cypress 4.0+ no longer supports Node.js versions below 8.0.0. See our [Migration Guide](https://on.cypress.io/migration-guide#Node-js-8-support). @@ -65,11 +66,11 @@ fs.readFile(changeLogPath, (err, data) => { console.error(err) } - const updatedChangeLog = `${data.toString()} \n${generateNewChangeVersion}` + const updatedChangeLog = `${data.toString()}${generateNewChangeVersion}` fs.writeFileSync(changeLogPath, updatedChangeLog.trim() + "\n", "utf8") console.log("Saved CHANGELOG.md at %s", changeLogPath) - const readme = `${ReadMeDockerPulls} \n ${updatedChangeLog} \n ${ReadMeDockerInstructions}` + const readme = `${ReadMeDockerPulls} \n ${updatedChangeLog} \n ${ReadMeInstructions}` fs.writeFileSync(readmePath, readme.trim() + "\n", "utf8") console.log("Saved README.md at %s", readmePath) }) From 4ba65366cee7d8a2a2eec53529dbb08a2f27818a Mon Sep 17 00:00:00 2001 From: Ben Regenspan Date: Mon, 21 Feb 2022 11:46:47 -0500 Subject: [PATCH 029/371] feat(base): generate new image with version 14.19.0 (#596) --- base/14.19.0/Dockerfile | 67 +++++++++++++++++++++++++++++++++++++++++ base/14.19.0/README.md | 18 +++++++++++ base/14.19.0/build.sh | 8 +++++ base/CHANGELOG.md | 1 + base/README.md | 10 +++--- buildspec.yml | 8 ++--- circle.yml | 8 ++--- 7 files changed, 108 insertions(+), 12 deletions(-) create mode 100644 base/14.19.0/Dockerfile create mode 100644 base/14.19.0/README.md create mode 100755 base/14.19.0/build.sh diff --git a/base/14.19.0/Dockerfile b/base/14.19.0/Dockerfile new file mode 100644 index 0000000000..8ff2960a1a --- /dev/null +++ b/base/14.19.0/Dockerfile @@ -0,0 +1,67 @@ +# WARNING: this file was autogenerated by generate-base-image.js +# contains all dependencies for running Cypress.io Test Runner +# https://on.cypress.io/docker and https://on.cypress.io/ci +# +# build it with command +# docker build -t cypress/base:14.19.0 . +# +FROM node:14.19.0-buster + +RUN apt-get update && \ + apt-get install --no-install-recommends -y \ + libgtk2.0-0 \ + libgtk-3-0 \ + libnotify-dev \ + libgconf-2-4 \ + libgbm-dev \ + libnss3 \ + libxss1 \ + libasound2 \ + libxtst6 \ + xauth \ + xvfb \ + # install text editors + vim-tiny \ + nano \ + # install emoji font + fonts-noto-color-emoji \ + # install Chinese fonts + # this list was copied from https://github.com/jim3ma/docker-leanote + fonts-arphic-bkai00mp \ + fonts-arphic-bsmi00lp \ + fonts-arphic-gbsn00lp \ + fonts-arphic-gkai00mp \ + fonts-arphic-ukai \ + fonts-arphic-uming \ + ttf-wqy-zenhei \ + ttf-wqy-microhei \ + xfonts-wqy \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +RUN npm --version + +RUN npm install -g yarn@latest --force +RUN yarn --version + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM xterm +# avoid million NPM install messages +ENV npm_config_loglevel warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm true + +# Node libraries +RUN node -p process.versions + +# Show where Node loads required modules from +RUN node -p 'module.paths' + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" diff --git a/base/14.19.0/README.md b/base/14.19.0/README.md new file mode 100644 index 0000000000..5726b09161 --- /dev/null +++ b/base/14.19.0/README.md @@ -0,0 +1,18 @@ + +# cypress/base:14.19.0 + +A Docker image with all dependencies pre-installed. +Just add your NPM packages (including Cypress) and run the tests. +See [Cypress Docker docs](https://on.cypress.io/docker) and +[Cypress CI guide](https://on.cypress.io/ci). + +## Example + +Sample Dockerfile + +``` +FROM cypress/base:14.19.0 +RUN npm install --save-dev cypress +RUN $(npm bin)/cypress verify +RUN $(npm bin)/cypress run +``` diff --git a/base/14.19.0/build.sh b/base/14.19.0/build.sh new file mode 100755 index 0000000000..8a47bb190a --- /dev/null +++ b/base/14.19.0/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-base-image.js +set e+x + +# build image with Cypress dependencies +LOCAL_NAME=cypress/base:14.19.0 + +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/base/CHANGELOG.md b/base/CHANGELOG.md index 2c09f0a71f..7868d50afc 100644 --- a/base/CHANGELOG.md +++ b/base/CHANGELOG.md @@ -67,3 +67,4 @@ | cypress/base:ubuntu18-node12.14.1 | 12.14.1 | Ubuntu 18.04.3 | [ubuntu18-node12.14.1](ubuntu18-node12.14.1) | 6.13.6 | 1.21.1 | | cypress/base:ubuntu19-node12.14.1 | 12.14.1 | Ubuntu 19.0.4 | [ubuntu19-node12.14.1](ubuntu19-node12.14.1) | 6.13.6 | 1.21.1 | | cypress/base:manjaro-node14.12.0 | 14.12.0 | Manjaro | [manjaro-14.12.0](manjaro-14.12.0) | 6.14.8 | 1.22.10 | +| cypress/base:14.19.0 | 14.19.0 | Debian | [/14.19.0](14.19.0) | 6.14.16 | 1.22.17 | diff --git a/base/README.md b/base/README.md index e73fd9d48d..2167662173 100644 --- a/base/README.md +++ b/base/README.md @@ -8,7 +8,9 @@ Each tag is in a sub folder, named after Node version or OS it is built on. Image `cypress/base:12` is tagged [`latest`](https://hub.docker.com/r/cypress/base/tags/) -| Name + Tag | Node | Operating System | Link | NPM version | Yarn version | Notes | +> **Note** All Base Images install the latest versions of NPM & Yarn. + + | Name + Tag | Node | Operating System | Link | NPM version | Yarn version | Notes | | --------------------------------- | ------- | ---------------- | -------------------------------------------- | ----------- | ------------ | ----------- | | cypress/base:6 | 6 | Debian | [/6](6) | 3.10.10 | 1.6.0 | | cypress/base:8 | 8 | Debian | [/8](8) | 6.4.1 | 1.9.4 | @@ -77,9 +79,9 @@ Image `cypress/base:12` is tagged [`latest`](https://hub.docker.com/r/cypress/ba | cypress/base:ubuntu16-12.13.1 | 12.13.1 | Ubuntu | [/ubuntu16-12.13.1](ubuntu16-12.13.1) | 6.12.1 | 🚫 | | cypress/base:ubuntu18-node12.14.1 | 12.14.1 | Ubuntu 18.04.3 | [ubuntu18-node12.14.1](ubuntu18-node12.14.1) | 6.13.6 | 1.21.1 | | cypress/base:ubuntu19-node12.14.1 | 12.14.1 | Ubuntu 19.0.4 | [ubuntu19-node12.14.1](ubuntu19-node12.14.1) | 6.13.6 | 1.21.1 | -| cypress/base:manjaro-node14.12.0 | 14.12.0 | Manjaro | [manjaro-14.12.0](manjaro-14.12.0) | 6.14.8 | 1.22.10 | - -> **Note** All Base Images install the latest versions of NPM & Yarn +| cypress/base:manjaro-node14.12.0 | 14.12.0 | Manjaro | [manjaro-14.12.0](manjaro-14.12.0) | 6.14.8 | 1.22.10 | +| cypress/base:14.19.0 | 14.19.0 | Debian | [/14.19.0](14.19.0) | 6.14.16 | 1.22.17 | + ## ⚠️ Node.js Support Cypress 4.0+ no longer supports Node.js versions below 8.0.0. See our [Migration Guide](https://on.cypress.io/migration-guide#Node-js-8-support). diff --git a/buildspec.yml b/buildspec.yml index 508c88a277..93bceb66e8 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,16 +6,16 @@ env: batch: fast-fail: false build-list: - - identifier: included950 + - identifier: base14190 env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_MEDIUM variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "9.5.0" + IMAGE_REPO_NAME: "cypress/base" + IMAGE_DIR: "base" + IMAGE_TAG: "14.19.0" phases: pre_build: diff --git a/circle.yml b/circle.yml index e284b2d052..6d821a5a28 100644 --- a/circle.yml +++ b/circle.yml @@ -494,8 +494,8 @@ workflows: lint: jobs: - lint-markdown - build-included-images: + build-base-images: jobs: - - build-included-image: - name: "included 9.5.0" - dockerTag: "9.5.0" \ No newline at end of file + - build-base-image: + name: "base 14.19.0" + dockerTag: "14.19.0" \ No newline at end of file From b4f99859b0228e9ddef2ae17caeaf062b03d3ece Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fouilh=C3=A9?= Date: Mon, 21 Feb 2022 19:14:37 +0100 Subject: [PATCH 030/371] feat(base): generate new image with version 16.14.0 (#603) --- base/16.14.0/Dockerfile | 67 ++++++++++++++++++++++++++++++++++++++ base/16.14.0/README.md | 18 ++++++++++ base/16.14.0/build.sh | 8 +++++ base/CHANGELOG.md | 1 + base/README.md | 2 +- buildspec.yml | 4 +-- circle.yml | 7 ++-- scripts/generate-config.js | 3 ++ 8 files changed, 105 insertions(+), 5 deletions(-) create mode 100644 base/16.14.0/Dockerfile create mode 100644 base/16.14.0/README.md create mode 100755 base/16.14.0/build.sh diff --git a/base/16.14.0/Dockerfile b/base/16.14.0/Dockerfile new file mode 100644 index 0000000000..015a963a9e --- /dev/null +++ b/base/16.14.0/Dockerfile @@ -0,0 +1,67 @@ +# WARNING: this file was autogenerated by generate-base-image.js +# contains all dependencies for running Cypress.io Test Runner +# https://on.cypress.io/docker and https://on.cypress.io/ci +# +# build it with command +# docker build -t cypress/base:16.14.0 . +# +FROM node:16.14.0-buster + +RUN apt-get update && \ + apt-get install --no-install-recommends -y \ + libgtk2.0-0 \ + libgtk-3-0 \ + libnotify-dev \ + libgconf-2-4 \ + libgbm-dev \ + libnss3 \ + libxss1 \ + libasound2 \ + libxtst6 \ + xauth \ + xvfb \ + # install text editors + vim-tiny \ + nano \ + # install emoji font + fonts-noto-color-emoji \ + # install Chinese fonts + # this list was copied from https://github.com/jim3ma/docker-leanote + fonts-arphic-bkai00mp \ + fonts-arphic-bsmi00lp \ + fonts-arphic-gbsn00lp \ + fonts-arphic-gkai00mp \ + fonts-arphic-ukai \ + fonts-arphic-uming \ + ttf-wqy-zenhei \ + ttf-wqy-microhei \ + xfonts-wqy \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +RUN npm --version + +RUN npm install -g yarn@latest --force +RUN yarn --version + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM xterm +# avoid million NPM install messages +ENV npm_config_loglevel warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm true + +# Node libraries +RUN node -p process.versions + +# Show where Node loads required modules from +RUN node -p 'module.paths' + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" diff --git a/base/16.14.0/README.md b/base/16.14.0/README.md new file mode 100644 index 0000000000..58b7b074bc --- /dev/null +++ b/base/16.14.0/README.md @@ -0,0 +1,18 @@ + +# cypress/base:16.14.0 + +A Docker image with all dependencies pre-installed. +Just add your NPM packages (including Cypress) and run the tests. +See [Cypress Docker docs](https://on.cypress.io/docker) and +[Cypress CI guide](https://on.cypress.io/ci). + +## Example + +Sample Dockerfile + +``` +FROM cypress/base:16.14.0 +RUN npm install --save-dev cypress +RUN $(npm bin)/cypress verify +RUN $(npm bin)/cypress run +``` diff --git a/base/16.14.0/build.sh b/base/16.14.0/build.sh new file mode 100755 index 0000000000..1b06a47b66 --- /dev/null +++ b/base/16.14.0/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-base-image.js +set e+x + +# build image with Cypress dependencies +LOCAL_NAME=cypress/base:16.14.0 + +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/base/CHANGELOG.md b/base/CHANGELOG.md index 7868d50afc..94e565baf8 100644 --- a/base/CHANGELOG.md +++ b/base/CHANGELOG.md @@ -58,6 +58,7 @@ | cypress/base:16.4.0 | 16.4.0 | Debian 10.9 | [/16.4.0](16.4.0) | 7.10.0 | 1.22.10 | [1](#note1) | | cypress/base:16.5.0 | 16.5.0 | Debian 10.9 | [/16.5.0](16.5.0) | 7.10.0 | 1.22.10 | [1](#note1) | | cypress/base:16.13.0 | 16.13.0 | Debian 10.9 | [/16.13.0](16.13.0) | 7.10.0 | 1.22.10 | [1](#note1) | +| cypress/base:16.14.0 | 16.14.0 | Debian 10.11 | [/16.14.0](16.14.0) | 8.3.1 | 1.22.17 | [1](#note1) | | cypress/base:17.3.0 | 17.3.0 | Debian 10.9 | [/17.3.0](17.3.0) | 8.3.0 | 1.22.17 | [1](#note1) | | cypress/base:centos7 | 6 | CentOS | [/centos7](centos7) | 3.10.10 | 🚫 | | cypress/base:centos7-12.4.0 | 12.4.0 | CentOS | [/centos7](centos7) | 6.9.0 | 1.16.0 | diff --git a/base/README.md b/base/README.md index 2167662173..fd4e3deb8d 100644 --- a/base/README.md +++ b/base/README.md @@ -70,7 +70,7 @@ Image `cypress/base:12` is tagged [`latest`](https://hub.docker.com/r/cypress/ba | cypress/base:16.4.0 | 16.4.0 | Debian 10.9 | [/16.4.0](16.4.0) | 7.10.0 | 1.22.10 | [1](#note1) | | cypress/base:16.5.0 | 16.5.0 | Debian 10.9 | [/16.5.0](16.5.0) | 7.10.0 | 1.22.10 | [1](#note1) | | cypress/base:16.13.0 | 16.13.0 | Debian 10.9 | [/16.13.0](16.13.0) | 7.10.0 | 1.22.10 | [1](#note1) | -| cypress/base:16.13.2 | 16.13.2 | Debian 10.9 | [/16.13.2](16.13.2) | 8.1.2 | 1.22.17 | [1](#note1) | +| cypress/base:16.14.0 | 16.14.0 | Debian 10.11 | [/16.14.0](16.14.0) | 8.3.1 | 1.22.17 | | cypress/base:17.3.0 | 17.3.0 | Debian 10.9 | [/17.3.0](17.3.0) | 8.3.0 | 1.22.17 | [1](#note1) | | cypress/base:centos7 | 6 | CentOS | [/centos7](centos7) | 3.10.10 | 🚫 | | cypress/base:centos7-12.4.0 | 12.4.0 | CentOS | [/centos7](centos7) | 6.9.0 | 1.16.0 | diff --git a/buildspec.yml b/buildspec.yml index 93bceb66e8..002f0245d1 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,7 +6,7 @@ env: batch: fast-fail: false build-list: - - identifier: base14190 + - identifier: base16140 env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER @@ -15,7 +15,7 @@ batch: variables: IMAGE_REPO_NAME: "cypress/base" IMAGE_DIR: "base" - IMAGE_TAG: "14.19.0" + IMAGE_TAG: "16.14.0" phases: pre_build: diff --git a/circle.yml b/circle.yml index 6d821a5a28..90fb1e24bc 100644 --- a/circle.yml +++ b/circle.yml @@ -77,6 +77,7 @@ commands: FROM << parameters.imageName >> RUN echo "current user: $(whoami)" ENV CI=1 + WORKDIR /app RUN npm init --yes RUN npm install --save-dev cypress cypress-expect RUN ./node_modules/.bin/cypress verify @@ -95,6 +96,7 @@ commands: FROM << parameters.imageName >> RUN echo "current user: $(whoami)" ENV CI=1 + WORKDIR /app ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 RUN npm init --yes RUN npm install --save-dev cypress cypress-expect @@ -225,6 +227,7 @@ commands: FROM << parameters.imageName >> RUN echo "current user: $(whoami)" ENV CI=1 + WORKDIR /app ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 RUN npm init --yes RUN npm install --save-dev cypress @@ -497,5 +500,5 @@ workflows: build-base-images: jobs: - build-base-image: - name: "base 14.19.0" - dockerTag: "14.19.0" \ No newline at end of file + name: "base 16.14.0" + dockerTag: "16.14.0" diff --git a/scripts/generate-config.js b/scripts/generate-config.js index 7d60cb243b..7255f61dbc 100644 --- a/scripts/generate-config.js +++ b/scripts/generate-config.js @@ -126,6 +126,7 @@ commands: FROM << parameters.imageName >> RUN echo "current user: $(whoami)" ENV CI=1 + WORKDIR /app RUN npm init --yes RUN npm install --save-dev cypress cypress-expect RUN ./node_modules/.bin/cypress verify @@ -144,6 +145,7 @@ commands: FROM << parameters.imageName >> RUN echo "current user: $(whoami)" ENV CI=1 + WORKDIR /app ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 RUN npm init --yes RUN npm install --save-dev cypress cypress-expect @@ -274,6 +276,7 @@ commands: FROM << parameters.imageName >> RUN echo "current user: $(whoami)" ENV CI=1 + WORKDIR /app ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 RUN npm init --yes RUN npm install --save-dev cypress From 42a4f8327ec4c36412196d52344e5ef8baab71aa Mon Sep 17 00:00:00 2001 From: Emily Rohrbough Date: Tue, 1 Mar 2022 08:20:56 -0600 Subject: [PATCH 031/371] Cypress 9.5.1 image (#605) --- buildspec.yml | 8 ++--- circle.yml | 8 ++--- included/9.5.1/Dockerfile | 69 +++++++++++++++++++++++++++++++++++++++ included/9.5.1/README.md | 18 ++++++++++ included/9.5.1/build.sh | 8 +++++ included/CHANGELOG.md | 1 + included/README.md | 3 +- 7 files changed, 106 insertions(+), 9 deletions(-) create mode 100644 included/9.5.1/Dockerfile create mode 100644 included/9.5.1/README.md create mode 100755 included/9.5.1/build.sh diff --git a/buildspec.yml b/buildspec.yml index 002f0245d1..03dfa9789d 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,16 +6,16 @@ env: batch: fast-fail: false build-list: - - identifier: base16140 + - identifier: included951 env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_MEDIUM variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "16.14.0" + IMAGE_REPO_NAME: "cypress/included" + IMAGE_DIR: "included" + IMAGE_TAG: "9.5.1" phases: pre_build: diff --git a/circle.yml b/circle.yml index 90fb1e24bc..c08fee3cad 100644 --- a/circle.yml +++ b/circle.yml @@ -497,8 +497,8 @@ workflows: lint: jobs: - lint-markdown - build-base-images: + build-included-images: jobs: - - build-base-image: - name: "base 16.14.0" - dockerTag: "16.14.0" + - build-included-image: + name: "included 9.5.1" + dockerTag: "9.5.1" \ No newline at end of file diff --git a/included/9.5.1/Dockerfile b/included/9.5.1/Dockerfile new file mode 100644 index 0000000000..f5328c586d --- /dev/null +++ b/included/9.5.1/Dockerfile @@ -0,0 +1,69 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.5.1 cypress/browsers:node16.5.0-chrome97-ff96 +# +# build this image with command +# docker build -t cypress/included:9.5.1 . +# +FROM cypress/browsers:node16.5.0-chrome97-ff96 + +# Update the dependencies to get the latest and greatest (and safest!) packages. +RUN apt update && apt upgrade -y + +# avoid too many progress messages +# https://github.com/cypress-io/cypress/issues/1243 +ENV CI=1 + +# disable shared memory X11 affecting Cypress v4 and Chrome +# https://github.com/cypress-io/cypress-docker-images/issues/270 +ENV QT_X11_NO_MITSHM=1 +ENV _X11_NO_MITSHM=1 +ENV _MITSHM=0 + +# should be root user +RUN echo "whoami: $(whoami)" +RUN npm config -g set user $(whoami) + +# command "id" should print: +# uid=0(root) gid=0(root) groups=0(root) +# which means the current user is root +RUN id + +# point Cypress at the /root/cache no matter what user account is used +# see https://on.cypress.io/caching +ENV CYPRESS_CACHE_FOLDER=/root/.cache/Cypress +RUN npm install -g "cypress@9.5.1" +RUN cypress verify + +# Cypress cache and installed version +# should be in the root user's home folder +RUN cypress cache path +RUN cypress cache list +RUN cypress info +RUN cypress version + +# give every user read access to the "/root" folder where the binary is cached +# we really only need to worry about the top folder, fortunately +RUN ls -la /root +RUN chmod 755 /root + +# always grab the latest Yarn +# otherwise the base image might have old versions +# NPM does not need to be installed as it is already included with Node. +RUN npm i -g yarn@latest + +# Show where Node loads required modules from +RUN node -p 'module.paths' + +# should print Cypress version +# plus Electron and bundled Node versions +RUN cypress version +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" \ + "chrome: $(google-chrome --version || true) \n" \ + "firefox: $(firefox --version || true) \n" + +ENTRYPOINT ["cypress", "run"] diff --git a/included/9.5.1/README.md b/included/9.5.1/README.md new file mode 100644 index 0000000000..9f7f167865 --- /dev/null +++ b/included/9.5.1/README.md @@ -0,0 +1,18 @@ + + +# cypress/included:9.5.1 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.5.1 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/9.5.1/build.sh b/included/9.5.1/build.sh new file mode 100755 index 0000000000..108efd50a8 --- /dev/null +++ b/included/9.5.1/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.5.1 cypress/browsers:node16.5.0-chrome97-ff96 +set e+x + +LOCAL_NAME=cypress/included:9.5.1 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/included/CHANGELOG.md b/included/CHANGELOG.md index 2e49dd5be0..0acfa009c5 100644 --- a/included/CHANGELOG.md +++ b/included/CHANGELOG.md @@ -73,3 +73,4 @@ Name + Tag | Base image [cypress/included:9.1.1](9.1.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.5.0](9.5.0) | `cypress/browsers:node16.5.0-chrome97-ff96` +[cypress/included:9.5.1](9.5.1) | `cypress/browsers:node16.5.0-chrome97-ff96` diff --git a/included/README.md b/included/README.md index 4cf6a5675e..993e425268 100644 --- a/included/README.md +++ b/included/README.md @@ -78,7 +78,8 @@ [cypress/included:9.1.0](9.1.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.1.1](9.1.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` -[cypress/included:9.5.0](9.5.0) | `cypress/browsers:node16.5.0-chrome97-ff96` +[cypress/included:9.5.0](9.5.0) | `cypress/browsers:node16.5.0-chrome97-ff96` +[cypress/included:9.5.1](9.5.1) | `cypress/browsers:node16.5.0-chrome97-ff96` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: From 2424c196250b94bc9c562d9a1fdc59a62be319e8 Mon Sep 17 00:00:00 2001 From: Emily Rohrbough Date: Tue, 1 Mar 2022 09:07:06 -0600 Subject: [PATCH 032/371] add missing entries - thanks Tyler! (#606) --- included/CHANGELOG.md | 6 +++++- included/README.md | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/included/CHANGELOG.md b/included/CHANGELOG.md index 0acfa009c5..7e231eedf6 100644 --- a/included/CHANGELOG.md +++ b/included/CHANGELOG.md @@ -71,6 +71,10 @@ Name + Tag | Base image [cypress/included:9.0.0](9.0.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.1.0](9.1.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.1.1](9.1.1) | `cypress/browsers:node16.5.0-chrome94-ff93` -[cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.2.1](9.2.1) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.3.0](9.3.0) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.3.1](9.3.1) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.4.1](9.4.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.5.0](9.5.0) | `cypress/browsers:node16.5.0-chrome97-ff96` [cypress/included:9.5.1](9.5.1) | `cypress/browsers:node16.5.0-chrome97-ff96` diff --git a/included/README.md b/included/README.md index 993e425268..dd100a52c9 100644 --- a/included/README.md +++ b/included/README.md @@ -77,7 +77,12 @@ [cypress/included:9.0.0](9.0.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.1.0](9.1.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.1.1](9.1.1) | `cypress/browsers:node16.5.0-chrome94-ff93` -[cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.2.1](9.2.1) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.3.0](9.3.0) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.3.1](9.3.1) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.4.1](9.4.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.5.0](9.5.0) | `cypress/browsers:node16.5.0-chrome97-ff96` [cypress/included:9.5.1](9.5.1) | `cypress/browsers:node16.5.0-chrome97-ff96` From 50387233dd5091c20478bd399ccf69068ae803d8 Mon Sep 17 00:00:00 2001 From: Adam Murray Date: Wed, 2 Mar 2022 09:23:56 -0600 Subject: [PATCH 033/371] feat(decrease image size): produce new slim images (#597) --- CONTRIBUTING.md | 14 +- README.md | 6 +- __mocks__/child_process.js | 15 + __mocks__/fs.js | 13 + __mocks__/shelljs.js | 7 + babel.config.js | 12 + package.json | 28 +- scripts/__tests__/generate-base-image.test.js | 15 + .../__tests__/generate-base-readme.test.js | 16 + .../__tests__/generate-browser-image.test.js | 29 + .../__tests__/generate-browser-readme.test.js | 34 + scripts/generate-base-image.js | 72 +- scripts/generate-base-readme.js | 3 +- scripts/generate-browser-image.js | 107 +- scripts/generate-included-image.js | 122 +- yarn.lock | 3180 ++++++++++++++++- 16 files changed, 3479 insertions(+), 194 deletions(-) create mode 100644 __mocks__/child_process.js create mode 100644 __mocks__/fs.js create mode 100644 __mocks__/shelljs.js create mode 100644 babel.config.js create mode 100644 scripts/__tests__/generate-base-image.test.js create mode 100644 scripts/__tests__/generate-base-readme.test.js create mode 100644 scripts/__tests__/generate-browser-image.test.js create mode 100644 scripts/__tests__/generate-browser-readme.test.js diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 678c1afdcf..6cf73a2098 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -50,6 +50,12 @@ This will create a new folder `included/` See [generate-include 2. Open a pull request. +#### Handling included images with different node versions + +If there is already a `cypress/included` image with a specific version, but you need a different Node version or browser version, just create a new included image per the instructions above and a folder with the name `- will be created.` + +**Important ⚠️** This only applies if there is an existing `cypress/included` image with the same version. + ## Tagging the latest image We build individual base images that match Node versions: `10.18.1`, `12.12.0`, `12.18.2`, etc. We also tag some of the images with major version: `base:10`, `base:12`. We also tag one image `base:latest`. In general, you should use the explicit version like `base:12.18.0` because it guarantees that the Docker image will never be suddenly updated. @@ -71,7 +77,11 @@ $ docker push cypress/base:latest ## Bonus: smaller images -Pull request [#83](https://github.com/cypress-io/cypress-docker-images/pull/83) shows how to create smaller Docker images. Follow that PR's advice when creating new images. +By default, the current base image is `bullseye-slim`. This dramatically decreases the size of all images. Other optimizations have been made to the Dockerfiles per Docker's recommendations. + +In order to allow for older images to be smaller, you can run the scripts above using existing node versions, Cypress versions, and browser versions. The scripts will recognize that a folder already exists, and append `-slim` to the folder. You can then update the folder name in your workflow, and use the images like you already were. + +Node versions less than or equal to Node 14 will use the `buster-slim` base image if they are recreated. Older images may still rely on `buster`. To see the final size of an image, you can use command [`docker images`](https://docs.docker.com/engine/reference/commandline/images/) @@ -80,8 +90,6 @@ $ docker images --format "{{.Tag}} {{.Size}}" cypress/base:11.13.0 11.13.0 969MB ``` -I would put this information into the image folder README file. - ## Bonus 2: tool versions It is a good idea to print versions of the installed tools and username at the end of the build, like diff --git a/README.md b/README.md index 93b762beac..29d42c2b9d 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,9 @@ We build three main images, click on the image name to see the available tags an | Image | Default | Description | Monthly pulls | | ---------------------------- | --------------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| [cypress/base](base) | `cypress/base:12` | All operating system dependencies, no Cypress, and no browsers. | [![Docker Pulls](https://img.shields.io/docker/pulls/cypress/base.svg?maxAge=604800)](https://hub.docker.com/r/cypress/base/) | -| [cypress/browsers](browsers) | `cypress/browsers:chrome67` | All operating system dependencies and some browsers. | [![Docker Pulls](https://img.shields.io/docker/pulls/cypress/browsers.svg?maxAge=604800)](https://hub.docker.com/r/cypress/browsers/) | -| [cypress/included](included) | `cypress/included:3.2.0` | All operating system dependencies, Cypress, and some browsers installed globally. | [![Docker Pulls](https://img.shields.io/docker/pulls/cypress/included.svg?maxAge=604800)](https://hub.docker.com/r/cypress/included/) | +| [cypress/base](base) | `cypress/base:16.13.0` | All operating system dependencies, no Cypress, and no browsers. | [![Docker Pulls](https://img.shields.io/docker/pulls/cypress/base.svg?maxAge=604800)](https://hub.docker.com/r/cypress/base/) | +| [cypress/browsers](browsers) | `cypress/browsers:chrome69` | All operating system dependencies and some browsers. | [![Docker Pulls](https://img.shields.io/docker/pulls/cypress/browsers.svg?maxAge=604800)](https://hub.docker.com/r/cypress/browsers/) | +| [cypress/included](included) | `cypress/included:9.4.1` | All operating system dependencies, Cypress, and some browsers installed globally. | [![Docker Pulls](https://img.shields.io/docker/pulls/cypress/included.svg?maxAge=604800)](https://hub.docker.com/r/cypress/included/) | Of these images, we provide multiple tags for various operating systems and specific browser versions. These allow you to target specific combinations you need. diff --git a/__mocks__/child_process.js b/__mocks__/child_process.js new file mode 100644 index 0000000000..f2a502918f --- /dev/null +++ b/__mocks__/child_process.js @@ -0,0 +1,15 @@ +const child_process = jest.genMockFromModule("child_process") + +const mockOutput = { + message: "", +} + +const exec = jest.fn().mockImplementation((command, resolve) => { + console.log(command) + console.log(resolve) + resolve(mockOutput[command]) +}) + +child_process.exec = exec + +module.exports = child_process diff --git a/__mocks__/fs.js b/__mocks__/fs.js new file mode 100644 index 0000000000..36bd797205 --- /dev/null +++ b/__mocks__/fs.js @@ -0,0 +1,13 @@ +const fs = jest.genMockFromModule("fs") + +const mockOutput = { + message: "", +} + +const writeFileSync = jest.fn().mockImplementation((filename, contents, encoding) => { + return contents.trim() +}) + +fs.writeFileSync = writeFileSync + +module.exports = fs diff --git a/__mocks__/shelljs.js b/__mocks__/shelljs.js new file mode 100644 index 0000000000..5091a41a03 --- /dev/null +++ b/__mocks__/shelljs.js @@ -0,0 +1,7 @@ +const shelljs = jest.genMockFromModule("shelljs") + +shelljs.mkdir = jest.fn((folder) => { + return folder +}) + +module.exports = shelljs diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000000..7f4c847954 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,12 @@ +module.exports = { + presets: [ + [ + "@babel/preset-env", + { + targets: { + esmodules: true, + }, + }, + ], + ], +} diff --git a/package.json b/package.json index 44b31161b5..1165ca4e9e 100644 --- a/package.json +++ b/package.json @@ -8,13 +8,14 @@ "test": "test" }, "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", "build": "node ./scripts/generate-config", "add:base": "node ./scripts/generate-base-image", "add:browser": "node ./scripts/generate-browser-image", "add:included": "node ./scripts/generate-included-image", "check:markdown": "find . -type f -name '*.md' ! -path './node_modules/*' ! -path './examples/*' | xargs -L1 npx markdown-link-check --quiet", - "format": "prettier --write ." + "format": "prettier --write .", + "test": "jest", + "test:watch": "yarn test -- --watch" }, "engines": { "node": ">=12" @@ -31,15 +32,28 @@ }, "homepage": "https://github.com/cypress-io/cypress-docker-images#readme", "devDependencies": { + "@babel/preset-env": "^7.16.11", + "babel-jest": "^27.5.1", + "glob-parent": "^6.0.2", "globby": "10.0.1", + "jest": "^27.5.1", + "json-schema": "~0.4.0", + "lodash": "4.17.21", "markdown-link-check": "3.8.0", + "path-parse": "1.0.7", "prettier": "2.5.1", "semver": "7.1.3", "shelljs": "0.8.5", - "slugify": "^1.4.7", - "lodash": "4.17.21", - "glob-parent": "^6.0.2", - "path-parse": "1.0.7", - "json-schema": "~0.4.0" + "slugify": "^1.4.7" + }, + "jest": { + "testPathIgnorePatterns": [ + "/examples/", + "/node_modules/", + "/test/" + ], + "transform": { + "^.+\\.jsx?$": "babel-jest" + } } } diff --git a/scripts/__tests__/generate-base-image.test.js b/scripts/__tests__/generate-base-image.test.js new file mode 100644 index 0000000000..66592bee29 --- /dev/null +++ b/scripts/__tests__/generate-base-image.test.js @@ -0,0 +1,15 @@ +import path from "path" +import { exec } from "child_process" + +jest.mock("fs") +jest.mock("shelljs") + +describe("base image generator", () => { + it("fails if not passed a semantic version", async () => { + const baseImageGenerator = path.join(__dirname, "../generate-base-image.js") + await exec(`node ${baseImageGenerator} -- 16.3.0-test`, (error) => { + expect(error.message).toContain("expected version tag argument like") + expect(error.code).toBe(1) + }) + }) +}) diff --git a/scripts/__tests__/generate-base-readme.test.js b/scripts/__tests__/generate-base-readme.test.js new file mode 100644 index 0000000000..774d65a637 --- /dev/null +++ b/scripts/__tests__/generate-base-readme.test.js @@ -0,0 +1,16 @@ +import path from "path" +import { exec } from "child_process" + +jest.mock("fs") +jest.mock("shelljs") + +describe("base readme generator", () => { + it("fails if not passed a semantic version", async () => { + const baseReadmeGenerator = path.join(__dirname, "../generate-base-readme.js") + + await exec(`node ${baseReadmeGenerator} -- 16.3.0-test`, (error) => { + expect(error.message).toContain("expected version tag argument like") + expect(error.code).toBe(1) + }) + }) +}) diff --git a/scripts/__tests__/generate-browser-image.test.js b/scripts/__tests__/generate-browser-image.test.js new file mode 100644 index 0000000000..304ff4e3a9 --- /dev/null +++ b/scripts/__tests__/generate-browser-image.test.js @@ -0,0 +1,29 @@ +import path from "path" +import { exec } from "child_process" + +jest.mock("fs") +jest.mock("shelljs") + +describe("browser image generator", () => { + afterAll((done) => { + done() + }) + + it("fails if not passed a base node version", async () => { + const browserImageGenerator = path.join(__dirname, "../generate-browser-image.js") + + await exec(`node ${browserImageGenerator} --chrome=85`, (error) => { + expect(error.message).toContain("expected a base image version like") + expect(error.code).toBe(1) + }) + }) + + it("fails if not passed one of: chrome, firefox, or edge", async () => { + const browserImageGenerator = path.join(__dirname, "../generate-browser-image.js") + + await exec(`node ${browserImageGenerator} 16.13.0`, (error) => { + expect(error.message).toContain("expected at least one browser version like") + expect(error.code).toBe(1) + }) + }) +}) diff --git a/scripts/__tests__/generate-browser-readme.test.js b/scripts/__tests__/generate-browser-readme.test.js new file mode 100644 index 0000000000..b604a354d6 --- /dev/null +++ b/scripts/__tests__/generate-browser-readme.test.js @@ -0,0 +1,34 @@ +import path from "path" +import { exec } from "child_process" + +jest.mock("fs") +jest.mock("shelljs") + +describe("browser readme generator", () => { + it("fails if not passed a base browser image version like 'cypress/browsers:node12.6.0-chrome77'", async () => { + const browserReadmeGenerator = path.join(__dirname, "../generate-browser-readme.js") + + await exec(`node ${browserReadmeGenerator}`, (error) => { + expect(error.message).toContain("expected base Docker image tag like") + expect(error.code).toBe(1) + }) + }) + + it("fails if not passed a base browser image version like 'cypress/browsers:*'", async () => { + const browserReadmeGenerator = path.join(__dirname, "../generate-browser-readme.js") + + await exec(`node ${browserReadmeGenerator} node12.6.0-chrome77 --chrome=77`, (error) => { + expect(error.message).toContain('expected the base Docker image tag to be one of "cypress/browsers:*"') + expect(error.code).toBe(1) + }) + }) + + it("fails if not passed one of: chrome, firefox, or edge", async () => { + const browserReadmeGenerator = path.join(__dirname, "../generate-browser-readme.js") + + await exec(`node ${browserReadmeGenerator} cypress/browsers:node12.6.0-chrome77`, (error) => { + expect(error.message).toContain("expected at least one browser version like") + expect(error.code).toBe(1) + }) + }) +}) diff --git a/scripts/generate-base-image.js b/scripts/generate-base-image.js index 6a371feba5..df60b88aa2 100644 --- a/scripts/generate-base-image.js +++ b/scripts/generate-base-image.js @@ -11,23 +11,34 @@ if (!versionTag || !isStrictSemver(versionTag)) { process.exit(1) } -const outputFolder = path.join("base", versionTag) +// Used for <= Node 14 +const busterNodeImage = "buster-slim" +// Only used for >= Node 16 images +const bullseyeNodeImage = "bullseye-slim" +const usesBusterImage = parseInt(versionTag.split(".")[0]) <= 14 ? true : false +console.log("πŸš€ ~ file: generate-base-image.js ~ line 19 ~ usesBusterImage", usesBusterImage) + +let outputFolder = path.join("base", versionTag) + +//if same folder already exists, add new folder named - if (shelljs.test("-d", outputFolder)) { - console.log('removing existing folder "%s"', outputFolder) - shelljs.rm("-rf", outputFolder) + console.log('existing folder "%s" found', outputFolder) + outputFolder = path.join("base", `${versionTag}-slim`) } console.log('creating "%s"', outputFolder) shelljs.mkdir(outputFolder) +const folderName = outputFolder.split("/")[1] + const Dockerfile = ` # WARNING: this file was autogenerated by ${path.basename(__filename)} # contains all dependencies for running Cypress.io Test Runner # https://on.cypress.io/docker and https://on.cypress.io/ci # # build it with command -# docker build -t cypress/base:${versionTag} . +# docker build -t cypress/base:${folderName} . # -FROM node:${versionTag}-buster +FROM node:${versionTag}-${usesBusterImage ? busterNodeImage : bullseyeNodeImage} RUN apt-get update && \\ apt-get install --no-install-recommends -y \\ @@ -62,39 +73,34 @@ RUN apt-get update && \\ && rm -rf /var/lib/apt/lists/* \\ && apt-get clean -RUN npm --version - -RUN npm install -g yarn@latest --force -RUN yarn --version - # a few environment variables to make NPM installs easier # good colors for most applications -ENV TERM xterm +ENV TERM=xterm \\ # avoid million NPM install messages -ENV npm_config_loglevel warn + npm_config_loglevel=warn \\ # allow installing when the main user is root -ENV npm_config_unsafe_perm true - -# Node libraries -RUN node -p process.versions - -# Show where Node loads required modules from -RUN node -p 'module.paths' - -# versions of local tools -RUN echo " node version: $(node -v) \\n" \\ - "npm version: $(npm -v) \\n" \\ - "yarn version: $(yarn -v) \\n" \\ - "debian version: $(cat /etc/debian_version) \\n" \\ - "user: $(whoami) \\n" + npm_config_unsafe_perm=true + +RUN npm --version \\ + && npm install -g yarn@latest --force \\ + && yarn --version \\ + && node -p process.versions \\ + && node -p 'module.paths' \\ + && echo " node version: $(node -v) \\n" \\ + "npm version: $(npm -v) \\n" \\ + "yarn version: $(yarn -v) \\n" \\ + "debian version: $(cat /etc/debian_version) \\n" \\ + "user: $(whoami) \\n" ` + const dockerFilename = path.join(outputFolder, "Dockerfile") fs.writeFileSync(dockerFilename, Dockerfile.trim() + "\n", "utf8") + console.log("Saved %s", dockerFilename) const README = ` -# cypress/base:${versionTag} +# cypress/base:${folderName} A Docker image with all dependencies pre-installed. Just add your NPM packages (including Cypress) and run the tests. @@ -106,7 +112,7 @@ See [Cypress Docker docs](https://on.cypress.io/docker) and Sample Dockerfile \`\`\` -FROM cypress/base:${versionTag} +FROM cypress/base:${folderName} RUN npm install --save-dev cypress RUN $(npm bin)/cypress verify RUN $(npm bin)/cypress run @@ -115,6 +121,7 @@ RUN $(npm bin)/cypress run const readmeFilename = path.join(outputFolder, "README.md") fs.writeFileSync(readmeFilename, README.trim() + "\n", "utf8") + console.log("Saved %s", readmeFilename) // to make building images simpler and to follow the same pattern as previous builds @@ -123,7 +130,7 @@ const buildScript = ` set e+x # build image with Cypress dependencies -LOCAL_NAME=cypress/base:${versionTag} +LOCAL_NAME=cypress/base:${folderName} echo "Building $LOCAL_NAME" docker build -t $LOCAL_NAME . @@ -132,16 +139,17 @@ docker build -t $LOCAL_NAME . const buildFilename = path.join(outputFolder, "build.sh") fs.writeFileSync(buildFilename, buildScript.trim() + "\n", "utf8") shelljs.chmod("a+x", buildFilename) + console.log("Saved %s", buildFilename) console.log(` Please add the newly generated folder ${outputFolder} to Git. Build the Docker container locally to make sure it is correct`) // Generate Base Config -require("child_process").fork(__dirname + "/generate-config.js", ["base", versionTag]) +require("child_process").fork(__dirname + "/generate-config.js", ["base", folderName]) // GENERATE BASE README WITH UPDATED CHANGELOG -require("child_process").fork(__dirname + "/generate-base-readme.js", [versionTag]) +require("child_process").fork(__dirname + "/generate-base-readme.js", [versionTag, folderName]) // ASK USER IF THEY WANT TO COMMIT CHANGES -require("child_process").fork(__dirname + "/generate-commit.js", ["base", versionTag]) +require("child_process").fork(__dirname + "/generate-commit.js", ["base", folderName]) diff --git a/scripts/generate-base-readme.js b/scripts/generate-base-readme.js index 8bf09fca99..3bacba63ea 100644 --- a/scripts/generate-base-readme.js +++ b/scripts/generate-base-readme.js @@ -3,6 +3,7 @@ const path = require("path") const { isStrictSemver } = require("../utils") const versionTag = process.argv[2] +const folderName = process.argv[3] if (!versionTag || !isStrictSemver(versionTag)) { console.error('expected version tag argument like "16.5.0"') @@ -56,7 +57,7 @@ nvm ls-remote | grep LTS **1:** this image includes fonts with Chinese characters` -const generateNewChangeVersion = `| cypress/base:${versionTag} | ${versionTag} | Debian | [/${versionTag}](${versionTag}) | \`🚫\` | \`🚫\` | \`🚫\` |` +const generateNewChangeVersion = `| cypress/base:${folderName} | ${versionTag} | Debian | [/${versionTag}](${versionTag}) | \`🚫\` | \`🚫\` | \`🚫\` |` const changeLogPath = path.resolve("base", "CHANGELOG.md") const readmePath = path.resolve("base", "README.md") diff --git a/scripts/generate-browser-image.js b/scripts/generate-browser-image.js index 9a97a311c4..eac4cbeed2 100644 --- a/scripts/generate-browser-image.js +++ b/scripts/generate-browser-image.js @@ -4,15 +4,9 @@ const shelljs = require("shelljs") const { isStrictSemver } = require("../utils") const nodeVersion = process.argv[2] -const chromeVersion = process.argv - .find((arg) => arg.includes("--chrome")) - ?.substring(process.argv.find((arg) => arg.includes("--chrome")).indexOf("=") + 1) -const firefoxVersion = process.argv - .find((arg) => arg.includes("--firefox")) - ?.substring(process.argv.find((arg) => arg.includes("--firefox")).indexOf("=") + 1) -const edgeVersion = process.argv - .find((arg) => arg.includes("--edge")) - ?.substring(process.argv.find((arg) => arg.includes("--edge")).indexOf("=") + 1) +const chromeVersion = process.argv.find((arg) => arg.includes("--chrome"))?.match(/(?<=--chrome=).*?(?=\s|$)/g)[0] +const firefoxVersion = process.argv.find((arg) => arg.includes("--firefox"))?.match(/(?<=--firefox=).*?(?=\s|$)/g)[0] +const edgeVersion = process.argv.find((arg) => arg.includes("--edge"))?.match(/(?<=--edge=).*?(?=\s|$)/g)[0] if (!nodeVersion || !isStrictSemver(nodeVersion)) { console.error("expected a base image version like 16.5.0") @@ -28,24 +22,25 @@ const generateNodeVersionFolderName = `node${nodeVersion}` const generateChromeVersionFolderName = chromeVersion ? `-chrome${chromeVersion.substring(0, chromeVersion.indexOf("."))}` : "" + const generateFirefoxVersionFolderName = firefoxVersion ? `-ff${firefoxVersion.substring(0, firefoxVersion.indexOf("."))}` : "" const generateEdgeVersionFolderName = edgeVersion ? `-edge${edgeVersion.substring(0, edgeVersion.indexOf("."))}` : "" const imageVersion = `${generateNodeVersionFolderName}${generateChromeVersionFolderName}${generateFirefoxVersionFolderName}${generateEdgeVersionFolderName}` -const outputFolder = path.join("browsers", imageVersion) - -let isExistingFolder = false +let outputFolder = path.join("browsers", imageVersion) +//if same folder already exists, add new folder named - if (shelljs.test("-d", outputFolder)) { - isExistingFolder = true - console.log("Removing existing folder: %s", outputFolder) - shelljs.rm("-rf", outputFolder) + console.log('existing folder "%s" found', outputFolder) + outputFolder = path.join("browsers", `${imageVersion}-slim`) } -console.log("Creating: %s \n", outputFolder) +console.log('creating "%s"', outputFolder) shelljs.mkdir(outputFolder) +const folderName = outputFolder.split("/")[1] + const Dockerfile = ` # WARNING: this file was autogenerated by ${path.basename(__filename)} # using @@ -55,45 +50,54 @@ const Dockerfile = ` .join(" ")} # # build this image with command -# docker build -t cypress/browsers:${imageVersion} . +# docker build -t cypress/browsers:${folderName} . # # -FROM cypress/base${nodeVersion} +FROM cypress/base:${nodeVersion} USER root RUN node --version # Chrome dependencies -RUN apt-get update -RUN apt-get install -y fonts-liberation libappindicator3-1 xdg-utils +RUN apt-get update && \\ + apt-get install -y \\ + fonts-liberation \\ + xdg-utils \\ + wget \\ + # clean up + && rm -rf /var/lib/apt/lists/* \\ + && apt-get clean + +# install libappindicator3-1 - not included with Debian 11 +RUN wget --no-verbose /usr/src/libappindicator3-1_0.4.92-7_amd64.deb "http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_amd64.deb" && \\ + dpkg -i /usr/src/libappindicator3-1_0.4.92-7_amd64.deb ; \\ + apt-get install -f -y && \\ + rm -f /usr/src/libappindicator3-1_0.4.92-7_amd64.deb # install Chrome browser -RUN wget --no-verbose -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${chromeVersion}-1_amd64.deb" && \ - dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \ - apt-get install -f -y && \ +RUN wget --no-verbose -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${chromeVersion}-1_amd64.deb" && \\ + dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \\ + apt-get install -f -y && \\ rm -f /usr/src/google-chrome-stable_current_amd64.deb -RUN google-chrome --version # "fake" dbus address to prevent errors # https://github.com/SeleniumHQ/docker-selenium/issues/87 ENV DBUS_SESSION_BUS_ADDRESS=/dev/null -# Add zip utility - it comes in very handy -RUN apt-get update && apt-get install -y zip - -# add codecs needed for video playback in firefox -# https://github.com/cypress-io/cypress-docker-images/issues/150 -RUN apt-get install mplayer -y - +# firefox dependencies +RUN apt-get update && \\ + apt-get install -y \\ + bzip2 \\ + # add codecs needed for video playback in firefox + # https://github.com/cypress-io/cypress-docker-images/issues/150 + mplayer # install Firefox browser -RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/$${firefoxVersion}/linux-x86_64/en-US/firefox-${firefoxVersion}.tar.bz2 \ - && tar -C /opt -xjf /tmp/firefox.tar.bz2 \ - && rm /tmp/firefox.tar.bz2 \ - && ln -fs /opt/firefox/firefox /usr/bin/firefox - - +RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/${firefoxVersion}/linux-x86_64/en-US/firefox-${firefoxVersion}.tar.bz2 && \\ + tar -C /opt -xjf /tmp/firefox.tar.bz2 && \\ + rm /tmp/firefox.tar.bz2 && \\ + ln -fs /opt/firefox/firefox /usr/bin/firefox # versions of local tools RUN echo " node version: $(node -v) \\n" \\ @@ -108,11 +112,11 @@ RUN echo " node version: $(node -v) \\n" \\ # a few environment variables to make NPM installs easier # good colors for most applications -ENV TERM xterm +ENV TERM xterm \\ # avoid million NPM install messages -ENV npm_config_loglevel warn + npm_config_loglevel warn \\ # allow installing when the main user is root -ENV npm_config_unsafe_perm true + npm_config_unsafe_perm true ` const dockerFilename = path.join(outputFolder, "Dockerfile") @@ -129,7 +133,7 @@ WARNING: this file was autogenerated by ${path.basename(__filename)} using .join(" ")} --> -# cypress/browsers:${imageVersion} +# cypress/browsers:${folderName} A complete image with all operating system depedencies for Cypress, and Chrome ${chromeVersion}, Firefox ${firefoxVersion}, Edge ${edgeVersion} browsers. @@ -152,7 +156,7 @@ const buildScript = ` .join(" ")} set e+x -LOCAL_NAME=cypress/browsers:${imageVersion} +LOCAL_NAME=cypress/browsers:${folderName} echo "Building $LOCAL_NAME" docker build -t $LOCAL_NAME . ` @@ -167,16 +171,13 @@ console.log( ) // GENERATE BROWSER CONFIG -require("child_process").fork(__dirname + "/generate-config.js", ["browser", imageVersion]) - -// Do not update README and CHANGELOG for browsers folder if folder already existed -if (!isExistingFolder) { - // GENERATE BROWSER README & UPDATE CHANGELOG - require("child_process").fork(__dirname + "/generate-browser-readme.js", [ - `cypress/browsers:${imageVersion}`, - `--chrome=${chromeVersion} --firefox=${firefoxVersion} --edge=${edgeVersion}`, - ]) -} +require("child_process").fork(__dirname + "/generate-config.js", ["browser", folderName]) + +// GENERATE BROWSER README & UPDATE CHANGELOG +require("child_process").fork(__dirname + "/generate-browser-readme.js", [ + `cypress/browsers:${folderName}`, + `--chrome=${chromeVersion} --firefox=${firefoxVersion} --edge=${edgeVersion}`, +]) // ASK USER IF THEY WANT TO COMMIT CHANGES -require("child_process").fork(__dirname + "/generate-commit.js", ["browsers", imageVersion]) +require("child_process").fork(__dirname + "/generate-commit.js", ["browsers", folderName]) diff --git a/scripts/generate-included-image.js b/scripts/generate-included-image.js index 3406fe6842..7a59943c26 100644 --- a/scripts/generate-included-image.js +++ b/scripts/generate-included-image.js @@ -21,24 +21,25 @@ if (!baseImageTag.startsWith("cypress/browsers:")) { process.exit(1) } -const outputFolder = path.join("included", versionTag) -let isExistingFolder = false +let outputFolder = path.join("included", versionTag) +//if same folder already exists, add new folder named - if (shelljs.test("-d", outputFolder)) { - isExistingFolder = true - console.log("Removing existing folder: %s", outputFolder) - shelljs.rm("-rf", outputFolder) + console.log('existing folder "%s" found', outputFolder) + outputFolder = path.join("included", `${versionTag}-${baseImageTag.split(":")[1]}`) } -console.log("Creating: %s \n", outputFolder) +console.log('creating "%s"', outputFolder) shelljs.mkdir(outputFolder) +const folderName = outputFolder.split("/")[1] + const Dockerfile = ` # WARNING: this file was autogenerated by ${path.basename(__filename)} # using # npm run add:included -- ${versionTag} ${baseImageTag} # # build this image with command -# docker build -t cypress/included:${versionTag} . +# docker build -t cypress/included:${folderName} . # FROM ${baseImageTag} @@ -47,59 +48,51 @@ RUN apt update && apt upgrade -y # avoid too many progress messages # https://github.com/cypress-io/cypress/issues/1243 -ENV CI=1 - +ENV CI=1 \\ # disable shared memory X11 affecting Cypress v4 and Chrome # https://github.com/cypress-io/cypress-docker-images/issues/270 -ENV QT_X11_NO_MITSHM=1 -ENV _X11_NO_MITSHM=1 -ENV _MITSHM=0 + QT_X11_NO_MITSHM=1 \\ + _X11_NO_MITSHM=1 \\ + _MITSHM=0 \\ + # point Cypress at the /root/cache no matter what user account is used + # see https://on.cypress.io/caching + CYPRESS_CACHE_FOLDER=/root/.cache/Cypress # should be root user -RUN echo "whoami: $(whoami)" -RUN npm config -g set user $(whoami) - -# command "id" should print: -# uid=0(root) gid=0(root) groups=0(root) -# which means the current user is root -RUN id - -# point Cypress at the /root/cache no matter what user account is used -# see https://on.cypress.io/caching -ENV CYPRESS_CACHE_FOLDER=/root/.cache/Cypress -RUN npm install -g "cypress@${versionTag}" -RUN cypress verify - -# Cypress cache and installed version -# should be in the root user's home folder -RUN cypress cache path -RUN cypress cache list -RUN cypress info -RUN cypress version - -# give every user read access to the "/root" folder where the binary is cached -# we really only need to worry about the top folder, fortunately -RUN ls -la /root -RUN chmod 755 /root - -# always grab the latest Yarn -# otherwise the base image might have old versions -# NPM does not need to be installed as it is already included with Node. -RUN npm i -g yarn@latest - -# Show where Node loads required modules from -RUN node -p 'module.paths' - -# should print Cypress version -# plus Electron and bundled Node versions -RUN cypress version -RUN echo " node version: $(node -v) \\n" \\ - "npm version: $(npm -v) \\n" \\ - "yarn version: $(yarn -v) \\n" \\ - "debian version: $(cat /etc/debian_version) \\n" \\ - "user: $(whoami) \\n" \\ - "chrome: $(google-chrome --version || true) \\n" \\ - "firefox: $(firefox --version || true) \\n" +RUN echo "whoami: $(whoami)" \\ + && npm config -g set user $(whoami) \\ + # command "id" should print: + # uid=0(root) gid=0(root) groups=0(root) + # which means the current user is root + && id \\ + && npm install -g "cypress@${versionTag}" \\ + && cypress verify \\ + # Cypress cache and installed version + # should be in the root user's home folder + && cypress cache path \\ + && cypress cache list \\ + && cypress info \\ + && cypress version \\ + # give every user read access to the "/root" folder where the binary is cached + # we really only need to worry about the top folder, fortunately + && ls -la /root \\ + && chmod 755 /root \\ + # always grab the latest Yarn + # otherwise the base image might have old versions + # NPM does not need to be installed as it is already included with Node. + && npm i -g yarn@latest \\ + # Show where Node loads required modules from + && node -p 'module.paths' \\ + # should print Cypress version + # plus Electron and bundled Node versions + && cypress version \\ + && echo " node version: $(node -v) \\n" \\ + "npm version: $(npm -v) \\n" \\ + "yarn version: $(yarn -v) \\n" \\ + "debian version: $(cat /etc/debian_version) \\n" \\ + "user: $(whoami) \\n" \\ + "chrome: $(google-chrome --version || true) \\n" \\ + "firefox: $(firefox --version || true) \\n" ENTRYPOINT ["cypress", "run"] ` @@ -114,14 +107,14 @@ WARNING: this file was autogenerated by ${path.basename(__filename)} using npm run add:included -- ${versionTag} ${baseImageTag} --> -# cypress/included:${versionTag} +# cypress/included:${folderName} Read [Run Cypress with a single Docker command][blog post url] ## Run tests \`\`\`shell -$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:${versionTag} +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:${folderName} # runs Cypress tests from the current folder \`\`\` @@ -139,7 +132,7 @@ const buildScript = ` # npm run add:included -- ${versionTag} ${baseImageTag} set e+x -LOCAL_NAME=cypress/included:${versionTag} +LOCAL_NAME=cypress/included:${folderName} echo "Building $LOCAL_NAME" docker build -t $LOCAL_NAME . ` @@ -153,13 +146,10 @@ console.log(` Please add the newly generated folder ${outputFolder} to Git. Build the Docker container locally to make sure it is correct`) // GENERATE INCLUDED CONFIG -require("child_process").fork(__dirname + "/generate-config.js", ["included", versionTag]) +require("child_process").fork(__dirname + "/generate-config.js", ["included", folderName]) -// Do not update README and CHANGELOG for browsers folder if folder already existed -if (!isExistingFolder) { - // GENERATE INCLUDED README WITH UPDATE CHANGELOG - require("child_process").fork(__dirname + "/generate-included-readme.js", [versionTag, baseImageTag]) -} +// GENERATE INCLUDED README WITH UPDATE CHANGELOG +require("child_process").fork(__dirname + "/generate-included-readme.js", [folderName, baseImageTag]) // ASK USER IF THEY WANT TO COMMIT CHANGES -require("child_process").fork(__dirname + "/generate-commit.js", ["included", versionTag]) +require("child_process").fork(__dirname + "/generate-commit.js", ["included", folderName]) diff --git a/yarn.lock b/yarn.lock index 8e99ebc7fa..0ea14e14cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,1128 @@ # yarn lockfile v1 +"@ampproject/remapping@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.1.tgz#7922fb0817bf3166d8d9e258c57477e3fd1c3610" + integrity sha512-Aolwjd7HSC2PyY0fDj/wA/EimQT4HfEnFYNp5s9CQlrdhyvWTtvZ5YzrUPu6R6/1jKiUlxu8bUhkdSnKHNAHMA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" + integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== + +"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": + version "7.17.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.2.tgz#2c77fc430e95139d816d39b113b31bf40fb22337" + integrity sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw== + dependencies: + "@ampproject/remapping" "^2.0.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.0" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.17.2" + "@babel/parser" "^7.17.0" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.0" + "@babel/types" "^7.17.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + +"@babel/generator@^7.17.0", "@babel/generator@^7.7.2": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.0.tgz#7bd890ba706cd86d3e2f727322346ffdbf98f65e" + integrity sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw== + dependencies: + "@babel/types" "^7.17.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7": + version "7.17.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz#9699f14a88833a7e055ce57dcd3ffdcd25186b21" + integrity sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + +"@babel/helper-create-regexp-features-plugin@^7.16.7": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" + integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + regexpu-core "^5.0.1" + +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" + integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== + dependencies: + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-member-expression-to-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" + integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-transforms@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" + integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" + integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== + +"@babel/helper-remap-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" + integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helper-replace-supers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" + integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" + integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== + +"@babel/helper-wrap-function@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" + integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== + dependencies: + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helpers@^7.17.2": + version "7.17.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417" + integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ== + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.0" + "@babel/types" "^7.17.0" + +"@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.0.tgz#f0ac33eddbe214e4105363bb17c3341c5ffcc43c" + integrity sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" + integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" + integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + +"@babel/plugin-proposal-async-generator-functions@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" + integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-proposal-class-static-block@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz#712357570b612106ef5426d13dc433ce0f200c2a" + integrity sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" + integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" + integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" + integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" + integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" + integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.16.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" + integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.16.11": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" + integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.10" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-proposal-private-property-in-object@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" + integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" + integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" + integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-arrow-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" + integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" + integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" + +"@babel/plugin-transform-block-scoped-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-block-scoping@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" + integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-classes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" + integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" + integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-destructuring@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz#ca9588ae2d63978a4c29d3f33282d8603f618e23" + integrity sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-duplicate-keys@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" + integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-exponentiation-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-for-of@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" + integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== + dependencies: + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" + integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-member-expression-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-modules-amd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" + integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" + integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" + integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== + dependencies: + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" + integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" + integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + +"@babel/plugin-transform-new-target@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" + integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-object-super@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + +"@babel/plugin-transform-parameters@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" + integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-property-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-regenerator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" + integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" + integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-shorthand-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" + integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + +"@babel/plugin-transform-sticky-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-template-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" + integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-typeof-symbol@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" + integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" + integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-unicode-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/preset-env@^7.16.11": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" + integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== + dependencies: + "@babel/compat-data" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions" "^7.16.8" + "@babel/plugin-proposal-class-properties" "^7.16.7" + "@babel/plugin-proposal-class-static-block" "^7.16.7" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.16.7" + "@babel/plugin-proposal-json-strings" "^7.16.7" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-private-methods" "^7.16.11" + "@babel/plugin-proposal-private-property-in-object" "^7.16.7" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.16.7" + "@babel/plugin-transform-async-to-generator" "^7.16.8" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.16.7" + "@babel/plugin-transform-classes" "^7.16.7" + "@babel/plugin-transform-computed-properties" "^7.16.7" + "@babel/plugin-transform-destructuring" "^7.16.7" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.16.7" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.16.7" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.16.7" + "@babel/plugin-transform-modules-commonjs" "^7.16.8" + "@babel/plugin-transform-modules-systemjs" "^7.16.7" + "@babel/plugin-transform-modules-umd" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" + "@babel/plugin-transform-new-target" "^7.16.7" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.16.7" + "@babel/plugin-transform-reserved-words" "^7.16.7" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.16.7" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.16.7" + "@babel/plugin-transform-typeof-symbol" "^7.16.7" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.16.8" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" + core-js-compat "^3.20.2" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@^7.8.4": + version "7.17.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941" + integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.16.7", "@babel/template@^7.3.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0", "@babel/traverse@^7.7.2": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.0.tgz#3143e5066796408ccc880a33ecd3184f3e75cd30" + integrity sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.0" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.17.0" + "@babel/types" "^7.17.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" + integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" + integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + +"@jest/core@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" + integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/reporters" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.8.1" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^27.5.1" + jest-config "^27.5.1" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-resolve-dependencies "^27.5.1" + jest-runner "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + jest-watcher "^27.5.1" + micromatch "^4.0.4" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" + integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== + dependencies: + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + +"@jest/fake-timers@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" + integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== + dependencies: + "@jest/types" "^27.5.1" + "@sinonjs/fake-timers" "^8.0.1" + "@types/node" "*" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +"@jest/globals@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" + integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/types" "^27.5.1" + expect "^27.5.1" + +"@jest/reporters@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" + integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-haste-map "^27.5.1" + jest-resolve "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^8.1.0" + +"@jest/source-map@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" + integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.9" + source-map "^0.6.0" + +"@jest/test-result@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" + integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== + dependencies: + "@jest/console" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" + integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== + dependencies: + "@jest/test-result" "^27.5.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-runtime "^27.5.1" + +"@jest/transform@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" + integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^27.5.1" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-regex-util "^27.5.1" + jest-util "^27.5.1" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" + integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.11" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" + integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== + +"@jridgewell/trace-mapping@^0.3.0": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" + integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@nodelib/fs.scandir@2.1.3": version "2.1.3" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz" @@ -23,6 +1145,58 @@ "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^8.0.1": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" + integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": + version "7.1.18" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" + integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" + integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== + dependencies: + "@babel/types" "^7.3.0" + "@types/events@*": version "3.0.0" resolved "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz" @@ -37,6 +1211,32 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/graceful-fs@^4.1.2": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + "@types/minimatch@*": version "3.0.3" resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz" @@ -47,6 +1247,63 @@ resolved "https://registry.npmjs.org/@types/node/-/node-13.1.2.tgz" integrity sha512-B8emQA1qeKerqd1dmIsQYnXi+mmAzTB7flExjmy5X1aVAKFNNNDubkavwR13kR6JnpeLp3aLoJhwn9trWPAyFQ== +"@types/prettier@^2.1.5": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.4.tgz#5d9b63132df54d8909fce1c3f8ca260fdd693e17" + integrity sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA== + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/yargs-parser@*": + version "20.2.1" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" + integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== + +"@types/yargs@^16.0.0": + version "16.0.4" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" + integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== + dependencies: + "@types/yargs-parser" "*" + +abab@^2.0.3, abab@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.2.4: + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + ajv@^6.5.5: version "6.11.0" resolved "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz" @@ -57,6 +1314,18 @@ ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" @@ -64,6 +1333,33 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" @@ -101,6 +1397,98 @@ aws4@^1.8.0: resolved "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz" integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== +babel-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" + integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== + dependencies: + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" + integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-polyfill-corejs2@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.3.1" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" + integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.21.0" + +babel-plugin-polyfill-regenerator@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" + integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== + dependencies: + babel-plugin-jest-hoist "^27.5.1" + babel-preset-current-node-syntax "^1.0.0" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" @@ -128,12 +1516,68 @@ braces@^3.0.1: dependencies: fill-range "^7.0.1" +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserslist@^4.17.5, browserslist@^4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" + integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== + dependencies: + caniuse-lite "^1.0.30001286" + electron-to-chromium "^1.4.17" + escalade "^3.1.1" + node-releases "^2.0.1" + picocolors "^1.0.0" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001286: + version "1.0.30001312" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz#e11eba4b87e24d22697dae05455d5aea28550d5f" + integrity sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -142,6 +1586,48 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +ci-info@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" + integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" @@ -149,12 +1635,24 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -combined-stream@^1.0.6, combined-stream@~1.0.6: +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -171,11 +1669,52 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +core-js-compat@^3.20.2, core-js-compat@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.0.tgz#bcc86aa5a589cee358e7a7fa0a4979d5a76c3885" + integrity sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A== + dependencies: + browserslist "^4.19.1" + semver "7.0.0" + core-util-is@1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" @@ -183,11 +1722,64 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + +decimal.js@^10.2.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + +deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" + integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" @@ -195,6 +1787,13 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" @@ -203,11 +1802,100 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +electron-to-chromium@^1.4.17: + version "1.4.68" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz#d79447b6bd1bec9183f166bb33d4bef0d5e4e568" + integrity sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA== + +emittery@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" + integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expect@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" + integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== + dependencies: + "@jest/types" "^27.5.1" + jest-get-type "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + extend@~3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" @@ -239,6 +1927,11 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + fastq@^1.6.0: version "1.6.0" resolved "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz" @@ -246,6 +1939,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.0" +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" @@ -253,11 +1953,28 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" @@ -272,6 +1989,45 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +fsevents@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + getpass@^0.1.1: version "0.1.7" resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" @@ -305,6 +2061,23 @@ glob@^7.0.0, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.1, glob@^7.1.2, glob@^7.1.4: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + globby@10.0.1: version "10.0.1" resolved "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz" @@ -319,6 +2092,11 @@ globby@10.0.1: merge2 "^1.2.3" slash "^3.0.0" +graceful-fs@^4.2.9: + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" @@ -337,6 +2115,44 @@ has-flag@^3.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" @@ -346,11 +2162,44 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + ignore@^5.1.1: version "5.1.4" resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz" integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" @@ -374,52 +2223,597 @@ is-absolute-url@^3.0.0: resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz" integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== + dependencies: + has "^1.0.3" + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: - is-extglob "^2.1.1" + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-relative-url@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-relative-url/-/is-relative-url-3.0.0.tgz" + integrity sha512-U1iSYRlY2GIMGuZx7gezlB5dp1Kheaym7zKzO1PV06mOihiWTXejLwm4poEJysPyXF+HtK/BEd0DVlcCh30pEA== + dependencies: + is-absolute-url "^3.0.0" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +isemail@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz" + integrity sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg== + dependencies: + punycode "2.x.x" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" + integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.4" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.4.tgz#1b6f068ecbc6c331040aab5741991273e609e40c" + integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" + integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== + dependencies: + "@jest/types" "^27.5.1" + execa "^5.0.0" + throat "^6.0.1" + +jest-circus@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" + integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + throat "^6.0.1" + +jest-cli@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" + integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== + dependencies: + "@jest/core" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + prompts "^2.0.1" + yargs "^16.2.0" + +jest-config@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" + integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== + dependencies: + "@babel/core" "^7.8.0" + "@jest/test-sequencer" "^27.5.1" + "@jest/types" "^27.5.1" + babel-jest "^27.5.1" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.9" + jest-circus "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-get-type "^27.5.1" + jest-jasmine2 "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runner "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^27.5.1" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-docblock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" + integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== + dependencies: + detect-newline "^3.0.0" + +jest-each@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" + integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== + dependencies: + "@jest/types" "^27.5.1" + chalk "^4.0.0" + jest-get-type "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + +jest-environment-jsdom@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" + integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + jsdom "^16.6.0" + +jest-environment-node@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" + integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +jest-get-type@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" + integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== + +jest-haste-map@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" + integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== + dependencies: + "@jest/types" "^27.5.1" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^27.5.1" + jest-serializer "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + micromatch "^4.0.4" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" + +jest-jasmine2@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" + integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + throat "^6.0.1" + +jest-leak-detector@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" + integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== + dependencies: + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-matcher-utils@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" + integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== + dependencies: + chalk "^4.0.0" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-message-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.5.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" + integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== + +jest-resolve-dependencies@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" + integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== + dependencies: + "@jest/types" "^27.5.1" + jest-regex-util "^27.5.1" + jest-snapshot "^27.5.1" + +jest-resolve@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" + integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== + dependencies: + "@jest/types" "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-pnp-resolver "^1.2.2" + jest-util "^27.5.1" + jest-validate "^27.5.1" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +jest-runner@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" + integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.8.1" + graceful-fs "^4.2.9" + jest-docblock "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-haste-map "^27.5.1" + jest-leak-detector "^27.5.1" + jest-message-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runtime "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + source-map-support "^0.5.6" + throat "^6.0.1" + +jest-runtime@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" + integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/globals" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + strip-bom "^4.0.0" -is-relative-url@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-relative-url/-/is-relative-url-3.0.0.tgz" - integrity sha512-U1iSYRlY2GIMGuZx7gezlB5dp1Kheaym7zKzO1PV06mOihiWTXejLwm4poEJysPyXF+HtK/BEd0DVlcCh30pEA== +jest-serializer@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" + integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== dependencies: - is-absolute-url "^3.0.0" + "@types/node" "*" + graceful-fs "^4.2.9" -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +jest-snapshot@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" + integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== + dependencies: + "@babel/core" "^7.7.2" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.0.0" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^27.5.1" + graceful-fs "^4.2.9" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + jest-haste-map "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + natural-compare "^1.4.0" + pretty-format "^27.5.1" + semver "^7.3.2" + +jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" + integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== + dependencies: + "@jest/types" "^27.5.1" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^27.5.1" + leven "^3.1.0" + pretty-format "^27.5.1" + +jest-watcher@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" + integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== + dependencies: + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^27.5.1" + string-length "^4.0.1" + +jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" -isemail@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz" - integrity sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg== +jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" + integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== dependencies: - punycode "2.x.x" + "@jest/core" "^27.5.1" + import-local "^3.0.2" + jest-cli "^27.5.1" -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" jsbn@~0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +jsdom@^16.6.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" @@ -440,6 +2834,13 @@ json-stringify-safe@~5.0.1: resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz" @@ -450,6 +2851,29 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + link-check@^4.4.6: version "4.4.7" resolved "https://registry.npmjs.org/link-check/-/link-check-4.4.7.tgz" @@ -460,11 +2884,44 @@ link-check@^4.4.6: ms "^2.1.2" request "^2.88.0" -lodash@4.17.21, lodash@^4.17.15: +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash@4.17.21, lodash@^4.17.15, lodash@^4.7.0: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + markdown-link-check@3.8.0: version "3.8.0" resolved "https://registry.npmjs.org/markdown-link-check/-/markdown-link-check-3.8.0.tgz" @@ -491,6 +2948,11 @@ marked@^0.7.0: resolved "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz" integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg== +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + merge2@^1.2.3, merge2@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz" @@ -504,6 +2966,14 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + mime-db@1.43.0: version "1.43.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz" @@ -516,6 +2986,11 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.43.0" +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + minimatch@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" @@ -523,16 +2998,68 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -ms@^2.1.2: +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +ms@2.1.2, ms@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-releases@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" + integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + once@^1.3.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" @@ -540,12 +3067,75 @@ once@^1.3.0: dependencies: wrappy "1" +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-parse@1.0.7, path-parse@^1.0.6: +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@1.0.7, path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -560,26 +3150,75 @@ performance-now@^2.1.0: resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + picomatch@^2.0.5: version "2.1.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz" integrity sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA== +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + prettier@2.5.1: version "2.5.1" resolved "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz" integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== +pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + progress@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + psl@^1.1.28: version "1.7.0" resolved "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz" integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== +psl@^1.1.33: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + punycode@2.x.x, punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" @@ -590,6 +3229,11 @@ qs@~6.5.2: resolved "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" @@ -597,6 +3241,54 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regexpu-core@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" + integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== + +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== + dependencies: + jsesc "~0.5.0" + request@^2.88.0: version "2.88.2" resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" @@ -623,6 +3315,28 @@ request@^2.88.0: tunnel-agent "^0.6.0" uuid "^3.3.2" +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + resolve@^1.1.6: version "1.14.2" resolved "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz" @@ -630,11 +3344,27 @@ resolve@^1.1.6: dependencies: path-parse "^1.0.6" +resolve@^1.14.2, resolve@^1.20.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + reusify@^1.0.0: version "1.0.4" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + run-parallel@^1.1.9: version "1.1.9" resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz" @@ -645,16 +3375,57 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.2: resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== -safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + semver@7.1.3: version "7.1.3" resolved "https://registry.npmjs.org/semver/-/semver-7.1.3.tgz" integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA== +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + shelljs@0.8.5: version "0.8.5" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" @@ -664,6 +3435,16 @@ shelljs@0.8.5: interpret "^1.0.0" rechoir "^0.6.2" +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + slash@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" @@ -674,6 +3455,34 @@ slugify@^1.4.7: resolved "https://registry.npmjs.org/slugify/-/slugify-1.4.7.tgz" integrity sha512-tf+h5W1IrjNm/9rKKj0JU2MDMruiopx0jjVA5zCdBtcGjfp0+c5rHw/zADLC3IeKlGHtVbHtpfzvYA0OYT+HKg== +source-map-support@^0.5.6: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + sshpk@^1.7.0: version "1.16.1" resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz" @@ -689,6 +3498,52 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +stack-utils@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + dependencies: + escape-string-regexp "^2.0.0" + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -696,6 +3551,70 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +throat@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" + integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" @@ -703,6 +3622,15 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" @@ -711,6 +3639,13 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" @@ -723,6 +3658,58 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + +universalify@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz" @@ -735,6 +3722,15 @@ uuid@^3.3.2: resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +v8-to-istanbul@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" + integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + verror@1.10.0: version "1.10.0" resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" @@ -744,7 +3740,133 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.4.6: + version "7.5.7" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" + integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" From 5be146df9394a7357810596173f935ca7a5d7596 Mon Sep 17 00:00:00 2001 From: Adam Murray Date: Thu, 3 Mar 2022 12:01:47 -0600 Subject: [PATCH 034/371] feat(base): generate new image 16.14.0-slim (#608) --- base/16.14.0-slim/Dockerfile | 60 ++++++++++++++++++++++++++++++++++++ base/16.14.0-slim/README.md | 18 +++++++++++ base/16.14.0-slim/build.sh | 8 +++++ base/CHANGELOG.md | 1 + base/README.md | 3 +- buildspec.yml | 8 ++--- circle.yml | 41 +++++------------------- scripts/generate-config.js | 33 +++----------------- 8 files changed, 105 insertions(+), 67 deletions(-) create mode 100644 base/16.14.0-slim/Dockerfile create mode 100644 base/16.14.0-slim/README.md create mode 100755 base/16.14.0-slim/build.sh diff --git a/base/16.14.0-slim/Dockerfile b/base/16.14.0-slim/Dockerfile new file mode 100644 index 0000000000..4599c52b56 --- /dev/null +++ b/base/16.14.0-slim/Dockerfile @@ -0,0 +1,60 @@ +# WARNING: this file was autogenerated by generate-base-image.js +# contains all dependencies for running Cypress.io Test Runner +# https://on.cypress.io/docker and https://on.cypress.io/ci +# +# build it with command +# docker build -t cypress/base:16.14.0-slim . +# +FROM node:16.14.0-bullseye-slim + +RUN apt-get update && \ + apt-get install --no-install-recommends -y \ + libgtk2.0-0 \ + libgtk-3-0 \ + libnotify-dev \ + libgconf-2-4 \ + libgbm-dev \ + libnss3 \ + libxss1 \ + libasound2 \ + libxtst6 \ + xauth \ + xvfb \ + # install text editors + vim-tiny \ + nano \ + # install emoji font + fonts-noto-color-emoji \ + # install Chinese fonts + # this list was copied from https://github.com/jim3ma/docker-leanote + fonts-arphic-bkai00mp \ + fonts-arphic-bsmi00lp \ + fonts-arphic-gbsn00lp \ + fonts-arphic-gkai00mp \ + fonts-arphic-ukai \ + fonts-arphic-uming \ + ttf-wqy-zenhei \ + ttf-wqy-microhei \ + xfonts-wqy \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM=xterm \ +# avoid million NPM install messages + npm_config_loglevel=warn \ +# allow installing when the main user is root + npm_config_unsafe_perm=true + +RUN npm --version \ + && npm install -g yarn@latest --force \ + && yarn --version \ + && node -p process.versions \ + && node -p 'module.paths' \ + && echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" diff --git a/base/16.14.0-slim/README.md b/base/16.14.0-slim/README.md new file mode 100644 index 0000000000..ce0ab248bf --- /dev/null +++ b/base/16.14.0-slim/README.md @@ -0,0 +1,18 @@ + +# cypress/base:16.14.0-slim + +A Docker image with all dependencies pre-installed. +Just add your NPM packages (including Cypress) and run the tests. +See [Cypress Docker docs](https://on.cypress.io/docker) and +[Cypress CI guide](https://on.cypress.io/ci). + +## Example + +Sample Dockerfile + +``` +FROM cypress/base:16.14.0-slim +RUN npm install --save-dev cypress +RUN $(npm bin)/cypress verify +RUN $(npm bin)/cypress run +``` diff --git a/base/16.14.0-slim/build.sh b/base/16.14.0-slim/build.sh new file mode 100755 index 0000000000..eff3ffb54f --- /dev/null +++ b/base/16.14.0-slim/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-base-image.js +set e+x + +# build image with Cypress dependencies +LOCAL_NAME=cypress/base:16.14.0-slim + +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/base/CHANGELOG.md b/base/CHANGELOG.md index 94e565baf8..68ff3d3092 100644 --- a/base/CHANGELOG.md +++ b/base/CHANGELOG.md @@ -69,3 +69,4 @@ | cypress/base:ubuntu19-node12.14.1 | 12.14.1 | Ubuntu 19.0.4 | [ubuntu19-node12.14.1](ubuntu19-node12.14.1) | 6.13.6 | 1.21.1 | | cypress/base:manjaro-node14.12.0 | 14.12.0 | Manjaro | [manjaro-14.12.0](manjaro-14.12.0) | 6.14.8 | 1.22.10 | | cypress/base:14.19.0 | 14.19.0 | Debian | [/14.19.0](14.19.0) | 6.14.16 | 1.22.17 | +| cypress/base:16.14.0-slim | 16.14.0 | Debian | [/16.14.0](16.14.0) | `🚫` | `🚫` | `🚫` | diff --git a/base/README.md b/base/README.md index fd4e3deb8d..d1a758c59e 100644 --- a/base/README.md +++ b/base/README.md @@ -70,7 +70,7 @@ Image `cypress/base:12` is tagged [`latest`](https://hub.docker.com/r/cypress/ba | cypress/base:16.4.0 | 16.4.0 | Debian 10.9 | [/16.4.0](16.4.0) | 7.10.0 | 1.22.10 | [1](#note1) | | cypress/base:16.5.0 | 16.5.0 | Debian 10.9 | [/16.5.0](16.5.0) | 7.10.0 | 1.22.10 | [1](#note1) | | cypress/base:16.13.0 | 16.13.0 | Debian 10.9 | [/16.13.0](16.13.0) | 7.10.0 | 1.22.10 | [1](#note1) | -| cypress/base:16.14.0 | 16.14.0 | Debian 10.11 | [/16.14.0](16.14.0) | 8.3.1 | 1.22.17 | +| cypress/base:16.14.0 | 16.14.0 | Debian 10.11 | [/16.14.0](16.14.0) | 8.3.1 | 1.22.17 | [1](#note1) | | cypress/base:17.3.0 | 17.3.0 | Debian 10.9 | [/17.3.0](17.3.0) | 8.3.0 | 1.22.17 | [1](#note1) | | cypress/base:centos7 | 6 | CentOS | [/centos7](centos7) | 3.10.10 | 🚫 | | cypress/base:centos7-12.4.0 | 12.4.0 | CentOS | [/centos7](centos7) | 6.9.0 | 1.16.0 | @@ -81,6 +81,7 @@ Image `cypress/base:12` is tagged [`latest`](https://hub.docker.com/r/cypress/ba | cypress/base:ubuntu19-node12.14.1 | 12.14.1 | Ubuntu 19.0.4 | [ubuntu19-node12.14.1](ubuntu19-node12.14.1) | 6.13.6 | 1.21.1 | | cypress/base:manjaro-node14.12.0 | 14.12.0 | Manjaro | [manjaro-14.12.0](manjaro-14.12.0) | 6.14.8 | 1.22.10 | | cypress/base:14.19.0 | 14.19.0 | Debian | [/14.19.0](14.19.0) | 6.14.16 | 1.22.17 | +| cypress/base:16.14.0-slim | 16.14.0 | Debian | [/16.14.0](16.14.0) | `🚫` | `🚫` | `🚫` | ## ⚠️ Node.js Support diff --git a/buildspec.yml b/buildspec.yml index 03dfa9789d..d34f5e29d4 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,16 +6,16 @@ env: batch: fast-fail: false build-list: - - identifier: included951 + - identifier: base16140Slim env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_MEDIUM variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "9.5.1" + IMAGE_REPO_NAME: "cypress/base" + IMAGE_DIR: "base" + IMAGE_TAG: "16.14.0-slim" phases: pre_build: diff --git a/circle.yml b/circle.yml index c08fee3cad..eea8e30de6 100644 --- a/circle.yml +++ b/circle.yml @@ -4,7 +4,7 @@ version: 2.1 orbs: - node: circleci/node@1.1 + node: circleci/node@5.0.0 commands: halt-on-branch: @@ -49,26 +49,7 @@ commands: imageName: type: string description: Cypress base docker image to test - checkNodeVersion: - type: boolean - description: Check if the FROM image name is strict Node version - default: true steps: - - when: - condition: << parameters.checkNodeVersion >> - steps: - - run: - name: confirm image has Node << parameters.nodeVersion >> - # do not run Docker in the interactive mode - adds control characters! - command: | - version=$(docker run << parameters.imageName >> node --version) - if [ "$version" == "<< parameters.nodeVersion >>" ]; then - echo "Base image has the expected version of Node << parameters.nodeVersion >>"; - else - echo "Problem: base image has unexpected Node version" - echo "Expected << parameters.nodeVersion >> and got $version" - exit 1 - fi - run: name: test image << parameters.imageName >> no_output_timeout: '3m' @@ -373,12 +354,11 @@ jobs: lint-markdown: executor: name: node/default - tag: '12' + tag: '12.22' steps: - checkout - - node/with-cache: - steps: - - run: yarn install --frozen-lockfile + - node/install-packages: + override-ci-command: yarn install --frozen-lockfile - run: npm run check:markdown build-base-image: @@ -392,10 +372,6 @@ jobs: dockerTag: type: string description: Image tag to build like "12.14.0" - checkNodeVersion: - type: boolean - description: Check if the FROM image name is strict Node version - default: true steps: - checkout - halt-if-docker-image-exists: @@ -409,7 +385,6 @@ jobs: - test-base-image: nodeVersion: v<< parameters.dockerTag >> imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - checkNodeVersion: << parameters.checkNodeVersion >> - halt-on-branch - docker-push: imageName: << parameters.dockerName >>:<< parameters.dockerTag >> @@ -497,8 +472,8 @@ workflows: lint: jobs: - lint-markdown - build-included-images: + build-base-images: jobs: - - build-included-image: - name: "included 9.5.1" - dockerTag: "9.5.1" \ No newline at end of file + - build-base-image: + name: "base 16.14.0-slim" + dockerTag: "16.14.0-slim" \ No newline at end of file diff --git a/scripts/generate-config.js b/scripts/generate-config.js index 7255f61dbc..8787d0fd5e 100644 --- a/scripts/generate-config.js +++ b/scripts/generate-config.js @@ -53,7 +53,7 @@ const preamble = ` version: 2.1 orbs: - node: circleci/node@1.1 + node: circleci/node@5.0.0 commands: halt-on-branch: @@ -98,26 +98,7 @@ commands: imageName: type: string description: Cypress base docker image to test - checkNodeVersion: - type: boolean - description: Check if the FROM image name is strict Node version - default: true steps: - - when: - condition: << parameters.checkNodeVersion >> - steps: - - run: - name: confirm image has Node << parameters.nodeVersion >> - # do not run Docker in the interactive mode - adds control characters! - command: | - version=$(docker run << parameters.imageName >> node --version) - if [ "$version" == "<< parameters.nodeVersion >>" ]; then - echo "Base image has the expected version of Node << parameters.nodeVersion >>"; - else - echo "Problem: base image has unexpected Node version" - echo "Expected << parameters.nodeVersion >> and got $version" - exit 1 - fi - run: name: test image << parameters.imageName >> no_output_timeout: '3m' @@ -422,12 +403,11 @@ jobs: lint-markdown: executor: name: node/default - tag: '12' + tag: '12.22' steps: - checkout - - node/with-cache: - steps: - - run: yarn install --frozen-lockfile + - node/install-packages: + override-ci-command: yarn install --frozen-lockfile - run: npm run check:markdown build-base-image: @@ -441,10 +421,6 @@ jobs: dockerTag: type: string description: Image tag to build like "12.14.0" - checkNodeVersion: - type: boolean - description: Check if the FROM image name is strict Node version - default: true steps: - checkout - halt-if-docker-image-exists: @@ -458,7 +434,6 @@ jobs: - test-base-image: nodeVersion: v<< parameters.dockerTag >> imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - checkNodeVersion: << parameters.checkNodeVersion >> - halt-on-branch - docker-push: imageName: << parameters.dockerName >>:<< parameters.dockerTag >> From f6dfcb42c67dc8b3592d71ed9593d8970981abf4 Mon Sep 17 00:00:00 2001 From: Adam Murray Date: Mon, 7 Mar 2022 10:57:03 -0600 Subject: [PATCH 035/371] feat(browsers): add new image based off of node-16.14.0-slim with latest chrome and ff versions (#609) --- browsers/CHANGELOG.md | 3 +- browsers/README.md | 13 ++-- .../node16.14.0-slim-chrome99-ff97/Dockerfile | 75 +++++++++++++++++++ .../node16.14.0-slim-chrome99-ff97/README.md | 13 ++++ .../node16.14.0-slim-chrome99-ff97/build.sh | 8 ++ buildspec.yml | 8 +- circle.yml | 10 ++- scripts/generate-browser-image.js | 3 + 8 files changed, 117 insertions(+), 16 deletions(-) create mode 100644 browsers/node16.14.0-slim-chrome99-ff97/Dockerfile create mode 100644 browsers/node16.14.0-slim-chrome99-ff97/README.md create mode 100755 browsers/node16.14.0-slim-chrome99-ff97/build.sh diff --git a/browsers/CHANGELOG.md b/browsers/CHANGELOG.md index 6102c26fac..d389671822 100644 --- a/browsers/CHANGELOG.md +++ b/browsers/CHANGELOG.md @@ -26,4 +26,5 @@ Name + Tag | Base image | Chrome | Firefox | Edge [cypress/browsers:node14.16.0-chrome89-ff77](./node14.16.0-chrome89-ff77) | `cypress/base:14.16.0` | `89.0.4389.72` | `77.0` [cypress/browsers:node14.16.0-chrome89-ff86](./node14.16.0-chrome89-ff86) | `cypress/base:14.16.0` | `89.0.4389.72` | `86.0.1` [cypress/browsers:node14.17.0-chrome91-ff89](./node14.17.0-chrome91-ff89) | `cypress/base:14.17.0` | `91.0.4472.114` | `89.0.2` -[cypress/browsers:node16.5.0-chrome94-ff93](./node16.5.0-chrome94-ff93) | `cypress/base:16.5.0` | `94.0.4606.71` | `93.0` \ No newline at end of file +[cypress/browsers:node16.5.0-chrome94-ff93](./node16.5.0-chrome94-ff93) | `cypress/base:16.5.0` | `94.0.4606.71` | `93.0` +[cypress/browsers:node16.14.0-slim-chrome99-ff97](./node16.14.0-slim-chrome99-ff97) | `cypress/base:16.14.0` | `99.0.4844.51` | `97.0.1` | `🚫` diff --git a/browsers/README.md b/browsers/README.md index 9db6f02e9a..27f0c31192 100644 --- a/browsers/README.md +++ b/browsers/README.md @@ -3,8 +3,8 @@ [![Docker Pulls](https://img.shields.io/docker/pulls/cypress/browsers.svg?maxAge=604800)](https://hub.docker.com/r/cypress/browsers/) > Docker image with all operating system dependencies and some pre-installed browsers, **but NOT Cypress itself**. See [cypress/included](../included) images if you need Cypress pre-installed in the image. - -Name + Tag | Base image | Chrome | Firefox | Edge + + Name + Tag | Base image | Chrome | Firefox | Edge --- | --- | --- | --- | --- [cypress/browsers:node8.9.3-npm6.10.1-chrome75](./node8.9.3-npm6.10.1-chrome75) | `cypress/base:8.9.3-npm-6.10.1` | `75.0.3770.100` | 🚫 [cypress/browsers:node10.16.0-chrome77-ff71](./node10.16.0-chrome77-ff71) | `cypress/browsers:node10.16.0-chrome77` | `77.0.3865.90` | `71.0` @@ -28,15 +28,14 @@ Name + Tag | Base image | Chrome | Firefox | Edge [cypress/browsers:node12.14.1-chrome85-ff81](./node12.14.1-chrome85-ff81) | `cypress/base:12.14.1` | `85.0.4183.121` | `81.0` [cypress/browsers:node14.10.1-edge88](./node14.10.1-edge88) | `cypress/base:14.10.1` | 🚫 | 🚫 | `88.0.673.0 dev` [cypress/browsers:node14.15.0-chrome86-ff82](./node14.15.0-chrome86-ff82) | `cypress/base:14.15.0` | `86.0.4240.193` | `82.0.3` -[cypress/browsers:node14.15.0-chrome96-ff94](./node14.15.0-chrome86-ff82) | `cypress/base:14.15.0` | `96.0.4664.45` | `94.0.2` +[cypress/browsers:node14.15.0-chrome96-ff94](./node14.15.0-chrome96-ff94) | `cypress/base:14.15.0` | `96.0.4664.45` | `94.0.2` [cypress/browsers:node14.17.0-chrome88-ff89](./node14.17.0-chrome88-ff89) | `cypress/base:14.17.0` | `88.0.4324.96` | `89.0.2` [cypress/browsers:node14.16.0-chrome89-ff77](./node14.16.0-chrome89-ff77) | `cypress/base:14.16.0` | `89.0.4389.72` | `77.0` [cypress/browsers:node14.16.0-chrome89-ff86](./node14.16.0-chrome89-ff86) | `cypress/base:14.16.0` | `89.0.4389.72` | `86.0.1` [cypress/browsers:node14.17.0-chrome91-ff89](./node14.17.0-chrome91-ff89) | `cypress/base:14.17.0` | `91.0.4472.114` | `89.0.2` -[cypress/browsers:node16.5.0-chrome94-ff93](./node16.5.0-chrome94-ff93) | `cypress/base:16.5.0` | `94.0.4606.71` | `93.0` -[cypress/browsers:node16.5.0-chrome97-ff96](./node16.5.0-chrome97-ff96) | `cypress/base:16.5.0` | `97.0.4692.71` | `96.0.3` -[cypress/browsers:node16.13.0-chrome95-ff94](./node16.13.0-chrome95-ff94) | `cypress/base:16.13.0` | `95.0.4638.69` | `94.0` - +[cypress/browsers:node16.5.0-chrome94-ff93](./node16.5.0-chrome94-ff93) | `cypress/base:16.5.0` | `94.0.4606.71` | `93.0` +[cypress/browsers:node16.14.0-slim-chrome99-ff97](./node16.14.0-slim-chrome99-ff97) | `cypress/base:16.14.0` | `99.0.4844.51` | `97.0.1` | `🚫` + To find the available Chrome versions, check [https://chromium.cypress.io/](https://chromium.cypress.io/). ## Naming scheme diff --git a/browsers/node16.14.0-slim-chrome99-ff97/Dockerfile b/browsers/node16.14.0-slim-chrome99-ff97/Dockerfile new file mode 100644 index 0000000000..1b62df2226 --- /dev/null +++ b/browsers/node16.14.0-slim-chrome99-ff97/Dockerfile @@ -0,0 +1,75 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browsers -- 16.14.0-slim --chrome=99.0.4844 --firefox=97.0.1 +# +# build this image with command +# docker build -t cypress/browsers:node16.14.0-slim-chrome99-ff97 . +# +# +FROM cypress/base:16.14.0-slim + +USER root + +RUN node --version + +# Chrome dependencies +RUN apt-get update && \ + apt-get install -y \ + fonts-liberation \ + libcurl4 \ + libcurl3-gnutls \ + libcurl3-nss \ + xdg-utils \ + wget \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +# install libappindicator3-1 - not included with Debian 11 +RUN wget --no-verbose /usr/src/libappindicator3-1_0.4.92-7_amd64.deb "http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_amd64.deb" && \ + dpkg -i /usr/src/libappindicator3-1_0.4.92-7_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/libappindicator3-1_0.4.92-7_amd64.deb + +# install Chrome browser +RUN wget --no-verbose -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_99.0.4844.51-1_amd64.deb" && \ + dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/google-chrome-stable_current_amd64.deb + +# "fake" dbus address to prevent errors +# https://github.com/SeleniumHQ/docker-selenium/issues/87 +ENV DBUS_SESSION_BUS_ADDRESS=/dev/null + +# firefox dependencies +RUN apt-get update && \ + apt-get install -y \ + bzip2 \ + # add codecs needed for video playback in firefox + # https://github.com/cypress-io/cypress-docker-images/issues/150 + mplayer + +# install Firefox browser +RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/97.0.1/linux-x86_64/en-US/firefox-97.0.1.tar.bz2 && \ + tar -C /opt -xjf /tmp/firefox.tar.bz2 && \ + rm /tmp/firefox.tar.bz2 && \ + ln -fs /opt/firefox/firefox /usr/bin/firefox + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "Chrome version: $(google-chrome --version) \n" \ + "Firefox version: $(firefox --version) \n" \ + "Edge version: $(edge --version) \n" \ + "git version: $(git --version) \n" \ + "whoami: $(whoami) \n" + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM xterm \ + # avoid million NPM install messages + npm_config_loglevel warn \ + # allow installing when the main user is root + npm_config_unsafe_perm true diff --git a/browsers/node16.14.0-slim-chrome99-ff97/README.md b/browsers/node16.14.0-slim-chrome99-ff97/README.md new file mode 100644 index 0000000000..b123217c24 --- /dev/null +++ b/browsers/node16.14.0-slim-chrome99-ff97/README.md @@ -0,0 +1,13 @@ + + +# cypress/browsers:node16.14.0-slim-chrome99-ff97 + +A complete image with all operating system depedencies for Cypress, and Chrome 99.0.4844, Firefox 97.0.1, Edge undefined browsers. + +[Dockerfile](Dockerfile) + +**Note:** this image uses the `root` user. You might want to switch to nonroot user like `node` when running this container for security diff --git a/browsers/node16.14.0-slim-chrome99-ff97/build.sh b/browsers/node16.14.0-slim-chrome99-ff97/build.sh new file mode 100755 index 0000000000..db2d3ae231 --- /dev/null +++ b/browsers/node16.14.0-slim-chrome99-ff97/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browsers -- 16.14.0-slim --chrome=99.0.4844.51 --firefox=97.0.1 +set e+x + +LOCAL_NAME=cypress/browsers:node16.14.0-slim-chrome99-ff97 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/buildspec.yml b/buildspec.yml index d34f5e29d4..38543b7147 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,16 +6,16 @@ env: batch: fast-fail: false build-list: - - identifier: base16140Slim + - identifier: browsernode16140SlimChrome99Ff97 env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_MEDIUM variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "16.14.0-slim" + IMAGE_REPO_NAME: "cypress/browser" + IMAGE_DIR: "browser" + IMAGE_TAG: "node16.14.0-slim-chrome99-ff97" phases: pre_build: diff --git a/circle.yml b/circle.yml index eea8e30de6..b6cb0b186e 100644 --- a/circle.yml +++ b/circle.yml @@ -472,8 +472,10 @@ workflows: lint: jobs: - lint-markdown - build-base-images: + build-browser-images: jobs: - - build-base-image: - name: "base 16.14.0-slim" - dockerTag: "16.14.0-slim" \ No newline at end of file + - build-browser-image: + name: "browser node16.14.0-slim-chrome99-ff97" + dockerTag: "node16.14.0-slim-chrome99-ff97" + chromeVersion: "Google Chrome 99" + firefoxVersion: "Mozilla Firefox 97" \ No newline at end of file diff --git a/scripts/generate-browser-image.js b/scripts/generate-browser-image.js index eac4cbeed2..9a59063b9e 100644 --- a/scripts/generate-browser-image.js +++ b/scripts/generate-browser-image.js @@ -63,6 +63,9 @@ RUN node --version RUN apt-get update && \\ apt-get install -y \\ fonts-liberation \\ + libcurl4 \\ + libcurl3-gnutls \\ + libcurl3-nss \\ xdg-utils \\ wget \\ # clean up From 2e6cec5dda3acde16d977288caa5f0a9a9564f26 Mon Sep 17 00:00:00 2001 From: Adam Murray Date: Mon, 7 Mar 2022 12:39:06 -0600 Subject: [PATCH 036/371] feat(included): add new 9.5.1 included image with node16.14.0-slim-chrome99-ff97 (#611) --- buildspec.yml | 8 +-- circle.yml | 10 ++- .../Dockerfile | 61 +++++++++++++++++++ .../README.md | 18 ++++++ .../build.sh | 8 +++ included/CHANGELOG.md | 2 + included/README.md | 7 ++- 7 files changed, 101 insertions(+), 13 deletions(-) create mode 100644 included/9.5.1-node16.14.0-slim-chrome99-ff97/Dockerfile create mode 100644 included/9.5.1-node16.14.0-slim-chrome99-ff97/README.md create mode 100755 included/9.5.1-node16.14.0-slim-chrome99-ff97/build.sh diff --git a/buildspec.yml b/buildspec.yml index 38543b7147..505d11872e 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,16 +6,16 @@ env: batch: fast-fail: false build-list: - - identifier: browsernode16140SlimChrome99Ff97 + - identifier: included951Node16140SlimChrome99Ff97 env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_MEDIUM variables: - IMAGE_REPO_NAME: "cypress/browser" - IMAGE_DIR: "browser" - IMAGE_TAG: "node16.14.0-slim-chrome99-ff97" + IMAGE_REPO_NAME: "cypress/included" + IMAGE_DIR: "included" + IMAGE_TAG: "9.5.1-node16.14.0-slim-chrome99-ff97" phases: pre_build: diff --git a/circle.yml b/circle.yml index b6cb0b186e..879c2fa40c 100644 --- a/circle.yml +++ b/circle.yml @@ -472,10 +472,8 @@ workflows: lint: jobs: - lint-markdown - build-browser-images: + build-included-images: jobs: - - build-browser-image: - name: "browser node16.14.0-slim-chrome99-ff97" - dockerTag: "node16.14.0-slim-chrome99-ff97" - chromeVersion: "Google Chrome 99" - firefoxVersion: "Mozilla Firefox 97" \ No newline at end of file + - build-included-image: + name: "included 9.5.1-node16.14.0-slim-chrome99-ff97" + dockerTag: "9.5.1-node16.14.0-slim-chrome99-ff97" \ No newline at end of file diff --git a/included/9.5.1-node16.14.0-slim-chrome99-ff97/Dockerfile b/included/9.5.1-node16.14.0-slim-chrome99-ff97/Dockerfile new file mode 100644 index 0000000000..745412e94c --- /dev/null +++ b/included/9.5.1-node16.14.0-slim-chrome99-ff97/Dockerfile @@ -0,0 +1,61 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.5.1 cypress/browsers:node16.14.0-slim-chrome99-ff97 +# +# build this image with command +# docker build -t cypress/included:9.5.1-node16.14.0-slim-chrome99-ff97 . +# +FROM cypress/browsers:node16.14.0-slim-chrome99-ff97 + +# Update the dependencies to get the latest and greatest (and safest!) packages. +RUN apt update && apt upgrade -y + +# avoid too many progress messages +# https://github.com/cypress-io/cypress/issues/1243 +ENV CI=1 \ +# disable shared memory X11 affecting Cypress v4 and Chrome +# https://github.com/cypress-io/cypress-docker-images/issues/270 + QT_X11_NO_MITSHM=1 \ + _X11_NO_MITSHM=1 \ + _MITSHM=0 \ + # point Cypress at the /root/cache no matter what user account is used + # see https://on.cypress.io/caching + CYPRESS_CACHE_FOLDER=/root/.cache/Cypress + +# should be root user +RUN echo "whoami: $(whoami)" \ + && npm config -g set user $(whoami) \ + # command "id" should print: + # uid=0(root) gid=0(root) groups=0(root) + # which means the current user is root + && id \ + && npm install -g "cypress@9.5.1" \ + && cypress verify \ + # Cypress cache and installed version + # should be in the root user's home folder + && cypress cache path \ + && cypress cache list \ + && cypress info \ + && cypress version \ + # give every user read access to the "/root" folder where the binary is cached + # we really only need to worry about the top folder, fortunately + && ls -la /root \ + && chmod 755 /root \ + # always grab the latest Yarn + # otherwise the base image might have old versions + # NPM does not need to be installed as it is already included with Node. + && npm i -g yarn@latest \ + # Show where Node loads required modules from + && node -p 'module.paths' \ + # should print Cypress version + # plus Electron and bundled Node versions + && cypress version \ + && echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" \ + "chrome: $(google-chrome --version || true) \n" \ + "firefox: $(firefox --version || true) \n" + +ENTRYPOINT ["cypress", "run"] diff --git a/included/9.5.1-node16.14.0-slim-chrome99-ff97/README.md b/included/9.5.1-node16.14.0-slim-chrome99-ff97/README.md new file mode 100644 index 0000000000..b56f725eff --- /dev/null +++ b/included/9.5.1-node16.14.0-slim-chrome99-ff97/README.md @@ -0,0 +1,18 @@ + + +# cypress/included:9.5.1-node16.14.0-slim-chrome99-ff97 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.5.1-node16.14.0-slim-chrome99-ff97 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/9.5.1-node16.14.0-slim-chrome99-ff97/build.sh b/included/9.5.1-node16.14.0-slim-chrome99-ff97/build.sh new file mode 100755 index 0000000000..c99d0183b5 --- /dev/null +++ b/included/9.5.1-node16.14.0-slim-chrome99-ff97/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.5.1 cypress/browsers:node16.14.0-slim-chrome99-ff97 +set e+x + +LOCAL_NAME=cypress/included:9.5.1-node16.14.0-slim-chrome99-ff97 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/included/CHANGELOG.md b/included/CHANGELOG.md index 7e231eedf6..ad7e7c30fd 100644 --- a/included/CHANGELOG.md +++ b/included/CHANGELOG.md @@ -78,3 +78,5 @@ Name + Tag | Base image [cypress/included:9.4.1](9.4.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.5.0](9.5.0) | `cypress/browsers:node16.5.0-chrome97-ff96` [cypress/included:9.5.1](9.5.1) | `cypress/browsers:node16.5.0-chrome97-ff96` + +[cypress/included:9.5.1-node16.14.0-slim-chrome99-ff97](9.5.1-node16.14.0-slim-chrome99-ff97) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` diff --git a/included/README.md b/included/README.md index dd100a52c9..49ba3ba097 100644 --- a/included/README.md +++ b/included/README.md @@ -77,14 +77,15 @@ [cypress/included:9.0.0](9.0.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.1.0](9.1.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.1.1](9.1.1) | `cypress/browsers:node16.5.0-chrome94-ff93` -[cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.2.0](9.2.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.2.1](9.2.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.3.0](9.3.0) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.3.1](9.3.1) | `cypress/browsers:node16.5.0-chrome94-ff93` -[cypress/included:9.4.1](9.4.1) | `cypress/browsers:node16.5.0-chrome94-ff93` +[cypress/included:9.4.1](9.4.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.5.0](9.5.0) | `cypress/browsers:node16.5.0-chrome97-ff96` -[cypress/included:9.5.1](9.5.1) | `cypress/browsers:node16.5.0-chrome97-ff96` +[cypress/included:9.5.1](9.5.1) | `cypress/browsers:node16.5.0-chrome97-ff96` + +[cypress/included:9.5.1-node16.14.0-slim-chrome99-ff97](9.5.1-node16.14.0-slim-chrome99-ff97) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: From 93cb3ab29828521397caa2b5710966112aa7a71f Mon Sep 17 00:00:00 2001 From: Adam Murray Date: Mon, 14 Mar 2022 14:38:04 -0500 Subject: [PATCH 037/371] fix: update var with proper folder name (#613) * fix: update var with proper folder name * fix: update command in image files --- scripts/generate-browser-image.js | 6 +++--- scripts/generate-config.js | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/scripts/generate-browser-image.js b/scripts/generate-browser-image.js index 9a59063b9e..cb7cff312c 100644 --- a/scripts/generate-browser-image.js +++ b/scripts/generate-browser-image.js @@ -44,7 +44,7 @@ const folderName = outputFolder.split("/")[1] const Dockerfile = ` # WARNING: this file was autogenerated by ${path.basename(__filename)} # using -# yarn add:browsers -- ${nodeVersion} ${process.argv +# yarn add:browser -- ${nodeVersion} ${process.argv .filter((arg, i) => i > 2) .map((arg) => arg) .join(" ")} @@ -130,7 +130,7 @@ const README = ` + +# cypress/included:9.5.2 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.5.2 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/9.5.2/build.sh b/included/9.5.2/build.sh new file mode 100755 index 0000000000..506cd4bad4 --- /dev/null +++ b/included/9.5.2/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.5.2 cypress/browsers:node16.14.0-slim-chrome99-ff97 +set e+x + +LOCAL_NAME=cypress/included:9.5.2 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/included/CHANGELOG.md b/included/CHANGELOG.md index ad7e7c30fd..b0f41e909f 100644 --- a/included/CHANGELOG.md +++ b/included/CHANGELOG.md @@ -80,3 +80,5 @@ Name + Tag | Base image [cypress/included:9.5.1](9.5.1) | `cypress/browsers:node16.5.0-chrome97-ff96` [cypress/included:9.5.1-node16.14.0-slim-chrome99-ff97](9.5.1-node16.14.0-slim-chrome99-ff97) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` + +[cypress/included:9.5.2](9.5.2) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` diff --git a/included/README.md b/included/README.md index 49ba3ba097..f39b10103f 100644 --- a/included/README.md +++ b/included/README.md @@ -85,7 +85,9 @@ [cypress/included:9.5.0](9.5.0) | `cypress/browsers:node16.5.0-chrome97-ff96` [cypress/included:9.5.1](9.5.1) | `cypress/browsers:node16.5.0-chrome97-ff96` -[cypress/included:9.5.1-node16.14.0-slim-chrome99-ff97](9.5.1-node16.14.0-slim-chrome99-ff97) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` +[cypress/included:9.5.1-node16.14.0-slim-chrome99-ff97](9.5.1-node16.14.0-slim-chrome99-ff97) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` + +[cypress/included:9.5.2](9.5.2) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: From 35a2ef74be30ae71299c9da5c207e7508c71156f Mon Sep 17 00:00:00 2001 From: Adam Murray Date: Tue, 22 Mar 2022 17:03:39 -0500 Subject: [PATCH 039/371] fix: update ENV vars. add curl dependency. (#619) --- scripts/generate-base-image.js | 4 ++-- scripts/generate-browser-image.js | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/scripts/generate-base-image.js b/scripts/generate-base-image.js index df60b88aa2..b7ef759d40 100644 --- a/scripts/generate-base-image.js +++ b/scripts/generate-base-image.js @@ -77,9 +77,9 @@ RUN apt-get update && \\ # good colors for most applications ENV TERM=xterm \\ # avoid million NPM install messages - npm_config_loglevel=warn \\ +ENV npm_config_loglevel=warn \\ # allow installing when the main user is root - npm_config_unsafe_perm=true +ENV npm_config_unsafe_perm=true RUN npm --version \\ && npm install -g yarn@latest --force \\ diff --git a/scripts/generate-browser-image.js b/scripts/generate-browser-image.js index cb7cff312c..82d658de0a 100644 --- a/scripts/generate-browser-image.js +++ b/scripts/generate-browser-image.js @@ -68,6 +68,7 @@ RUN apt-get update && \\ libcurl3-nss \\ xdg-utils \\ wget \\ + curl \\ # clean up && rm -rf /var/lib/apt/lists/* \\ && apt-get clean @@ -117,9 +118,9 @@ RUN echo " node version: $(node -v) \\n" \\ # good colors for most applications ENV TERM xterm \\ # avoid million NPM install messages - npm_config_loglevel warn \\ +ENV npm_config_loglevel warn \\ # allow installing when the main user is root - npm_config_unsafe_perm true +ENV npm_config_unsafe_perm true ` const dockerFilename = path.join(outputFolder, "Dockerfile") From 99ab900e4b3895bcbcc2da7fc923ef894d8719e8 Mon Sep 17 00:00:00 2001 From: Ryan Manuel Date: Mon, 28 Mar 2022 17:42:03 -0500 Subject: [PATCH 040/371] feat(included): generate new image with version 9.5.3 (#623) --- buildspec.yml | 4 +-- circle.yml | 4 +-- included/9.5.3/Dockerfile | 61 +++++++++++++++++++++++++++++++++++++++ included/9.5.3/README.md | 18 ++++++++++++ included/9.5.3/build.sh | 8 +++++ included/CHANGELOG.md | 2 ++ included/README.md | 4 ++- 7 files changed, 96 insertions(+), 5 deletions(-) create mode 100644 included/9.5.3/Dockerfile create mode 100644 included/9.5.3/README.md create mode 100755 included/9.5.3/build.sh diff --git a/buildspec.yml b/buildspec.yml index 905952984d..de5aeec58e 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,7 +6,7 @@ env: batch: fast-fail: false build-list: - - identifier: included952 + - identifier: included953 env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER @@ -15,7 +15,7 @@ batch: variables: IMAGE_REPO_NAME: "cypress/included" IMAGE_DIR: "included" - IMAGE_TAG: "9.5.2" + IMAGE_TAG: "9.5.3" phases: pre_build: diff --git a/circle.yml b/circle.yml index c1b0444357..acaf5767ad 100644 --- a/circle.yml +++ b/circle.yml @@ -475,5 +475,5 @@ workflows: build-included-images: jobs: - build-included-image: - name: "included 9.5.2" - dockerTag: "9.5.2" \ No newline at end of file + name: "included 9.5.3" + dockerTag: "9.5.3" \ No newline at end of file diff --git a/included/9.5.3/Dockerfile b/included/9.5.3/Dockerfile new file mode 100644 index 0000000000..3ab7dfcf30 --- /dev/null +++ b/included/9.5.3/Dockerfile @@ -0,0 +1,61 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.5.3 cypress/browsers:node16.14.0-slim-chrome99-ff97 +# +# build this image with command +# docker build -t cypress/included:9.5.3 . +# +FROM cypress/browsers:node16.14.0-slim-chrome99-ff97 + +# Update the dependencies to get the latest and greatest (and safest!) packages. +RUN apt update && apt upgrade -y + +# avoid too many progress messages +# https://github.com/cypress-io/cypress/issues/1243 +ENV CI=1 \ +# disable shared memory X11 affecting Cypress v4 and Chrome +# https://github.com/cypress-io/cypress-docker-images/issues/270 + QT_X11_NO_MITSHM=1 \ + _X11_NO_MITSHM=1 \ + _MITSHM=0 \ + # point Cypress at the /root/cache no matter what user account is used + # see https://on.cypress.io/caching + CYPRESS_CACHE_FOLDER=/root/.cache/Cypress + +# should be root user +RUN echo "whoami: $(whoami)" \ + && npm config -g set user $(whoami) \ + # command "id" should print: + # uid=0(root) gid=0(root) groups=0(root) + # which means the current user is root + && id \ + && npm install -g "cypress@9.5.3" \ + && cypress verify \ + # Cypress cache and installed version + # should be in the root user's home folder + && cypress cache path \ + && cypress cache list \ + && cypress info \ + && cypress version \ + # give every user read access to the "/root" folder where the binary is cached + # we really only need to worry about the top folder, fortunately + && ls -la /root \ + && chmod 755 /root \ + # always grab the latest Yarn + # otherwise the base image might have old versions + # NPM does not need to be installed as it is already included with Node. + && npm i -g yarn@latest \ + # Show where Node loads required modules from + && node -p 'module.paths' \ + # should print Cypress version + # plus Electron and bundled Node versions + && cypress version \ + && echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" \ + "chrome: $(google-chrome --version || true) \n" \ + "firefox: $(firefox --version || true) \n" + +ENTRYPOINT ["cypress", "run"] diff --git a/included/9.5.3/README.md b/included/9.5.3/README.md new file mode 100644 index 0000000000..1170096e92 --- /dev/null +++ b/included/9.5.3/README.md @@ -0,0 +1,18 @@ + + +# cypress/included:9.5.3 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.5.3 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/9.5.3/build.sh b/included/9.5.3/build.sh new file mode 100755 index 0000000000..8616fb6f88 --- /dev/null +++ b/included/9.5.3/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.5.3 cypress/browsers:node16.14.0-slim-chrome99-ff97 +set e+x + +LOCAL_NAME=cypress/included:9.5.3 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/included/CHANGELOG.md b/included/CHANGELOG.md index b0f41e909f..289a288517 100644 --- a/included/CHANGELOG.md +++ b/included/CHANGELOG.md @@ -82,3 +82,5 @@ Name + Tag | Base image [cypress/included:9.5.1-node16.14.0-slim-chrome99-ff97](9.5.1-node16.14.0-slim-chrome99-ff97) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` [cypress/included:9.5.2](9.5.2) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` + +[cypress/included:9.5.3](9.5.3) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` diff --git a/included/README.md b/included/README.md index f39b10103f..cfb9e6a7f0 100644 --- a/included/README.md +++ b/included/README.md @@ -87,7 +87,9 @@ [cypress/included:9.5.1-node16.14.0-slim-chrome99-ff97](9.5.1-node16.14.0-slim-chrome99-ff97) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` -[cypress/included:9.5.2](9.5.2) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` +[cypress/included:9.5.2](9.5.2) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` + +[cypress/included:9.5.3](9.5.3) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: From e54a9597239b9b5a0f69df281872980649faed11 Mon Sep 17 00:00:00 2001 From: vaibsaraswat Date: Wed, 30 Mar 2022 22:36:46 +0530 Subject: [PATCH 041/371] Added cypress base image with node version 17.8.0 (#622) New cypress base image with node version 17.8.0 --- base/17.8.0/Dockerfile | 60 ++++++++++++++++++++++++++++++++++++++++++ base/17.8.0/README.md | 18 +++++++++++++ base/17.8.0/build.sh | 8 ++++++ base/CHANGELOG.md | 1 + base/README.md | 3 ++- buildspec.yml | 8 +++--- circle.yml | 8 +++--- 7 files changed, 97 insertions(+), 9 deletions(-) create mode 100644 base/17.8.0/Dockerfile create mode 100644 base/17.8.0/README.md create mode 100755 base/17.8.0/build.sh diff --git a/base/17.8.0/Dockerfile b/base/17.8.0/Dockerfile new file mode 100644 index 0000000000..0d0ae473db --- /dev/null +++ b/base/17.8.0/Dockerfile @@ -0,0 +1,60 @@ +# WARNING: this file was autogenerated by generate-base-image.js +# contains all dependencies for running Cypress.io Test Runner +# https://on.cypress.io/docker and https://on.cypress.io/ci +# +# build it with command +# docker build -t cypress/base:17.8.0 . +# +FROM node:17.8.0-buster + +RUN apt-get update && \ + apt-get install --no-install-recommends -y \ + libgtk2.0-0 \ + libgtk-3-0 \ + libnotify-dev \ + libgconf-2-4 \ + libgbm-dev \ + libnss3 \ + libxss1 \ + libasound2 \ + libxtst6 \ + xauth \ + xvfb \ + # install text editors + vim-tiny \ + nano \ + # install emoji font + fonts-noto-color-emoji \ + # install Chinese fonts + # this list was copied from https://github.com/jim3ma/docker-leanote + fonts-arphic-bkai00mp \ + fonts-arphic-bsmi00lp \ + fonts-arphic-gbsn00lp \ + fonts-arphic-gkai00mp \ + fonts-arphic-ukai \ + fonts-arphic-uming \ + ttf-wqy-zenhei \ + ttf-wqy-microhei \ + xfonts-wqy \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM xterm +# avoid million NPM install messages +ENV npm_config_loglevel warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm true + +RUN npm --version \ + && npm install -g yarn@latest --force \ + && yarn --version \ + && node -p process.versions \ + && node -p 'module.paths' \ + && echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" diff --git a/base/17.8.0/README.md b/base/17.8.0/README.md new file mode 100644 index 0000000000..35817c44a1 --- /dev/null +++ b/base/17.8.0/README.md @@ -0,0 +1,18 @@ + +# cypress/base:17.8.0 + +A Docker image with all dependencies pre-installed. +Just add your NPM packages (including Cypress) and run the tests. +See [Cypress Docker docs](https://on.cypress.io/docker) and +[Cypress CI guide](https://on.cypress.io/ci). + +## Example + +Sample Dockerfile + +``` +FROM cypress/base:17.8.0 +RUN npm install --save-dev cypress +RUN $(npm bin)/cypress verify +RUN $(npm bin)/cypress run +``` diff --git a/base/17.8.0/build.sh b/base/17.8.0/build.sh new file mode 100755 index 0000000000..26f7fd5484 --- /dev/null +++ b/base/17.8.0/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-base-image.js +set e+x + +# build image with Cypress dependencies +LOCAL_NAME=cypress/base:17.8.0 + +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/base/CHANGELOG.md b/base/CHANGELOG.md index 68ff3d3092..cc4dd1d30a 100644 --- a/base/CHANGELOG.md +++ b/base/CHANGELOG.md @@ -70,3 +70,4 @@ | cypress/base:manjaro-node14.12.0 | 14.12.0 | Manjaro | [manjaro-14.12.0](manjaro-14.12.0) | 6.14.8 | 1.22.10 | | cypress/base:14.19.0 | 14.19.0 | Debian | [/14.19.0](14.19.0) | 6.14.16 | 1.22.17 | | cypress/base:16.14.0-slim | 16.14.0 | Debian | [/16.14.0](16.14.0) | `🚫` | `🚫` | `🚫` | +| cypress/base:17.8.0 | 17.8.0 | Debian | [/17.8.0](17.8.0) | `🚫` | `🚫` | `🚫` | diff --git a/base/README.md b/base/README.md index d1a758c59e..ce9dd9763b 100644 --- a/base/README.md +++ b/base/README.md @@ -81,7 +81,8 @@ Image `cypress/base:12` is tagged [`latest`](https://hub.docker.com/r/cypress/ba | cypress/base:ubuntu19-node12.14.1 | 12.14.1 | Ubuntu 19.0.4 | [ubuntu19-node12.14.1](ubuntu19-node12.14.1) | 6.13.6 | 1.21.1 | | cypress/base:manjaro-node14.12.0 | 14.12.0 | Manjaro | [manjaro-14.12.0](manjaro-14.12.0) | 6.14.8 | 1.22.10 | | cypress/base:14.19.0 | 14.19.0 | Debian | [/14.19.0](14.19.0) | 6.14.16 | 1.22.17 | -| cypress/base:16.14.0-slim | 16.14.0 | Debian | [/16.14.0](16.14.0) | `🚫` | `🚫` | `🚫` | +| cypress/base:16.14.0-slim | 16.14.0 | Debian | [/16.14.0](16.14.0) | `🚫` | `🚫` | `🚫` | +| cypress/base:17.8.0 | 17.8.0 | Debian | [/17.8.0](17.8.0) | `🚫` | `🚫` | `🚫` | ## ⚠️ Node.js Support diff --git a/buildspec.yml b/buildspec.yml index de5aeec58e..cbb3255e60 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,16 +6,16 @@ env: batch: fast-fail: false build-list: - - identifier: included953 + - identifier: base1780 env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_MEDIUM variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "9.5.3" + IMAGE_REPO_NAME: "cypress/base" + IMAGE_DIR: "base" + IMAGE_TAG: "17.8.0" phases: pre_build: diff --git a/circle.yml b/circle.yml index acaf5767ad..8c51458c3f 100644 --- a/circle.yml +++ b/circle.yml @@ -472,8 +472,8 @@ workflows: lint: jobs: - lint-markdown - build-included-images: + build-base-images: jobs: - - build-included-image: - name: "included 9.5.3" - dockerTag: "9.5.3" \ No newline at end of file + - build-base-image: + name: "base 17.8.0" + dockerTag: "17.8.0" \ No newline at end of file From 3b4162cbb5bfae584daf235c4e9bfbba84847400 Mon Sep 17 00:00:00 2001 From: Marco Sanabria Date: Wed, 30 Mar 2022 12:06:14 -0600 Subject: [PATCH 042/371] Add browser support for chrome100, firefox98 on node14 (#624) --- browsers/CHANGELOG.md | 2 + browsers/README.md | 10 ++- .../node14.17.6-chrome100-ff98/Dockerfile | 76 +++++++++++++++++++ browsers/node14.17.6-chrome100-ff98/README.md | 13 ++++ browsers/node14.17.6-chrome100-ff98/build.sh | 8 ++ buildspec.yml | 12 +-- circle.yml | 10 ++- 7 files changed, 117 insertions(+), 14 deletions(-) create mode 100644 browsers/node14.17.6-chrome100-ff98/Dockerfile create mode 100644 browsers/node14.17.6-chrome100-ff98/README.md create mode 100755 browsers/node14.17.6-chrome100-ff98/build.sh diff --git a/browsers/CHANGELOG.md b/browsers/CHANGELOG.md index d389671822..fee3b4bb80 100644 --- a/browsers/CHANGELOG.md +++ b/browsers/CHANGELOG.md @@ -28,3 +28,5 @@ Name + Tag | Base image | Chrome | Firefox | Edge [cypress/browsers:node14.17.0-chrome91-ff89](./node14.17.0-chrome91-ff89) | `cypress/base:14.17.0` | `91.0.4472.114` | `89.0.2` [cypress/browsers:node16.5.0-chrome94-ff93](./node16.5.0-chrome94-ff93) | `cypress/base:16.5.0` | `94.0.4606.71` | `93.0` [cypress/browsers:node16.14.0-slim-chrome99-ff97](./node16.14.0-slim-chrome99-ff97) | `cypress/base:16.14.0` | `99.0.4844.51` | `97.0.1` | `🚫` + +[cypress/browsers:node14.17.6-chrome100-ff98](./node14.17.6-chrome100-ff98) | `cypress/base:14.17.6` | `100.0.4896.60` | `98.0.2` | `🚫` diff --git a/browsers/README.md b/browsers/README.md index 27f0c31192..4e36191e8f 100644 --- a/browsers/README.md +++ b/browsers/README.md @@ -3,7 +3,7 @@ [![Docker Pulls](https://img.shields.io/docker/pulls/cypress/browsers.svg?maxAge=604800)](https://hub.docker.com/r/cypress/browsers/) > Docker image with all operating system dependencies and some pre-installed browsers, **but NOT Cypress itself**. See [cypress/included](../included) images if you need Cypress pre-installed in the image. - + Name + Tag | Base image | Chrome | Firefox | Edge --- | --- | --- | --- | --- [cypress/browsers:node8.9.3-npm6.10.1-chrome75](./node8.9.3-npm6.10.1-chrome75) | `cypress/base:8.9.3-npm-6.10.1` | `75.0.3770.100` | 🚫 @@ -33,9 +33,11 @@ [cypress/browsers:node14.16.0-chrome89-ff77](./node14.16.0-chrome89-ff77) | `cypress/base:14.16.0` | `89.0.4389.72` | `77.0` [cypress/browsers:node14.16.0-chrome89-ff86](./node14.16.0-chrome89-ff86) | `cypress/base:14.16.0` | `89.0.4389.72` | `86.0.1` [cypress/browsers:node14.17.0-chrome91-ff89](./node14.17.0-chrome91-ff89) | `cypress/base:14.17.0` | `91.0.4472.114` | `89.0.2` -[cypress/browsers:node16.5.0-chrome94-ff93](./node16.5.0-chrome94-ff93) | `cypress/base:16.5.0` | `94.0.4606.71` | `93.0` -[cypress/browsers:node16.14.0-slim-chrome99-ff97](./node16.14.0-slim-chrome99-ff97) | `cypress/base:16.14.0` | `99.0.4844.51` | `97.0.1` | `🚫` - +[cypress/browsers:node16.5.0-chrome94-ff93](./node16.5.0-chrome94-ff93) | `cypress/base:16.5.0` | `94.0.4606.71` | `93.0` +[cypress/browsers:node16.14.0-slim-chrome99-ff97](./node16.14.0-slim-chrome99-ff97) | `cypress/base:16.14.0` | `99.0.4844.51` | `97.0.1` | `🚫` + +[cypress/browsers:node14.17.6-chrome100-ff98](./node14.17.6-chrome100-ff98) | `cypress/base:14.17.6` | `100.0.4896.60` | `98.0.2` | `🚫` + To find the available Chrome versions, check [https://chromium.cypress.io/](https://chromium.cypress.io/). ## Naming scheme diff --git a/browsers/node14.17.6-chrome100-ff98/Dockerfile b/browsers/node14.17.6-chrome100-ff98/Dockerfile new file mode 100644 index 0000000000..15e8447072 --- /dev/null +++ b/browsers/node14.17.6-chrome100-ff98/Dockerfile @@ -0,0 +1,76 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browser -- 14.17.6 --chrome=100.0.4896.60 --firefox=98.0.2 +# +# build this image with command +# docker build -t cypress/browsers:node14.17.6-chrome100-ff98 . +# +# +FROM cypress/base:14.17.6 + +USER root + +RUN node --version + +# Chrome dependencies +RUN apt-get update && \ + apt-get install -y \ + fonts-liberation \ + libcurl4 \ + libcurl3-gnutls \ + libcurl3-nss \ + xdg-utils \ + wget \ + curl \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +# install libappindicator3-1 - not included with Debian 11 +RUN wget --no-verbose /usr/src/libappindicator3-1_0.4.92-7_amd64.deb "http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_amd64.deb" && \ + dpkg -i /usr/src/libappindicator3-1_0.4.92-7_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/libappindicator3-1_0.4.92-7_amd64.deb + +# install Chrome browser +RUN wget --no-verbose -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_100.0.4896.60-1_amd64.deb" && \ + dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/google-chrome-stable_current_amd64.deb + +# "fake" dbus address to prevent errors +# https://github.com/SeleniumHQ/docker-selenium/issues/87 +ENV DBUS_SESSION_BUS_ADDRESS=/dev/null + +# firefox dependencies +RUN apt-get update && \ + apt-get install -y \ + bzip2 \ + # add codecs needed for video playback in firefox + # https://github.com/cypress-io/cypress-docker-images/issues/150 + mplayer + +# install Firefox browser +RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/98.0.2/linux-x86_64/en-US/firefox-98.0.2.tar.bz2 && \ + tar -C /opt -xjf /tmp/firefox.tar.bz2 && \ + rm /tmp/firefox.tar.bz2 && \ + ln -fs /opt/firefox/firefox /usr/bin/firefox + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "Chrome version: $(google-chrome --version) \n" \ + "Firefox version: $(firefox --version) \n" \ + "Edge version: $(edge --version) \n" \ + "git version: $(git --version) \n" \ + "whoami: $(whoami) \n" + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM xterm \ +# avoid million NPM install messages +ENV npm_config_loglevel warn \ +# allow installing when the main user is root +ENV npm_config_unsafe_perm true diff --git a/browsers/node14.17.6-chrome100-ff98/README.md b/browsers/node14.17.6-chrome100-ff98/README.md new file mode 100644 index 0000000000..086a04b04d --- /dev/null +++ b/browsers/node14.17.6-chrome100-ff98/README.md @@ -0,0 +1,13 @@ + + +# cypress/browsers:node14.17.6-chrome100-ff98 + +A complete image with all operating system depedencies for Cypress, and Chrome 100.0.4896.60, Firefox 98.0.2, Edge undefined browsers. + +[Dockerfile](Dockerfile) + +**Note:** this image uses the `root` user. You might want to switch to nonroot user like `node` when running this container for security diff --git a/browsers/node14.17.6-chrome100-ff98/build.sh b/browsers/node14.17.6-chrome100-ff98/build.sh new file mode 100755 index 0000000000..d87a7f1f59 --- /dev/null +++ b/browsers/node14.17.6-chrome100-ff98/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browser -- 14.17.6 --chrome=100.0.4896.60 --firefox=98.0.2 +set e+x + +LOCAL_NAME=cypress/browsers:node14.17.6-chrome100-ff98 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/buildspec.yml b/buildspec.yml index cbb3255e60..a2aca20a05 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,16 +6,16 @@ env: batch: fast-fail: false build-list: - - identifier: base1780 + - identifier: browsernode14176Chrome100Ff98 env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_MEDIUM variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "17.8.0" + IMAGE_REPO_NAME: "cypress/browsers" + IMAGE_DIR: "browsers" + IMAGE_TAG: "node14.17.6-chrome100-ff98" phases: pre_build: @@ -28,11 +28,11 @@ phases: - aws ecr-public get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin public.ecr.aws/$PUBLIC_ECR_ALIAS build: commands: - - echo Building the Docker image... + - echo Building the Docker image... - cd $IMAGE_DIR/$IMAGE_TAG - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG post_build: commands: - echo Pushing the Docker image... - - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG \ No newline at end of file + - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG diff --git a/circle.yml b/circle.yml index 8c51458c3f..f52e7d751f 100644 --- a/circle.yml +++ b/circle.yml @@ -472,8 +472,10 @@ workflows: lint: jobs: - lint-markdown - build-base-images: + build-browser-images: jobs: - - build-base-image: - name: "base 17.8.0" - dockerTag: "17.8.0" \ No newline at end of file + - build-browser-image: + name: "browser node14.17.6-chrome100-ff98" + dockerTag: "node14.17.6-chrome100-ff98" + chromeVersion: "Google Chrome 10" + firefoxVersion: "Mozilla Firefox 98" From 4a9f781a654fe53e6f03214ba044e9d7627ef690 Mon Sep 17 00:00:00 2001 From: Tyler Biethman Date: Thu, 31 Mar 2022 13:19:20 -0500 Subject: [PATCH 043/371] fix: Update generated ENV to account for syntax change (#626) --- scripts/generate-base-image.js | 4 ++-- scripts/generate-browser-image.js | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/generate-base-image.js b/scripts/generate-base-image.js index b7ef759d40..5de7261a17 100644 --- a/scripts/generate-base-image.js +++ b/scripts/generate-base-image.js @@ -75,9 +75,9 @@ RUN apt-get update && \\ # a few environment variables to make NPM installs easier # good colors for most applications -ENV TERM=xterm \\ +ENV TERM=xterm # avoid million NPM install messages -ENV npm_config_loglevel=warn \\ +ENV npm_config_loglevel=warn # allow installing when the main user is root ENV npm_config_unsafe_perm=true diff --git a/scripts/generate-browser-image.js b/scripts/generate-browser-image.js index 82d658de0a..bcd5a22cf7 100644 --- a/scripts/generate-browser-image.js +++ b/scripts/generate-browser-image.js @@ -116,11 +116,11 @@ RUN echo " node version: $(node -v) \\n" \\ # a few environment variables to make NPM installs easier # good colors for most applications -ENV TERM xterm \\ +ENV TERM=xterm # avoid million NPM install messages -ENV npm_config_loglevel warn \\ +ENV npm_config_loglevel=warn # allow installing when the main user is root -ENV npm_config_unsafe_perm true +ENV npm_config_unsafe_perm=true ` const dockerFilename = path.join(outputFolder, "Dockerfile") From 655b843eb595f5370e55665c04565fcfb987a089 Mon Sep 17 00:00:00 2001 From: Tyler Biethman Date: Thu, 31 Mar 2022 14:13:19 -0500 Subject: [PATCH 044/371] feat(browsers): generate new image with version node16.13.2-chrome100-ff98 (#627) * feat(browsers): generate new image with version node16.13.2-chrome100-ff98 * Three digits now! * feat(browsers): generate new image with version node16.13.2-chrome100-ff98 --- browsers/CHANGELOG.md | 3 + browsers/README.md | 12 +-- .../node16.13.2-chrome100-ff98/Dockerfile | 76 +++++++++++++++++++ browsers/node16.13.2-chrome100-ff98/README.md | 13 ++++ browsers/node16.13.2-chrome100-ff98/build.sh | 8 ++ buildspec.yml | 8 +- circle.yml | 8 +- 7 files changed, 115 insertions(+), 13 deletions(-) create mode 100644 browsers/node16.13.2-chrome100-ff98/Dockerfile create mode 100644 browsers/node16.13.2-chrome100-ff98/README.md create mode 100755 browsers/node16.13.2-chrome100-ff98/build.sh diff --git a/browsers/CHANGELOG.md b/browsers/CHANGELOG.md index fee3b4bb80..de02b5148f 100644 --- a/browsers/CHANGELOG.md +++ b/browsers/CHANGELOG.md @@ -30,3 +30,6 @@ Name + Tag | Base image | Chrome | Firefox | Edge [cypress/browsers:node16.14.0-slim-chrome99-ff97](./node16.14.0-slim-chrome99-ff97) | `cypress/base:16.14.0` | `99.0.4844.51` | `97.0.1` | `🚫` [cypress/browsers:node14.17.6-chrome100-ff98](./node14.17.6-chrome100-ff98) | `cypress/base:14.17.6` | `100.0.4896.60` | `98.0.2` | `🚫` + + +[cypress/browsers:node16.13.2-chrome100-ff98](./node16.13.2-chrome100-ff98) | `cypress/base:16.13.2` | `100.0.4896.60` | `98.0.2` | `🚫` diff --git a/browsers/README.md b/browsers/README.md index 4e36191e8f..c844caef60 100644 --- a/browsers/README.md +++ b/browsers/README.md @@ -3,7 +3,7 @@ [![Docker Pulls](https://img.shields.io/docker/pulls/cypress/browsers.svg?maxAge=604800)](https://hub.docker.com/r/cypress/browsers/) > Docker image with all operating system dependencies and some pre-installed browsers, **but NOT Cypress itself**. See [cypress/included](../included) images if you need Cypress pre-installed in the image. - + Name + Tag | Base image | Chrome | Firefox | Edge --- | --- | --- | --- | --- [cypress/browsers:node8.9.3-npm6.10.1-chrome75](./node8.9.3-npm6.10.1-chrome75) | `cypress/base:8.9.3-npm-6.10.1` | `75.0.3770.100` | 🚫 @@ -28,16 +28,18 @@ [cypress/browsers:node12.14.1-chrome85-ff81](./node12.14.1-chrome85-ff81) | `cypress/base:12.14.1` | `85.0.4183.121` | `81.0` [cypress/browsers:node14.10.1-edge88](./node14.10.1-edge88) | `cypress/base:14.10.1` | 🚫 | 🚫 | `88.0.673.0 dev` [cypress/browsers:node14.15.0-chrome86-ff82](./node14.15.0-chrome86-ff82) | `cypress/base:14.15.0` | `86.0.4240.193` | `82.0.3` -[cypress/browsers:node14.15.0-chrome96-ff94](./node14.15.0-chrome96-ff94) | `cypress/base:14.15.0` | `96.0.4664.45` | `94.0.2` [cypress/browsers:node14.17.0-chrome88-ff89](./node14.17.0-chrome88-ff89) | `cypress/base:14.17.0` | `88.0.4324.96` | `89.0.2` [cypress/browsers:node14.16.0-chrome89-ff77](./node14.16.0-chrome89-ff77) | `cypress/base:14.16.0` | `89.0.4389.72` | `77.0` [cypress/browsers:node14.16.0-chrome89-ff86](./node14.16.0-chrome89-ff86) | `cypress/base:14.16.0` | `89.0.4389.72` | `86.0.1` [cypress/browsers:node14.17.0-chrome91-ff89](./node14.17.0-chrome91-ff89) | `cypress/base:14.17.0` | `91.0.4472.114` | `89.0.2` -[cypress/browsers:node16.5.0-chrome94-ff93](./node16.5.0-chrome94-ff93) | `cypress/base:16.5.0` | `94.0.4606.71` | `93.0` +[cypress/browsers:node16.5.0-chrome94-ff93](./node16.5.0-chrome94-ff93) | `cypress/base:16.5.0` | `94.0.4606.71` | `93.0` [cypress/browsers:node16.14.0-slim-chrome99-ff97](./node16.14.0-slim-chrome99-ff97) | `cypress/base:16.14.0` | `99.0.4844.51` | `97.0.1` | `🚫` - + [cypress/browsers:node14.17.6-chrome100-ff98](./node14.17.6-chrome100-ff98) | `cypress/base:14.17.6` | `100.0.4896.60` | `98.0.2` | `🚫` - + + +[cypress/browsers:node16.13.2-chrome100-ff98](./node16.13.2-chrome100-ff98) | `cypress/base:16.13.2` | `100.0.4896.60` | `98.0.2` | `🚫` + To find the available Chrome versions, check [https://chromium.cypress.io/](https://chromium.cypress.io/). ## Naming scheme diff --git a/browsers/node16.13.2-chrome100-ff98/Dockerfile b/browsers/node16.13.2-chrome100-ff98/Dockerfile new file mode 100644 index 0000000000..57ad9c63a0 --- /dev/null +++ b/browsers/node16.13.2-chrome100-ff98/Dockerfile @@ -0,0 +1,76 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browser -- 16.13.2 --chrome=100.0.4896.60 --firefox=98.0.2 +# +# build this image with command +# docker build -t cypress/browsers:node16.13.2-chrome100-ff98 . +# +# +FROM cypress/base:16.13.2 + +USER root + +RUN node --version + +# Chrome dependencies +RUN apt-get update && \ + apt-get install -y \ + fonts-liberation \ + libcurl4 \ + libcurl3-gnutls \ + libcurl3-nss \ + xdg-utils \ + wget \ + curl \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +# install libappindicator3-1 - not included with Debian 11 +RUN wget --no-verbose /usr/src/libappindicator3-1_0.4.92-7_amd64.deb "http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_amd64.deb" && \ + dpkg -i /usr/src/libappindicator3-1_0.4.92-7_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/libappindicator3-1_0.4.92-7_amd64.deb + +# install Chrome browser +RUN wget --no-verbose -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_100.0.4896.60-1_amd64.deb" && \ + dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/google-chrome-stable_current_amd64.deb + +# "fake" dbus address to prevent errors +# https://github.com/SeleniumHQ/docker-selenium/issues/87 +ENV DBUS_SESSION_BUS_ADDRESS=/dev/null + +# firefox dependencies +RUN apt-get update && \ + apt-get install -y \ + bzip2 \ + # add codecs needed for video playback in firefox + # https://github.com/cypress-io/cypress-docker-images/issues/150 + mplayer + +# install Firefox browser +RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/98.0.2/linux-x86_64/en-US/firefox-98.0.2.tar.bz2 && \ + tar -C /opt -xjf /tmp/firefox.tar.bz2 && \ + rm /tmp/firefox.tar.bz2 && \ + ln -fs /opt/firefox/firefox /usr/bin/firefox + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "Chrome version: $(google-chrome --version) \n" \ + "Firefox version: $(firefox --version) \n" \ + "Edge version: $(edge --version) \n" \ + "git version: $(git --version) \n" \ + "whoami: $(whoami) \n" + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM=xterm +# avoid million NPM install messages +ENV npm_config_loglevel=warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm=true diff --git a/browsers/node16.13.2-chrome100-ff98/README.md b/browsers/node16.13.2-chrome100-ff98/README.md new file mode 100644 index 0000000000..7acfff3c3f --- /dev/null +++ b/browsers/node16.13.2-chrome100-ff98/README.md @@ -0,0 +1,13 @@ + + +# cypress/browsers:node16.13.2-chrome100-ff98 + +A complete image with all operating system depedencies for Cypress, and Chrome 100.0.4896.60, Firefox 98.0.2, Edge undefined browsers. + +[Dockerfile](Dockerfile) + +**Note:** this image uses the `root` user. You might want to switch to nonroot user like `node` when running this container for security diff --git a/browsers/node16.13.2-chrome100-ff98/build.sh b/browsers/node16.13.2-chrome100-ff98/build.sh new file mode 100755 index 0000000000..2b118de1f0 --- /dev/null +++ b/browsers/node16.13.2-chrome100-ff98/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browser -- 16.13.2 --chrome=100.0.4896.60 --firefox=98.0.2 +set e+x + +LOCAL_NAME=cypress/browsers:node16.13.2-chrome100-ff98 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/buildspec.yml b/buildspec.yml index a2aca20a05..c4a080e2c7 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,7 +6,7 @@ env: batch: fast-fail: false build-list: - - identifier: browsernode14176Chrome100Ff98 + - identifier: browsernode16132Chrome100Ff98 env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER @@ -15,7 +15,7 @@ batch: variables: IMAGE_REPO_NAME: "cypress/browsers" IMAGE_DIR: "browsers" - IMAGE_TAG: "node14.17.6-chrome100-ff98" + IMAGE_TAG: "node16.13.2-chrome100-ff98" phases: pre_build: @@ -28,11 +28,11 @@ phases: - aws ecr-public get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin public.ecr.aws/$PUBLIC_ECR_ALIAS build: commands: - - echo Building the Docker image... + - echo Building the Docker image... - cd $IMAGE_DIR/$IMAGE_TAG - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG post_build: commands: - echo Pushing the Docker image... - - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG + - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG \ No newline at end of file diff --git a/circle.yml b/circle.yml index f52e7d751f..f31c286127 100644 --- a/circle.yml +++ b/circle.yml @@ -475,7 +475,7 @@ workflows: build-browser-images: jobs: - build-browser-image: - name: "browser node14.17.6-chrome100-ff98" - dockerTag: "node14.17.6-chrome100-ff98" - chromeVersion: "Google Chrome 10" - firefoxVersion: "Mozilla Firefox 98" + name: "browser node16.13.2-chrome100-ff98" + dockerTag: "node16.13.2-chrome100-ff98" + chromeVersion: "Google Chrome 100" + firefoxVersion: "Mozilla Firefox 98" \ No newline at end of file From c8cf5d0c81188478e52bcb90ad2c9729ea305315 Mon Sep 17 00:00:00 2001 From: vaibsaraswat Date: Fri, 1 Apr 2022 18:22:56 +0530 Subject: [PATCH 045/371] Browser-node-17.8.0 (#629) --- browsers/CHANGELOG.md | 2 + browsers/README.md | 4 +- .../node17.8.0-chrome99-ff97-slim/Dockerfile | 76 +++++++++++++++++++ .../node17.8.0-chrome99-ff97-slim/README.md | 13 ++++ .../node17.8.0-chrome99-ff97-slim/build.sh | 8 ++ buildspec.yml | 4 +- circle.yml | 8 +- 7 files changed, 108 insertions(+), 7 deletions(-) create mode 100644 browsers/node17.8.0-chrome99-ff97-slim/Dockerfile create mode 100644 browsers/node17.8.0-chrome99-ff97-slim/README.md create mode 100755 browsers/node17.8.0-chrome99-ff97-slim/build.sh diff --git a/browsers/CHANGELOG.md b/browsers/CHANGELOG.md index de02b5148f..42ab619bf0 100644 --- a/browsers/CHANGELOG.md +++ b/browsers/CHANGELOG.md @@ -33,3 +33,5 @@ Name + Tag | Base image | Chrome | Firefox | Edge [cypress/browsers:node16.13.2-chrome100-ff98](./node16.13.2-chrome100-ff98) | `cypress/base:16.13.2` | `100.0.4896.60` | `98.0.2` | `🚫` + +[cypress/browsers:node17.8.0-chrome99-ff97-slim](./node17.8.0-chrome99-ff97-slim) | `cypress/base:17.8.0` | `99.0.4844.84` | `97.0.1` | `🚫` diff --git a/browsers/README.md b/browsers/README.md index c844caef60..2329d95dc8 100644 --- a/browsers/README.md +++ b/browsers/README.md @@ -38,7 +38,9 @@ [cypress/browsers:node14.17.6-chrome100-ff98](./node14.17.6-chrome100-ff98) | `cypress/base:14.17.6` | `100.0.4896.60` | `98.0.2` | `🚫` -[cypress/browsers:node16.13.2-chrome100-ff98](./node16.13.2-chrome100-ff98) | `cypress/base:16.13.2` | `100.0.4896.60` | `98.0.2` | `🚫` +[cypress/browsers:node16.13.2-chrome100-ff98](./node16.13.2-chrome100-ff98) | `cypress/base:16.13.2` | `100.0.4896.60` | `98.0.2` | `🚫` + +[cypress/browsers:node17.8.0-chrome99-ff97-slim](./node17.8.0-chrome99-ff97-slim) | `cypress/base:17.8.0` | `99.0.4844.84` | `97.0.1` | `🚫` To find the available Chrome versions, check [https://chromium.cypress.io/](https://chromium.cypress.io/). diff --git a/browsers/node17.8.0-chrome99-ff97-slim/Dockerfile b/browsers/node17.8.0-chrome99-ff97-slim/Dockerfile new file mode 100644 index 0000000000..418286b809 --- /dev/null +++ b/browsers/node17.8.0-chrome99-ff97-slim/Dockerfile @@ -0,0 +1,76 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browser -- 17.8.0 --chrome=99.0.4844.84 --firefox=97.0.1 +# +# build this image with command +# docker build -t cypress/browsers:node17.8.0-chrome99-ff97-slim . +# +# +FROM cypress/base:17.8.0 + +USER root + +RUN node --version + +# Chrome dependencies +RUN apt-get update && \ + apt-get install -y \ + fonts-liberation \ + libcurl4 \ + libcurl3-gnutls \ + libcurl3-nss \ + xdg-utils \ + wget \ + curl \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +# install libappindicator3-1 - not included with Debian 11 +RUN wget --no-verbose /usr/src/libappindicator3-1_0.4.92-7_amd64.deb "http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_amd64.deb" && \ + dpkg -i /usr/src/libappindicator3-1_0.4.92-7_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/libappindicator3-1_0.4.92-7_amd64.deb + +# install Chrome browser +RUN wget --no-verbose -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_99.0.4844.84-1_amd64.deb" && \ + dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/google-chrome-stable_current_amd64.deb + +# "fake" dbus address to prevent errors +# https://github.com/SeleniumHQ/docker-selenium/issues/87 +ENV DBUS_SESSION_BUS_ADDRESS=/dev/null + +# firefox dependencies +RUN apt-get update && \ + apt-get install -y \ + bzip2 \ + # add codecs needed for video playback in firefox + # https://github.com/cypress-io/cypress-docker-images/issues/150 + mplayer + +# install Firefox browser +RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/97.0.1/linux-x86_64/en-US/firefox-97.0.1.tar.bz2 && \ + tar -C /opt -xjf /tmp/firefox.tar.bz2 && \ + rm /tmp/firefox.tar.bz2 && \ + ln -fs /opt/firefox/firefox /usr/bin/firefox + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "Chrome version: $(google-chrome --version) \n" \ + "Firefox version: $(firefox --version) \n" \ + "Edge version: $(edge --version) \n" \ + "git version: $(git --version) \n" \ + "whoami: $(whoami) \n" + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM=xterm +# avoid million NPM install messages +ENV npm_config_loglevel=warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm=true diff --git a/browsers/node17.8.0-chrome99-ff97-slim/README.md b/browsers/node17.8.0-chrome99-ff97-slim/README.md new file mode 100644 index 0000000000..6767aa0b06 --- /dev/null +++ b/browsers/node17.8.0-chrome99-ff97-slim/README.md @@ -0,0 +1,13 @@ + + +# cypress/browsers:node17.8.0-chrome99-ff97-slim + +A complete image with all operating system depedencies for Cypress, and Chrome 99.0.4844.84, Firefox 97.0.1, Edge undefined browsers. + +[Dockerfile](Dockerfile) + +**Note:** this image uses the `root` user. You might want to switch to nonroot user like `node` when running this container for security diff --git a/browsers/node17.8.0-chrome99-ff97-slim/build.sh b/browsers/node17.8.0-chrome99-ff97-slim/build.sh new file mode 100755 index 0000000000..e7068f593f --- /dev/null +++ b/browsers/node17.8.0-chrome99-ff97-slim/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browser -- 17.8.0 --chrome=99.0.4844.84 --firefox=97.0.1 +set e+x + +LOCAL_NAME=cypress/browsers:node17.8.0-chrome99-ff97-slim +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/buildspec.yml b/buildspec.yml index c4a080e2c7..45b230e982 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,7 +6,7 @@ env: batch: fast-fail: false build-list: - - identifier: browsernode16132Chrome100Ff98 + - identifier: browsernode1780Chrome99Ff97Slim env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER @@ -15,7 +15,7 @@ batch: variables: IMAGE_REPO_NAME: "cypress/browsers" IMAGE_DIR: "browsers" - IMAGE_TAG: "node16.13.2-chrome100-ff98" + IMAGE_TAG: "node17.8.0-chrome99-ff97-slim" phases: pre_build: diff --git a/circle.yml b/circle.yml index f31c286127..1f1807f109 100644 --- a/circle.yml +++ b/circle.yml @@ -475,7 +475,7 @@ workflows: build-browser-images: jobs: - build-browser-image: - name: "browser node16.13.2-chrome100-ff98" - dockerTag: "node16.13.2-chrome100-ff98" - chromeVersion: "Google Chrome 100" - firefoxVersion: "Mozilla Firefox 98" \ No newline at end of file + name: "browser node17.8.0-chrome99-ff97-slim" + dockerTag: "node17.8.0-chrome99-ff97-slim" + chromeVersion: "Google Chrome 99" + firefoxVersion: "Mozilla Firefox 97" \ No newline at end of file From 6ffefd92e1680b07d84f493d5800cdf34aa4e006 Mon Sep 17 00:00:00 2001 From: Jordan Date: Fri, 1 Apr 2022 14:05:50 -0400 Subject: [PATCH 046/371] feat(base): generate new image with version 14.17.6 (#633) --- base/14.17.6/Dockerfile | 60 +++++++++++++++++++++++++++++++++++++++++ base/14.17.6/README.md | 18 +++++++++++++ base/14.17.6/build.sh | 8 ++++++ base/CHANGELOG.md | 1 + base/README.md | 3 ++- buildspec.yml | 8 +++--- circle.yml | 10 +++---- 7 files changed, 97 insertions(+), 11 deletions(-) create mode 100644 base/14.17.6/Dockerfile create mode 100644 base/14.17.6/README.md create mode 100755 base/14.17.6/build.sh diff --git a/base/14.17.6/Dockerfile b/base/14.17.6/Dockerfile new file mode 100644 index 0000000000..dd48c31209 --- /dev/null +++ b/base/14.17.6/Dockerfile @@ -0,0 +1,60 @@ +# WARNING: this file was autogenerated by generate-base-image.js +# contains all dependencies for running Cypress.io Test Runner +# https://on.cypress.io/docker and https://on.cypress.io/ci +# +# build it with command +# docker build -t cypress/base:14.17.6 . +# +FROM node:14.17.6-buster-slim + +RUN apt-get update && \ + apt-get install --no-install-recommends -y \ + libgtk2.0-0 \ + libgtk-3-0 \ + libnotify-dev \ + libgconf-2-4 \ + libgbm-dev \ + libnss3 \ + libxss1 \ + libasound2 \ + libxtst6 \ + xauth \ + xvfb \ + # install text editors + vim-tiny \ + nano \ + # install emoji font + fonts-noto-color-emoji \ + # install Chinese fonts + # this list was copied from https://github.com/jim3ma/docker-leanote + fonts-arphic-bkai00mp \ + fonts-arphic-bsmi00lp \ + fonts-arphic-gbsn00lp \ + fonts-arphic-gkai00mp \ + fonts-arphic-ukai \ + fonts-arphic-uming \ + ttf-wqy-zenhei \ + ttf-wqy-microhei \ + xfonts-wqy \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM=xterm +# avoid million NPM install messages +ENV npm_config_loglevel=warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm=true + +RUN npm --version \ + && npm install -g yarn@latest --force \ + && yarn --version \ + && node -p process.versions \ + && node -p 'module.paths' \ + && echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" diff --git a/base/14.17.6/README.md b/base/14.17.6/README.md new file mode 100644 index 0000000000..86eeac93da --- /dev/null +++ b/base/14.17.6/README.md @@ -0,0 +1,18 @@ + +# cypress/base:14.17.6 + +A Docker image with all dependencies pre-installed. +Just add your NPM packages (including Cypress) and run the tests. +See [Cypress Docker docs](https://on.cypress.io/docker) and +[Cypress CI guide](https://on.cypress.io/ci). + +## Example + +Sample Dockerfile + +``` +FROM cypress/base:14.17.6 +RUN npm install --save-dev cypress +RUN $(npm bin)/cypress verify +RUN $(npm bin)/cypress run +``` diff --git a/base/14.17.6/build.sh b/base/14.17.6/build.sh new file mode 100755 index 0000000000..86646aa8ca --- /dev/null +++ b/base/14.17.6/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-base-image.js +set e+x + +# build image with Cypress dependencies +LOCAL_NAME=cypress/base:14.17.6 + +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/base/CHANGELOG.md b/base/CHANGELOG.md index cc4dd1d30a..e225b62086 100644 --- a/base/CHANGELOG.md +++ b/base/CHANGELOG.md @@ -71,3 +71,4 @@ | cypress/base:14.19.0 | 14.19.0 | Debian | [/14.19.0](14.19.0) | 6.14.16 | 1.22.17 | | cypress/base:16.14.0-slim | 16.14.0 | Debian | [/16.14.0](16.14.0) | `🚫` | `🚫` | `🚫` | | cypress/base:17.8.0 | 17.8.0 | Debian | [/17.8.0](17.8.0) | `🚫` | `🚫` | `🚫` | +| cypress/base:14.17.6 | 14.17.6 | Debian | [/14.17.6](14.17.6) | `🚫` | `🚫` | `🚫` | diff --git a/base/README.md b/base/README.md index ce9dd9763b..21a92c3f8d 100644 --- a/base/README.md +++ b/base/README.md @@ -82,7 +82,8 @@ Image `cypress/base:12` is tagged [`latest`](https://hub.docker.com/r/cypress/ba | cypress/base:manjaro-node14.12.0 | 14.12.0 | Manjaro | [manjaro-14.12.0](manjaro-14.12.0) | 6.14.8 | 1.22.10 | | cypress/base:14.19.0 | 14.19.0 | Debian | [/14.19.0](14.19.0) | 6.14.16 | 1.22.17 | | cypress/base:16.14.0-slim | 16.14.0 | Debian | [/16.14.0](16.14.0) | `🚫` | `🚫` | `🚫` | -| cypress/base:17.8.0 | 17.8.0 | Debian | [/17.8.0](17.8.0) | `🚫` | `🚫` | `🚫` | +| cypress/base:17.8.0 | 17.8.0 | Debian | [/17.8.0](17.8.0) | `🚫` | `🚫` | `🚫` | +| cypress/base:14.17.6 | 14.17.6 | Debian | [/14.17.6](14.17.6) | `🚫` | `🚫` | `🚫` | ## ⚠️ Node.js Support diff --git a/buildspec.yml b/buildspec.yml index 45b230e982..e62c1a9bdb 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,16 +6,16 @@ env: batch: fast-fail: false build-list: - - identifier: browsernode1780Chrome99Ff97Slim + - identifier: base14176 env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_MEDIUM variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node17.8.0-chrome99-ff97-slim" + IMAGE_REPO_NAME: "cypress/base" + IMAGE_DIR: "base" + IMAGE_TAG: "14.17.6" phases: pre_build: diff --git a/circle.yml b/circle.yml index 1f1807f109..459065dff9 100644 --- a/circle.yml +++ b/circle.yml @@ -472,10 +472,8 @@ workflows: lint: jobs: - lint-markdown - build-browser-images: + build-base-images: jobs: - - build-browser-image: - name: "browser node17.8.0-chrome99-ff97-slim" - dockerTag: "node17.8.0-chrome99-ff97-slim" - chromeVersion: "Google Chrome 99" - firefoxVersion: "Mozilla Firefox 97" \ No newline at end of file + - build-base-image: + name: "base 14.17.6" + dockerTag: "14.17.6" \ No newline at end of file From a3aaf9d163497722c196aa91638e773d802253ce Mon Sep 17 00:00:00 2001 From: Tyler Biethman Date: Fri, 1 Apr 2022 14:04:51 -0500 Subject: [PATCH 047/371] fix: Support three-digit browser versions in circle config generation (#628) --- scripts/generate-config.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/generate-config.js b/scripts/generate-config.js index 8080c2d134..ae356ab753 100644 --- a/scripts/generate-config.js +++ b/scripts/generate-config.js @@ -544,21 +544,21 @@ const formWorkflow = (image) => { yml = yml + ` - chromeVersion: "Google Chrome ${image.tag.substr(image.tag.indexOf("-chrome") + 7, 2)}"` + chromeVersion: "Google Chrome ${image.tag.match(/-chrome\d*/)[0].substring(7)}"` } if (image.tag.includes("-ff")) { yml = yml + ` - firefoxVersion: "Mozilla Firefox ${image.tag.substr(image.tag.indexOf("-ff") + 3, 2)}"` + firefoxVersion: "Mozilla Firefox ${image.tag.match(/-ff\d*/)[0].substring(3)}"` } if (image.tag.includes("-edge")) { yml = yml + ` - edgeVersion: "Microsoft Edge ${image.tag.substr(image.tag.indexOf("-edge") + 5, 2)}"` + edgeVersion: "Microsoft Edge ${image.tag.match(/-edge\d*/)[0].substring(5)}"` } } return yml From 13f5890092d15b769d09d83e7c8f2688c4c0d61d Mon Sep 17 00:00:00 2001 From: mssravan56 Date: Mon, 4 Apr 2022 19:20:52 +0530 Subject: [PATCH 048/371] feat(base): generate new image with version 16.14.2 (#634) --- base/16.14.2/Dockerfile | 60 +++++++++++++++++++++++++++++++++++++++++ base/16.14.2/README.md | 18 +++++++++++++ base/16.14.2/build.sh | 8 ++++++ base/CHANGELOG.md | 1 + base/README.md | 3 ++- buildspec.yml | 4 +-- circle.yml | 4 +-- 7 files changed, 93 insertions(+), 5 deletions(-) create mode 100644 base/16.14.2/Dockerfile create mode 100644 base/16.14.2/README.md create mode 100755 base/16.14.2/build.sh diff --git a/base/16.14.2/Dockerfile b/base/16.14.2/Dockerfile new file mode 100644 index 0000000000..75d7be5b42 --- /dev/null +++ b/base/16.14.2/Dockerfile @@ -0,0 +1,60 @@ +# WARNING: this file was autogenerated by generate-base-image.js +# contains all dependencies for running Cypress.io Test Runner +# https://on.cypress.io/docker and https://on.cypress.io/ci +# +# build it with command +# docker build -t cypress/base:16.14.2 . +# +FROM node:16.14.2-bullseye-slim + +RUN apt-get update && \ + apt-get install --no-install-recommends -y \ + libgtk2.0-0 \ + libgtk-3-0 \ + libnotify-dev \ + libgconf-2-4 \ + libgbm-dev \ + libnss3 \ + libxss1 \ + libasound2 \ + libxtst6 \ + xauth \ + xvfb \ + # install text editors + vim-tiny \ + nano \ + # install emoji font + fonts-noto-color-emoji \ + # install Chinese fonts + # this list was copied from https://github.com/jim3ma/docker-leanote + fonts-arphic-bkai00mp \ + fonts-arphic-bsmi00lp \ + fonts-arphic-gbsn00lp \ + fonts-arphic-gkai00mp \ + fonts-arphic-ukai \ + fonts-arphic-uming \ + ttf-wqy-zenhei \ + ttf-wqy-microhei \ + xfonts-wqy \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM=xterm +# avoid million NPM install messages +ENV npm_config_loglevel=warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm=true + +RUN npm --version \ + && npm install -g yarn@latest --force \ + && yarn --version \ + && node -p process.versions \ + && node -p 'module.paths' \ + && echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" diff --git a/base/16.14.2/README.md b/base/16.14.2/README.md new file mode 100644 index 0000000000..b91ffcdbcd --- /dev/null +++ b/base/16.14.2/README.md @@ -0,0 +1,18 @@ + +# cypress/base:16.14.2 + +A Docker image with all dependencies pre-installed. +Just add your NPM packages (including Cypress) and run the tests. +See [Cypress Docker docs](https://on.cypress.io/docker) and +[Cypress CI guide](https://on.cypress.io/ci). + +## Example + +Sample Dockerfile + +``` +FROM cypress/base:16.14.2 +RUN npm install --save-dev cypress +RUN $(npm bin)/cypress verify +RUN $(npm bin)/cypress run +``` diff --git a/base/16.14.2/build.sh b/base/16.14.2/build.sh new file mode 100755 index 0000000000..deb812c889 --- /dev/null +++ b/base/16.14.2/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-base-image.js +set e+x + +# build image with Cypress dependencies +LOCAL_NAME=cypress/base:16.14.2 + +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/base/CHANGELOG.md b/base/CHANGELOG.md index e225b62086..4f48e83fc5 100644 --- a/base/CHANGELOG.md +++ b/base/CHANGELOG.md @@ -72,3 +72,4 @@ | cypress/base:16.14.0-slim | 16.14.0 | Debian | [/16.14.0](16.14.0) | `🚫` | `🚫` | `🚫` | | cypress/base:17.8.0 | 17.8.0 | Debian | [/17.8.0](17.8.0) | `🚫` | `🚫` | `🚫` | | cypress/base:14.17.6 | 14.17.6 | Debian | [/14.17.6](14.17.6) | `🚫` | `🚫` | `🚫` | +| cypress/base:16.14.2 | 16.14.2 | Debian | [/16.14.2](16.14.2) | `🚫` | `🚫` | `🚫` | diff --git a/base/README.md b/base/README.md index 21a92c3f8d..ae535a0f1f 100644 --- a/base/README.md +++ b/base/README.md @@ -83,7 +83,8 @@ Image `cypress/base:12` is tagged [`latest`](https://hub.docker.com/r/cypress/ba | cypress/base:14.19.0 | 14.19.0 | Debian | [/14.19.0](14.19.0) | 6.14.16 | 1.22.17 | | cypress/base:16.14.0-slim | 16.14.0 | Debian | [/16.14.0](16.14.0) | `🚫` | `🚫` | `🚫` | | cypress/base:17.8.0 | 17.8.0 | Debian | [/17.8.0](17.8.0) | `🚫` | `🚫` | `🚫` | -| cypress/base:14.17.6 | 14.17.6 | Debian | [/14.17.6](14.17.6) | `🚫` | `🚫` | `🚫` | +| cypress/base:14.17.6 | 14.17.6 | Debian | [/14.17.6](14.17.6) | `🚫` | `🚫` | `🚫` | +| cypress/base:16.14.2 | 16.14.2 | Debian | [/16.14.2](16.14.2) | `🚫` | `🚫` | `🚫` | ## ⚠️ Node.js Support diff --git a/buildspec.yml b/buildspec.yml index e62c1a9bdb..b0c49cc0ce 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,7 +6,7 @@ env: batch: fast-fail: false build-list: - - identifier: base14176 + - identifier: base16142 env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER @@ -15,7 +15,7 @@ batch: variables: IMAGE_REPO_NAME: "cypress/base" IMAGE_DIR: "base" - IMAGE_TAG: "14.17.6" + IMAGE_TAG: "16.14.2" phases: pre_build: diff --git a/circle.yml b/circle.yml index 459065dff9..8faff14277 100644 --- a/circle.yml +++ b/circle.yml @@ -475,5 +475,5 @@ workflows: build-base-images: jobs: - build-base-image: - name: "base 14.17.6" - dockerTag: "14.17.6" \ No newline at end of file + name: "base 16.14.2" + dockerTag: "16.14.2" \ No newline at end of file From ba110303f9b068b4222c6ab98282e7723a4ede71 Mon Sep 17 00:00:00 2001 From: Adam Murray Date: Thu, 7 Apr 2022 12:26:39 -0500 Subject: [PATCH 049/371] feat(edge): add edge browser to browser image generation script. (#639) * feat(edge): add edge browser to browser image generation script. update logic to handle missing browsers. update browser readme script to not post multiple lines if image already is present. * fix: prevent images from appearing multiple times in generated readme and changelog * docs: update contributing guide. * fix: update config generator to account for edge version change --- CONTRIBUTING.md | 6 +- browsers/CHANGELOG.md | 2 + browsers/README.md | 5 +- browsers/node16.14.0-edge/Dockerfile | 75 +++++++++++++++++++++++ browsers/node16.14.0-edge/README.md | 13 ++++ browsers/node16.14.0-edge/build.sh | 8 +++ buildspec.yml | 8 +-- circle.yml | 21 +++---- included/9.4.1/Dockerfile | 90 +++++++++++++--------------- scripts/generate-base-readme.js | 7 +++ scripts/generate-browser-image.js | 69 ++++++++++++++------- scripts/generate-browser-readme.js | 7 +++ scripts/generate-config.js | 14 ++--- scripts/generate-included-readme.js | 7 +++ 14 files changed, 236 insertions(+), 96 deletions(-) create mode 100644 browsers/node16.14.0-edge/Dockerfile create mode 100644 browsers/node16.14.0-edge/README.md create mode 100755 browsers/node16.14.0-edge/build.sh diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9e381ba36f..b45378e0e5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -30,14 +30,16 @@ The new image will be built and tested on CI and pushed to Docker Hub once the P To create a new image with the specific browser versions needed to run your cypress tests. -1. Run `yarn add:browser --chrome= --firefox= --edge=`. For example `yarn add:browser 16.5.0 --chrome=94.0.4606.71 --firefox=93.0`. +1. Run `yarn add:browser --chrome= --firefox= --edge`. For example `yarn add:browser 16.5.0 --chrome=94.0.4606.71 --firefox=93.0`. -This will create a new folder `browser/node-chrome-ff-edge` See [generate-browser-image.js](scripts/generate-browser-image.js) file for details. +This will create a new folder `browser/node-chrome-ff-edge` See [generate-browser-image.js](scripts/generate-browser-image.js) file for details. 2. Open a pull request. **Important ⚠️** In order to properly generate a browser image, you must specify a version of Chrome, or a version of Firefox, or a version of Edge. +**note:** The Edge browser will always default to the latest stable release. There is currently no way to specify the downloaded version. For this reason, when generating an image with Edge support users should only pass `--edge`. + ### Add new included image To create a new image with Cypress pre-installed globally diff --git a/browsers/CHANGELOG.md b/browsers/CHANGELOG.md index 42ab619bf0..5afd8669d6 100644 --- a/browsers/CHANGELOG.md +++ b/browsers/CHANGELOG.md @@ -35,3 +35,5 @@ Name + Tag | Base image | Chrome | Firefox | Edge [cypress/browsers:node16.13.2-chrome100-ff98](./node16.13.2-chrome100-ff98) | `cypress/base:16.13.2` | `100.0.4896.60` | `98.0.2` | `🚫` [cypress/browsers:node17.8.0-chrome99-ff97-slim](./node17.8.0-chrome99-ff97-slim) | `cypress/base:17.8.0` | `99.0.4844.84` | `97.0.1` | `🚫` + +[cypress/browsers:node16.14.0-edge](./node16.14.0-edge) | `cypress/base:16.14.0` | `🚫` | `🚫` | `--edge` \ No newline at end of file diff --git a/browsers/README.md b/browsers/README.md index 2329d95dc8..75b7e8b2fe 100644 --- a/browsers/README.md +++ b/browsers/README.md @@ -40,7 +40,10 @@ [cypress/browsers:node16.13.2-chrome100-ff98](./node16.13.2-chrome100-ff98) | `cypress/base:16.13.2` | `100.0.4896.60` | `98.0.2` | `🚫` -[cypress/browsers:node17.8.0-chrome99-ff97-slim](./node17.8.0-chrome99-ff97-slim) | `cypress/base:17.8.0` | `99.0.4844.84` | `97.0.1` | `🚫` +[cypress/browsers:node17.8.0-chrome99-ff97-slim](./node17.8.0-chrome99-ff97-slim) | `cypress/base:17.8.0` | `99.0.4844.84` | `97.0.1` | `🚫` + +[cypress/browsers:node16.14.0-edge](./node16.14.0-edge) | `cypress/base:16.14.0` | `🚫` | `🚫` | `--edge` + To find the available Chrome versions, check [https://chromium.cypress.io/](https://chromium.cypress.io/). diff --git a/browsers/node16.14.0-edge/Dockerfile b/browsers/node16.14.0-edge/Dockerfile new file mode 100644 index 0000000000..a45f6a594a --- /dev/null +++ b/browsers/node16.14.0-edge/Dockerfile @@ -0,0 +1,75 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browser -- 16.14.0 --edge +# +# build this image with command +# docker build -t cypress/browsers:node16.14.0-edge . +# +# +FROM cypress/base:16.14.0 + +USER root + +RUN node --version + +# Install dependencies +RUN apt-get update && \ + apt-get install -y \ + fonts-liberation \ + libcurl4 \ + libcurl3-gnutls \ + libcurl3-nss \ + xdg-utils \ + wget \ + curl \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +# install libappindicator3-1 - not included with Debian 11 +RUN wget --no-verbose /usr/src/libappindicator3-1_0.4.92-7_amd64.deb "http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_amd64.deb" && \ + dpkg -i /usr/src/libappindicator3-1_0.4.92-7_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/libappindicator3-1_0.4.92-7_amd64.deb + + + +# "fake" dbus address to prevent errors +# https://github.com/SeleniumHQ/docker-selenium/issues/87 +ENV DBUS_SESSION_BUS_ADDRESS=/dev/null + + + + +RUN echo "Downloading Latest Edge version..." + +## Setup Edge +RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg +RUN install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/ +RUN sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-dev.list' +RUN rm microsoft.gpg + +## Install Edge +RUN apt-get update +RUN apt-get install -y microsoft-edge-dev +# Add a link to the browser that allows Cypress to find it +RUN ln -s /usr/bin/microsoft-edge /usr/bin/edge + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "Chrome version: n/a \n" \ + "Firefox version: n/a \n" \ + "Edge version: $(edge --version) \n" \ + "git version: $(git --version) \n" \ + "whoami: $(whoami) \n" + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM=xterm +# avoid million NPM install messages +ENV npm_config_loglevel=warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm=true diff --git a/browsers/node16.14.0-edge/README.md b/browsers/node16.14.0-edge/README.md new file mode 100644 index 0000000000..7ac8b2876b --- /dev/null +++ b/browsers/node16.14.0-edge/README.md @@ -0,0 +1,13 @@ + + +# cypress/browsers:node16.14.0-edge + +A complete image with all operating system depedencies for Cypress, and Chrome undefined, Firefox undefined, Edge --edge browsers. + +[Dockerfile](Dockerfile) + +**Note:** this image uses the `root` user. You might want to switch to nonroot user like `node` when running this container for security diff --git a/browsers/node16.14.0-edge/build.sh b/browsers/node16.14.0-edge/build.sh new file mode 100755 index 0000000000..0275552bd1 --- /dev/null +++ b/browsers/node16.14.0-edge/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browser -- 16.14.0 --edge +set e+x + +LOCAL_NAME=cypress/browsers:node16.14.0-edge +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/buildspec.yml b/buildspec.yml index b0c49cc0ce..6a8ae2cce7 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,16 +6,16 @@ env: batch: fast-fail: false build-list: - - identifier: base16142 + - identifier: browsernode16140Edge env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_MEDIUM variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "16.14.2" + IMAGE_REPO_NAME: "cypress/browsers" + IMAGE_DIR: "browsers" + IMAGE_TAG: "node16.14.0-edge" phases: pre_build: diff --git a/circle.yml b/circle.yml index 8faff14277..b25821b52d 100644 --- a/circle.yml +++ b/circle.yml @@ -104,7 +104,7 @@ commands: edgeVersion: type: string default: '' - description: Edge version to expect in the base image, starts with "Microsoft Edge XX" + description: Edge version to expect in the base image, starts with "Microsoft Edge" steps: - when: condition: << parameters.chromeVersion >> @@ -147,12 +147,12 @@ commands: name: confirm the image has Edge << parameters.edgeVersion >> command: | version=$(docker run << parameters.imageName >> edge --version) - if [[ "$version" =~ ^"<< parameters.edgeVersion >>" ]]; then - echo "Image has the expected version of Edge << parameters.edgeVersion >>" + if [[ "$version" ]]; then + echo "Image has the a version of Edge << parameters.edgeVersion >>" echo "found $version" else - echo "Problem: image has unexpected Edge version" - echo "Expected << parameters.edgeVersion >> and got $version" + echo "Problem: image has no Edge version" + echo "Expected to have $version" exit 1 fi @@ -411,7 +411,7 @@ jobs: edgeVersion: type: string default: '' - description: Edge version to expect in the base image, starts with "Microsoft Edge XX" + description: Edge version to expect in the base image, starts with "Microsoft Edge" steps: - checkout - halt-if-docker-image-exists: @@ -472,8 +472,9 @@ workflows: lint: jobs: - lint-markdown - build-base-images: + build-browser-images: jobs: - - build-base-image: - name: "base 16.14.2" - dockerTag: "16.14.2" \ No newline at end of file + - build-browser-image: + name: "browser node16.14.0-edge" + dockerTag: "node16.14.0-edge" + edgeVersion: "Microsoft Edge" \ No newline at end of file diff --git a/included/9.4.1/Dockerfile b/included/9.4.1/Dockerfile index aa5640c259..d990e60f89 100644 --- a/included/9.4.1/Dockerfile +++ b/included/9.4.1/Dockerfile @@ -12,58 +12,50 @@ RUN apt update && apt upgrade -y # avoid too many progress messages # https://github.com/cypress-io/cypress/issues/1243 -ENV CI=1 - +ENV CI=1 \ # disable shared memory X11 affecting Cypress v4 and Chrome # https://github.com/cypress-io/cypress-docker-images/issues/270 -ENV QT_X11_NO_MITSHM=1 -ENV _X11_NO_MITSHM=1 -ENV _MITSHM=0 + QT_X11_NO_MITSHM=1 \ + _X11_NO_MITSHM=1 \ + _MITSHM=0 \ + # point Cypress at the /root/cache no matter what user account is used + # see https://on.cypress.io/caching + CYPRESS_CACHE_FOLDER=/root/.cache/Cypress # should be root user -RUN echo "whoami: $(whoami)" -RUN npm config -g set user $(whoami) - -# command "id" should print: -# uid=0(root) gid=0(root) groups=0(root) -# which means the current user is root -RUN id - -# point Cypress at the /root/cache no matter what user account is used -# see https://on.cypress.io/caching -ENV CYPRESS_CACHE_FOLDER=/root/.cache/Cypress -RUN npm install -g "cypress@9.4.1" -RUN cypress verify - -# Cypress cache and installed version -# should be in the root user's home folder -RUN cypress cache path -RUN cypress cache list -RUN cypress info -RUN cypress version - -# give every user read access to the "/root" folder where the binary is cached -# we really only need to worry about the top folder, fortunately -RUN ls -la /root -RUN chmod 755 /root - -# always grab the latest Yarn -# otherwise the base image might have old versions -# NPM does not need to be installed as it is already included with Node. -RUN npm i -g yarn@latest - -# Show where Node loads required modules from -RUN node -p 'module.paths' - -# should print Cypress version -# plus Electron and bundled Node versions -RUN cypress version -RUN echo " node version: $(node -v) \n" \ - "npm version: $(npm -v) \n" \ - "yarn version: $(yarn -v) \n" \ - "debian version: $(cat /etc/debian_version) \n" \ - "user: $(whoami) \n" \ - "chrome: $(google-chrome --version || true) \n" \ - "firefox: $(firefox --version || true) \n" +RUN echo "whoami: $(whoami)" \ + && npm config -g set user $(whoami) \ + # command "id" should print: + # uid=0(root) gid=0(root) groups=0(root) + # which means the current user is root + && id \ + && npm install -g "cypress@9.4.1" \ + && cypress verify \ + # Cypress cache and installed version + # should be in the root user's home folder + && cypress cache path \ + && cypress cache list \ + && cypress info \ + && cypress version \ + # give every user read access to the "/root" folder where the binary is cached + # we really only need to worry about the top folder, fortunately + && ls -la /root \ + && chmod 755 /root \ + # always grab the latest Yarn + # otherwise the base image might have old versions + # NPM does not need to be installed as it is already included with Node. + && npm i -g yarn@latest \ + # Show where Node loads required modules from + && node -p 'module.paths' \ + # should print Cypress version + # plus Electron and bundled Node versions + && cypress version \ + && echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" \ + "chrome: $(google-chrome --version || true) \n" \ + "firefox: $(firefox --version || true) \n" ENTRYPOINT ["cypress", "run"] diff --git a/scripts/generate-base-readme.js b/scripts/generate-base-readme.js index 3bacba63ea..41537a6313 100644 --- a/scripts/generate-base-readme.js +++ b/scripts/generate-base-readme.js @@ -67,6 +67,13 @@ fs.readFile(changeLogPath, (err, data) => { console.error(err) } + const imageExists = data.includes(generateNewChangeVersion) + + if (imageExists) { + console.log(`Image already exists in README and CHANGELOG.`) + process.exit(1) + } + const updatedChangeLog = `${data.toString()}${generateNewChangeVersion}` fs.writeFileSync(changeLogPath, updatedChangeLog.trim() + "\n", "utf8") console.log("Saved CHANGELOG.md at %s", changeLogPath) diff --git a/scripts/generate-browser-image.js b/scripts/generate-browser-image.js index bcd5a22cf7..2592d328e3 100644 --- a/scripts/generate-browser-image.js +++ b/scripts/generate-browser-image.js @@ -6,7 +6,7 @@ const { isStrictSemver } = require("../utils") const nodeVersion = process.argv[2] const chromeVersion = process.argv.find((arg) => arg.includes("--chrome"))?.match(/(?<=--chrome=).*?(?=\s|$)/g)[0] const firefoxVersion = process.argv.find((arg) => arg.includes("--firefox"))?.match(/(?<=--firefox=).*?(?=\s|$)/g)[0] -const edgeVersion = process.argv.find((arg) => arg.includes("--edge"))?.match(/(?<=--edge=).*?(?=\s|$)/g)[0] +const edgeVersion = process.argv.find((arg) => arg.includes("--edge")) if (!nodeVersion || !isStrictSemver(nodeVersion)) { console.error("expected a base image version like 16.5.0") @@ -26,7 +26,7 @@ const generateChromeVersionFolderName = chromeVersion const generateFirefoxVersionFolderName = firefoxVersion ? `-ff${firefoxVersion.substring(0, firefoxVersion.indexOf("."))}` : "" -const generateEdgeVersionFolderName = edgeVersion ? `-edge${edgeVersion.substring(0, edgeVersion.indexOf("."))}` : "" +const generateEdgeVersionFolderName = edgeVersion ? `-edge` : "" const imageVersion = `${generateNodeVersionFolderName}${generateChromeVersionFolderName}${generateFirefoxVersionFolderName}${generateEdgeVersionFolderName}` let outputFolder = path.join("browsers", imageVersion) @@ -41,6 +41,43 @@ shelljs.mkdir(outputFolder) const folderName = outputFolder.split("/")[1] +const chromeDownload = ` +# install Chrome browser +RUN wget --no-verbose -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${chromeVersion}-1_amd64.deb" && \\ + dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \\ + apt-get install -f -y && \\ + rm -f /usr/src/google-chrome-stable_current_amd64.deb` + +const firefoxDownload = ` +# firefox dependencies +RUN apt-get update && \\ + apt-get install -y \\ + bzip2 \\ + # add codecs needed for video playback in firefox + # https://github.com/cypress-io/cypress-docker-images/issues/150 + mplayer + +# install Firefox browser +RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/${firefoxVersion}/linux-x86_64/en-US/firefox-${firefoxVersion}.tar.bz2 && \\ + tar -C /opt -xjf /tmp/firefox.tar.bz2 && \\ + rm /tmp/firefox.tar.bz2 && \\ + ln -fs /opt/firefox/firefox /usr/bin/firefox` + +const edgeDownload = ` +RUN echo "Downloading Latest Edge version..." + +## Setup Edge +RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg +RUN install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/ +RUN sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-dev.list' +RUN rm microsoft.gpg + +## Install Edge +RUN apt-get update +RUN apt-get install -y microsoft-edge-dev +# Add a link to the browser that allows Cypress to find it +RUN ln -s /usr/bin/microsoft-edge /usr/bin/edge` + const Dockerfile = ` # WARNING: this file was autogenerated by ${path.basename(__filename)} # using @@ -59,7 +96,7 @@ USER root RUN node --version -# Chrome dependencies +# Install dependencies RUN apt-get update && \\ apt-get install -y \\ fonts-liberation \\ @@ -79,38 +116,24 @@ RUN wget --no-verbose /usr/src/libappindicator3-1_0.4.92-7_amd64.deb "http://ftp apt-get install -f -y && \\ rm -f /usr/src/libappindicator3-1_0.4.92-7_amd64.deb -# install Chrome browser -RUN wget --no-verbose -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${chromeVersion}-1_amd64.deb" && \\ - dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \\ - apt-get install -f -y && \\ - rm -f /usr/src/google-chrome-stable_current_amd64.deb +${chromeVersion ? chromeDownload : ""} # "fake" dbus address to prevent errors # https://github.com/SeleniumHQ/docker-selenium/issues/87 ENV DBUS_SESSION_BUS_ADDRESS=/dev/null -# firefox dependencies -RUN apt-get update && \\ - apt-get install -y \\ - bzip2 \\ - # add codecs needed for video playback in firefox - # https://github.com/cypress-io/cypress-docker-images/issues/150 - mplayer +${firefoxVersion ? firefoxDownload : ""} -# install Firefox browser -RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/${firefoxVersion}/linux-x86_64/en-US/firefox-${firefoxVersion}.tar.bz2 && \\ - tar -C /opt -xjf /tmp/firefox.tar.bz2 && \\ - rm /tmp/firefox.tar.bz2 && \\ - ln -fs /opt/firefox/firefox /usr/bin/firefox +${edgeVersion ? edgeDownload : ""} # versions of local tools RUN echo " node version: $(node -v) \\n" \\ "npm version: $(npm -v) \\n" \\ "yarn version: $(yarn -v) \\n" \\ "debian version: $(cat /etc/debian_version) \\n" \\ - "Chrome version: $(google-chrome --version) \\n" \\ - "Firefox version: $(firefox --version) \\n" \\ - "Edge version: $(edge --version) \\n" \\ + "Chrome version: ${chromeVersion ? `$(google-chrome --version) \\n" \\` : `n/a \\n" \\`} + "Firefox version: ${firefoxVersion ? `$(firefox --version) \\n" \\` : `n/a \\n" \\`} + "Edge version: ${edgeVersion ? `$(edge --version) \\n" \\` : `n/a \\n" \\`} "git version: $(git --version) \\n" \\ "whoami: $(whoami) \\n" diff --git a/scripts/generate-browser-readme.js b/scripts/generate-browser-readme.js index 5b13fb0d26..0c5972932e 100644 --- a/scripts/generate-browser-readme.js +++ b/scripts/generate-browser-readme.js @@ -96,6 +96,13 @@ fs.readFile(changeLogPath, (err, data) => { console.error(err) } + const imageExists = data.includes(generateNewChangeVersion) + + if (imageExists) { + console.log(`Image already exists in README and CHANGELOG.`) + process.exit(1) + } + const updatedChangeLog = `${data.toString()} \n${generateNewChangeVersion}` fs.writeFileSync(changeLogPath, updatedChangeLog.trim() + "\n", "utf8") console.log("Saved CHANGELOG.md at %s", changeLogPath) diff --git a/scripts/generate-config.js b/scripts/generate-config.js index ae356ab753..49b308ebee 100644 --- a/scripts/generate-config.js +++ b/scripts/generate-config.js @@ -153,7 +153,7 @@ commands: edgeVersion: type: string default: '' - description: Edge version to expect in the base image, starts with "Microsoft Edge XX" + description: Edge version to expect in the base image, starts with "Microsoft Edge" steps: - when: condition: << parameters.chromeVersion >> @@ -196,12 +196,12 @@ commands: name: confirm the image has Edge << parameters.edgeVersion >> command: | version=$(docker run << parameters.imageName >> edge --version) - if [[ "$version" =~ ^"<< parameters.edgeVersion >>" ]]; then - echo "Image has the expected version of Edge << parameters.edgeVersion >>" + if [[ "$version" ]]; then + echo "Image has the a version of Edge << parameters.edgeVersion >>" echo "found $version" else - echo "Problem: image has unexpected Edge version" - echo "Expected << parameters.edgeVersion >> and got $version" + echo "Problem: image has no Edge version" + echo "Expected to have $version" exit 1 fi @@ -460,7 +460,7 @@ jobs: edgeVersion: type: string default: '' - description: Edge version to expect in the base image, starts with "Microsoft Edge XX" + description: Edge version to expect in the base image, starts with "Microsoft Edge" steps: - checkout - halt-if-docker-image-exists: @@ -558,7 +558,7 @@ const formWorkflow = (image) => { yml = yml + ` - edgeVersion: "Microsoft Edge ${image.tag.match(/-edge\d*/)[0].substring(5)}"` + edgeVersion: "Microsoft Edge"` } } return yml diff --git a/scripts/generate-included-readme.js b/scripts/generate-included-readme.js index d1db6682f8..91e9ad3cd6 100644 --- a/scripts/generate-included-readme.js +++ b/scripts/generate-included-readme.js @@ -241,6 +241,13 @@ fs.readFile(changeLogPath, (err, data) => { console.error(err) } + const imageExists = data.includes(versionTag) + + if (imageExists) { + console.log(`Image already exists in README and CHANGELOG.`) + process.exit(1) + } + const updatedChangeLog = `${data.toString()} \n[cypress/included:${versionTag}](${versionTag}) | \`${baseImageTag}\`` fs.writeFileSync(changeLogPath, updatedChangeLog.trim() + "\n", "utf8") From 4dee5af131f48189e27253f5d43519408a5a3ae7 Mon Sep 17 00:00:00 2001 From: Shawn McCarthy <77161820+smccarthy-godaddy@users.noreply.github.com> Date: Thu, 7 Apr 2022 11:04:43 -0700 Subject: [PATCH 050/371] fix(table): table formatting was off (#640) --- included/README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/included/README.md b/included/README.md index cfb9e6a7f0..10271ff0f8 100644 --- a/included/README.md +++ b/included/README.md @@ -83,12 +83,9 @@ [cypress/included:9.3.1](9.3.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.4.1](9.4.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.5.0](9.5.0) | `cypress/browsers:node16.5.0-chrome97-ff96` -[cypress/included:9.5.1](9.5.1) | `cypress/browsers:node16.5.0-chrome97-ff96` - +[cypress/included:9.5.1](9.5.1) | `cypress/browsers:node16.5.0-chrome97-ff96` [cypress/included:9.5.1-node16.14.0-slim-chrome99-ff97](9.5.1-node16.14.0-slim-chrome99-ff97) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` - [cypress/included:9.5.2](9.5.2) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` - [cypress/included:9.5.3](9.5.3) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: From cc555c02ad9b77f5aa6e3481d44122908e894497 Mon Sep 17 00:00:00 2001 From: Ryan Manuel Date: Mon, 11 Apr 2022 15:45:07 -0400 Subject: [PATCH 051/371] feat(included): generate new image with version 9.5.4 (#641) --- buildspec.yml | 8 ++--- circle.yml | 9 +++--- included/9.5.4/Dockerfile | 61 +++++++++++++++++++++++++++++++++++++++ included/9.5.4/README.md | 18 ++++++++++++ included/9.5.4/build.sh | 8 +++++ included/CHANGELOG.md | 2 ++ included/README.md | 9 ++++-- 7 files changed, 104 insertions(+), 11 deletions(-) create mode 100644 included/9.5.4/Dockerfile create mode 100644 included/9.5.4/README.md create mode 100755 included/9.5.4/build.sh diff --git a/buildspec.yml b/buildspec.yml index 6a8ae2cce7..7b0285c467 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,16 +6,16 @@ env: batch: fast-fail: false build-list: - - identifier: browsernode16140Edge + - identifier: included954 env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_MEDIUM variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node16.14.0-edge" + IMAGE_REPO_NAME: "cypress/included" + IMAGE_DIR: "included" + IMAGE_TAG: "9.5.4" phases: pre_build: diff --git a/circle.yml b/circle.yml index b25821b52d..18d400ccfd 100644 --- a/circle.yml +++ b/circle.yml @@ -472,9 +472,8 @@ workflows: lint: jobs: - lint-markdown - build-browser-images: + build-included-images: jobs: - - build-browser-image: - name: "browser node16.14.0-edge" - dockerTag: "node16.14.0-edge" - edgeVersion: "Microsoft Edge" \ No newline at end of file + - build-included-image: + name: "included 9.5.4" + dockerTag: "9.5.4" \ No newline at end of file diff --git a/included/9.5.4/Dockerfile b/included/9.5.4/Dockerfile new file mode 100644 index 0000000000..4ed535314b --- /dev/null +++ b/included/9.5.4/Dockerfile @@ -0,0 +1,61 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.5.4 cypress/browsers:node16.14.0-slim-chrome99-ff97 +# +# build this image with command +# docker build -t cypress/included:9.5.4 . +# +FROM cypress/browsers:node16.14.0-slim-chrome99-ff97 + +# Update the dependencies to get the latest and greatest (and safest!) packages. +RUN apt update && apt upgrade -y + +# avoid too many progress messages +# https://github.com/cypress-io/cypress/issues/1243 +ENV CI=1 \ +# disable shared memory X11 affecting Cypress v4 and Chrome +# https://github.com/cypress-io/cypress-docker-images/issues/270 + QT_X11_NO_MITSHM=1 \ + _X11_NO_MITSHM=1 \ + _MITSHM=0 \ + # point Cypress at the /root/cache no matter what user account is used + # see https://on.cypress.io/caching + CYPRESS_CACHE_FOLDER=/root/.cache/Cypress + +# should be root user +RUN echo "whoami: $(whoami)" \ + && npm config -g set user $(whoami) \ + # command "id" should print: + # uid=0(root) gid=0(root) groups=0(root) + # which means the current user is root + && id \ + && npm install -g "cypress@9.5.4" \ + && cypress verify \ + # Cypress cache and installed version + # should be in the root user's home folder + && cypress cache path \ + && cypress cache list \ + && cypress info \ + && cypress version \ + # give every user read access to the "/root" folder where the binary is cached + # we really only need to worry about the top folder, fortunately + && ls -la /root \ + && chmod 755 /root \ + # always grab the latest Yarn + # otherwise the base image might have old versions + # NPM does not need to be installed as it is already included with Node. + && npm i -g yarn@latest \ + # Show where Node loads required modules from + && node -p 'module.paths' \ + # should print Cypress version + # plus Electron and bundled Node versions + && cypress version \ + && echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" \ + "chrome: $(google-chrome --version || true) \n" \ + "firefox: $(firefox --version || true) \n" + +ENTRYPOINT ["cypress", "run"] diff --git a/included/9.5.4/README.md b/included/9.5.4/README.md new file mode 100644 index 0000000000..710cb1beed --- /dev/null +++ b/included/9.5.4/README.md @@ -0,0 +1,18 @@ + + +# cypress/included:9.5.4 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.5.4 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/9.5.4/build.sh b/included/9.5.4/build.sh new file mode 100755 index 0000000000..2ba426ffca --- /dev/null +++ b/included/9.5.4/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.5.4 cypress/browsers:node16.14.0-slim-chrome99-ff97 +set e+x + +LOCAL_NAME=cypress/included:9.5.4 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/included/CHANGELOG.md b/included/CHANGELOG.md index 289a288517..604cdad57b 100644 --- a/included/CHANGELOG.md +++ b/included/CHANGELOG.md @@ -84,3 +84,5 @@ Name + Tag | Base image [cypress/included:9.5.2](9.5.2) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` [cypress/included:9.5.3](9.5.3) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` + +[cypress/included:9.5.4](9.5.4) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` diff --git a/included/README.md b/included/README.md index 10271ff0f8..28d602e5cb 100644 --- a/included/README.md +++ b/included/README.md @@ -83,10 +83,15 @@ [cypress/included:9.3.1](9.3.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.4.1](9.4.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.5.0](9.5.0) | `cypress/browsers:node16.5.0-chrome97-ff96` -[cypress/included:9.5.1](9.5.1) | `cypress/browsers:node16.5.0-chrome97-ff96` +[cypress/included:9.5.1](9.5.1) | `cypress/browsers:node16.5.0-chrome97-ff96` + [cypress/included:9.5.1-node16.14.0-slim-chrome99-ff97](9.5.1-node16.14.0-slim-chrome99-ff97) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` + [cypress/included:9.5.2](9.5.2) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` -[cypress/included:9.5.3](9.5.3) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` + +[cypress/included:9.5.3](9.5.3) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` + +[cypress/included:9.5.4](9.5.4) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: From 99697f8efe760a92bdaaa8c4a241352a85192141 Mon Sep 17 00:00:00 2001 From: Adam Murray Date: Thu, 14 Apr 2022 11:30:33 -0500 Subject: [PATCH 052/371] fix: add missing ps package. (#645) * fix: add missing ps package. * fix: update package name --- scripts/generate-base-image.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/generate-base-image.js b/scripts/generate-base-image.js index 5de7261a17..6b4216a9e3 100644 --- a/scripts/generate-base-image.js +++ b/scripts/generate-base-image.js @@ -51,6 +51,7 @@ RUN apt-get update && \\ libxss1 \\ libasound2 \\ libxtst6 \\ + procps \\ xauth \\ xvfb \\ # install text editors From 5971e4250310bc19d6a46a1448af98fbe25c13ab Mon Sep 17 00:00:00 2001 From: Adam Murray Date: Fri, 15 Apr 2022 14:57:29 -0500 Subject: [PATCH 053/371] feat(browser): generate new 16.14.0-based browser image (#651) --- browsers/CHANGELOG.md | 3 +- browsers/README.md | 4 +- browsers/node16.14.0-chrome99-ff97/Dockerfile | 81 +++++++++++++++++++ browsers/node16.14.0-chrome99-ff97/README.md | 13 +++ browsers/node16.14.0-chrome99-ff97/build.sh | 8 ++ buildspec.yml | 8 +- circle.yml | 10 ++- 7 files changed, 116 insertions(+), 11 deletions(-) create mode 100644 browsers/node16.14.0-chrome99-ff97/Dockerfile create mode 100644 browsers/node16.14.0-chrome99-ff97/README.md create mode 100755 browsers/node16.14.0-chrome99-ff97/build.sh diff --git a/browsers/CHANGELOG.md b/browsers/CHANGELOG.md index 5afd8669d6..2b61fa3750 100644 --- a/browsers/CHANGELOG.md +++ b/browsers/CHANGELOG.md @@ -36,4 +36,5 @@ Name + Tag | Base image | Chrome | Firefox | Edge [cypress/browsers:node17.8.0-chrome99-ff97-slim](./node17.8.0-chrome99-ff97-slim) | `cypress/base:17.8.0` | `99.0.4844.84` | `97.0.1` | `🚫` -[cypress/browsers:node16.14.0-edge](./node16.14.0-edge) | `cypress/base:16.14.0` | `🚫` | `🚫` | `--edge` \ No newline at end of file +[cypress/browsers:node16.14.0-edge](./node16.14.0-edge) | `cypress/base:16.14.0` | `🚫` | `🚫` | `--edge` +[cypress/browsers:node16.14.0-chrome99-ff97](./node16.14.0-chrome99-ff97) | `cypress/base:16.14.0` | `99.0.4844.51` | `97.0.1` | `🚫` diff --git a/browsers/README.md b/browsers/README.md index 75b7e8b2fe..b4df7008b5 100644 --- a/browsers/README.md +++ b/browsers/README.md @@ -42,8 +42,8 @@ [cypress/browsers:node17.8.0-chrome99-ff97-slim](./node17.8.0-chrome99-ff97-slim) | `cypress/base:17.8.0` | `99.0.4844.84` | `97.0.1` | `🚫` -[cypress/browsers:node16.14.0-edge](./node16.14.0-edge) | `cypress/base:16.14.0` | `🚫` | `🚫` | `--edge` - +[cypress/browsers:node16.14.0-edge](./node16.14.0-edge) | `cypress/base:16.14.0` | `🚫` | `🚫` | `--edge` +[cypress/browsers:node16.14.0-chrome99-ff97](./node16.14.0-chrome99-ff97) | `cypress/base:16.14.0-slim` | `99.0.4844.51` | `97.0.1` | `🚫` To find the available Chrome versions, check [https://chromium.cypress.io/](https://chromium.cypress.io/). diff --git a/browsers/node16.14.0-chrome99-ff97/Dockerfile b/browsers/node16.14.0-chrome99-ff97/Dockerfile new file mode 100644 index 0000000000..d25f108247 --- /dev/null +++ b/browsers/node16.14.0-chrome99-ff97/Dockerfile @@ -0,0 +1,81 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browser -- 16.14.0 --chrome=99.0.4844.51 --firefox=97.0.1 +# +# build this image with command +# docker build -t cypress/browsers:node16.14.0-chrome99-ff97 . +# +# +FROM cypress/base:16.14.0-slim + +USER root + +RUN node --version + +# Install dependencies +RUN apt-get update && \ + apt-get install -y \ + fonts-liberation \ + libcurl4 \ + libcurl3-gnutls \ + libcurl3-nss \ + procps \ + xdg-utils \ + wget \ + curl \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +# install libappindicator3-1 - not included with Debian 11 +RUN wget --no-verbose /usr/src/libappindicator3-1_0.4.92-7_amd64.deb "http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_amd64.deb" && \ + dpkg -i /usr/src/libappindicator3-1_0.4.92-7_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/libappindicator3-1_0.4.92-7_amd64.deb + + +# install Chrome browser +RUN wget --no-verbose -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_99.0.4844.51-1_amd64.deb" && \ + dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/google-chrome-stable_current_amd64.deb + +# "fake" dbus address to prevent errors +# https://github.com/SeleniumHQ/docker-selenium/issues/87 +ENV DBUS_SESSION_BUS_ADDRESS=/dev/null + + +# firefox dependencies +RUN apt-get update && \ + apt-get install -y \ + bzip2 \ + # add codecs needed for video playback in firefox + # https://github.com/cypress-io/cypress-docker-images/issues/150 + mplayer + +# install Firefox browser +RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/97.0.1/linux-x86_64/en-US/firefox-97.0.1.tar.bz2 && \ + tar -C /opt -xjf /tmp/firefox.tar.bz2 && \ + rm /tmp/firefox.tar.bz2 && \ + ln -fs /opt/firefox/firefox /usr/bin/firefox + + + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "Chrome version: $(google-chrome --version) \n" \ + "Firefox version: $(firefox --version) \n" \ + "Edge version: n/a \n" \ + "git version: $(git --version) \n" \ + "whoami: $(whoami) \n" + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM=xterm +# avoid million NPM install messages +ENV npm_config_loglevel=warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm=true diff --git a/browsers/node16.14.0-chrome99-ff97/README.md b/browsers/node16.14.0-chrome99-ff97/README.md new file mode 100644 index 0000000000..b6b6eaf939 --- /dev/null +++ b/browsers/node16.14.0-chrome99-ff97/README.md @@ -0,0 +1,13 @@ + + +# cypress/browsers:node16.14.0-chrome99-ff97 + +A complete image with all operating system depedencies for Cypress, and Chrome 99.0.4844.51, Firefox 97.0.1. + +[Dockerfile](Dockerfile) + +**Note:** this image uses the `root` user. You might want to switch to nonroot user like `node` when running this container for security diff --git a/browsers/node16.14.0-chrome99-ff97/build.sh b/browsers/node16.14.0-chrome99-ff97/build.sh new file mode 100755 index 0000000000..5b9148cde5 --- /dev/null +++ b/browsers/node16.14.0-chrome99-ff97/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browser -- 16.14.0 --chrome=99.0.4844.51 --firefox=97.0.1 +set e+x + +LOCAL_NAME=cypress/browsers:node16.14.0-chrome99-ff97 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/buildspec.yml b/buildspec.yml index 7b0285c467..613373d96c 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,16 +6,16 @@ env: batch: fast-fail: false build-list: - - identifier: included954 + - identifier: browsernode16140Chrome99Ff97 env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_MEDIUM variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "9.5.4" + IMAGE_REPO_NAME: "cypress/browsers" + IMAGE_DIR: "browsers" + IMAGE_TAG: "node16.14.0-chrome99-ff97" phases: pre_build: diff --git a/circle.yml b/circle.yml index 18d400ccfd..758f38b5c9 100644 --- a/circle.yml +++ b/circle.yml @@ -472,8 +472,10 @@ workflows: lint: jobs: - lint-markdown - build-included-images: + build-browser-images: jobs: - - build-included-image: - name: "included 9.5.4" - dockerTag: "9.5.4" \ No newline at end of file + - build-browser-image: + name: "browser node16.14.0-chrome99-ff97" + dockerTag: "node16.14.0-chrome99-ff97" + chromeVersion: "Google Chrome 99" + firefoxVersion: "Mozilla Firefox 97" \ No newline at end of file From 52d6f5ca9c2039ccd83594351af18fc4407e2529 Mon Sep 17 00:00:00 2001 From: Adam Murray Date: Mon, 18 Apr 2022 11:04:18 -0500 Subject: [PATCH 054/371] feat(base): add 16.14.2 image with procps (#647) --- base/16.14.2-slim/Dockerfile | 61 +++ base/16.14.2-slim/README.md | 18 + base/16.14.2-slim/build.sh | 8 + base/CHANGELOG.md | 1 + base/README.md | 3 +- buildspec.yml | 64 +-- circle.yml | 910 +++++++++++++++++------------------ 7 files changed, 576 insertions(+), 489 deletions(-) create mode 100644 base/16.14.2-slim/Dockerfile create mode 100644 base/16.14.2-slim/README.md create mode 100755 base/16.14.2-slim/build.sh diff --git a/base/16.14.2-slim/Dockerfile b/base/16.14.2-slim/Dockerfile new file mode 100644 index 0000000000..7817783db9 --- /dev/null +++ b/base/16.14.2-slim/Dockerfile @@ -0,0 +1,61 @@ +# WARNING: this file was autogenerated by generate-base-image.js +# contains all dependencies for running Cypress.io Test Runner +# https://on.cypress.io/docker and https://on.cypress.io/ci +# +# build it with command +# docker build -t cypress/base:16.14.2-slim . +# +FROM node:16.14.2-bullseye-slim + +RUN apt-get update && \ + apt-get install --no-install-recommends -y \ + libgtk2.0-0 \ + libgtk-3-0 \ + libnotify-dev \ + libgconf-2-4 \ + libgbm-dev \ + libnss3 \ + libxss1 \ + libasound2 \ + libxtst6 \ + procps \ + xauth \ + xvfb \ + # install text editors + vim-tiny \ + nano \ + # install emoji font + fonts-noto-color-emoji \ + # install Chinese fonts + # this list was copied from https://github.com/jim3ma/docker-leanote + fonts-arphic-bkai00mp \ + fonts-arphic-bsmi00lp \ + fonts-arphic-gbsn00lp \ + fonts-arphic-gkai00mp \ + fonts-arphic-ukai \ + fonts-arphic-uming \ + ttf-wqy-zenhei \ + ttf-wqy-microhei \ + xfonts-wqy \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM=xterm +# avoid million NPM install messages +ENV npm_config_loglevel=warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm=true + +RUN npm --version \ + && npm install -g yarn@latest --force \ + && yarn --version \ + && node -p process.versions \ + && node -p 'module.paths' \ + && echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" diff --git a/base/16.14.2-slim/README.md b/base/16.14.2-slim/README.md new file mode 100644 index 0000000000..f9838752d3 --- /dev/null +++ b/base/16.14.2-slim/README.md @@ -0,0 +1,18 @@ + +# cypress/base:16.14.2-slim + +A Docker image with all dependencies pre-installed. +Just add your NPM packages (including Cypress) and run the tests. +See [Cypress Docker docs](https://on.cypress.io/docker) and +[Cypress CI guide](https://on.cypress.io/ci). + +## Example + +Sample Dockerfile + +``` +FROM cypress/base:16.14.2-slim +RUN npm install --save-dev cypress +RUN $(npm bin)/cypress verify +RUN $(npm bin)/cypress run +``` diff --git a/base/16.14.2-slim/build.sh b/base/16.14.2-slim/build.sh new file mode 100755 index 0000000000..b80675da88 --- /dev/null +++ b/base/16.14.2-slim/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-base-image.js +set e+x + +# build image with Cypress dependencies +LOCAL_NAME=cypress/base:16.14.2-slim + +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/base/CHANGELOG.md b/base/CHANGELOG.md index 4f48e83fc5..7f0c8af104 100644 --- a/base/CHANGELOG.md +++ b/base/CHANGELOG.md @@ -73,3 +73,4 @@ | cypress/base:17.8.0 | 17.8.0 | Debian | [/17.8.0](17.8.0) | `🚫` | `🚫` | `🚫` | | cypress/base:14.17.6 | 14.17.6 | Debian | [/14.17.6](14.17.6) | `🚫` | `🚫` | `🚫` | | cypress/base:16.14.2 | 16.14.2 | Debian | [/16.14.2](16.14.2) | `🚫` | `🚫` | `🚫` | +| cypress/base:16.14.2-slim | 16.14.2 | Debian | [/16.14.2](16.14.2) | `🚫` | `🚫` | `🚫` | diff --git a/base/README.md b/base/README.md index ae535a0f1f..0dc744282f 100644 --- a/base/README.md +++ b/base/README.md @@ -84,7 +84,8 @@ Image `cypress/base:12` is tagged [`latest`](https://hub.docker.com/r/cypress/ba | cypress/base:16.14.0-slim | 16.14.0 | Debian | [/16.14.0](16.14.0) | `🚫` | `🚫` | `🚫` | | cypress/base:17.8.0 | 17.8.0 | Debian | [/17.8.0](17.8.0) | `🚫` | `🚫` | `🚫` | | cypress/base:14.17.6 | 14.17.6 | Debian | [/14.17.6](14.17.6) | `🚫` | `🚫` | `🚫` | -| cypress/base:16.14.2 | 16.14.2 | Debian | [/16.14.2](16.14.2) | `🚫` | `🚫` | `🚫` | +| cypress/base:16.14.2 | 16.14.2 | Debian | [/16.14.2](16.14.2) | `🚫` | `🚫` | `🚫` | +| cypress/base:16.14.2-slim | 16.14.2 | Debian | [/16.14.2](16.14.2) | `🚫` | `🚫` | `🚫` | ## ⚠️ Node.js Support diff --git a/buildspec.yml b/buildspec.yml index 613373d96c..e952e565af 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -1,38 +1,38 @@ version: 0.2 env: - variables: - PUBLIC_ECR_ALIAS: "cypress-io" + variables: + PUBLIC_ECR_ALIAS: "cypress-io" batch: - fast-fail: false - build-list: - - identifier: browsernode16140Chrome99Ff97 - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node16.14.0-chrome99-ff97" + fast-fail: false + build-list: + - identifier: base16142Slim + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/base" + IMAGE_DIR: "base" + IMAGE_TAG: "16.14.2-slim" phases: - pre_build: - commands: - - aws --version - - echo Check if $IMAGE_TAG is in ECR... - - ./find-ecr-image.sh $IMAGE_REPO_NAME $IMAGE_TAG -p - - echo Logging in to Amazon ECR... - - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com - - aws ecr-public get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin public.ecr.aws/$PUBLIC_ECR_ALIAS - build: - commands: - - echo Building the Docker image... - - cd $IMAGE_DIR/$IMAGE_TAG - - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG - post_build: - commands: - - echo Pushing the Docker image... - - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG \ No newline at end of file + pre_build: + commands: + - aws --version + - echo Check if $IMAGE_TAG is in ECR... + - ./find-ecr-image.sh $IMAGE_REPO_NAME $IMAGE_TAG -p + - echo Logging in to Amazon ECR... + - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com + - aws ecr-public get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin public.ecr.aws/$PUBLIC_ECR_ALIAS + build: + commands: + - echo Building the Docker image... + - cd $IMAGE_DIR/$IMAGE_TAG + - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . + - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG + post_build: + commands: + - echo Pushing the Docker image... + - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG diff --git a/circle.yml b/circle.yml index 758f38b5c9..b784bfd6b8 100644 --- a/circle.yml +++ b/circle.yml @@ -4,478 +4,476 @@ version: 2.1 orbs: - node: circleci/node@5.0.0 + node: circleci/node@5.0.0 commands: - halt-on-branch: - description: Halt current CircleCI job if not on master branch - steps: + halt-on-branch: + description: Halt current CircleCI job if not on master branch + steps: + - run: + name: Halting job if not on master branch + command: | + if [[ "$CIRCLE_BRANCH" != "master" ]]; then + echo "Not master branch, will skip the rest of commands" + circleci-agent step halt + else + echo "On master branch, can continue" + fi + + halt-if-docker-image-exists: + description: Halt current CircleCI job if Docker image exists already + parameters: + imageName: + type: string + description: Docker image name to test + steps: + - run: + name: Check if image << parameters.imageName >> exists or Docker hub does not respond + # using https://github.com/cypress-io/docker-image-not-found + # to check if Docker hub definitely does not have this image + command: | + if npx docker-image-not-found --repo << parameters.imageName >>; then + echo Docker hub says image << parameters.imageName >> does not exist + else + echo Docker hub has image << parameters.imageName >> or not responding + echo We should stop in this case + circleci-agent step halt + fi + + test-base-image: + description: Build a test image from base image and test it + parameters: + nodeVersion: + type: string + description: Node version to expect in the base image, starts with "v" + imageName: + type: string + description: Cypress base docker image to test + steps: + - run: + name: test image << parameters.imageName >> + no_output_timeout: "3m" + command: | + docker build -t cypress/test -\<> + RUN echo "current user: $(whoami)" + ENV CI=1 + WORKDIR /app + RUN npm init --yes + RUN npm install --save-dev cypress cypress-expect + RUN ./node_modules/.bin/cypress verify + RUN npx @bahmutov/cly init + # run Cypress by itself + RUN ./node_modules/.bin/cypress run + # run Cypress using module API and confirm number of passing tests + RUN ./node_modules/.bin/cypress-expect run --passing 1 + EOF + + - run: + name: test image << parameters.imageName >> using Kitchensink + no_output_timeout: "3m" + command: | + docker build -t cypress/test-kitchensink -\<> + RUN echo "current user: $(whoami)" + ENV CI=1 + WORKDIR /app + ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 + RUN npm init --yes + RUN npm install --save-dev cypress cypress-expect + RUN ./node_modules/.bin/cypress verify + RUN echo '{}' > cypress.json + # run Cypress and confirm minimum number of passing tets + RUN ./node_modules/.bin/cypress-expect run --min-passing 100 + EOF + + test-browser-image: + description: Build a test image from browser image and test it + parameters: + imageName: + type: string + description: Cypress browser docker image to test + chromeVersion: + type: string + default: "" + description: Chrome version to expect in the base image, starts with "Google Chrome XX" + firefoxVersion: + type: string + default: "" + description: Firefox version to expect in the base image, starts with "Mozilla Firefox XX" + edgeVersion: + type: string + default: "" + description: Edge version to expect in the base image, starts with "Microsoft Edge" + steps: + - when: + condition: << parameters.chromeVersion >> + steps: - run: - name: Halting job if not on master branch - command: | - if [[ "$CIRCLE_BRANCH" != "master" ]]; then - echo "Not master branch, will skip the rest of commands" - circleci-agent step halt - else - echo "On master branch, can continue" - fi - - halt-if-docker-image-exists: - description: Halt current CircleCI job if Docker image exists already - parameters: - imageName: - type: string - description: Docker image name to test - steps: + name: confirm image has Chrome << parameters.chromeVersion >> + # do not run Docker in the interactive mode - adds control characters! + # and use Bash regex string comparison + command: | + version=$(docker run << parameters.imageName >> google-chrome --version) + if [[ "$version" =~ ^"<< parameters.chromeVersion >>" ]]; then + echo "Image has the expected version of Chrome << parameters.chromeVersion >>" + echo "found $version" + else + echo "Problem: image has unexpected Chrome version" + echo "Expected << parameters.chromeVersion >> and got $version" + exit 1 + fi + + - when: + condition: << parameters.firefoxVersion >> + steps: - run: - name: Check if image << parameters.imageName >> exists or Docker hub does not respond - # using https://github.com/cypress-io/docker-image-not-found - # to check if Docker hub definitely does not have this image - command: | - if npx docker-image-not-found --repo << parameters.imageName >>; then - echo Docker hub says image << parameters.imageName >> does not exist - else - echo Docker hub has image << parameters.imageName >> or not responding - echo We should stop in this case - circleci-agent step halt - fi - - test-base-image: - description: Build a test image from base image and test it - parameters: - nodeVersion: - type: string - description: Node version to expect in the base image, starts with "v" - imageName: - type: string - description: Cypress base docker image to test - steps: + name: confirm the image has Firefox << parameters.firefoxVersion >> + command: | + version=$(docker run << parameters.imageName >> firefox --version) + if [[ "$version" =~ ^"<< parameters.firefoxVersion >>" ]]; then + echo "Image has the expected version of Firefox << parameters.firefoxVersion >>" + echo "found $version" + else + echo "Problem: image has unexpected Firefox version" + echo "Expected << parameters.firefoxVersion >> and got $version" + exit 1 + fi + + - when: + condition: << parameters.edgeVersion >> + steps: - run: - name: test image << parameters.imageName >> - no_output_timeout: '3m' - command: | - docker build -t cypress/test -\<> - RUN echo "current user: $(whoami)" - ENV CI=1 - WORKDIR /app - RUN npm init --yes - RUN npm install --save-dev cypress cypress-expect - RUN ./node_modules/.bin/cypress verify - RUN npx @bahmutov/cly init - # run Cypress by itself - RUN ./node_modules/.bin/cypress run - # run Cypress using module API and confirm number of passing tests - RUN ./node_modules/.bin/cypress-expect run --passing 1 - EOF - - - run: - name: test image << parameters.imageName >> using Kitchensink - no_output_timeout: '3m' - command: | - docker build -t cypress/test-kitchensink -\<> - RUN echo "current user: $(whoami)" - ENV CI=1 - WORKDIR /app - ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 - RUN npm init --yes - RUN npm install --save-dev cypress cypress-expect - RUN ./node_modules/.bin/cypress verify - RUN echo '{}' > cypress.json - # run Cypress and confirm minimum number of passing tets - RUN ./node_modules/.bin/cypress-expect run --min-passing 100 - EOF - - test-browser-image: - description: Build a test image from browser image and test it - parameters: - imageName: - type: string - description: Cypress browser docker image to test - chromeVersion: - type: string - default: '' - description: Chrome version to expect in the base image, starts with "Google Chrome XX" - firefoxVersion: - type: string - default: '' - description: Firefox version to expect in the base image, starts with "Mozilla Firefox XX" - edgeVersion: - type: string - default: '' - description: Edge version to expect in the base image, starts with "Microsoft Edge" - steps: - - when: - condition: << parameters.chromeVersion >> - steps: - - run: - name: confirm image has Chrome << parameters.chromeVersion >> - # do not run Docker in the interactive mode - adds control characters! - # and use Bash regex string comparison - command: | - version=$(docker run << parameters.imageName >> google-chrome --version) - if [[ "$version" =~ ^"<< parameters.chromeVersion >>" ]]; then - echo "Image has the expected version of Chrome << parameters.chromeVersion >>" - echo "found $version" - else - echo "Problem: image has unexpected Chrome version" - echo "Expected << parameters.chromeVersion >> and got $version" - exit 1 - fi - - - when: - condition: << parameters.firefoxVersion >> - steps: - - run: - name: confirm the image has Firefox << parameters.firefoxVersion >> - command: | - version=$(docker run << parameters.imageName >> firefox --version) - if [[ "$version" =~ ^"<< parameters.firefoxVersion >>" ]]; then - echo "Image has the expected version of Firefox << parameters.firefoxVersion >>" - echo "found $version" - else - echo "Problem: image has unexpected Firefox version" - echo "Expected << parameters.firefoxVersion >> and got $version" - exit 1 - fi - - - when: - condition: << parameters.edgeVersion >> - steps: - - run: - name: confirm the image has Edge << parameters.edgeVersion >> - command: | - version=$(docker run << parameters.imageName >> edge --version) - if [[ "$version" ]]; then - echo "Image has the a version of Edge << parameters.edgeVersion >>" - echo "found $version" - else - echo "Problem: image has no Edge version" - echo "Expected to have $version" - exit 1 - fi - + name: confirm the image has Edge << parameters.edgeVersion >> + command: | + version=$(docker run << parameters.imageName >> edge --version) + if [[ "$version" ]]; then + echo "Image has the a version of Edge << parameters.edgeVersion >>" + echo "found $version" + else + echo "Problem: image has no Edge version" + echo "Expected to have $version" + exit 1 + fi + + - run: + name: test image << parameters.imageName >> + no_output_timeout: "3m" + command: | + docker build -t cypress/test -\<> + RUN echo "current user: $(whoami)" + ENV CI=1 + WORKDIR /app + RUN npm init --yes + RUN npm install --save-dev cypress + RUN ./node_modules/.bin/cypress verify + RUN npx @bahmutov/cly init + EOF + + - run: + name: Test built-in Electron browser + no_output_timeout: "1m" + command: docker run cypress/test ./node_modules/.bin/cypress run + + - when: + condition: << parameters.chromeVersion >> + steps: - run: - name: test image << parameters.imageName >> - no_output_timeout: '3m' - command: | - docker build -t cypress/test -\<> - RUN echo "current user: $(whoami)" - ENV CI=1 - WORKDIR /app - RUN npm init --yes - RUN npm install --save-dev cypress - RUN ./node_modules/.bin/cypress verify - RUN npx @bahmutov/cly init - EOF + name: Test << parameters.chromeVersion >> + no_output_timeout: "1m" + command: docker run cypress/test ./node_modules/.bin/cypress run --browser chrome + - when: + condition: << parameters.firefoxVersion >> + steps: - run: - name: Test built-in Electron browser - no_output_timeout: '1m' - command: docker run cypress/test ./node_modules/.bin/cypress run - - - when: - condition: << parameters.chromeVersion >> - steps: - - run: - name: Test << parameters.chromeVersion >> - no_output_timeout: '1m' - command: docker run cypress/test ./node_modules/.bin/cypress run --browser chrome - - - when: - condition: << parameters.firefoxVersion >> - steps: - - run: - name: Test << parameters.firefoxVersion >> - no_output_timeout: '1m' - command: docker run cypress/test ./node_modules/.bin/cypress run --browser firefox - - - when: - condition: << parameters.edgeVersion >> - steps: - - run: - name: Test << parameters.edgeVersion >> - no_output_timeout: '1m' - command: docker run cypress/test ./node_modules/.bin/cypress run --browser edge + name: Test << parameters.firefoxVersion >> + no_output_timeout: "1m" + command: docker run cypress/test ./node_modules/.bin/cypress run --browser firefox + - when: + condition: << parameters.edgeVersion >> + steps: - run: - name: scaffold image << parameters.imageName >> using Kitchensink - no_output_timeout: '3m' - command: | - docker build -t cypress/test-kitchensink -\<> - RUN echo "current user: $(whoami)" - ENV CI=1 - WORKDIR /app - ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 - RUN npm init --yes - RUN npm install --save-dev cypress - RUN ./node_modules/.bin/cypress verify - RUN echo '{}' > cypress.json - EOF - - - when: - condition: << parameters.chromeVersion >> - steps: - - run: - name: Test << parameters.chromeVersion >> - no_output_timeout: '1m' - command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser chrome - - - when: - condition: << parameters.firefoxVersion >> - steps: - - run: - name: Test << parameters.firefoxVersion >> - no_output_timeout: '1m' - command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser firefox - - - when: - condition: << parameters.edgeVersion >> - steps: - - run: - name: Test << parameters.edgeVersion >> - no_output_timeout: '1m' - command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser edge - - test-included-image-versions: - description: Testing pre-installed versions - parameters: - cypressVersion: - type: string - description: Cypress version to test, like "4.0.0" - imageName: - type: string - description: Cypress included docker image to test - steps: + name: Test << parameters.edgeVersion >> + no_output_timeout: "1m" + command: docker run cypress/test ./node_modules/.bin/cypress run --browser edge + + - run: + name: scaffold image << parameters.imageName >> using Kitchensink + no_output_timeout: "3m" + command: | + docker build -t cypress/test-kitchensink -\<> + RUN echo "current user: $(whoami)" + ENV CI=1 + WORKDIR /app + ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 + RUN npm init --yes + RUN npm install --save-dev cypress + RUN ./node_modules/.bin/cypress verify + RUN echo '{}' > cypress.json + EOF + + - when: + condition: << parameters.chromeVersion >> + steps: - run: - name: 'Print versions' - command: docker run -it --entrypoint cypress cypress/included:<< parameters.cypressVersion >> version + name: Test << parameters.chromeVersion >> + no_output_timeout: "1m" + command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser chrome + - when: + condition: << parameters.firefoxVersion >> + steps: - run: - name: 'Print info' - command: docker run -it --entrypoint cypress cypress/included:<< parameters.cypressVersion >> info + name: Test << parameters.firefoxVersion >> + no_output_timeout: "1m" + command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser firefox + - when: + condition: << parameters.edgeVersion >> + steps: - run: - name: 'Check Node version' - command: | - export NODE_VERSION=$(docker run --entrypoint node cypress/included:<< parameters.cypressVersion >> --version) - export CYPRESS_NODE_VERSION=$(docker run --entrypoint cypress cypress/included:<< parameters.cypressVersion >> version --component node) - echo "Included Node $NODE_VERSION" - echo "Cypress includes Node $CYPRESS_NODE_VERSION" - # "node --version" returns something like "v12.1.2" - # and "cypres version ..." returns just "12.1.2" - if [ "$NODE_VERSION" = "v$CYPRESS_NODE_VERSION" ]; then - echo "Node versions match" - else - echo "Node version mismatch πŸ”₯" - # TODO make sure there are no extra characters in the versions - # https://github.com/cypress-io/cypress-docker-images/issues/411 - # exit 1 - fi - - test-included-image: - description: Testing Docker image with Cypress pre-installed - parameters: - cypressVersion: - type: string - description: Cypress version to test, like "4.0.0" - imageName: - type: string - description: Cypress included docker image to test - steps: - - run: - name: New test project and testing - no_output_timeout: '3m' - command: | - node --version - mkdir test - cd test - echo "Initializing test project" - npx @bahmutov/cly init --cypress-version << parameters.cypressVersion >> - - echo "Testing using Electron browser" - docker run -it -v $PWD:/e2e -w /e2e cypress/included:<< parameters.cypressVersion >> - - echo "Testing using Chrome browser" - docker run -it -v $PWD:/e2e -w /e2e cypress/included:<< parameters.cypressVersion >> --browser chrome - working_directory: /tmp - - test-included-image-using-kitchensink: - description: Testing Cypress pre-installed using Kitchensink - parameters: - cypressVersion: - type: string - description: Cypress version to test, like "4.0.0" - imageName: - type: string - description: Cypress included docker image to test - steps: - - run: - name: Testing Kitchensink - no_output_timeout: '3m' - command: | - node --version - mkdir test-kitchensink - cd test-kitchensink - - npm init -y - echo '{}' > cypress.json - - echo "Testing using Electron browser" - docker run -it -v $PWD:/e2e -w /e2e -e CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 cypress/included:<< parameters.cypressVersion >> - - echo "Testing using Chrome browser" - docker run -it -v $PWD:/e2e -w /e2e -e CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 cypress/included:<< parameters.cypressVersion >> --browser chrome - - working_directory: /tmp - - docker-push: - description: Log in and push a given image to Docker hub - parameters: - imageName: - type: string - description: Docker image name to push - steps: - # before pushing, let's check again that the Docker Hub does not have the image - # accidental rebuild and overwrite of an image is bad, since it can bump every tool - # https://github.com/cypress-io/cypress/issues/6335 - - halt-if-docker-image-exists: - imageName: << parameters.imageName >> - - run: - name: Pushing image << parameters.imageName >> to Docker Hub - command: | - echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin - docker push << parameters.imageName >> + name: Test << parameters.edgeVersion >> + no_output_timeout: "1m" + command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser edge + + test-included-image-versions: + description: Testing pre-installed versions + parameters: + cypressVersion: + type: string + description: Cypress version to test, like "4.0.0" + imageName: + type: string + description: Cypress included docker image to test + steps: + - run: + name: "Print versions" + command: docker run -it --entrypoint cypress cypress/included:<< parameters.cypressVersion >> version + + - run: + name: "Print info" + command: docker run -it --entrypoint cypress cypress/included:<< parameters.cypressVersion >> info + + - run: + name: "Check Node version" + command: | + export NODE_VERSION=$(docker run --entrypoint node cypress/included:<< parameters.cypressVersion >> --version) + export CYPRESS_NODE_VERSION=$(docker run --entrypoint cypress cypress/included:<< parameters.cypressVersion >> version --component node) + echo "Included Node $NODE_VERSION" + echo "Cypress includes Node $CYPRESS_NODE_VERSION" + # "node --version" returns something like "v12.1.2" + # and "cypres version ..." returns just "12.1.2" + if [ "$NODE_VERSION" = "v$CYPRESS_NODE_VERSION" ]; then + echo "Node versions match" + else + echo "Node version mismatch πŸ”₯" + # TODO make sure there are no extra characters in the versions + # https://github.com/cypress-io/cypress-docker-images/issues/411 + # exit 1 + fi + + test-included-image: + description: Testing Docker image with Cypress pre-installed + parameters: + cypressVersion: + type: string + description: Cypress version to test, like "4.0.0" + imageName: + type: string + description: Cypress included docker image to test + steps: + - run: + name: New test project and testing + no_output_timeout: "3m" + command: | + node --version + mkdir test + cd test + echo "Initializing test project" + npx @bahmutov/cly init --cypress-version << parameters.cypressVersion >> + + echo "Testing using Electron browser" + docker run -it -v $PWD:/e2e -w /e2e cypress/included:<< parameters.cypressVersion >> + + echo "Testing using Chrome browser" + docker run -it -v $PWD:/e2e -w /e2e cypress/included:<< parameters.cypressVersion >> --browser chrome + working_directory: /tmp + + test-included-image-using-kitchensink: + description: Testing Cypress pre-installed using Kitchensink + parameters: + cypressVersion: + type: string + description: Cypress version to test, like "4.0.0" + imageName: + type: string + description: Cypress included docker image to test + steps: + - run: + name: Testing Kitchensink + no_output_timeout: "3m" + command: | + node --version + mkdir test-kitchensink + cd test-kitchensink + + npm init -y + echo '{}' > cypress.json + + echo "Testing using Electron browser" + docker run -it -v $PWD:/e2e -w /e2e -e CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 cypress/included:<< parameters.cypressVersion >> + + echo "Testing using Chrome browser" + docker run -it -v $PWD:/e2e -w /e2e -e CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 cypress/included:<< parameters.cypressVersion >> --browser chrome + + working_directory: /tmp + + docker-push: + description: Log in and push a given image to Docker hub + parameters: + imageName: + type: string + description: Docker image name to push + steps: + # before pushing, let's check again that the Docker Hub does not have the image + # accidental rebuild and overwrite of an image is bad, since it can bump every tool + # https://github.com/cypress-io/cypress/issues/6335 + - halt-if-docker-image-exists: + imageName: << parameters.imageName >> + - run: + name: Pushing image << parameters.imageName >> to Docker Hub + command: | + echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin + docker push << parameters.imageName >> jobs: - lint-markdown: - executor: - name: node/default - tag: '12.22' - steps: - - checkout - - node/install-packages: - override-ci-command: yarn install --frozen-lockfile - - run: npm run check:markdown - - build-base-image: - machine: - image: ubuntu-2004:202111-02 - parameters: - dockerName: - type: string - description: Image name to build - default: cypress/base - dockerTag: - type: string - description: Image tag to build like "12.14.0" - steps: - - checkout - - halt-if-docker-image-exists: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - run: - name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> - command: | - docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . - working_directory: base/<< parameters.dockerTag >> - - - test-base-image: - nodeVersion: v<< parameters.dockerTag >> - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - halt-on-branch - - docker-push: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - build-browser-image: - machine: - image: ubuntu-2004:202111-02 - parameters: - dockerName: - type: string - description: Image name to build - default: cypress/browsers - dockerTag: - type: string - description: Image tag to build like "node12.4.0-chrome76" - chromeVersion: - type: string - default: '' - description: Chrome version to expect in the base image, starts with "Google Chrome XX" - firefoxVersion: - type: string - default: '' - description: Firefox version to expect in the base image, starts with "Mozilla Firefox XX" - edgeVersion: - type: string - default: '' - description: Edge version to expect in the base image, starts with "Microsoft Edge" - steps: - - checkout - - halt-if-docker-image-exists: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - run: - name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> - command: | - docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . - working_directory: browsers/<< parameters.dockerTag >> - - test-browser-image: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - chromeVersion: << parameters.chromeVersion >> - firefoxVersion: << parameters.firefoxVersion >> - edgeVersion: << parameters.edgeVersion >> - - halt-on-branch - - docker-push: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - build-included-image: - machine: - image: ubuntu-2004:202111-02 - parameters: - dockerName: - type: string - description: Image name to build - default: cypress/included - dockerTag: - type: string - description: Image tag to build, should match Cypress version, like "3.8.1" - steps: - - checkout - - halt-if-docker-image-exists: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - run: - name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> - command: | - docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . - working_directory: included/<< parameters.dockerTag >> - - - test-included-image-versions: - cypressVersion: << parameters.dockerTag >> - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - - test-included-image: - cypressVersion: << parameters.dockerTag >> - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - - test-included-image-using-kitchensink: - cypressVersion: << parameters.dockerTag >> - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - - halt-on-branch - - docker-push: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + lint-markdown: + executor: + name: node/default + tag: "12.22" + steps: + - checkout + - node/install-packages: + override-ci-command: yarn install --frozen-lockfile + - run: npm run check:markdown + + build-base-image: + machine: + image: ubuntu-2004:202111-02 + parameters: + dockerName: + type: string + description: Image name to build + default: cypress/base + dockerTag: + type: string + description: Image tag to build like "12.14.0" + steps: + - checkout + - halt-if-docker-image-exists: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + - run: + name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> + command: | + docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . + working_directory: base/<< parameters.dockerTag >> + + - test-base-image: + nodeVersion: v<< parameters.dockerTag >> + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + - halt-on-branch + - docker-push: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + + build-browser-image: + machine: + image: ubuntu-2004:202111-02 + parameters: + dockerName: + type: string + description: Image name to build + default: cypress/browsers + dockerTag: + type: string + description: Image tag to build like "node12.4.0-chrome76" + chromeVersion: + type: string + default: "" + description: Chrome version to expect in the base image, starts with "Google Chrome XX" + firefoxVersion: + type: string + default: "" + description: Firefox version to expect in the base image, starts with "Mozilla Firefox XX" + edgeVersion: + type: string + default: "" + description: Edge version to expect in the base image, starts with "Microsoft Edge" + steps: + - checkout + - halt-if-docker-image-exists: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + - run: + name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> + command: | + docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . + working_directory: browsers/<< parameters.dockerTag >> + - test-browser-image: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + chromeVersion: << parameters.chromeVersion >> + firefoxVersion: << parameters.firefoxVersion >> + edgeVersion: << parameters.edgeVersion >> + - halt-on-branch + - docker-push: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + + build-included-image: + machine: + image: ubuntu-2004:202111-02 + parameters: + dockerName: + type: string + description: Image name to build + default: cypress/included + dockerTag: + type: string + description: Image tag to build, should match Cypress version, like "3.8.1" + steps: + - checkout + - halt-if-docker-image-exists: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + - run: + name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> + command: | + docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . + working_directory: included/<< parameters.dockerTag >> + + - test-included-image-versions: + cypressVersion: << parameters.dockerTag >> + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + + - test-included-image: + cypressVersion: << parameters.dockerTag >> + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + + - test-included-image-using-kitchensink: + cypressVersion: << parameters.dockerTag >> + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + + - halt-on-branch + - docker-push: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> workflows: - version: 2 - lint: - jobs: - - lint-markdown - build-browser-images: - jobs: - - build-browser-image: - name: "browser node16.14.0-chrome99-ff97" - dockerTag: "node16.14.0-chrome99-ff97" - chromeVersion: "Google Chrome 99" - firefoxVersion: "Mozilla Firefox 97" \ No newline at end of file + version: 2 + lint: + jobs: + - lint-markdown + build-base-images: + jobs: + - build-base-image: + name: "base 16.14.2-slim" + dockerTag: "16.14.2-slim" From ce1f03df311df9c244257a988cfd64af099cdbeb Mon Sep 17 00:00:00 2001 From: Adam Murray Date: Tue, 19 Apr 2022 09:43:47 -0500 Subject: [PATCH 055/371] feat(browser): add new browser image off of latest 16.14.2 image with chrome/ff/edge (#648) * feat(browser): add browser image with updated 16.14.2 image and latest chrome/ff * feat(browser): add browser image with updated 16.14.2 image and latest chrome/ff/edge * docs: remove additional browser line * add edge deps. update browser image generation script to better handle deps. * update browser image generation script to better handle deps. * update docker image. remove extra image. * add git to browser image deps. * add 16.14.2-slim back * revert 16.14.2-slim changes * revert buildspec formatting changes * revert circle.yml formatting changes * add back missing image to readme and changelog --- base/README.md | 4 +- browsers/CHANGELOG.md | 5 +- browsers/README.md | 5 +- .../Dockerfile | 92 +++++++++++++++++++ .../README.md | 13 +++ .../build.sh | 8 ++ buildspec.yml | 8 +- circle.yml | 11 ++- scripts/generate-browser-image.js | 30 +++--- 9 files changed, 153 insertions(+), 23 deletions(-) create mode 100644 browsers/node16.14.2-slim-chrome100-ff99-edge/Dockerfile create mode 100644 browsers/node16.14.2-slim-chrome100-ff99-edge/README.md create mode 100755 browsers/node16.14.2-slim-chrome100-ff99-edge/build.sh diff --git a/base/README.md b/base/README.md index 0dc744282f..79557509bb 100644 --- a/base/README.md +++ b/base/README.md @@ -85,8 +85,8 @@ Image `cypress/base:12` is tagged [`latest`](https://hub.docker.com/r/cypress/ba | cypress/base:17.8.0 | 17.8.0 | Debian | [/17.8.0](17.8.0) | `🚫` | `🚫` | `🚫` | | cypress/base:14.17.6 | 14.17.6 | Debian | [/14.17.6](14.17.6) | `🚫` | `🚫` | `🚫` | | cypress/base:16.14.2 | 16.14.2 | Debian | [/16.14.2](16.14.2) | `🚫` | `🚫` | `🚫` | -| cypress/base:16.14.2-slim | 16.14.2 | Debian | [/16.14.2](16.14.2) | `🚫` | `🚫` | `🚫` | - +| cypress/base:16.14.2-slim | 16.14.2 | Debian | [/16.14.2](16.14.2) | `🚫` | `🚫` | `🚫` | + ## ⚠️ Node.js Support Cypress 4.0+ no longer supports Node.js versions below 8.0.0. See our [Migration Guide](https://on.cypress.io/migration-guide#Node-js-8-support). diff --git a/browsers/CHANGELOG.md b/browsers/CHANGELOG.md index 2b61fa3750..9926136099 100644 --- a/browsers/CHANGELOG.md +++ b/browsers/CHANGELOG.md @@ -37,4 +37,7 @@ Name + Tag | Base image | Chrome | Firefox | Edge [cypress/browsers:node17.8.0-chrome99-ff97-slim](./node17.8.0-chrome99-ff97-slim) | `cypress/base:17.8.0` | `99.0.4844.84` | `97.0.1` | `🚫` [cypress/browsers:node16.14.0-edge](./node16.14.0-edge) | `cypress/base:16.14.0` | `🚫` | `🚫` | `--edge` -[cypress/browsers:node16.14.0-chrome99-ff97](./node16.14.0-chrome99-ff97) | `cypress/base:16.14.0` | `99.0.4844.51` | `97.0.1` | `🚫` + +[cypress/browsers:node16.14.0-chrome99-ff97](./node16.14.0-chrome99-ff97) | `cypress/base:16.14.0-slim` | `99.0.4844.51` | `97.0.1` | `🚫` + +[cypress/browsers:node16.14.2-slim-chrome100-ff99-edge](./node16.14.2-slim-chrome100-ff99-edge) | `cypress/base:16.14.2` | `100.0.4896.88` | `99.0.1` | `--edge` \ No newline at end of file diff --git a/browsers/README.md b/browsers/README.md index b4df7008b5..c4856850b4 100644 --- a/browsers/README.md +++ b/browsers/README.md @@ -43,8 +43,11 @@ [cypress/browsers:node17.8.0-chrome99-ff97-slim](./node17.8.0-chrome99-ff97-slim) | `cypress/base:17.8.0` | `99.0.4844.84` | `97.0.1` | `🚫` [cypress/browsers:node16.14.0-edge](./node16.14.0-edge) | `cypress/base:16.14.0` | `🚫` | `🚫` | `--edge` -[cypress/browsers:node16.14.0-chrome99-ff97](./node16.14.0-chrome99-ff97) | `cypress/base:16.14.0-slim` | `99.0.4844.51` | `97.0.1` | `🚫` + +[cypress/browsers:node16.14.0-chrome99-ff97](./node16.14.0-chrome99-ff97) | `cypress/base:16.14.0` | `99.0.4844.51` | `97.0.1` | `🚫` +[cypress/browsers:node16.14.2-slim-chrome100-ff99-edge](./node16.14.2-slim-chrome100-ff99-edge) | `cypress/base:16.14.2` | `100.0.4896.88` | `99.0.1` | `--edge` + To find the available Chrome versions, check [https://chromium.cypress.io/](https://chromium.cypress.io/). ## Naming scheme diff --git a/browsers/node16.14.2-slim-chrome100-ff99-edge/Dockerfile b/browsers/node16.14.2-slim-chrome100-ff99-edge/Dockerfile new file mode 100644 index 0000000000..396ca35206 --- /dev/null +++ b/browsers/node16.14.2-slim-chrome100-ff99-edge/Dockerfile @@ -0,0 +1,92 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browser -- 16.14.2-slim --chrome=100.0.4896.88 --firefox=99.0.1 --edge +# +# build this image with command +# docker build -t cypress/browsers:node16.14.2-slim-chrome100-ff99-edge . +# +# +FROM cypress/base:16.14.2-slim + +USER root + +RUN node --version + +# Install dependencies +RUN apt-get update && \ + apt-get install -y \ + fonts-liberation \ + git \ + libcurl4 \ + libcurl3-gnutls \ + libcurl3-nss \ + xdg-utils \ + wget \ + curl \ + # firefox dependencies + bzip2 \ + # add codecs needed for video playback in firefox + # https://github.com/cypress-io/cypress-docker-images/issues/150 + mplayer \ + # edge dependencies + gnupg \ + dirmngr \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +# install libappindicator3-1 - not included with Debian 11 +RUN wget --no-verbose /usr/src/libappindicator3-1_0.4.92-7_amd64.deb "http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_amd64.deb" && \ + dpkg -i /usr/src/libappindicator3-1_0.4.92-7_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/libappindicator3-1_0.4.92-7_amd64.deb + +# install Chrome browser +RUN wget --no-verbose -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_100.0.4896.88-1_amd64.deb" && \ + dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/google-chrome-stable_current_amd64.deb + +# "fake" dbus address to prevent errors +# https://github.com/SeleniumHQ/docker-selenium/issues/87 +ENV DBUS_SESSION_BUS_ADDRESS=/dev/null + +# install Firefox browser +RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/99.0.1/linux-x86_64/en-US/firefox-99.0.1.tar.bz2 && \ + tar -C /opt -xjf /tmp/firefox.tar.bz2 && \ + rm /tmp/firefox.tar.bz2 && \ + ln -fs /opt/firefox/firefox /usr/bin/firefox + +RUN echo "Downloading Latest Edge version..." + +## Setup Edge +RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg +RUN install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/ +RUN sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-dev.list' +RUN rm microsoft.gpg + +## Install Edge +RUN apt-get update +RUN apt-get install -y microsoft-edge-dev + +# Add a link to the browser that allows Cypress to find it +RUN ln -s /usr/bin/microsoft-edge /usr/bin/edge + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "Chrome version: $(google-chrome --version) \n" \ + "Firefox version: $(firefox --version) \n" \ + "Edge version: $(edge --version) \n" \ + "git version: $(git --version) \n" \ + "whoami: $(whoami) \n" + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM=xterm +# avoid million NPM install messages +ENV npm_config_loglevel=warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm=true diff --git a/browsers/node16.14.2-slim-chrome100-ff99-edge/README.md b/browsers/node16.14.2-slim-chrome100-ff99-edge/README.md new file mode 100644 index 0000000000..ec18705852 --- /dev/null +++ b/browsers/node16.14.2-slim-chrome100-ff99-edge/README.md @@ -0,0 +1,13 @@ + + +# cypress/browsers:node16.14.2-slim-chrome100-ff99-edge + +A complete image with all operating system depedencies for Cypress, and Chrome 100.0.4896.88, Firefox 99.0.1, Edge --edge browsers. + +[Dockerfile](Dockerfile) + +**Note:** this image uses the `root` user. You might want to switch to nonroot user like `node` when running this container for security diff --git a/browsers/node16.14.2-slim-chrome100-ff99-edge/build.sh b/browsers/node16.14.2-slim-chrome100-ff99-edge/build.sh new file mode 100755 index 0000000000..13020d0ef2 --- /dev/null +++ b/browsers/node16.14.2-slim-chrome100-ff99-edge/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browser -- 16.14.2-slim --chrome=100.0.4896.88 --firefox=99.0.1 --edge +set e+x + +LOCAL_NAME=cypress/browsers:node16.14.2-slim-chrome100-ff99-edge +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/buildspec.yml b/buildspec.yml index e952e565af..ce8af16211 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,16 +6,16 @@ env: batch: fast-fail: false build-list: - - identifier: base16142Slim + - identifier: browsernode16142SlimChrome100Ff99Edge env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_MEDIUM variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "16.14.2-slim" + IMAGE_REPO_NAME: "cypress/browsers" + IMAGE_DIR: "browsers" + IMAGE_TAG: "node16.14.2-slim-chrome100-ff99-edge" phases: pre_build: diff --git a/circle.yml b/circle.yml index b784bfd6b8..18dee10f92 100644 --- a/circle.yml +++ b/circle.yml @@ -472,8 +472,11 @@ workflows: lint: jobs: - lint-markdown - build-base-images: + build-browser-images: jobs: - - build-base-image: - name: "base 16.14.2-slim" - dockerTag: "16.14.2-slim" + - build-browser-image: + name: "browser node16.14.2-slim-chrome100-ff99-edge" + dockerTag: "node16.14.2-slim-chrome100-ff99-edge" + chromeVersion: "Google Chrome 100" + firefoxVersion: "Mozilla Firefox 99" + edgeVersion: "Microsoft Edge" diff --git a/scripts/generate-browser-image.js b/scripts/generate-browser-image.js index 2592d328e3..d0232688d8 100644 --- a/scripts/generate-browser-image.js +++ b/scripts/generate-browser-image.js @@ -41,6 +41,18 @@ shelljs.mkdir(outputFolder) const folderName = outputFolder.split("/")[1] +const firefoxDependencies = ` + # firefox dependencies + bzip2 \\ + # add codecs needed for video playback in firefox + # https://github.com/cypress-io/cypress-docker-images/issues/150 + mplayer` + +const edgeDependencies = ` + # edge dependencies + gnupg \\ + dirmngr` + const chromeDownload = ` # install Chrome browser RUN wget --no-verbose -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${chromeVersion}-1_amd64.deb" && \\ @@ -49,14 +61,6 @@ RUN wget --no-verbose -O /usr/src/google-chrome-stable_current_amd64.deb "http:/ rm -f /usr/src/google-chrome-stable_current_amd64.deb` const firefoxDownload = ` -# firefox dependencies -RUN apt-get update && \\ - apt-get install -y \\ - bzip2 \\ - # add codecs needed for video playback in firefox - # https://github.com/cypress-io/cypress-docker-images/issues/150 - mplayer - # install Firefox browser RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/${firefoxVersion}/linux-x86_64/en-US/firefox-${firefoxVersion}.tar.bz2 && \\ tar -C /opt -xjf /tmp/firefox.tar.bz2 && \\ @@ -75,6 +79,7 @@ RUN rm microsoft.gpg ## Install Edge RUN apt-get update RUN apt-get install -y microsoft-edge-dev + # Add a link to the browser that allows Cypress to find it RUN ln -s /usr/bin/microsoft-edge /usr/bin/edge` @@ -100,12 +105,15 @@ RUN node --version RUN apt-get update && \\ apt-get install -y \\ fonts-liberation \\ + git \\ libcurl4 \\ libcurl3-gnutls \\ libcurl3-nss \\ xdg-utils \\ wget \\ curl \\ + ${firefoxVersion ? `${firefoxDependencies.trim()} \\` : `\\`} + ${edgeVersion ? `${edgeDependencies.trim()} \\` : `\\`} # clean up && rm -rf /var/lib/apt/lists/* \\ && apt-get clean @@ -116,15 +124,15 @@ RUN wget --no-verbose /usr/src/libappindicator3-1_0.4.92-7_amd64.deb "http://ftp apt-get install -f -y && \\ rm -f /usr/src/libappindicator3-1_0.4.92-7_amd64.deb -${chromeVersion ? chromeDownload : ""} +${chromeVersion ? chromeDownload.trim() : ""} # "fake" dbus address to prevent errors # https://github.com/SeleniumHQ/docker-selenium/issues/87 ENV DBUS_SESSION_BUS_ADDRESS=/dev/null -${firefoxVersion ? firefoxDownload : ""} +${firefoxVersion ? firefoxDownload.trim() : ""} -${edgeVersion ? edgeDownload : ""} +${edgeVersion ? edgeDownload.trim() : ""} # versions of local tools RUN echo " node version: $(node -v) \\n" \\ From a4f2e3b26f31b3cb23959be36e0c9450656bc2f6 Mon Sep 17 00:00:00 2001 From: Johan Klintberg Date: Fri, 22 Apr 2022 16:54:00 +0200 Subject: [PATCH 056/371] docs(readme.md): Fixing broken images table (#652) --- included/README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/included/README.md b/included/README.md index 28d602e5cb..83e09290a6 100644 --- a/included/README.md +++ b/included/README.md @@ -84,13 +84,9 @@ [cypress/included:9.4.1](9.4.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.5.0](9.5.0) | `cypress/browsers:node16.5.0-chrome97-ff96` [cypress/included:9.5.1](9.5.1) | `cypress/browsers:node16.5.0-chrome97-ff96` - [cypress/included:9.5.1-node16.14.0-slim-chrome99-ff97](9.5.1-node16.14.0-slim-chrome99-ff97) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` - [cypress/included:9.5.2](9.5.2) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` - [cypress/included:9.5.3](9.5.3) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` - [cypress/included:9.5.4](9.5.4) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: From bfef7fa9c039ef95e016f3cee7bddf4a67c0d9bd Mon Sep 17 00:00:00 2001 From: Ryan Manuel Date: Mon, 25 Apr 2022 13:05:04 -0500 Subject: [PATCH 057/371] feat(included): generate new image with version 9.6.0 (#653) --- buildspec.yml | 64 +-- circle.yml | 911 +++++++++++++++++++------------------- included/9.6.0/Dockerfile | 61 +++ included/9.6.0/README.md | 18 + included/9.6.0/build.sh | 8 + included/CHANGELOG.md | 2 + included/README.md | 8 +- 7 files changed, 582 insertions(+), 490 deletions(-) create mode 100644 included/9.6.0/Dockerfile create mode 100644 included/9.6.0/README.md create mode 100755 included/9.6.0/build.sh diff --git a/buildspec.yml b/buildspec.yml index ce8af16211..9a300c3877 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -1,38 +1,38 @@ version: 0.2 env: - variables: - PUBLIC_ECR_ALIAS: "cypress-io" + variables: + PUBLIC_ECR_ALIAS: "cypress-io" batch: - fast-fail: false - build-list: - - identifier: browsernode16142SlimChrome100Ff99Edge - env: - image: aws/codebuild/standard:5.0 - type: LINUX_CONTAINER - privileged-mode: true - compute-type: BUILD_GENERAL1_MEDIUM - variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node16.14.2-slim-chrome100-ff99-edge" + fast-fail: false + build-list: + - identifier: included960 + env: + image: aws/codebuild/standard:5.0 + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_MEDIUM + variables: + IMAGE_REPO_NAME: "cypress/included" + IMAGE_DIR: "included" + IMAGE_TAG: "9.6.0" phases: - pre_build: - commands: - - aws --version - - echo Check if $IMAGE_TAG is in ECR... - - ./find-ecr-image.sh $IMAGE_REPO_NAME $IMAGE_TAG -p - - echo Logging in to Amazon ECR... - - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com - - aws ecr-public get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin public.ecr.aws/$PUBLIC_ECR_ALIAS - build: - commands: - - echo Building the Docker image... - - cd $IMAGE_DIR/$IMAGE_TAG - - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG - post_build: - commands: - - echo Pushing the Docker image... - - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG + pre_build: + commands: + - aws --version + - echo Check if $IMAGE_TAG is in ECR... + - ./find-ecr-image.sh $IMAGE_REPO_NAME $IMAGE_TAG -p + - echo Logging in to Amazon ECR... + - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com + - aws ecr-public get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin public.ecr.aws/$PUBLIC_ECR_ALIAS + build: + commands: + - echo Building the Docker image... + - cd $IMAGE_DIR/$IMAGE_TAG + - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . + - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG + post_build: + commands: + - echo Pushing the Docker image... + - docker push public.ecr.aws/$PUBLIC_ECR_ALIAS/$IMAGE_REPO_NAME:$IMAGE_TAG \ No newline at end of file diff --git a/circle.yml b/circle.yml index 18dee10f92..e2ba07c155 100644 --- a/circle.yml +++ b/circle.yml @@ -4,479 +4,476 @@ version: 2.1 orbs: - node: circleci/node@5.0.0 + node: circleci/node@5.0.0 commands: - halt-on-branch: - description: Halt current CircleCI job if not on master branch - steps: - - run: - name: Halting job if not on master branch - command: | - if [[ "$CIRCLE_BRANCH" != "master" ]]; then - echo "Not master branch, will skip the rest of commands" - circleci-agent step halt - else - echo "On master branch, can continue" - fi - - halt-if-docker-image-exists: - description: Halt current CircleCI job if Docker image exists already - parameters: - imageName: - type: string - description: Docker image name to test - steps: - - run: - name: Check if image << parameters.imageName >> exists or Docker hub does not respond - # using https://github.com/cypress-io/docker-image-not-found - # to check if Docker hub definitely does not have this image - command: | - if npx docker-image-not-found --repo << parameters.imageName >>; then - echo Docker hub says image << parameters.imageName >> does not exist - else - echo Docker hub has image << parameters.imageName >> or not responding - echo We should stop in this case - circleci-agent step halt - fi - - test-base-image: - description: Build a test image from base image and test it - parameters: - nodeVersion: - type: string - description: Node version to expect in the base image, starts with "v" - imageName: - type: string - description: Cypress base docker image to test - steps: - - run: - name: test image << parameters.imageName >> - no_output_timeout: "3m" - command: | - docker build -t cypress/test -\<> - RUN echo "current user: $(whoami)" - ENV CI=1 - WORKDIR /app - RUN npm init --yes - RUN npm install --save-dev cypress cypress-expect - RUN ./node_modules/.bin/cypress verify - RUN npx @bahmutov/cly init - # run Cypress by itself - RUN ./node_modules/.bin/cypress run - # run Cypress using module API and confirm number of passing tests - RUN ./node_modules/.bin/cypress-expect run --passing 1 - EOF - - - run: - name: test image << parameters.imageName >> using Kitchensink - no_output_timeout: "3m" - command: | - docker build -t cypress/test-kitchensink -\<> - RUN echo "current user: $(whoami)" - ENV CI=1 - WORKDIR /app - ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 - RUN npm init --yes - RUN npm install --save-dev cypress cypress-expect - RUN ./node_modules/.bin/cypress verify - RUN echo '{}' > cypress.json - # run Cypress and confirm minimum number of passing tets - RUN ./node_modules/.bin/cypress-expect run --min-passing 100 - EOF - - test-browser-image: - description: Build a test image from browser image and test it - parameters: - imageName: - type: string - description: Cypress browser docker image to test - chromeVersion: - type: string - default: "" - description: Chrome version to expect in the base image, starts with "Google Chrome XX" - firefoxVersion: - type: string - default: "" - description: Firefox version to expect in the base image, starts with "Mozilla Firefox XX" - edgeVersion: - type: string - default: "" - description: Edge version to expect in the base image, starts with "Microsoft Edge" - steps: - - when: - condition: << parameters.chromeVersion >> - steps: + halt-on-branch: + description: Halt current CircleCI job if not on master branch + steps: - run: - name: confirm image has Chrome << parameters.chromeVersion >> - # do not run Docker in the interactive mode - adds control characters! - # and use Bash regex string comparison - command: | - version=$(docker run << parameters.imageName >> google-chrome --version) - if [[ "$version" =~ ^"<< parameters.chromeVersion >>" ]]; then - echo "Image has the expected version of Chrome << parameters.chromeVersion >>" - echo "found $version" - else - echo "Problem: image has unexpected Chrome version" - echo "Expected << parameters.chromeVersion >> and got $version" - exit 1 - fi - - - when: - condition: << parameters.firefoxVersion >> - steps: + name: Halting job if not on master branch + command: | + if [[ "$CIRCLE_BRANCH" != "master" ]]; then + echo "Not master branch, will skip the rest of commands" + circleci-agent step halt + else + echo "On master branch, can continue" + fi + + halt-if-docker-image-exists: + description: Halt current CircleCI job if Docker image exists already + parameters: + imageName: + type: string + description: Docker image name to test + steps: - run: - name: confirm the image has Firefox << parameters.firefoxVersion >> - command: | - version=$(docker run << parameters.imageName >> firefox --version) - if [[ "$version" =~ ^"<< parameters.firefoxVersion >>" ]]; then - echo "Image has the expected version of Firefox << parameters.firefoxVersion >>" - echo "found $version" - else - echo "Problem: image has unexpected Firefox version" - echo "Expected << parameters.firefoxVersion >> and got $version" - exit 1 - fi - - - when: - condition: << parameters.edgeVersion >> - steps: + name: Check if image << parameters.imageName >> exists or Docker hub does not respond + # using https://github.com/cypress-io/docker-image-not-found + # to check if Docker hub definitely does not have this image + command: | + if npx docker-image-not-found --repo << parameters.imageName >>; then + echo Docker hub says image << parameters.imageName >> does not exist + else + echo Docker hub has image << parameters.imageName >> or not responding + echo We should stop in this case + circleci-agent step halt + fi + + test-base-image: + description: Build a test image from base image and test it + parameters: + nodeVersion: + type: string + description: Node version to expect in the base image, starts with "v" + imageName: + type: string + description: Cypress base docker image to test + steps: - run: - name: confirm the image has Edge << parameters.edgeVersion >> - command: | - version=$(docker run << parameters.imageName >> edge --version) - if [[ "$version" ]]; then - echo "Image has the a version of Edge << parameters.edgeVersion >>" - echo "found $version" - else - echo "Problem: image has no Edge version" - echo "Expected to have $version" - exit 1 - fi - - - run: - name: test image << parameters.imageName >> - no_output_timeout: "3m" - command: | - docker build -t cypress/test -\<> - RUN echo "current user: $(whoami)" - ENV CI=1 - WORKDIR /app - RUN npm init --yes - RUN npm install --save-dev cypress - RUN ./node_modules/.bin/cypress verify - RUN npx @bahmutov/cly init - EOF - - - run: - name: Test built-in Electron browser - no_output_timeout: "1m" - command: docker run cypress/test ./node_modules/.bin/cypress run - - - when: - condition: << parameters.chromeVersion >> - steps: + name: test image << parameters.imageName >> + no_output_timeout: '3m' + command: | + docker build -t cypress/test -\<> + RUN echo "current user: $(whoami)" + ENV CI=1 + WORKDIR /app + RUN npm init --yes + RUN npm install --save-dev cypress cypress-expect + RUN ./node_modules/.bin/cypress verify + RUN npx @bahmutov/cly init + # run Cypress by itself + RUN ./node_modules/.bin/cypress run + # run Cypress using module API and confirm number of passing tests + RUN ./node_modules/.bin/cypress-expect run --passing 1 + EOF + + - run: + name: test image << parameters.imageName >> using Kitchensink + no_output_timeout: '3m' + command: | + docker build -t cypress/test-kitchensink -\<> + RUN echo "current user: $(whoami)" + ENV CI=1 + WORKDIR /app + ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 + RUN npm init --yes + RUN npm install --save-dev cypress cypress-expect + RUN ./node_modules/.bin/cypress verify + RUN echo '{}' > cypress.json + # run Cypress and confirm minimum number of passing tets + RUN ./node_modules/.bin/cypress-expect run --min-passing 100 + EOF + + test-browser-image: + description: Build a test image from browser image and test it + parameters: + imageName: + type: string + description: Cypress browser docker image to test + chromeVersion: + type: string + default: '' + description: Chrome version to expect in the base image, starts with "Google Chrome XX" + firefoxVersion: + type: string + default: '' + description: Firefox version to expect in the base image, starts with "Mozilla Firefox XX" + edgeVersion: + type: string + default: '' + description: Edge version to expect in the base image, starts with "Microsoft Edge" + steps: + - when: + condition: << parameters.chromeVersion >> + steps: + - run: + name: confirm image has Chrome << parameters.chromeVersion >> + # do not run Docker in the interactive mode - adds control characters! + # and use Bash regex string comparison + command: | + version=$(docker run << parameters.imageName >> google-chrome --version) + if [[ "$version" =~ ^"<< parameters.chromeVersion >>" ]]; then + echo "Image has the expected version of Chrome << parameters.chromeVersion >>" + echo "found $version" + else + echo "Problem: image has unexpected Chrome version" + echo "Expected << parameters.chromeVersion >> and got $version" + exit 1 + fi + + - when: + condition: << parameters.firefoxVersion >> + steps: + - run: + name: confirm the image has Firefox << parameters.firefoxVersion >> + command: | + version=$(docker run << parameters.imageName >> firefox --version) + if [[ "$version" =~ ^"<< parameters.firefoxVersion >>" ]]; then + echo "Image has the expected version of Firefox << parameters.firefoxVersion >>" + echo "found $version" + else + echo "Problem: image has unexpected Firefox version" + echo "Expected << parameters.firefoxVersion >> and got $version" + exit 1 + fi + + - when: + condition: << parameters.edgeVersion >> + steps: + - run: + name: confirm the image has Edge << parameters.edgeVersion >> + command: | + version=$(docker run << parameters.imageName >> edge --version) + if [[ "$version" ]]; then + echo "Image has the a version of Edge << parameters.edgeVersion >>" + echo "found $version" + else + echo "Problem: image has no Edge version" + echo "Expected to have $version" + exit 1 + fi + - run: - name: Test << parameters.chromeVersion >> - no_output_timeout: "1m" - command: docker run cypress/test ./node_modules/.bin/cypress run --browser chrome + name: test image << parameters.imageName >> + no_output_timeout: '3m' + command: | + docker build -t cypress/test -\<> + RUN echo "current user: $(whoami)" + ENV CI=1 + WORKDIR /app + RUN npm init --yes + RUN npm install --save-dev cypress + RUN ./node_modules/.bin/cypress verify + RUN npx @bahmutov/cly init + EOF - - when: - condition: << parameters.firefoxVersion >> - steps: - run: - name: Test << parameters.firefoxVersion >> - no_output_timeout: "1m" - command: docker run cypress/test ./node_modules/.bin/cypress run --browser firefox + name: Test built-in Electron browser + no_output_timeout: '1m' + command: docker run cypress/test ./node_modules/.bin/cypress run + + - when: + condition: << parameters.chromeVersion >> + steps: + - run: + name: Test << parameters.chromeVersion >> + no_output_timeout: '1m' + command: docker run cypress/test ./node_modules/.bin/cypress run --browser chrome + + - when: + condition: << parameters.firefoxVersion >> + steps: + - run: + name: Test << parameters.firefoxVersion >> + no_output_timeout: '1m' + command: docker run cypress/test ./node_modules/.bin/cypress run --browser firefox + + - when: + condition: << parameters.edgeVersion >> + steps: + - run: + name: Test << parameters.edgeVersion >> + no_output_timeout: '1m' + command: docker run cypress/test ./node_modules/.bin/cypress run --browser edge - - when: - condition: << parameters.edgeVersion >> - steps: - run: - name: Test << parameters.edgeVersion >> - no_output_timeout: "1m" - command: docker run cypress/test ./node_modules/.bin/cypress run --browser edge - - - run: - name: scaffold image << parameters.imageName >> using Kitchensink - no_output_timeout: "3m" - command: | - docker build -t cypress/test-kitchensink -\<> - RUN echo "current user: $(whoami)" - ENV CI=1 - WORKDIR /app - ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 - RUN npm init --yes - RUN npm install --save-dev cypress - RUN ./node_modules/.bin/cypress verify - RUN echo '{}' > cypress.json - EOF - - - when: - condition: << parameters.chromeVersion >> - steps: + name: scaffold image << parameters.imageName >> using Kitchensink + no_output_timeout: '3m' + command: | + docker build -t cypress/test-kitchensink -\<> + RUN echo "current user: $(whoami)" + ENV CI=1 + WORKDIR /app + ENV CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 + RUN npm init --yes + RUN npm install --save-dev cypress + RUN ./node_modules/.bin/cypress verify + RUN echo '{}' > cypress.json + EOF + + - when: + condition: << parameters.chromeVersion >> + steps: + - run: + name: Test << parameters.chromeVersion >> + no_output_timeout: '1m' + command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser chrome + + - when: + condition: << parameters.firefoxVersion >> + steps: + - run: + name: Test << parameters.firefoxVersion >> + no_output_timeout: '1m' + command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser firefox + + - when: + condition: << parameters.edgeVersion >> + steps: + - run: + name: Test << parameters.edgeVersion >> + no_output_timeout: '1m' + command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser edge + + test-included-image-versions: + description: Testing pre-installed versions + parameters: + cypressVersion: + type: string + description: Cypress version to test, like "4.0.0" + imageName: + type: string + description: Cypress included docker image to test + steps: - run: - name: Test << parameters.chromeVersion >> - no_output_timeout: "1m" - command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser chrome + name: 'Print versions' + command: docker run -it --entrypoint cypress cypress/included:<< parameters.cypressVersion >> version - - when: - condition: << parameters.firefoxVersion >> - steps: - run: - name: Test << parameters.firefoxVersion >> - no_output_timeout: "1m" - command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser firefox + name: 'Print info' + command: docker run -it --entrypoint cypress cypress/included:<< parameters.cypressVersion >> info - - when: - condition: << parameters.edgeVersion >> - steps: - run: - name: Test << parameters.edgeVersion >> - no_output_timeout: "1m" - command: docker run cypress/test-kitchensink ./node_modules/.bin/cypress run --browser edge - - test-included-image-versions: - description: Testing pre-installed versions - parameters: - cypressVersion: - type: string - description: Cypress version to test, like "4.0.0" - imageName: - type: string - description: Cypress included docker image to test - steps: - - run: - name: "Print versions" - command: docker run -it --entrypoint cypress cypress/included:<< parameters.cypressVersion >> version - - - run: - name: "Print info" - command: docker run -it --entrypoint cypress cypress/included:<< parameters.cypressVersion >> info - - - run: - name: "Check Node version" - command: | - export NODE_VERSION=$(docker run --entrypoint node cypress/included:<< parameters.cypressVersion >> --version) - export CYPRESS_NODE_VERSION=$(docker run --entrypoint cypress cypress/included:<< parameters.cypressVersion >> version --component node) - echo "Included Node $NODE_VERSION" - echo "Cypress includes Node $CYPRESS_NODE_VERSION" - # "node --version" returns something like "v12.1.2" - # and "cypres version ..." returns just "12.1.2" - if [ "$NODE_VERSION" = "v$CYPRESS_NODE_VERSION" ]; then - echo "Node versions match" - else - echo "Node version mismatch πŸ”₯" - # TODO make sure there are no extra characters in the versions - # https://github.com/cypress-io/cypress-docker-images/issues/411 - # exit 1 - fi - - test-included-image: - description: Testing Docker image with Cypress pre-installed - parameters: - cypressVersion: - type: string - description: Cypress version to test, like "4.0.0" - imageName: - type: string - description: Cypress included docker image to test - steps: - - run: - name: New test project and testing - no_output_timeout: "3m" - command: | - node --version - mkdir test - cd test - echo "Initializing test project" - npx @bahmutov/cly init --cypress-version << parameters.cypressVersion >> - - echo "Testing using Electron browser" - docker run -it -v $PWD:/e2e -w /e2e cypress/included:<< parameters.cypressVersion >> - - echo "Testing using Chrome browser" - docker run -it -v $PWD:/e2e -w /e2e cypress/included:<< parameters.cypressVersion >> --browser chrome - working_directory: /tmp - - test-included-image-using-kitchensink: - description: Testing Cypress pre-installed using Kitchensink - parameters: - cypressVersion: - type: string - description: Cypress version to test, like "4.0.0" - imageName: - type: string - description: Cypress included docker image to test - steps: - - run: - name: Testing Kitchensink - no_output_timeout: "3m" - command: | - node --version - mkdir test-kitchensink - cd test-kitchensink - - npm init -y - echo '{}' > cypress.json - - echo "Testing using Electron browser" - docker run -it -v $PWD:/e2e -w /e2e -e CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 cypress/included:<< parameters.cypressVersion >> - - echo "Testing using Chrome browser" - docker run -it -v $PWD:/e2e -w /e2e -e CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 cypress/included:<< parameters.cypressVersion >> --browser chrome - - working_directory: /tmp - - docker-push: - description: Log in and push a given image to Docker hub - parameters: - imageName: - type: string - description: Docker image name to push - steps: - # before pushing, let's check again that the Docker Hub does not have the image - # accidental rebuild and overwrite of an image is bad, since it can bump every tool - # https://github.com/cypress-io/cypress/issues/6335 - - halt-if-docker-image-exists: - imageName: << parameters.imageName >> - - run: - name: Pushing image << parameters.imageName >> to Docker Hub - command: | - echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin - docker push << parameters.imageName >> + name: 'Check Node version' + command: | + export NODE_VERSION=$(docker run --entrypoint node cypress/included:<< parameters.cypressVersion >> --version) + export CYPRESS_NODE_VERSION=$(docker run --entrypoint cypress cypress/included:<< parameters.cypressVersion >> version --component node) + echo "Included Node $NODE_VERSION" + echo "Cypress includes Node $CYPRESS_NODE_VERSION" + # "node --version" returns something like "v12.1.2" + # and "cypres version ..." returns just "12.1.2" + if [ "$NODE_VERSION" = "v$CYPRESS_NODE_VERSION" ]; then + echo "Node versions match" + else + echo "Node version mismatch πŸ”₯" + # TODO make sure there are no extra characters in the versions + # https://github.com/cypress-io/cypress-docker-images/issues/411 + # exit 1 + fi + + test-included-image: + description: Testing Docker image with Cypress pre-installed + parameters: + cypressVersion: + type: string + description: Cypress version to test, like "4.0.0" + imageName: + type: string + description: Cypress included docker image to test + steps: + - run: + name: New test project and testing + no_output_timeout: '3m' + command: | + node --version + mkdir test + cd test + echo "Initializing test project" + npx @bahmutov/cly init --cypress-version << parameters.cypressVersion >> + + echo "Testing using Electron browser" + docker run -it -v $PWD:/e2e -w /e2e cypress/included:<< parameters.cypressVersion >> + + echo "Testing using Chrome browser" + docker run -it -v $PWD:/e2e -w /e2e cypress/included:<< parameters.cypressVersion >> --browser chrome + working_directory: /tmp + + test-included-image-using-kitchensink: + description: Testing Cypress pre-installed using Kitchensink + parameters: + cypressVersion: + type: string + description: Cypress version to test, like "4.0.0" + imageName: + type: string + description: Cypress included docker image to test + steps: + - run: + name: Testing Kitchensink + no_output_timeout: '3m' + command: | + node --version + mkdir test-kitchensink + cd test-kitchensink + + npm init -y + echo '{}' > cypress.json + + echo "Testing using Electron browser" + docker run -it -v $PWD:/e2e -w /e2e -e CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 cypress/included:<< parameters.cypressVersion >> + + echo "Testing using Chrome browser" + docker run -it -v $PWD:/e2e -w /e2e -e CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 cypress/included:<< parameters.cypressVersion >> --browser chrome + + working_directory: /tmp + + docker-push: + description: Log in and push a given image to Docker hub + parameters: + imageName: + type: string + description: Docker image name to push + steps: + # before pushing, let's check again that the Docker Hub does not have the image + # accidental rebuild and overwrite of an image is bad, since it can bump every tool + # https://github.com/cypress-io/cypress/issues/6335 + - halt-if-docker-image-exists: + imageName: << parameters.imageName >> + - run: + name: Pushing image << parameters.imageName >> to Docker Hub + command: | + echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin + docker push << parameters.imageName >> jobs: - lint-markdown: - executor: - name: node/default - tag: "12.22" - steps: - - checkout - - node/install-packages: - override-ci-command: yarn install --frozen-lockfile - - run: npm run check:markdown - - build-base-image: - machine: - image: ubuntu-2004:202111-02 - parameters: - dockerName: - type: string - description: Image name to build - default: cypress/base - dockerTag: - type: string - description: Image tag to build like "12.14.0" - steps: - - checkout - - halt-if-docker-image-exists: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - run: - name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> - command: | - docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . - working_directory: base/<< parameters.dockerTag >> - - - test-base-image: - nodeVersion: v<< parameters.dockerTag >> - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - halt-on-branch - - docker-push: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - build-browser-image: - machine: - image: ubuntu-2004:202111-02 - parameters: - dockerName: - type: string - description: Image name to build - default: cypress/browsers - dockerTag: - type: string - description: Image tag to build like "node12.4.0-chrome76" - chromeVersion: - type: string - default: "" - description: Chrome version to expect in the base image, starts with "Google Chrome XX" - firefoxVersion: - type: string - default: "" - description: Firefox version to expect in the base image, starts with "Mozilla Firefox XX" - edgeVersion: - type: string - default: "" - description: Edge version to expect in the base image, starts with "Microsoft Edge" - steps: - - checkout - - halt-if-docker-image-exists: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - run: - name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> - command: | - docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . - working_directory: browsers/<< parameters.dockerTag >> - - test-browser-image: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - chromeVersion: << parameters.chromeVersion >> - firefoxVersion: << parameters.firefoxVersion >> - edgeVersion: << parameters.edgeVersion >> - - halt-on-branch - - docker-push: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - build-included-image: - machine: - image: ubuntu-2004:202111-02 - parameters: - dockerName: - type: string - description: Image name to build - default: cypress/included - dockerTag: - type: string - description: Image tag to build, should match Cypress version, like "3.8.1" - steps: - - checkout - - halt-if-docker-image-exists: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - run: - name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> - command: | - docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . - working_directory: included/<< parameters.dockerTag >> - - - test-included-image-versions: - cypressVersion: << parameters.dockerTag >> - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - - test-included-image: - cypressVersion: << parameters.dockerTag >> - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - - test-included-image-using-kitchensink: - cypressVersion: << parameters.dockerTag >> - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - - halt-on-branch - - docker-push: - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + lint-markdown: + executor: + name: node/default + tag: '12.22' + steps: + - checkout + - node/install-packages: + override-ci-command: yarn install --frozen-lockfile + - run: npm run check:markdown + + build-base-image: + machine: + image: ubuntu-2004:202111-02 + parameters: + dockerName: + type: string + description: Image name to build + default: cypress/base + dockerTag: + type: string + description: Image tag to build like "12.14.0" + steps: + - checkout + - halt-if-docker-image-exists: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + - run: + name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> + command: | + docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . + working_directory: base/<< parameters.dockerTag >> + + - test-base-image: + nodeVersion: v<< parameters.dockerTag >> + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + - halt-on-branch + - docker-push: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + + build-browser-image: + machine: + image: ubuntu-2004:202111-02 + parameters: + dockerName: + type: string + description: Image name to build + default: cypress/browsers + dockerTag: + type: string + description: Image tag to build like "node12.4.0-chrome76" + chromeVersion: + type: string + default: '' + description: Chrome version to expect in the base image, starts with "Google Chrome XX" + firefoxVersion: + type: string + default: '' + description: Firefox version to expect in the base image, starts with "Mozilla Firefox XX" + edgeVersion: + type: string + default: '' + description: Edge version to expect in the base image, starts with "Microsoft Edge" + steps: + - checkout + - halt-if-docker-image-exists: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + - run: + name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> + command: | + docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . + working_directory: browsers/<< parameters.dockerTag >> + - test-browser-image: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + chromeVersion: << parameters.chromeVersion >> + firefoxVersion: << parameters.firefoxVersion >> + edgeVersion: << parameters.edgeVersion >> + - halt-on-branch + - docker-push: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + + build-included-image: + machine: + image: ubuntu-2004:202111-02 + parameters: + dockerName: + type: string + description: Image name to build + default: cypress/included + dockerTag: + type: string + description: Image tag to build, should match Cypress version, like "3.8.1" + steps: + - checkout + - halt-if-docker-image-exists: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + - run: + name: building Docker image << parameters.dockerName >>:<< parameters.dockerTag >> + command: | + docker build -t << parameters.dockerName >>:<< parameters.dockerTag >> . + working_directory: included/<< parameters.dockerTag >> + + - test-included-image-versions: + cypressVersion: << parameters.dockerTag >> + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + + - test-included-image: + cypressVersion: << parameters.dockerTag >> + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + + - test-included-image-using-kitchensink: + cypressVersion: << parameters.dockerTag >> + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> + + - halt-on-branch + - docker-push: + imageName: << parameters.dockerName >>:<< parameters.dockerTag >> workflows: - version: 2 - lint: - jobs: - - lint-markdown - build-browser-images: - jobs: - - build-browser-image: - name: "browser node16.14.2-slim-chrome100-ff99-edge" - dockerTag: "node16.14.2-slim-chrome100-ff99-edge" - chromeVersion: "Google Chrome 100" - firefoxVersion: "Mozilla Firefox 99" - edgeVersion: "Microsoft Edge" + version: 2 + lint: + jobs: + - lint-markdown + build-included-images: + jobs: + - build-included-image: + name: "included 9.6.0" + dockerTag: "9.6.0" \ No newline at end of file diff --git a/included/9.6.0/Dockerfile b/included/9.6.0/Dockerfile new file mode 100644 index 0000000000..4a81f64642 --- /dev/null +++ b/included/9.6.0/Dockerfile @@ -0,0 +1,61 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.6.0 cypress/browsers:node16.14.2-slim-chrome100-ff99-edge +# +# build this image with command +# docker build -t cypress/included:9.6.0 . +# +FROM cypress/browsers:node16.14.2-slim-chrome100-ff99-edge + +# Update the dependencies to get the latest and greatest (and safest!) packages. +RUN apt update && apt upgrade -y + +# avoid too many progress messages +# https://github.com/cypress-io/cypress/issues/1243 +ENV CI=1 \ +# disable shared memory X11 affecting Cypress v4 and Chrome +# https://github.com/cypress-io/cypress-docker-images/issues/270 + QT_X11_NO_MITSHM=1 \ + _X11_NO_MITSHM=1 \ + _MITSHM=0 \ + # point Cypress at the /root/cache no matter what user account is used + # see https://on.cypress.io/caching + CYPRESS_CACHE_FOLDER=/root/.cache/Cypress + +# should be root user +RUN echo "whoami: $(whoami)" \ + && npm config -g set user $(whoami) \ + # command "id" should print: + # uid=0(root) gid=0(root) groups=0(root) + # which means the current user is root + && id \ + && npm install -g "cypress@9.6.0" \ + && cypress verify \ + # Cypress cache and installed version + # should be in the root user's home folder + && cypress cache path \ + && cypress cache list \ + && cypress info \ + && cypress version \ + # give every user read access to the "/root" folder where the binary is cached + # we really only need to worry about the top folder, fortunately + && ls -la /root \ + && chmod 755 /root \ + # always grab the latest Yarn + # otherwise the base image might have old versions + # NPM does not need to be installed as it is already included with Node. + && npm i -g yarn@latest \ + # Show where Node loads required modules from + && node -p 'module.paths' \ + # should print Cypress version + # plus Electron and bundled Node versions + && cypress version \ + && echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" \ + "chrome: $(google-chrome --version || true) \n" \ + "firefox: $(firefox --version || true) \n" + +ENTRYPOINT ["cypress", "run"] diff --git a/included/9.6.0/README.md b/included/9.6.0/README.md new file mode 100644 index 0000000000..ddcf5e59c0 --- /dev/null +++ b/included/9.6.0/README.md @@ -0,0 +1,18 @@ + + +# cypress/included:9.6.0 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.6.0 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/9.6.0/build.sh b/included/9.6.0/build.sh new file mode 100755 index 0000000000..4911430cbe --- /dev/null +++ b/included/9.6.0/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.6.0 cypress/browsers:node16.14.2-slim-chrome100-ff99-edge +set e+x + +LOCAL_NAME=cypress/included:9.6.0 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/included/CHANGELOG.md b/included/CHANGELOG.md index 604cdad57b..7097d0b04c 100644 --- a/included/CHANGELOG.md +++ b/included/CHANGELOG.md @@ -86,3 +86,5 @@ Name + Tag | Base image [cypress/included:9.5.3](9.5.3) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` [cypress/included:9.5.4](9.5.4) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` + +[cypress/included:9.6.0](9.6.0) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` diff --git a/included/README.md b/included/README.md index 83e09290a6..c9133ba4a2 100644 --- a/included/README.md +++ b/included/README.md @@ -84,10 +84,16 @@ [cypress/included:9.4.1](9.4.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.5.0](9.5.0) | `cypress/browsers:node16.5.0-chrome97-ff96` [cypress/included:9.5.1](9.5.1) | `cypress/browsers:node16.5.0-chrome97-ff96` + [cypress/included:9.5.1-node16.14.0-slim-chrome99-ff97](9.5.1-node16.14.0-slim-chrome99-ff97) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` + [cypress/included:9.5.2](9.5.2) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` + [cypress/included:9.5.3](9.5.3) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` -[cypress/included:9.5.4](9.5.4) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` + +[cypress/included:9.5.4](9.5.4) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` + +[cypress/included:9.6.0](9.6.0) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: From 125ba6809b681ad08e0c1bf180fbeba6b434fcbc Mon Sep 17 00:00:00 2001 From: Emily Rohrbough Date: Wed, 27 Apr 2022 12:33:27 -0500 Subject: [PATCH 058/371] Fix Markdown Table (#656) --- browsers/README.md | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/browsers/README.md b/browsers/README.md index c4856850b4..f1c0befcda 100644 --- a/browsers/README.md +++ b/browsers/README.md @@ -34,18 +34,11 @@ [cypress/browsers:node14.17.0-chrome91-ff89](./node14.17.0-chrome91-ff89) | `cypress/base:14.17.0` | `91.0.4472.114` | `89.0.2` [cypress/browsers:node16.5.0-chrome94-ff93](./node16.5.0-chrome94-ff93) | `cypress/base:16.5.0` | `94.0.4606.71` | `93.0` [cypress/browsers:node16.14.0-slim-chrome99-ff97](./node16.14.0-slim-chrome99-ff97) | `cypress/base:16.14.0` | `99.0.4844.51` | `97.0.1` | `🚫` - [cypress/browsers:node14.17.6-chrome100-ff98](./node14.17.6-chrome100-ff98) | `cypress/base:14.17.6` | `100.0.4896.60` | `98.0.2` | `🚫` - - [cypress/browsers:node16.13.2-chrome100-ff98](./node16.13.2-chrome100-ff98) | `cypress/base:16.13.2` | `100.0.4896.60` | `98.0.2` | `🚫` - [cypress/browsers:node17.8.0-chrome99-ff97-slim](./node17.8.0-chrome99-ff97-slim) | `cypress/base:17.8.0` | `99.0.4844.84` | `97.0.1` | `🚫` - -[cypress/browsers:node16.14.0-edge](./node16.14.0-edge) | `cypress/base:16.14.0` | `🚫` | `🚫` | `--edge` - +[cypress/browsers:node16.14.0-edge](./node16.14.0-edge) | `cypress/base:16.14.0` | `🚫` | `🚫` | `--edge` [cypress/browsers:node16.14.0-chrome99-ff97](./node16.14.0-chrome99-ff97) | `cypress/base:16.14.0` | `99.0.4844.51` | `97.0.1` | `🚫` - [cypress/browsers:node16.14.2-slim-chrome100-ff99-edge](./node16.14.2-slim-chrome100-ff99-edge) | `cypress/base:16.14.2` | `100.0.4896.88` | `99.0.1` | `--edge` To find the available Chrome versions, check [https://chromium.cypress.io/](https://chromium.cypress.io/). From 6dc0fef054dd5172395fa51cff9521782541302d Mon Sep 17 00:00:00 2001 From: Ryan Manuel Date: Mon, 9 May 2022 13:24:19 -0500 Subject: [PATCH 059/371] feat(included): generate new image with version 9.6.1 (#659) --- buildspec.yml | 4 +-- circle.yml | 4 +-- included/9.6.1/Dockerfile | 61 +++++++++++++++++++++++++++++++++++++++ included/9.6.1/README.md | 18 ++++++++++++ included/9.6.1/build.sh | 8 +++++ included/CHANGELOG.md | 2 ++ included/README.md | 4 ++- 7 files changed, 96 insertions(+), 5 deletions(-) create mode 100644 included/9.6.1/Dockerfile create mode 100644 included/9.6.1/README.md create mode 100755 included/9.6.1/build.sh diff --git a/buildspec.yml b/buildspec.yml index 9a300c3877..90bea5647a 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,7 +6,7 @@ env: batch: fast-fail: false build-list: - - identifier: included960 + - identifier: included961 env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER @@ -15,7 +15,7 @@ batch: variables: IMAGE_REPO_NAME: "cypress/included" IMAGE_DIR: "included" - IMAGE_TAG: "9.6.0" + IMAGE_TAG: "9.6.1" phases: pre_build: diff --git a/circle.yml b/circle.yml index e2ba07c155..3538f4f0f8 100644 --- a/circle.yml +++ b/circle.yml @@ -475,5 +475,5 @@ workflows: build-included-images: jobs: - build-included-image: - name: "included 9.6.0" - dockerTag: "9.6.0" \ No newline at end of file + name: "included 9.6.1" + dockerTag: "9.6.1" \ No newline at end of file diff --git a/included/9.6.1/Dockerfile b/included/9.6.1/Dockerfile new file mode 100644 index 0000000000..391452e6c2 --- /dev/null +++ b/included/9.6.1/Dockerfile @@ -0,0 +1,61 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.6.1 cypress/browsers:node16.14.2-slim-chrome100-ff99-edge +# +# build this image with command +# docker build -t cypress/included:9.6.1 . +# +FROM cypress/browsers:node16.14.2-slim-chrome100-ff99-edge + +# Update the dependencies to get the latest and greatest (and safest!) packages. +RUN apt update && apt upgrade -y + +# avoid too many progress messages +# https://github.com/cypress-io/cypress/issues/1243 +ENV CI=1 \ +# disable shared memory X11 affecting Cypress v4 and Chrome +# https://github.com/cypress-io/cypress-docker-images/issues/270 + QT_X11_NO_MITSHM=1 \ + _X11_NO_MITSHM=1 \ + _MITSHM=0 \ + # point Cypress at the /root/cache no matter what user account is used + # see https://on.cypress.io/caching + CYPRESS_CACHE_FOLDER=/root/.cache/Cypress + +# should be root user +RUN echo "whoami: $(whoami)" \ + && npm config -g set user $(whoami) \ + # command "id" should print: + # uid=0(root) gid=0(root) groups=0(root) + # which means the current user is root + && id \ + && npm install -g "cypress@9.6.1" \ + && cypress verify \ + # Cypress cache and installed version + # should be in the root user's home folder + && cypress cache path \ + && cypress cache list \ + && cypress info \ + && cypress version \ + # give every user read access to the "/root" folder where the binary is cached + # we really only need to worry about the top folder, fortunately + && ls -la /root \ + && chmod 755 /root \ + # always grab the latest Yarn + # otherwise the base image might have old versions + # NPM does not need to be installed as it is already included with Node. + && npm i -g yarn@latest \ + # Show where Node loads required modules from + && node -p 'module.paths' \ + # should print Cypress version + # plus Electron and bundled Node versions + && cypress version \ + && echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" \ + "chrome: $(google-chrome --version || true) \n" \ + "firefox: $(firefox --version || true) \n" + +ENTRYPOINT ["cypress", "run"] diff --git a/included/9.6.1/README.md b/included/9.6.1/README.md new file mode 100644 index 0000000000..6a96680c17 --- /dev/null +++ b/included/9.6.1/README.md @@ -0,0 +1,18 @@ + + +# cypress/included:9.6.1 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.6.1 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/9.6.1/build.sh b/included/9.6.1/build.sh new file mode 100755 index 0000000000..cbef495c6d --- /dev/null +++ b/included/9.6.1/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.6.1 cypress/browsers:node16.14.2-slim-chrome100-ff99-edge +set e+x + +LOCAL_NAME=cypress/included:9.6.1 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/included/CHANGELOG.md b/included/CHANGELOG.md index 7097d0b04c..2acd838771 100644 --- a/included/CHANGELOG.md +++ b/included/CHANGELOG.md @@ -88,3 +88,5 @@ Name + Tag | Base image [cypress/included:9.5.4](9.5.4) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` [cypress/included:9.6.0](9.6.0) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` + +[cypress/included:9.6.1](9.6.1) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` diff --git a/included/README.md b/included/README.md index c9133ba4a2..2b9cb7693e 100644 --- a/included/README.md +++ b/included/README.md @@ -93,7 +93,9 @@ [cypress/included:9.5.4](9.5.4) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` -[cypress/included:9.6.0](9.6.0) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` +[cypress/included:9.6.0](9.6.0) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` + +[cypress/included:9.6.1](9.6.1) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: From 52240d63645931647f28500882333b551bdbe6d9 Mon Sep 17 00:00:00 2001 From: Adam Murray Date: Wed, 11 May 2022 10:40:42 -0500 Subject: [PATCH 060/371] feat(base): add updated 14.17.6-slim image (#661) --- base/14.17.6-slim/Dockerfile | 61 ++++++++++++++++++++++++++++++++++++ base/14.17.6-slim/README.md | 18 +++++++++++ base/14.17.6-slim/build.sh | 8 +++++ base/CHANGELOG.md | 1 + base/README.md | 3 +- buildspec.yml | 8 ++--- circle.yml | 8 ++--- 7 files changed, 98 insertions(+), 9 deletions(-) create mode 100644 base/14.17.6-slim/Dockerfile create mode 100644 base/14.17.6-slim/README.md create mode 100755 base/14.17.6-slim/build.sh diff --git a/base/14.17.6-slim/Dockerfile b/base/14.17.6-slim/Dockerfile new file mode 100644 index 0000000000..1e8258b4de --- /dev/null +++ b/base/14.17.6-slim/Dockerfile @@ -0,0 +1,61 @@ +# WARNING: this file was autogenerated by generate-base-image.js +# contains all dependencies for running Cypress.io Test Runner +# https://on.cypress.io/docker and https://on.cypress.io/ci +# +# build it with command +# docker build -t cypress/base:14.17.6-slim . +# +FROM node:14.17.6-buster-slim + +RUN apt-get update && \ + apt-get install --no-install-recommends -y \ + libgtk2.0-0 \ + libgtk-3-0 \ + libnotify-dev \ + libgconf-2-4 \ + libgbm-dev \ + libnss3 \ + libxss1 \ + libasound2 \ + libxtst6 \ + procps \ + xauth \ + xvfb \ + # install text editors + vim-tiny \ + nano \ + # install emoji font + fonts-noto-color-emoji \ + # install Chinese fonts + # this list was copied from https://github.com/jim3ma/docker-leanote + fonts-arphic-bkai00mp \ + fonts-arphic-bsmi00lp \ + fonts-arphic-gbsn00lp \ + fonts-arphic-gkai00mp \ + fonts-arphic-ukai \ + fonts-arphic-uming \ + ttf-wqy-zenhei \ + ttf-wqy-microhei \ + xfonts-wqy \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM=xterm +# avoid million NPM install messages +ENV npm_config_loglevel=warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm=true + +RUN npm --version \ + && npm install -g yarn@latest --force \ + && yarn --version \ + && node -p process.versions \ + && node -p 'module.paths' \ + && echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" diff --git a/base/14.17.6-slim/README.md b/base/14.17.6-slim/README.md new file mode 100644 index 0000000000..b44c3d4f99 --- /dev/null +++ b/base/14.17.6-slim/README.md @@ -0,0 +1,18 @@ + +# cypress/base:14.17.6-slim + +A Docker image with all dependencies pre-installed. +Just add your NPM packages (including Cypress) and run the tests. +See [Cypress Docker docs](https://on.cypress.io/docker) and +[Cypress CI guide](https://on.cypress.io/ci). + +## Example + +Sample Dockerfile + +``` +FROM cypress/base:14.17.6-slim +RUN npm install --save-dev cypress +RUN $(npm bin)/cypress verify +RUN $(npm bin)/cypress run +``` diff --git a/base/14.17.6-slim/build.sh b/base/14.17.6-slim/build.sh new file mode 100755 index 0000000000..1e38ae3149 --- /dev/null +++ b/base/14.17.6-slim/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-base-image.js +set e+x + +# build image with Cypress dependencies +LOCAL_NAME=cypress/base:14.17.6-slim + +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/base/CHANGELOG.md b/base/CHANGELOG.md index 7f0c8af104..966f0557ad 100644 --- a/base/CHANGELOG.md +++ b/base/CHANGELOG.md @@ -74,3 +74,4 @@ | cypress/base:14.17.6 | 14.17.6 | Debian | [/14.17.6](14.17.6) | `🚫` | `🚫` | `🚫` | | cypress/base:16.14.2 | 16.14.2 | Debian | [/16.14.2](16.14.2) | `🚫` | `🚫` | `🚫` | | cypress/base:16.14.2-slim | 16.14.2 | Debian | [/16.14.2](16.14.2) | `🚫` | `🚫` | `🚫` | +| cypress/base:14.17.6-slim | 14.17.6 | Debian | [/14.17.6](14.17.6) | `🚫` | `🚫` | `🚫` | diff --git a/base/README.md b/base/README.md index 79557509bb..5c9baf434b 100644 --- a/base/README.md +++ b/base/README.md @@ -86,7 +86,8 @@ Image `cypress/base:12` is tagged [`latest`](https://hub.docker.com/r/cypress/ba | cypress/base:14.17.6 | 14.17.6 | Debian | [/14.17.6](14.17.6) | `🚫` | `🚫` | `🚫` | | cypress/base:16.14.2 | 16.14.2 | Debian | [/16.14.2](16.14.2) | `🚫` | `🚫` | `🚫` | | cypress/base:16.14.2-slim | 16.14.2 | Debian | [/16.14.2](16.14.2) | `🚫` | `🚫` | `🚫` | - +| cypress/base:14.17.6-slim | 14.17.6 | Debian | [/14.17.6](14.17.6) | `🚫` | `🚫` | `🚫` | + ## ⚠️ Node.js Support Cypress 4.0+ no longer supports Node.js versions below 8.0.0. See our [Migration Guide](https://on.cypress.io/migration-guide#Node-js-8-support). diff --git a/buildspec.yml b/buildspec.yml index 90bea5647a..2555b641e1 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,16 +6,16 @@ env: batch: fast-fail: false build-list: - - identifier: included961 + - identifier: base14176Slim env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_MEDIUM variables: - IMAGE_REPO_NAME: "cypress/included" - IMAGE_DIR: "included" - IMAGE_TAG: "9.6.1" + IMAGE_REPO_NAME: "cypress/base" + IMAGE_DIR: "base" + IMAGE_TAG: "14.17.6-slim" phases: pre_build: diff --git a/circle.yml b/circle.yml index 3538f4f0f8..f2a785a2d6 100644 --- a/circle.yml +++ b/circle.yml @@ -472,8 +472,8 @@ workflows: lint: jobs: - lint-markdown - build-included-images: + build-base-images: jobs: - - build-included-image: - name: "included 9.6.1" - dockerTag: "9.6.1" \ No newline at end of file + - build-base-image: + name: "base 14.17.6-slim" + dockerTag: "14.17.6-slim" \ No newline at end of file From cb87665632c44d36b1116f0baf0926c7273778e5 Mon Sep 17 00:00:00 2001 From: Adam Murray Date: Wed, 11 May 2022 14:14:01 -0500 Subject: [PATCH 061/371] feat(browsers): add updated 14.17.6-slim image (#663) * fix: fix browser changelog markdown * feat(browsers) add 14.17.6 base with latest browsers --- browsers/CHANGELOG.md | 10 +- browsers/README.md | 9 +- .../Dockerfile | 92 +++++++++++++++++++ .../README.md | 13 +++ .../build.sh | 8 ++ buildspec.yml | 8 +- circle.yml | 11 ++- 7 files changed, 131 insertions(+), 20 deletions(-) create mode 100644 browsers/node14.17.6-slim-chrome100-ff99-edge/Dockerfile create mode 100644 browsers/node14.17.6-slim-chrome100-ff99-edge/README.md create mode 100755 browsers/node14.17.6-slim-chrome100-ff99-edge/build.sh diff --git a/browsers/CHANGELOG.md b/browsers/CHANGELOG.md index 9926136099..96d824cd3a 100644 --- a/browsers/CHANGELOG.md +++ b/browsers/CHANGELOG.md @@ -28,16 +28,10 @@ Name + Tag | Base image | Chrome | Firefox | Edge [cypress/browsers:node14.17.0-chrome91-ff89](./node14.17.0-chrome91-ff89) | `cypress/base:14.17.0` | `91.0.4472.114` | `89.0.2` [cypress/browsers:node16.5.0-chrome94-ff93](./node16.5.0-chrome94-ff93) | `cypress/base:16.5.0` | `94.0.4606.71` | `93.0` [cypress/browsers:node16.14.0-slim-chrome99-ff97](./node16.14.0-slim-chrome99-ff97) | `cypress/base:16.14.0` | `99.0.4844.51` | `97.0.1` | `🚫` - [cypress/browsers:node14.17.6-chrome100-ff98](./node14.17.6-chrome100-ff98) | `cypress/base:14.17.6` | `100.0.4896.60` | `98.0.2` | `🚫` - - [cypress/browsers:node16.13.2-chrome100-ff98](./node16.13.2-chrome100-ff98) | `cypress/base:16.13.2` | `100.0.4896.60` | `98.0.2` | `🚫` - [cypress/browsers:node17.8.0-chrome99-ff97-slim](./node17.8.0-chrome99-ff97-slim) | `cypress/base:17.8.0` | `99.0.4844.84` | `97.0.1` | `🚫` - [cypress/browsers:node16.14.0-edge](./node16.14.0-edge) | `cypress/base:16.14.0` | `🚫` | `🚫` | `--edge` - [cypress/browsers:node16.14.0-chrome99-ff97](./node16.14.0-chrome99-ff97) | `cypress/base:16.14.0-slim` | `99.0.4844.51` | `97.0.1` | `🚫` - -[cypress/browsers:node16.14.2-slim-chrome100-ff99-edge](./node16.14.2-slim-chrome100-ff99-edge) | `cypress/base:16.14.2` | `100.0.4896.88` | `99.0.1` | `--edge` \ No newline at end of file +[cypress/browsers:node16.14.2-slim-chrome100-ff99-edge](./node16.14.2-slim-chrome100-ff99-edge) | `cypress/base:16.14.2` | `100.0.4896.88` | `99.0.1` | `--edge` +[cypress/browsers:node14.17.6-slim-chrome100-ff99-edge](./node14.17.6-slim-chrome100-ff99-edge) | `cypress/base:14.17.6` | `100.0.4896.88` | `99.0.1` | `--edge` diff --git a/browsers/README.md b/browsers/README.md index f1c0befcda..32e6cc7a16 100644 --- a/browsers/README.md +++ b/browsers/README.md @@ -37,10 +37,11 @@ [cypress/browsers:node14.17.6-chrome100-ff98](./node14.17.6-chrome100-ff98) | `cypress/base:14.17.6` | `100.0.4896.60` | `98.0.2` | `🚫` [cypress/browsers:node16.13.2-chrome100-ff98](./node16.13.2-chrome100-ff98) | `cypress/base:16.13.2` | `100.0.4896.60` | `98.0.2` | `🚫` [cypress/browsers:node17.8.0-chrome99-ff97-slim](./node17.8.0-chrome99-ff97-slim) | `cypress/base:17.8.0` | `99.0.4844.84` | `97.0.1` | `🚫` -[cypress/browsers:node16.14.0-edge](./node16.14.0-edge) | `cypress/base:16.14.0` | `🚫` | `🚫` | `--edge` -[cypress/browsers:node16.14.0-chrome99-ff97](./node16.14.0-chrome99-ff97) | `cypress/base:16.14.0` | `99.0.4844.51` | `97.0.1` | `🚫` -[cypress/browsers:node16.14.2-slim-chrome100-ff99-edge](./node16.14.2-slim-chrome100-ff99-edge) | `cypress/base:16.14.2` | `100.0.4896.88` | `99.0.1` | `--edge` - +[cypress/browsers:node16.14.0-edge](./node16.14.0-edge) | `cypress/base:16.14.0` | `🚫` | `🚫` | `--edge` +[cypress/browsers:node16.14.0-chrome99-ff97](./node16.14.0-chrome99-ff97) | `cypress/base:16.14.0-slim` | `99.0.4844.51` | `97.0.1` | `🚫` +[cypress/browsers:node16.14.2-slim-chrome100-ff99-edge](./node16.14.2-slim-chrome100-ff99-edge) | `cypress/base:16.14.2` | `100.0.4896.88` | `99.0.1` | `--edge` +[cypress/browsers:node14.17.6-slim-chrome100-ff99-edge](./node14.17.6-slim-chrome100-ff99-edge) | `cypress/base:14.17.6` | `100.0.4896.88` | `99.0.1` | `--edge` + To find the available Chrome versions, check [https://chromium.cypress.io/](https://chromium.cypress.io/). ## Naming scheme diff --git a/browsers/node14.17.6-slim-chrome100-ff99-edge/Dockerfile b/browsers/node14.17.6-slim-chrome100-ff99-edge/Dockerfile new file mode 100644 index 0000000000..f75de0d1be --- /dev/null +++ b/browsers/node14.17.6-slim-chrome100-ff99-edge/Dockerfile @@ -0,0 +1,92 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browser -- 14.17.6-slim --chrome=100.0.4896.88 --firefox=99.0.1 --edge +# +# build this image with command +# docker build -t cypress/browsers:node14.17.6-slim-chrome100-ff99-edge . +# +# +FROM cypress/base:14.17.6-slim + +USER root + +RUN node --version + +# Install dependencies +RUN apt-get update && \ + apt-get install -y \ + fonts-liberation \ + git \ + libcurl4 \ + libcurl3-gnutls \ + libcurl3-nss \ + xdg-utils \ + wget \ + curl \ + # firefox dependencies + bzip2 \ + # add codecs needed for video playback in firefox + # https://github.com/cypress-io/cypress-docker-images/issues/150 + mplayer \ + # edge dependencies + gnupg \ + dirmngr \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +# install libappindicator3-1 - not included with Debian 11 +RUN wget --no-verbose /usr/src/libappindicator3-1_0.4.92-7_amd64.deb "http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_amd64.deb" && \ + dpkg -i /usr/src/libappindicator3-1_0.4.92-7_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/libappindicator3-1_0.4.92-7_amd64.deb + +# install Chrome browser +RUN wget --no-verbose -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_100.0.4896.88-1_amd64.deb" && \ + dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/google-chrome-stable_current_amd64.deb + +# "fake" dbus address to prevent errors +# https://github.com/SeleniumHQ/docker-selenium/issues/87 +ENV DBUS_SESSION_BUS_ADDRESS=/dev/null + +# install Firefox browser +RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/99.0.1/linux-x86_64/en-US/firefox-99.0.1.tar.bz2 && \ + tar -C /opt -xjf /tmp/firefox.tar.bz2 && \ + rm /tmp/firefox.tar.bz2 && \ + ln -fs /opt/firefox/firefox /usr/bin/firefox + +RUN echo "Downloading Latest Edge version..." + +## Setup Edge +RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg +RUN install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/ +RUN sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-dev.list' +RUN rm microsoft.gpg + +## Install Edge +RUN apt-get update +RUN apt-get install -y microsoft-edge-dev + +# Add a link to the browser that allows Cypress to find it +RUN ln -s /usr/bin/microsoft-edge /usr/bin/edge + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "Chrome version: $(google-chrome --version) \n" \ + "Firefox version: $(firefox --version) \n" \ + "Edge version: $(edge --version) \n" \ + "git version: $(git --version) \n" \ + "whoami: $(whoami) \n" + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM=xterm +# avoid million NPM install messages +ENV npm_config_loglevel=warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm=true diff --git a/browsers/node14.17.6-slim-chrome100-ff99-edge/README.md b/browsers/node14.17.6-slim-chrome100-ff99-edge/README.md new file mode 100644 index 0000000000..bb126bc35b --- /dev/null +++ b/browsers/node14.17.6-slim-chrome100-ff99-edge/README.md @@ -0,0 +1,13 @@ + + +# cypress/browsers:node14.17.6-slim-chrome100-ff99-edge + +A complete image with all operating system depedencies for Cypress, and Chrome 100.0.4896.88, Firefox 99.0.1, Edge --edge browsers. + +[Dockerfile](Dockerfile) + +**Note:** this image uses the `root` user. You might want to switch to nonroot user like `node` when running this container for security diff --git a/browsers/node14.17.6-slim-chrome100-ff99-edge/build.sh b/browsers/node14.17.6-slim-chrome100-ff99-edge/build.sh new file mode 100755 index 0000000000..3ac02e94e8 --- /dev/null +++ b/browsers/node14.17.6-slim-chrome100-ff99-edge/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browser -- 14.17.6-slim --chrome=100.0.4896.88 --firefox=99.0.1 --edge +set e+x + +LOCAL_NAME=cypress/browsers:node14.17.6-slim-chrome100-ff99-edge +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/buildspec.yml b/buildspec.yml index 2555b641e1..a35c128e6a 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,16 +6,16 @@ env: batch: fast-fail: false build-list: - - identifier: base14176Slim + - identifier: browsernode14176SlimChrome100Ff99Edge env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_MEDIUM variables: - IMAGE_REPO_NAME: "cypress/base" - IMAGE_DIR: "base" - IMAGE_TAG: "14.17.6-slim" + IMAGE_REPO_NAME: "cypress/browsers" + IMAGE_DIR: "browsers" + IMAGE_TAG: "node14.17.6-slim-chrome100-ff99-edge" phases: pre_build: diff --git a/circle.yml b/circle.yml index f2a785a2d6..e03cbf5010 100644 --- a/circle.yml +++ b/circle.yml @@ -472,8 +472,11 @@ workflows: lint: jobs: - lint-markdown - build-base-images: + build-browser-images: jobs: - - build-base-image: - name: "base 14.17.6-slim" - dockerTag: "14.17.6-slim" \ No newline at end of file + - build-browser-image: + name: "browser node14.17.6-slim-chrome100-ff99-edge" + dockerTag: "node14.17.6-slim-chrome100-ff99-edge" + chromeVersion: "Google Chrome 100" + firefoxVersion: "Mozilla Firefox 99" + edgeVersion: "Microsoft Edge" \ No newline at end of file From 027b221fd5126674bf4888795e64c7704566d726 Mon Sep 17 00:00:00 2001 From: pwo3 Date: Fri, 20 May 2022 21:54:48 +0200 Subject: [PATCH 062/371] feat(browsers): generate new image with version node14.19.0-chrome100-ff99-edge (#664) --- browsers/CHANGELOG.md | 1 + browsers/README.md | 3 +- .../Dockerfile | 92 +++++++++++++++++++ .../node14.19.0-chrome100-ff99-edge/README.md | 13 +++ .../node14.19.0-chrome100-ff99-edge/build.sh | 8 ++ buildspec.yml | 4 +- circle.yml | 4 +- 7 files changed, 120 insertions(+), 5 deletions(-) create mode 100644 browsers/node14.19.0-chrome100-ff99-edge/Dockerfile create mode 100644 browsers/node14.19.0-chrome100-ff99-edge/README.md create mode 100755 browsers/node14.19.0-chrome100-ff99-edge/build.sh diff --git a/browsers/CHANGELOG.md b/browsers/CHANGELOG.md index 96d824cd3a..1ee5f86c81 100644 --- a/browsers/CHANGELOG.md +++ b/browsers/CHANGELOG.md @@ -35,3 +35,4 @@ Name + Tag | Base image | Chrome | Firefox | Edge [cypress/browsers:node16.14.0-chrome99-ff97](./node16.14.0-chrome99-ff97) | `cypress/base:16.14.0-slim` | `99.0.4844.51` | `97.0.1` | `🚫` [cypress/browsers:node16.14.2-slim-chrome100-ff99-edge](./node16.14.2-slim-chrome100-ff99-edge) | `cypress/base:16.14.2` | `100.0.4896.88` | `99.0.1` | `--edge` [cypress/browsers:node14.17.6-slim-chrome100-ff99-edge](./node14.17.6-slim-chrome100-ff99-edge) | `cypress/base:14.17.6` | `100.0.4896.88` | `99.0.1` | `--edge` +[cypress/browsers:node14.19.0-chrome100-ff99-edge](./node14.19.0-chrome100-ff99-edge) | `cypress/base:14.19.0` | `100.0.4896.88` | `99.0.1` | `--edge` diff --git a/browsers/README.md b/browsers/README.md index 32e6cc7a16..5ad013a684 100644 --- a/browsers/README.md +++ b/browsers/README.md @@ -40,7 +40,8 @@ [cypress/browsers:node16.14.0-edge](./node16.14.0-edge) | `cypress/base:16.14.0` | `🚫` | `🚫` | `--edge` [cypress/browsers:node16.14.0-chrome99-ff97](./node16.14.0-chrome99-ff97) | `cypress/base:16.14.0-slim` | `99.0.4844.51` | `97.0.1` | `🚫` [cypress/browsers:node16.14.2-slim-chrome100-ff99-edge](./node16.14.2-slim-chrome100-ff99-edge) | `cypress/base:16.14.2` | `100.0.4896.88` | `99.0.1` | `--edge` -[cypress/browsers:node14.17.6-slim-chrome100-ff99-edge](./node14.17.6-slim-chrome100-ff99-edge) | `cypress/base:14.17.6` | `100.0.4896.88` | `99.0.1` | `--edge` +[cypress/browsers:node14.17.6-slim-chrome100-ff99-edge](./node14.17.6-slim-chrome100-ff99-edge) | `cypress/base:14.17.6` | `100.0.4896.88` | `99.0.1` | `--edge` +[cypress/browsers:node14.19.0-chrome100-ff99-edge](./node14.19.0-chrome100-ff99-edge) | `cypress/base:14.19.0` | `100.0.4896.88` | `99.0.1` | `--edge` To find the available Chrome versions, check [https://chromium.cypress.io/](https://chromium.cypress.io/). diff --git a/browsers/node14.19.0-chrome100-ff99-edge/Dockerfile b/browsers/node14.19.0-chrome100-ff99-edge/Dockerfile new file mode 100644 index 0000000000..ffd0116270 --- /dev/null +++ b/browsers/node14.19.0-chrome100-ff99-edge/Dockerfile @@ -0,0 +1,92 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browser -- 14.19.0 --chrome=100.0.4896.88 --firefox=99.0.1 --edge +# +# build this image with command +# docker build -t cypress/browsers:node14.19.0-chrome100-ff99-edge . +# +# +FROM cypress/base:14.19.0 + +USER root + +RUN node --version + +# Install dependencies +RUN apt-get update && \ + apt-get install -y \ + fonts-liberation \ + git \ + libcurl4 \ + libcurl3-gnutls \ + libcurl3-nss \ + xdg-utils \ + wget \ + curl \ + # firefox dependencies + bzip2 \ + # add codecs needed for video playback in firefox + # https://github.com/cypress-io/cypress-docker-images/issues/150 + mplayer \ + # edge dependencies + gnupg \ + dirmngr \ + # clean up + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +# install libappindicator3-1 - not included with Debian 11 +RUN wget --no-verbose /usr/src/libappindicator3-1_0.4.92-7_amd64.deb "http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-7_amd64.deb" && \ + dpkg -i /usr/src/libappindicator3-1_0.4.92-7_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/libappindicator3-1_0.4.92-7_amd64.deb + +# install Chrome browser +RUN wget --no-verbose -O /usr/src/google-chrome-stable_current_amd64.deb "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_100.0.4896.88-1_amd64.deb" && \ + dpkg -i /usr/src/google-chrome-stable_current_amd64.deb ; \ + apt-get install -f -y && \ + rm -f /usr/src/google-chrome-stable_current_amd64.deb + +# "fake" dbus address to prevent errors +# https://github.com/SeleniumHQ/docker-selenium/issues/87 +ENV DBUS_SESSION_BUS_ADDRESS=/dev/null + +# install Firefox browser +RUN wget --no-verbose -O /tmp/firefox.tar.bz2 https://download-installer.cdn.mozilla.net/pub/firefox/releases/99.0.1/linux-x86_64/en-US/firefox-99.0.1.tar.bz2 && \ + tar -C /opt -xjf /tmp/firefox.tar.bz2 && \ + rm /tmp/firefox.tar.bz2 && \ + ln -fs /opt/firefox/firefox /usr/bin/firefox + +RUN echo "Downloading Latest Edge version..." + +## Setup Edge +RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg +RUN install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/ +RUN sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-dev.list' +RUN rm microsoft.gpg + +## Install Edge +RUN apt-get update +RUN apt-get install -y microsoft-edge-dev + +# Add a link to the browser that allows Cypress to find it +RUN ln -s /usr/bin/microsoft-edge /usr/bin/edge + +# versions of local tools +RUN echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "Chrome version: $(google-chrome --version) \n" \ + "Firefox version: $(firefox --version) \n" \ + "Edge version: $(edge --version) \n" \ + "git version: $(git --version) \n" \ + "whoami: $(whoami) \n" + +# a few environment variables to make NPM installs easier +# good colors for most applications +ENV TERM=xterm +# avoid million NPM install messages +ENV npm_config_loglevel=warn +# allow installing when the main user is root +ENV npm_config_unsafe_perm=true diff --git a/browsers/node14.19.0-chrome100-ff99-edge/README.md b/browsers/node14.19.0-chrome100-ff99-edge/README.md new file mode 100644 index 0000000000..ed0c74b908 --- /dev/null +++ b/browsers/node14.19.0-chrome100-ff99-edge/README.md @@ -0,0 +1,13 @@ + + +# cypress/browsers:node14.19.0-chrome100-ff99-edge + +A complete image with all operating system depedencies for Cypress, and Chrome 100.0.4896.88, Firefox 99.0.1, Edge --edge browsers. + +[Dockerfile](Dockerfile) + +**Note:** this image uses the `root` user. You might want to switch to nonroot user like `node` when running this container for security diff --git a/browsers/node14.19.0-chrome100-ff99-edge/build.sh b/browsers/node14.19.0-chrome100-ff99-edge/build.sh new file mode 100755 index 0000000000..dd51a5def1 --- /dev/null +++ b/browsers/node14.19.0-chrome100-ff99-edge/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-browser-image.js +# using +# yarn add:browser -- 14.19.0 --chrome=100.0.4896.88 --firefox=99.0.1 --edge +set e+x + +LOCAL_NAME=cypress/browsers:node14.19.0-chrome100-ff99-edge +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/buildspec.yml b/buildspec.yml index a35c128e6a..0ecb83c463 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,7 +6,7 @@ env: batch: fast-fail: false build-list: - - identifier: browsernode14176SlimChrome100Ff99Edge + - identifier: browsernode14190Chrome100Ff99Edge env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER @@ -15,7 +15,7 @@ batch: variables: IMAGE_REPO_NAME: "cypress/browsers" IMAGE_DIR: "browsers" - IMAGE_TAG: "node14.17.6-slim-chrome100-ff99-edge" + IMAGE_TAG: "node14.19.0-chrome100-ff99-edge" phases: pre_build: diff --git a/circle.yml b/circle.yml index e03cbf5010..3aa1f19a30 100644 --- a/circle.yml +++ b/circle.yml @@ -475,8 +475,8 @@ workflows: build-browser-images: jobs: - build-browser-image: - name: "browser node14.17.6-slim-chrome100-ff99-edge" - dockerTag: "node14.17.6-slim-chrome100-ff99-edge" + name: "browser node14.19.0-chrome100-ff99-edge" + dockerTag: "node14.19.0-chrome100-ff99-edge" chromeVersion: "Google Chrome 100" firefoxVersion: "Mozilla Firefox 99" edgeVersion: "Microsoft Edge" \ No newline at end of file From 40c5e6a0516dd2e1fdf57fa3b1271a54f764404d Mon Sep 17 00:00:00 2001 From: Adam Murray Date: Mon, 23 May 2022 14:21:21 -0500 Subject: [PATCH 063/371] fix: remove extra step that caused browsers to update in included images (#666) --- scripts/generate-included-image.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/scripts/generate-included-image.js b/scripts/generate-included-image.js index 7a59943c26..fb8a7764e1 100644 --- a/scripts/generate-included-image.js +++ b/scripts/generate-included-image.js @@ -43,9 +43,6 @@ const Dockerfile = ` # FROM ${baseImageTag} -# Update the dependencies to get the latest and greatest (and safest!) packages. -RUN apt update && apt upgrade -y - # avoid too many progress messages # https://github.com/cypress-io/cypress/issues/1243 ENV CI=1 \\ From 3d0f413d58526e37287b1dfcffb7b7931bc63f7c Mon Sep 17 00:00:00 2001 From: Matt Henkes Date: Mon, 23 May 2022 16:17:48 -0500 Subject: [PATCH 064/371] feat(included): generate new image with version 9.7.0 (#667) * feat(included): generate new image with version 9.7.0 * Fix tables --- buildspec.yml | 8 +++--- circle.yml | 11 +++----- included/9.7.0/Dockerfile | 58 +++++++++++++++++++++++++++++++++++++++ included/9.7.0/README.md | 18 ++++++++++++ included/9.7.0/build.sh | 8 ++++++ included/CHANGELOG.md | 7 +---- included/README.md | 13 +++------ 7 files changed, 97 insertions(+), 26 deletions(-) create mode 100644 included/9.7.0/Dockerfile create mode 100644 included/9.7.0/README.md create mode 100755 included/9.7.0/build.sh diff --git a/buildspec.yml b/buildspec.yml index 0ecb83c463..3423b80637 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,16 +6,16 @@ env: batch: fast-fail: false build-list: - - identifier: browsernode14190Chrome100Ff99Edge + - identifier: included970 env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_MEDIUM variables: - IMAGE_REPO_NAME: "cypress/browsers" - IMAGE_DIR: "browsers" - IMAGE_TAG: "node14.19.0-chrome100-ff99-edge" + IMAGE_REPO_NAME: "cypress/included" + IMAGE_DIR: "included" + IMAGE_TAG: "9.7.0" phases: pre_build: diff --git a/circle.yml b/circle.yml index 3aa1f19a30..29d42a4d78 100644 --- a/circle.yml +++ b/circle.yml @@ -472,11 +472,8 @@ workflows: lint: jobs: - lint-markdown - build-browser-images: + build-included-images: jobs: - - build-browser-image: - name: "browser node14.19.0-chrome100-ff99-edge" - dockerTag: "node14.19.0-chrome100-ff99-edge" - chromeVersion: "Google Chrome 100" - firefoxVersion: "Mozilla Firefox 99" - edgeVersion: "Microsoft Edge" \ No newline at end of file + - build-included-image: + name: "included 9.7.0" + dockerTag: "9.7.0" \ No newline at end of file diff --git a/included/9.7.0/Dockerfile b/included/9.7.0/Dockerfile new file mode 100644 index 0000000000..10b9860b87 --- /dev/null +++ b/included/9.7.0/Dockerfile @@ -0,0 +1,58 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.7.0 cypress/browsers:node16.14.2-slim-chrome100-ff99-edge +# +# build this image with command +# docker build -t cypress/included:9.7.0 . +# +FROM cypress/browsers:node16.14.2-slim-chrome100-ff99-edge + +# avoid too many progress messages +# https://github.com/cypress-io/cypress/issues/1243 +ENV CI=1 \ +# disable shared memory X11 affecting Cypress v4 and Chrome +# https://github.com/cypress-io/cypress-docker-images/issues/270 + QT_X11_NO_MITSHM=1 \ + _X11_NO_MITSHM=1 \ + _MITSHM=0 \ + # point Cypress at the /root/cache no matter what user account is used + # see https://on.cypress.io/caching + CYPRESS_CACHE_FOLDER=/root/.cache/Cypress + +# should be root user +RUN echo "whoami: $(whoami)" \ + && npm config -g set user $(whoami) \ + # command "id" should print: + # uid=0(root) gid=0(root) groups=0(root) + # which means the current user is root + && id \ + && npm install -g "cypress@9.7.0" \ + && cypress verify \ + # Cypress cache and installed version + # should be in the root user's home folder + && cypress cache path \ + && cypress cache list \ + && cypress info \ + && cypress version \ + # give every user read access to the "/root" folder where the binary is cached + # we really only need to worry about the top folder, fortunately + && ls -la /root \ + && chmod 755 /root \ + # always grab the latest Yarn + # otherwise the base image might have old versions + # NPM does not need to be installed as it is already included with Node. + && npm i -g yarn@latest \ + # Show where Node loads required modules from + && node -p 'module.paths' \ + # should print Cypress version + # plus Electron and bundled Node versions + && cypress version \ + && echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" \ + "chrome: $(google-chrome --version || true) \n" \ + "firefox: $(firefox --version || true) \n" + +ENTRYPOINT ["cypress", "run"] diff --git a/included/9.7.0/README.md b/included/9.7.0/README.md new file mode 100644 index 0000000000..d45fa0f425 --- /dev/null +++ b/included/9.7.0/README.md @@ -0,0 +1,18 @@ + + +# cypress/included:9.7.0 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:9.7.0 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/9.7.0/build.sh b/included/9.7.0/build.sh new file mode 100755 index 0000000000..2e618704fd --- /dev/null +++ b/included/9.7.0/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 9.7.0 cypress/browsers:node16.14.2-slim-chrome100-ff99-edge +set e+x + +LOCAL_NAME=cypress/included:9.7.0 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/included/CHANGELOG.md b/included/CHANGELOG.md index 2acd838771..ce690933c2 100644 --- a/included/CHANGELOG.md +++ b/included/CHANGELOG.md @@ -78,15 +78,10 @@ Name + Tag | Base image [cypress/included:9.4.1](9.4.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.5.0](9.5.0) | `cypress/browsers:node16.5.0-chrome97-ff96` [cypress/included:9.5.1](9.5.1) | `cypress/browsers:node16.5.0-chrome97-ff96` - [cypress/included:9.5.1-node16.14.0-slim-chrome99-ff97](9.5.1-node16.14.0-slim-chrome99-ff97) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` - [cypress/included:9.5.2](9.5.2) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` - [cypress/included:9.5.3](9.5.3) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` - [cypress/included:9.5.4](9.5.4) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` - [cypress/included:9.6.0](9.6.0) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` - [cypress/included:9.6.1](9.6.1) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` +[cypress/included:9.7.0](9.7.0) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` diff --git a/included/README.md b/included/README.md index 2b9cb7693e..6a8fb63811 100644 --- a/included/README.md +++ b/included/README.md @@ -3,7 +3,7 @@ [![Docker Pulls](https://img.shields.io/docker/pulls/cypress/included.svg?maxAge=604800)](https://hub.docker.com/r/cypress/included/) > Docker images with all operating system dependencies, Cypress, and some pre-installed browsers. - + Name + Tag | Base image --- | --- [cypress/included:3.2.0](3.2.0) | `cypress/base:12.1.0` @@ -84,19 +84,14 @@ [cypress/included:9.4.1](9.4.1) | `cypress/browsers:node16.5.0-chrome94-ff93` [cypress/included:9.5.0](9.5.0) | `cypress/browsers:node16.5.0-chrome97-ff96` [cypress/included:9.5.1](9.5.1) | `cypress/browsers:node16.5.0-chrome97-ff96` - [cypress/included:9.5.1-node16.14.0-slim-chrome99-ff97](9.5.1-node16.14.0-slim-chrome99-ff97) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` - [cypress/included:9.5.2](9.5.2) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` - [cypress/included:9.5.3](9.5.3) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` - [cypress/included:9.5.4](9.5.4) | `cypress/browsers:node16.14.0-slim-chrome99-ff97` - [cypress/included:9.6.0](9.6.0) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` - -[cypress/included:9.6.1](9.6.1) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` - +[cypress/included:9.6.1](9.6.1) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` +[cypress/included:9.7.0](9.7.0) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` + This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: ```shell From d937d4033c8a040e6d608adf96f18e23835f4282 Mon Sep 17 00:00:00 2001 From: Matt Henkes Date: Wed, 1 Jun 2022 10:49:02 -0500 Subject: [PATCH 065/371] feat(included): generate new image with version 10.0.0 (#669) --- buildspec.yml | 4 +- circle.yml | 44 +-- included/10.0.0/Dockerfile | 62 ++++ included/10.0.0/README.md | 18 ++ included/10.0.0/build.sh | 8 + included/CHANGELOG.md | 1 + included/README.md | 1 + scripts/generate-included-image.js | 4 +- test-project/README.MD | 16 + test-project/cypress.config.js | 9 + .../cypress/e2e/1-getting-started/todo.cy.js | 143 +++++++++ .../e2e/2-advanced-examples/actions.cy.js | 299 ++++++++++++++++++ .../e2e/2-advanced-examples/aliasing.cy.js | 39 +++ .../e2e/2-advanced-examples/assertions.cy.js | 176 +++++++++++ .../e2e/2-advanced-examples/connectors.cy.js | 97 ++++++ .../e2e/2-advanced-examples/cookies.cy.js | 77 +++++ .../e2e/2-advanced-examples/cypress_api.cy.js | 200 ++++++++++++ .../e2e/2-advanced-examples/files.cy.js | 87 +++++ .../2-advanced-examples/local_storage.cy.js | 52 +++ .../e2e/2-advanced-examples/location.cy.js | 32 ++ .../e2e/2-advanced-examples/misc.cy.js | 104 ++++++ .../e2e/2-advanced-examples/navigation.cy.js | 56 ++++ .../network_requests.cy.js | 163 ++++++++++ .../e2e/2-advanced-examples/querying.cy.js | 114 +++++++ .../spies_stubs_clocks.cy.js | 203 ++++++++++++ .../e2e/2-advanced-examples/traversal.cy.js | 121 +++++++ .../e2e/2-advanced-examples/utilities.cy.js | 108 +++++++ .../e2e/2-advanced-examples/viewport.cy.js | 59 ++++ .../e2e/2-advanced-examples/waiting.cy.js | 31 ++ .../e2e/2-advanced-examples/window.cy.js | 22 ++ test-project/cypress/fixtures/example.json | 5 + test-project/cypress/fixtures/profile.json | 5 + test-project/cypress/fixtures/users.json | 232 ++++++++++++++ test-project/cypress/support/commands.js | 25 ++ test-project/cypress/support/e2e.js | 20 ++ test-project/package.json | 10 + 36 files changed, 2603 insertions(+), 44 deletions(-) create mode 100644 included/10.0.0/Dockerfile create mode 100644 included/10.0.0/README.md create mode 100755 included/10.0.0/build.sh create mode 100644 test-project/README.MD create mode 100644 test-project/cypress.config.js create mode 100644 test-project/cypress/e2e/1-getting-started/todo.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/actions.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/aliasing.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/assertions.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/connectors.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/cookies.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/cypress_api.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/files.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/local_storage.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/location.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/misc.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/navigation.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/network_requests.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/querying.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/spies_stubs_clocks.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/traversal.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/utilities.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/viewport.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/waiting.cy.js create mode 100644 test-project/cypress/e2e/2-advanced-examples/window.cy.js create mode 100644 test-project/cypress/fixtures/example.json create mode 100644 test-project/cypress/fixtures/profile.json create mode 100644 test-project/cypress/fixtures/users.json create mode 100644 test-project/cypress/support/commands.js create mode 100644 test-project/cypress/support/e2e.js create mode 100644 test-project/package.json diff --git a/buildspec.yml b/buildspec.yml index 3423b80637..d81af7015a 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -6,7 +6,7 @@ env: batch: fast-fail: false build-list: - - identifier: included970 + - identifier: included1000 env: image: aws/codebuild/standard:5.0 type: LINUX_CONTAINER @@ -15,7 +15,7 @@ batch: variables: IMAGE_REPO_NAME: "cypress/included" IMAGE_DIR: "included" - IMAGE_TAG: "9.7.0" + IMAGE_TAG: "10.0.0" phases: pre_build: diff --git a/circle.yml b/circle.yml index 29d42a4d78..792e467f36 100644 --- a/circle.yml +++ b/circle.yml @@ -275,7 +275,6 @@ commands: # https://github.com/cypress-io/cypress-docker-images/issues/411 # exit 1 fi - test-included-image: description: Testing Docker image with Cypress pre-installed parameters: @@ -291,46 +290,13 @@ commands: no_output_timeout: '3m' command: | node --version - mkdir test - cd test - echo "Initializing test project" - npx @bahmutov/cly init --cypress-version << parameters.cypressVersion >> + cd test-project echo "Testing using Electron browser" docker run -it -v $PWD:/e2e -w /e2e cypress/included:<< parameters.cypressVersion >> echo "Testing using Chrome browser" docker run -it -v $PWD:/e2e -w /e2e cypress/included:<< parameters.cypressVersion >> --browser chrome - working_directory: /tmp - - test-included-image-using-kitchensink: - description: Testing Cypress pre-installed using Kitchensink - parameters: - cypressVersion: - type: string - description: Cypress version to test, like "4.0.0" - imageName: - type: string - description: Cypress included docker image to test - steps: - - run: - name: Testing Kitchensink - no_output_timeout: '3m' - command: | - node --version - mkdir test-kitchensink - cd test-kitchensink - - npm init -y - echo '{}' > cypress.json - - echo "Testing using Electron browser" - docker run -it -v $PWD:/e2e -w /e2e -e CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 cypress/included:<< parameters.cypressVersion >> - - echo "Testing using Chrome browser" - docker run -it -v $PWD:/e2e -w /e2e -e CYPRESS_INTERNAL_FORCE_SCAFFOLD=1 cypress/included:<< parameters.cypressVersion >> --browser chrome - - working_directory: /tmp docker-push: description: Log in and push a given image to Docker hub @@ -459,10 +425,6 @@ jobs: cypressVersion: << parameters.dockerTag >> imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - test-included-image-using-kitchensink: - cypressVersion: << parameters.dockerTag >> - imageName: << parameters.dockerName >>:<< parameters.dockerTag >> - - halt-on-branch - docker-push: imageName: << parameters.dockerName >>:<< parameters.dockerTag >> @@ -475,5 +437,5 @@ workflows: build-included-images: jobs: - build-included-image: - name: "included 9.7.0" - dockerTag: "9.7.0" \ No newline at end of file + name: "included 10.0.0" + dockerTag: "10.0.0" diff --git a/included/10.0.0/Dockerfile b/included/10.0.0/Dockerfile new file mode 100644 index 0000000000..45ce536951 --- /dev/null +++ b/included/10.0.0/Dockerfile @@ -0,0 +1,62 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 10.0.0 cypress/browsers:node16.14.2-slim-chrome100-ff99-edge +# +# build this image with command +# docker build -t cypress/included:10.0.0 . +# +FROM cypress/browsers:node16.14.2-slim-chrome100-ff99-edge + +# avoid too many progress messages +# https://github.com/cypress-io/cypress/issues/1243 +ENV CI=1 \ +# disable shared memory X11 affecting Cypress v4 and Chrome +# https://github.com/cypress-io/cypress-docker-images/issues/270 + QT_X11_NO_MITSHM=1 \ + _X11_NO_MITSHM=1 \ + _MITSHM=0 \ + # point Cypress at the /root/cache no matter what user account is used + # see https://on.cypress.io/caching + CYPRESS_CACHE_FOLDER=/root/.cache/Cypress \ + # Allow projects to reference globally installed cypress + NODE_PATH=/usr/local/lib/node_modules + +# should be root user +RUN echo "whoami: $(whoami)" \ + && npm config -g set user $(whoami) \ + # Allow projects to reference globally installed cypress + && export NODE_PATH=/usr/local/lib/node_modules \ + # command "id" should print: + # uid=0(root) gid=0(root) groups=0(root) + # which means the current user is root + && id \ + && npm install -g "cypress@10.0.0" \ + && cypress verify \ + # Cypress cache and installed version + # should be in the root user's home folder + && cypress cache path \ + && cypress cache list \ + && cypress info \ + && cypress version \ + # give every user read access to the "/root" folder where the binary is cached + # we really only need to worry about the top folder, fortunately + && ls -la /root \ + && chmod 755 /root \ + # always grab the latest Yarn + # otherwise the base image might have old versions + # NPM does not need to be installed as it is already included with Node. + && npm i -g yarn@latest \ + # Show where Node loads required modules from + && node -p 'module.paths' \ + # should print Cypress version + # plus Electron and bundled Node versions + && cypress version \ + && echo " node version: $(node -v) \n" \ + "npm version: $(npm -v) \n" \ + "yarn version: $(yarn -v) \n" \ + "debian version: $(cat /etc/debian_version) \n" \ + "user: $(whoami) \n" \ + "chrome: $(google-chrome --version || true) \n" \ + "firefox: $(firefox --version || true) \n" + +ENTRYPOINT ["cypress", "run"] diff --git a/included/10.0.0/README.md b/included/10.0.0/README.md new file mode 100644 index 0000000000..75674b9aeb --- /dev/null +++ b/included/10.0.0/README.md @@ -0,0 +1,18 @@ + + +# cypress/included:10.0.0 + +Read [Run Cypress with a single Docker command][blog post url] + +## Run tests + +```shell +$ docker run -it -v $PWD:/e2e -w /e2e cypress/included:10.0.0 +# runs Cypress tests from the current folder +``` + +[blog post url]: https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/ diff --git a/included/10.0.0/build.sh b/included/10.0.0/build.sh new file mode 100755 index 0000000000..63fb5f456c --- /dev/null +++ b/included/10.0.0/build.sh @@ -0,0 +1,8 @@ +# WARNING: this file was autogenerated by generate-included-image.js +# using +# npm run add:included -- 10.0.0 cypress/browsers:node16.14.2-slim-chrome100-ff99-edge +set e+x + +LOCAL_NAME=cypress/included:10.0.0 +echo "Building $LOCAL_NAME" +docker build -t $LOCAL_NAME . diff --git a/included/CHANGELOG.md b/included/CHANGELOG.md index ce690933c2..b7d4b60456 100644 --- a/included/CHANGELOG.md +++ b/included/CHANGELOG.md @@ -85,3 +85,4 @@ Name + Tag | Base image [cypress/included:9.6.0](9.6.0) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` [cypress/included:9.6.1](9.6.1) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` [cypress/included:9.7.0](9.7.0) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` +[cypress/included:10.0.0](10.0.0) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` diff --git a/included/README.md b/included/README.md index 6a8fb63811..54f7000350 100644 --- a/included/README.md +++ b/included/README.md @@ -91,6 +91,7 @@ [cypress/included:9.6.0](9.6.0) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` [cypress/included:9.6.1](9.6.1) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` [cypress/included:9.7.0](9.7.0) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` +[cypress/included:10.0.0](10.0.0) | `cypress/browsers:node16.14.2-slim-chrome100-ff99-edge` This image should be enough to run Cypress tests headlessly or in the interactive mode with a single Docker command like this: diff --git a/scripts/generate-included-image.js b/scripts/generate-included-image.js index fb8a7764e1..58601fad52 100644 --- a/scripts/generate-included-image.js +++ b/scripts/generate-included-image.js @@ -53,7 +53,9 @@ ENV CI=1 \\ _MITSHM=0 \\ # point Cypress at the /root/cache no matter what user account is used # see https://on.cypress.io/caching - CYPRESS_CACHE_FOLDER=/root/.cache/Cypress + CYPRESS_CACHE_FOLDER=/root/.cache/Cypress \\ + # Allow projects to reference globally installed cypress + NODE_PATH=/usr/local/lib/node_modules # should be root user RUN echo "whoami: $(whoami)" \\ diff --git a/test-project/README.MD b/test-project/README.MD new file mode 100644 index 0000000000..06a2431ca1 --- /dev/null +++ b/test-project/README.MD @@ -0,0 +1,16 @@ +# Test-project + +This test project was generated via the cypress GUI. + +In the event of a breaking major change this project can be updated by: + +1. Remove the following folders/files + * `cypress` folder + * `cypress.config.js` file +2. run command `npm install cypress@ --save-dev` +3. run command `cypress open` +4. Configure `e2e testing`, accept defaults +5. Run in chrome +6. Choose `Scaffold example specs` +7. Exit Cypress +8. Remove cypress from package.json diff --git a/test-project/cypress.config.js b/test-project/cypress.config.js new file mode 100644 index 0000000000..97f47c4127 --- /dev/null +++ b/test-project/cypress.config.js @@ -0,0 +1,9 @@ +const { defineConfig } = require("cypress"); + +module.exports = defineConfig({ + e2e: { + setupNodeEvents(on, config) { + // implement node event listeners here + }, + }, +}); diff --git a/test-project/cypress/e2e/1-getting-started/todo.cy.js b/test-project/cypress/e2e/1-getting-started/todo.cy.js new file mode 100644 index 0000000000..4768ff923e --- /dev/null +++ b/test-project/cypress/e2e/1-getting-started/todo.cy.js @@ -0,0 +1,143 @@ +/// + +// Welcome to Cypress! +// +// This spec file contains a variety of sample tests +// for a todo list app that are designed to demonstrate +// the power of writing tests in Cypress. +// +// To learn more about how Cypress works and +// what makes it such an awesome testing tool, +// please read our getting started guide: +// https://on.cypress.io/introduction-to-cypress + +describe('example to-do app', () => { + beforeEach(() => { + // Cypress starts out with a blank slate for each test + // so we must tell it to visit our website with the `cy.visit()` command. + // Since we want to visit the same URL at the start of all our tests, + // we include it in our beforeEach function so that it runs before each test + cy.visit('https://example.cypress.io/todo') + }) + + it('displays two todo items by default', () => { + // We use the `cy.get()` command to get all elements that match the selector. + // Then, we use `should` to assert that there are two matched items, + // which are the two default items. + cy.get('.todo-list li').should('have.length', 2) + + // We can go even further and check that the default todos each contain + // the correct text. We use the `first` and `last` functions + // to get just the first and last matched elements individually, + // and then perform an assertion with `should`. + cy.get('.todo-list li').first().should('have.text', 'Pay electric bill') + cy.get('.todo-list li').last().should('have.text', 'Walk the dog') + }) + + it('can add new todo items', () => { + // We'll store our item text in a variable so we can reuse it + const newItem = 'Feed the cat' + + // Let's get the input element and use the `type` command to + // input our new list item. After typing the content of our item, + // we need to type the enter key as well in order to submit the input. + // This input has a data-test attribute so we'll use that to select the + // element in accordance with best practices: + // https://on.cypress.io/selecting-elements + cy.get('[data-test=new-todo]').type(`${newItem}{enter}`) + + // Now that we've typed our new item, let's check that it actually was added to the list. + // Since it's the newest item, it should exist as the last element in the list. + // In addition, with the two default items, we should have a total of 3 elements in the list. + // Since assertions yield the element that was asserted on, + // we can chain both of these assertions together into a single statement. + cy.get('.todo-list li') + .should('have.length', 3) + .last() + .should('have.text', newItem) + }) + + it('can check off an item as completed', () => { + // In addition to using the `get` command to get an element by selector, + // we can also use the `contains` command to get an element by its contents. + // However, this will yield the