1
0
mirror of https://github.com/verdaccio/verdaccio.git synced 2024-11-08 23:25:51 +01:00

chore: add yarn modern (2, 3, 4) to cli E2E (#3289)

* test: add more packages managers to e2e cli

* chore: remove old conf files

* add yarn modern to e2e cli

* chore: add yarn 4

* ignore binary

* fix for tests yarn 3

* chore: tests

* update website ci

* Update package.json

* chore: try yarn 3 as binary

* chore: remove unused dependency

* Update utils.ts

* Update package.json

* Update package.json

* speed up build

* Update ci.yml

* Update ci.yml

* Update website.yml

* test

* chore: reenable all tests

* chore: restore ci

* chore: clean debug code
This commit is contained in:
Juan Picado 2022-08-04 20:04:12 +02:00 committed by GitHub
parent 0773e2ee2e
commit 6f8a2d37e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
58 changed files with 1165 additions and 779 deletions

@ -12,3 +12,5 @@ dist/
docs/
test/functional/store/*
docker-examples/**/lib/**/*.js
test/cli/e2e-yarn4/bin/yarn-4.0.0-rc.14.cjs
yarn.js

@ -131,7 +131,6 @@ jobs:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
- name: Install
## we need scripts, pupetter downloads aditional content
run: pnpm recursive install --frozen-lockfile
- name: build
run: pnpm build
@ -139,7 +138,6 @@ jobs:
run: pnpm test:e2e:ui
# env:
# DEBUG: verdaccio:e2e*
# FIXME verify why fails on Node 16 (locally works fine)
ci-e2e-cli:
needs: [format, lint]
runs-on: ubuntu-latest

@ -3,13 +3,12 @@ name: Verdaccio Website CI
on:
workflow_dispatch:
pull_request:
paths:
- 'website/**'
- './.github/workflows/website.yml'
push:
branches:
- 'master'
paths:
- 'website/**'
- 'package.json'
- './.github/workflows/website.yml'
- 'master'
jobs:
build:

@ -31,3 +31,5 @@ api/**
packages/core/local-storage/tests/__fixtures__/test-storage/
packages/plugins/ui-theme/static/
.verdaccio-db.json
test/cli/e2e-yarn4/bin/yarn-4.0.0-rc.14.cjs
yarn.js

@ -119,7 +119,7 @@
"format:check": "prettier --check \"**/*.{js,jsx,ts,tsx,json,yml,yaml,md}\"",
"lint": "eslint --max-warnings 100 \"**/*.{js,jsx,ts,tsx}\"",
"test": "pnpm recursive test --filter ./packages",
"test:e2e:cli": "pnpm test --filter ...@verdaccio/e2e-*",
"test:e2e:cli": "pnpm test --filter ...@verdaccio/e2e-* -- --coverage=false",
"test:e2e:ui": "pnpm test --filter ...@verdaccio/e2e-ui",
"start": "concurrently --kill-others \"pnpm _start:server\" \"pnpm _start:web\"",
"benchmark:hyper": "verdaccio-benchmark hyper -r ./hyper-results.json",

@ -37,7 +37,6 @@
"@verdaccio/types": "workspace:*",
"babel-loader": "8.2.3",
"babel-plugin-dynamic-import-node": "2.3.3",
"bundlesize": "0.18.1",
"css-loader": "6.5.1",
"dayjs": "1.10.7",
"friendly-errors-webpack-plugin": "1.7.0",
@ -105,35 +104,12 @@
"server",
"verdaccio"
],
"bundlesize": [
{
"path": "./static/vendors.*.js",
"maxSize": "900 kB"
},
{
"path": "./static/main.*.js",
"maxSize": "400 kB"
},
{
"path": "./static/*.svg",
"maxSize": "1.3 kB"
},
{
"path": "./static/*.png",
"maxSize": "15 kB"
},
{
"path": "./static/fonts/*.{woff,woff2}",
"maxSize": "20 kB"
}
],
"scripts": {
"type-check": "tsc --noEmit -p tsconfig.build.json",
"start": "babel-node tools/dev.server.js",
"test:clean": "jest --clearCache",
"test": "cross-env TZ=UTC jest --config ./jest/jest.config.js",
"test:update-snapshot": "yarn run test -- -u",
"test:size": "bundlesize",
"lint": "pnpm lint:js && pnpm lint:css",
"lint:css": "yarn stylelint \"src/**/styles.ts\"",
"verdaccio:server": "node tools/verdaccio.js",

371
pnpm-lock.yaml generated

@ -720,7 +720,6 @@ importers:
'@verdaccio/types': workspace:*
babel-loader: 8.2.3
babel-plugin-dynamic-import-node: 2.3.3
bundlesize: 0.18.1
country-flag-icons: 1.4.19
css-loader: 6.5.1
dayjs: 1.10.7
@ -801,7 +800,6 @@ importers:
'@verdaccio/types': link:../../core/types
babel-loader: 8.2.3_e748cba1f5e972defd8ae51292b4033f
babel-plugin-dynamic-import-node: 2.3.3
bundlesize: 0.18.1
country-flag-icons: 1.4.19
css-loader: 6.5.1_webpack@5.67.0
dayjs: 1.10.7
@ -1293,7 +1291,7 @@ importers:
npm: next-8
dependencies:
'@verdaccio/test-cli-commons': link:../cli-commons
npm: 8.15.1
npm: 8.16.0
test/cli/e2e-pnpm6:
specifiers:
@ -1301,7 +1299,7 @@ importers:
pnpm: latest-6
dependencies:
'@verdaccio/test-cli-commons': link:../cli-commons
pnpm: 6.33.1
pnpm: 6.34.0
test/cli/e2e-pnpm7:
specifiers:
@ -1309,7 +1307,7 @@ importers:
pnpm: next-7
dependencies:
'@verdaccio/test-cli-commons': link:../cli-commons
pnpm: 7.8.0
pnpm: 7.9.0-0
test/cli/e2e-yarn1:
specifiers:
@ -1319,6 +1317,28 @@ importers:
'@verdaccio/test-cli-commons': link:../cli-commons
yarn: 1.22.19
test/cli/e2e-yarn2:
specifiers:
'@verdaccio/test-cli-commons': workspace:1.0.0
'@yarnpkg/cli-dist': 2.4.1
dependencies:
'@verdaccio/test-cli-commons': link:../cli-commons
'@yarnpkg/cli-dist': 2.4.1
test/cli/e2e-yarn3:
specifiers:
'@verdaccio/test-cli-commons': workspace:1.0.0
'@yarnpkg/cli-dist': 3.2.2
dependencies:
'@verdaccio/test-cli-commons': link:../cli-commons
'@yarnpkg/cli-dist': 3.2.2
test/cli/e2e-yarn4:
specifiers:
'@verdaccio/test-cli-commons': workspace:1.0.0
dependencies:
'@verdaccio/test-cli-commons': link:../cli-commons
website:
specifiers:
'@docusaurus/core': 2.0.0-beta.20
@ -10308,6 +10328,18 @@ packages:
/@xtuc/long/4.2.2:
resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
/@yarnpkg/cli-dist/2.4.1:
resolution: {integrity: sha512-+alR6g7Aaqt6MU9CYKy23xwEUChjibDZFQWSkhuijAYeKlHTtAkmG865Kma+kgaIbShmSJBtckiYbhPUg4GhUw==}
engines: {node: '>=10.19.0'}
hasBin: true
dev: false
/@yarnpkg/cli-dist/3.2.2:
resolution: {integrity: sha512-beD8e4IEEh/qvZItKVVtFEDNT4IbbIsy3pfObX9LNfMSwSu4ApeSf+nAHU6U9radZhoGyn70EzkPPpUnA3pCjw==}
engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'}
hasBin: true
dev: false
/JSONStream/1.3.5:
resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
hasBin: true
@ -10666,20 +10698,9 @@ packages:
engines: {node: '>=8'}
dev: false
/aproba/1.2.0:
resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==}
dev: true
/archy/1.0.0:
resolution: {integrity: sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=}
/are-we-there-yet/1.1.5:
resolution: {integrity: sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==}
dependencies:
delegates: 1.0.0
readable-stream: 2.3.7
dev: true
/arg/4.1.3:
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
@ -10975,6 +10996,7 @@ packages:
resolution: {integrity: sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==}
dependencies:
follow-redirects: 1.13.0
dev: false
/axios/0.25.0_debug@4.3.3:
resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==}
@ -11633,14 +11655,6 @@ packages:
wcwidth: 1.0.1
dev: true
/brotli-size/0.1.0:
resolution: {integrity: sha512-5ny7BNvpe2TSmdafF1T9dnFYp3AIrJ8qJt29K0DQJzORlK38LBim/CmlY26JtreV6SWmXza7Oa+9m61SzvxR0Q==}
engines: {node: '>=0.12.0'}
dependencies:
duplexer: 0.1.2
iltorb: 2.4.5
dev: true
/browser-process-hrtime/1.0.0:
resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==}
@ -11728,22 +11742,6 @@ packages:
ieee754: 1.2.1
dev: true
/bundlesize/0.18.1:
resolution: {integrity: sha512-NAsKBH6BeVmDopoa4tod0m5/koM7iLY3saKyGn7wyAravBYmKNUpDJba4zyVhwRm5Dw9WXv8FIO0N//tCkx68Q==}
hasBin: true
dependencies:
axios: 0.21.1
brotli-size: 0.1.0
bytes: 3.1.0
ci-env: 1.16.0
commander: 2.20.3
cosmiconfig: 5.2.1
github-build: 1.2.2
glob: 7.1.7
gzip-size: 4.1.0
prettycli: 1.4.3
dev: true
/bytes/3.0.0:
resolution: {integrity: sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=}
engines: {node: '>= 0.8'}
@ -11808,25 +11806,6 @@ packages:
function-bind: 1.1.1
get-intrinsic: 1.1.1
/caller-callsite/2.0.0:
resolution: {integrity: sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=}
engines: {node: '>=4'}
dependencies:
callsites: 2.0.0
dev: true
/caller-path/2.0.0:
resolution: {integrity: sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=}
engines: {node: '>=4'}
dependencies:
caller-callsite: 2.0.0
dev: true
/callsites/2.0.0:
resolution: {integrity: sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=}
engines: {node: '>=4'}
dev: true
/callsites/3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
@ -11915,15 +11894,6 @@ packages:
supports-color: 2.0.0
dev: true
/chalk/2.1.0:
resolution: {integrity: sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==}
engines: {node: '>=4'}
dependencies:
ansi-styles: 3.2.1
escape-string-regexp: 1.0.5
supports-color: 4.5.0
dev: true
/chalk/2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
engines: {node: '>=4'}
@ -12071,10 +12041,6 @@ packages:
optionalDependencies:
fsevents: 2.3.2
/chownr/1.1.4:
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
dev: true
/chrome-trace-event/1.0.2:
resolution: {integrity: sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==}
engines: {node: '>=6.0'}
@ -12086,10 +12052,6 @@ packages:
resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==}
engines: {node: '>=6.0'}
/ci-env/1.16.0:
resolution: {integrity: sha512-ucF9caQEX5wQlY449KZBIJPx91+kRg9tJ3tWSc4+KzrvC5KNiPm/3g1noP8VhdI3046+Vw3jLmKAD0fjCRJTmw==}
dev: true
/ci-info/2.0.0:
resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
@ -12268,11 +12230,6 @@ packages:
q: 1.5.1
dev: false
/code-point-at/1.1.0:
resolution: {integrity: sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=}
engines: {node: '>=0.10.0'}
dev: true
/codecov/3.8.3:
resolution: {integrity: sha512-Y8Hw+V3HgR7V71xWH2vQ9lyS358CbGCldWlJFR0JirqoGtOoas3R3/OclRTvgUYFK29mmJICDPauVKmpqbwhOA==}
engines: {node: '>=4.0'}
@ -12472,10 +12429,6 @@ packages:
/consola/2.15.3:
resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==}
/console-control-strings/1.1.0:
resolution: {integrity: sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=}
dev: true
/consolidate/0.16.0_667d4ca04fd1fc58087821ee896b04c5:
resolution: {integrity: sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==}
engines: {node: '>= 0.10.0'}
@ -12797,16 +12750,6 @@ packages:
vary: 1.1.2
dev: false
/cosmiconfig/5.2.1:
resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==}
engines: {node: '>=4'}
dependencies:
import-fresh: 2.0.0
is-directory: 0.3.1
js-yaml: 3.14.1
parse-json: 4.0.0
dev: true
/cosmiconfig/6.0.0:
resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==}
engines: {node: '>=8'}
@ -13562,13 +13505,6 @@ packages:
dependencies:
mimic-response: 1.0.1
/decompress-response/4.2.1:
resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==}
engines: {node: '>=8'}
dependencies:
mimic-response: 2.1.0
dev: true
/decompress-response/6.0.0:
resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
engines: {node: '>=10'}
@ -13691,10 +13627,6 @@ packages:
resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=}
engines: {node: '>=0.4.0'}
/delegates/1.0.0:
resolution: {integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=}
dev: true
/depd/1.1.2:
resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=}
engines: {node: '>= 0.6'}
@ -13731,12 +13663,6 @@ packages:
engines: {node: '>=8'}
dev: true
/detect-libc/1.0.3:
resolution: {integrity: sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=}
engines: {node: '>=0.10'}
hasBin: true
dev: true
/detect-newline/3.1.0:
resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
engines: {node: '>=8'}
@ -15130,11 +15056,6 @@ packages:
transitivePeerDependencies:
- supports-color
/expand-template/2.0.3:
resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
engines: {node: '>=6'}
dev: true
/expect/27.4.6:
resolution: {integrity: sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
@ -16015,10 +15936,6 @@ packages:
webpack: 5.67.0_webpack-cli@4.7.2
dev: true
/fs-constants/1.0.0:
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
dev: true
/fs-extra/10.0.0:
resolution: {integrity: sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==}
engines: {node: '>=12'}
@ -16119,19 +16036,6 @@ packages:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
dev: false
/gauge/2.7.4:
resolution: {integrity: sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=}
dependencies:
aproba: 1.2.0
console-control-strings: 1.1.0
has-unicode: 2.0.1
object-assign: 4.1.1
signal-exit: 3.0.7
string-width: 1.0.2
strip-ansi: 3.0.1
wide-align: 1.1.3
dev: true
/generic-names/2.0.1:
resolution: {integrity: sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==}
dependencies:
@ -16207,16 +16111,6 @@ packages:
assert-plus: 1.0.0
dev: false
/github-build/1.2.2:
resolution: {integrity: sha512-xHVy8w+J09eD+uBqJ4CcRPr5HTa1BYaF6vPJ67yJekCWurPzimB/ExH1SGzW5iAFC2Uvw9TD1FpSIjh56hcB9Q==}
dependencies:
axios: 0.21.1
dev: true
/github-from-package/0.0.0:
resolution: {integrity: sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=}
dev: true
/github-markdown-css/4.0.0:
resolution: {integrity: sha512-mH0bcIKv4XAN0mQVokfTdKo2OD5K8WJE9+lbMdM32/q0Ie5tXgVN/2o+zvToRMxSTUuiTRcLg5hzkFfOyBYreg==}
dev: true
@ -16443,14 +16337,6 @@ packages:
section-matter: 1.0.0
strip-bom-string: 1.0.0
/gzip-size/4.1.0:
resolution: {integrity: sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=}
engines: {node: '>=4'}
dependencies:
duplexer: 0.1.2
pify: 3.0.0
dev: true
/gzip-size/5.1.1:
resolution: {integrity: sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==}
engines: {node: '>=6'}
@ -16522,11 +16408,6 @@ packages:
resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
dev: false
/has-flag/2.0.0:
resolution: {integrity: sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=}
engines: {node: '>=0.10.0'}
dev: true
/has-flag/3.0.0:
resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=}
engines: {node: '>=4'}
@ -16555,10 +16436,6 @@ packages:
dependencies:
has-symbols: 1.0.3
/has-unicode/2.0.1:
resolution: {integrity: sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=}
dev: true
/has-value/0.3.1:
resolution: {integrity: sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=}
engines: {node: '>=0.10.0'}
@ -17145,18 +17022,6 @@ packages:
resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==}
engines: {node: '>= 4'}
/iltorb/2.4.5:
resolution: {integrity: sha512-EMCMl3LnnNSZJS5QrxyZmMTaAC4+TJkM5woD+xbpm9RB+mFYCr7C05GFE3TEGCsVQSVHmjX+3sf5AiwsylNInQ==}
deprecated: The zlib module provides APIs for brotli compression/decompression starting with Node.js v10.16.0, please use it over iltorb
requiresBuild: true
dependencies:
detect-libc: 1.0.3
nan: 2.14.2
npmlog: 4.1.2
prebuild-install: 5.3.5
which-pm-runs: 1.0.0
dev: true
/image-size/1.0.1:
resolution: {integrity: sha512-VAwkvNSNGClRw9mDHhc5Efax8PLlsOGcUTh0T/LIriC8vPA3U5PdqXWqkz406MoYHMKW8Uf9gWr05T/rYB44kQ==}
engines: {node: '>=12.0.0'}
@ -17175,14 +17040,6 @@ packages:
resolution: {integrity: sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==}
dev: true
/import-fresh/2.0.0:
resolution: {integrity: sha1-2BNVwVYS04bGH53dOSLUMEgipUY=}
engines: {node: '>=4'}
dependencies:
caller-path: 2.0.0
resolve-from: 3.0.0
dev: true
/import-fresh/3.3.0:
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
engines: {node: '>=6'}
@ -17456,11 +17313,6 @@ packages:
is-data-descriptor: 1.0.0
kind-of: 6.0.3
/is-directory/0.3.1:
resolution: {integrity: sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=}
engines: {node: '>=0.10.0'}
dev: true
/is-docker/2.2.1:
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
engines: {node: '>=8'}
@ -17480,13 +17332,6 @@ packages:
resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=}
engines: {node: '>=0.10.0'}
/is-fullwidth-code-point/1.0.0:
resolution: {integrity: sha1-754xOG8DGn8NZDr4L95QxFfvAMs=}
engines: {node: '>=0.10.0'}
dependencies:
number-is-nan: 1.0.1
dev: true
/is-fullwidth-code-point/2.0.0:
resolution: {integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=}
engines: {node: '>=4'}
@ -19893,11 +19738,6 @@ packages:
resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
engines: {node: '>=4'}
/mimic-response/2.1.0:
resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==}
engines: {node: '>=8'}
dev: true
/mimic-response/3.1.0:
resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
engines: {node: '>=10'}
@ -20002,10 +19842,6 @@ packages:
engines: {node: '>= 8.0.0'}
dev: true
/mkdirp-classic/0.5.3:
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
dev: true
/mkdirp/0.5.5:
resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==}
hasBin: true
@ -20115,10 +19951,6 @@ packages:
rimraf: 2.4.5
dev: false
/nan/2.14.2:
resolution: {integrity: sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==}
dev: true
/nan/2.15.0:
resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==}
requiresBuild: true
@ -20175,10 +20007,6 @@ packages:
transitivePeerDependencies:
- supports-color
/napi-build-utils/1.0.2:
resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
dev: true
/natural-compare/1.4.0:
resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=}
@ -20259,12 +20087,6 @@ packages:
- supports-color
dev: true
/node-abi/2.19.1:
resolution: {integrity: sha512-HbtmIuByq44yhAzK7b9j/FelKlHYISKQn0mtvcBrU5QBkhoCMp5bu8Hv5AI34DcKfOAcJBcOEMwLlwO62FFu9A==}
dependencies:
semver: 5.7.1
dev: true
/node-emoji/1.11.0:
resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==}
dependencies:
@ -20354,10 +20176,6 @@ packages:
update-notifier: 5.1.0
dev: true
/noop-logger/0.1.1:
resolution: {integrity: sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=}
dev: true
/nopt/1.0.10:
resolution: {integrity: sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=}
hasBin: true
@ -20784,8 +20602,8 @@ packages:
- which
- write-file-atomic
/npm/8.15.1:
resolution: {integrity: sha512-ZjVMjEn+PqdjpZg+VLMFz5lyzh7tW+SBt+KQzvoQC986U/clE897eg7YR0PLYw6RfjTsoPTuB95xQ8ubn9go6Q==}
/npm/8.16.0:
resolution: {integrity: sha512-UfLT/hCbcpV9uiTEBthyrOlQxwk8LG5tAGn283g7f7pRx41KcwFiHV7HYgYm2y2GabfnPtf897ptrXRQwxJWzQ==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16}
hasBin: true
dev: false
@ -20862,15 +20680,6 @@ packages:
- which
- write-file-atomic
/npmlog/4.1.2:
resolution: {integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==}
dependencies:
are-we-there-yet: 1.1.5
console-control-strings: 1.1.0
gauge: 2.7.4
set-blocking: 2.0.0
dev: true
/nprogress/0.2.0:
resolution: {integrity: sha1-y480xTIT2JVyP8urkH6UIq28r7E=}
dev: false
@ -20885,11 +20694,6 @@ packages:
dependencies:
boolbase: 1.0.0
/number-is-nan/1.0.1:
resolution: {integrity: sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=}
engines: {node: '>=0.10.0'}
dev: true
/nwsapi/2.2.0:
resolution: {integrity: sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==}
@ -21594,14 +21398,14 @@ packages:
resolution: {integrity: sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==}
dev: false
/pnpm/6.33.1:
resolution: {integrity: sha512-A19nDMOesyc5AjgXbtNk5ILRvwd51OPEn3RDfJgw/YwtNBTHeZmHCftz4b8Ri3rsqANhH04V5kiqyERpYohBxA==}
/pnpm/6.34.0:
resolution: {integrity: sha512-K79DAT5WtGjrUyLtxAyehtN8uy5cXkzT1v+7RIJ3gygCffoLaLlBoG5gcfjfnX7oZH5rxznv/v8tlMIMfZyzTA==}
engines: {node: '>=12.17'}
hasBin: true
dev: false
/pnpm/7.8.0:
resolution: {integrity: sha512-jzb9/gto4nwuVA2itTRk0PJhuaZcA1NBRB298UzXhqKZQMjtHCS+KLzh7RWk5n3g+KnMg5FHr6Mwg1L62dBz1A==}
/pnpm/7.9.0-0:
resolution: {integrity: sha512-M1uckEBRCCWHTfMieGyqw00MTUPyjHE3RNbe3PBnI5Z+gFyhOHJeGMTAt8eZ3+qYn7sJ0X5DlqO+IIOoWVNpSA==}
engines: {node: '>=14.6'}
hasBin: true
dev: false
@ -22479,28 +22283,6 @@ packages:
picocolors: 1.0.0
source-map-js: 1.0.2
/prebuild-install/5.3.5:
resolution: {integrity: sha512-YmMO7dph9CYKi5IR/BzjOJlRzpxGGVo1EsLSUZ0mt/Mq0HWZIHOKHHcHdT69yG54C9m6i45GpItwRHpk0Py7Uw==}
engines: {node: '>=6'}
hasBin: true
dependencies:
detect-libc: 1.0.3
expand-template: 2.0.3
github-from-package: 0.0.0
minimist: 1.2.5
mkdirp: 0.5.5
napi-build-utils: 1.0.2
node-abi: 2.19.1
noop-logger: 0.1.1
npmlog: 4.1.2
pump: 3.0.0
rc: 1.2.8
simple-get: 3.1.0
tar-fs: 2.1.0
tunnel-agent: 0.6.0
which-pm-runs: 1.0.0
dev: true
/preferred-pm/3.0.3:
resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==}
engines: {node: '>=10'}
@ -22591,12 +22373,6 @@ packages:
resolution: {integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==}
engines: {node: '>=4'}
/prettycli/1.4.3:
resolution: {integrity: sha512-KLiwAXXfSWXZqGmZlnKPuGMTFp+0QbcySplL1ft9gfteT/BNsG64Xo8u2Qr9r+qnsIZWBQ66Zs8tg+8s2fmzvw==}
dependencies:
chalk: 2.1.0
dev: true
/prism-react-renderer/1.2.1_react@17.0.2:
resolution: {integrity: sha512-w23ch4f75V1Tnz8DajsYKvY5lF7H1+WvzvLUcF0paFxkTHSp42RS0H5CttdN2Q8RR3DRGZ9v5xD/h3n8C8kGmg==}
peerDependencies:
@ -24491,18 +24267,6 @@ packages:
/signal-exit/3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
/simple-concat/1.0.1:
resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
dev: true
/simple-get/3.1.0:
resolution: {integrity: sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==}
dependencies:
decompress-response: 4.2.1
once: 1.4.0
simple-concat: 1.0.1
dev: true
/sirv/1.0.12:
resolution: {integrity: sha512-+jQoCxndz7L2tqQL4ZyzfDhky0W/4ZJip3XoOuxyQWnAwMxindLl3Xv1qT4x1YX/re0leShvTm8Uk0kQspGhBg==}
engines: {node: '>= 10'}
@ -24947,15 +24711,6 @@ packages:
resolution: {integrity: sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==}
dev: false
/string-width/1.0.2:
resolution: {integrity: sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=}
engines: {node: '>=0.10.0'}
dependencies:
code-point-at: 1.1.0
is-fullwidth-code-point: 1.0.0
strip-ansi: 3.0.1
dev: true
/string-width/2.1.1:
resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==}
engines: {node: '>=4'}
@ -25308,13 +25063,6 @@ packages:
engines: {node: '>=0.8.0'}
dev: true
/supports-color/4.5.0:
resolution: {integrity: sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=}
engines: {node: '>=4'}
dependencies:
has-flag: 2.0.0
dev: true
/supports-color/5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
@ -25416,26 +25164,6 @@ packages:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
engines: {node: '>=6'}
/tar-fs/2.1.0:
resolution: {integrity: sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==}
dependencies:
chownr: 1.1.4
mkdirp-classic: 0.5.3
pump: 3.0.0
tar-stream: 2.1.4
dev: true
/tar-stream/2.1.4:
resolution: {integrity: sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==}
engines: {node: '>=6'}
dependencies:
bl: 4.1.0
end-of-stream: 1.4.4
fs-constants: 1.0.0
inherits: 2.0.4
readable-stream: 3.6.0
dev: true
/teeny-request/7.1.1:
resolution: {integrity: sha512-iwY6rkW5DDGq8hE2YgNQlKbptYpY5Nn2xecjQiNjOXWbKzPGUfmeUBCSQbbr306d7Z7U2N0TPl+/SwYRfua1Dg==}
engines: {node: '>=10'}
@ -25947,6 +25675,7 @@ packages:
resolution: {integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=}
dependencies:
safe-buffer: 5.2.1
dev: false
/tweetnacl/0.14.5:
resolution: {integrity: sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=}
@ -27609,10 +27338,6 @@ packages:
/which-module/2.0.0:
resolution: {integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=}
/which-pm-runs/1.0.0:
resolution: {integrity: sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=}
dev: true
/which-pm/2.0.0:
resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==}
engines: {node: '>=8.15'}
@ -27634,12 +27359,6 @@ packages:
dependencies:
isexe: 2.0.0
/wide-align/1.1.3:
resolution: {integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==}
dependencies:
string-width: 2.1.1
dev: true
/widest-line/2.0.1:
resolution: {integrity: sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==}
engines: {node: '>=4'}

16
test/cli/README.md Normal file

@ -0,0 +1,16 @@
# E2E CLI Testing
## What is included on these test?
- Default configuration only
- Basic commands eg (`install / add`, `info`, `publish`, `search`).
- Test with all popular package managers (`yarn classic` and `yarn modern (2,3, 4)`, `pnpm 6,7` and `npm 6, 7 and 8`)
## How it works?
> TBA
### What should not included on these tests?
- Anything is unrelated with client commands usage, eg: (auth permissions, third party integrations,
hooks, plugins)

@ -1,4 +1,4 @@
export { getDefaultConfig } from '@verdaccio/config';
export { initialSetup } from './registry';
export { addNpmPrefix, addYarnPrefix, addRegistry } from './utils';
export { addNpmPrefix, addYarnClassicPrefix, addRegistry, prepareYarnModernProject } from './utils';
export { exec, ExecOutput } from './process';

@ -1,4 +1,5 @@
import fs from 'fs-extra';
import { cp, readFile, writeFile } from 'fs/promises';
import { join } from 'path';
import { fileUtils } from '@verdaccio/core';
@ -38,8 +39,25 @@ export function addNpmPrefix(installFolder) {
return ['--prefix', installFolder];
}
export function addYarnPrefix(installFolder) {
export function addYarnClassicPrefix(installFolder) {
// info regarding cwd flag
// https://github.com/yarnpkg/yarn/pull/4174
return ['--cwd', installFolder];
}
export async function prepareYarnModernProject(
templatePath: string,
projectName: string,
registryDomain: string,
yarnPath: string
) {
const tempFolder = await createTempFolder(projectName);
// FUTURE: native copy folder instead fs-extra
fs.copySync(templatePath, tempFolder);
const yamlPath = join(tempFolder, '.yarnrc.yml');
const yamlContent = await readFile(yamlPath, 'utf8');
const finalYamlContent = yamlContent.replace('${registry}', registryDomain);
await writeFile(yamlPath, finalYamlContent);
await cp(yarnPath, join(tempFolder, '.yarn/releases/yarn.js'), { dereference: true });
return { tempFolder };
}

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2018 Verdaccio
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -1,48 +0,0 @@
# E2E CLI Testing
## What is included on these test?
- Default configuration only
- Basic commands eg (`install / add`, `info`, `publish`).
- Test with 3 package managers (`yarn classic`, `pnpm` and `npm@7`)
## How it works?
On run test suites, there is a global setup where will install the local source code of verdaccio in a temporary folder.
Each suite will install.
1. `spawn` a registry on port `6001` using `_bootstrap_verdaccio.yaml` which block any local package being
fetched from remote upstream.
2. Publish local project to the spawned registry (with global `pnpm`)
> The published `verdaccio` should be fetch by each suite to ensure reliability of each test.
## How to write test?
Each of the suite must use a package manager command _(eg: `npm install`)_ and validate the output according what the
user see, either verifying the outcome in JSON form, run a command _(`eg: jest ..`)_ and the expected result.
Each Test should start with the initial setup, this step does the following
- `beforeAll`: Install verdaccio to the suite context that returns a `Setup` object.
- `afterAll`: Stop the child process that runs verdaccio.
```js
beforeAll(async () => {
setup = await initialSetup(tempRootFolder, port);
console.log('--setup', setup.install);
});
```
stop the process is the final step that should occur in every suite.
```js
afterAll(async () => {
setup.child.kill();
});
```
### What should not included on these tests?
- Anything is unrelated with client commands usage, eg: (auth permissions, third party integrations,
hooks, plugins)

@ -1,7 +1,7 @@
{
"private": true,
"name": "@verdaccio/e2e-cli-npm6",
"version": "2.0.0-6-next.1",
"version": "1.0.0",
"dependencies": {
"@verdaccio/test-cli-commons": "workspace:1.0.0",
"npm": "latest-6"

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2018 Verdaccio
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -1,48 +0,0 @@
# E2E CLI Testing
## What is included on these test?
- Default configuration only
- Basic commands eg (`install / add`, `info`, `publish`).
- Test with 3 package managers (`yarn classic`, `pnpm` and `npm@7`)
## How it works?
On run test suites, there is a global setup where will install the local source code of verdaccio in a temporary folder.
Each suite will install.
1. `spawn` a registry on port `6001` using `_bootstrap_verdaccio.yaml` which block any local package being
fetched from remote upstream.
2. Publish local project to the spawned registry (with global `pnpm`)
> The published `verdaccio` should be fetch by each suite to ensure reliability of each test.
## How to write test?
Each of the suite must use a package manager command _(eg: `npm install`)_ and validate the output according what the
user see, either verifying the outcome in JSON form, run a command _(`eg: jest ..`)_ and the expected result.
Each Test should start with the initial setup, this step does the following
- `beforeAll`: Install verdaccio to the suite context that returns a `Setup` object.
- `afterAll`: Stop the child process that runs verdaccio.
```js
beforeAll(async () => {
setup = await initialSetup(tempRootFolder, port);
console.log('--setup', setup.install);
});
```
stop the process is the final step that should occur in every suite.
```js
afterAll(async () => {
setup.child.kill();
});
```
### What should not included on these tests?
- Anything is unrelated with client commands usage, eg: (auth permissions, third party integrations,
hooks, plugins)

@ -1,7 +1,7 @@
{
"private": true,
"name": "@verdaccio/e2e-cli-npm7",
"version": "2.0.0-6-next.1",
"version": "1.0.0",
"dependencies": {
"@verdaccio/test-cli-commons": "workspace:1.0.0",
"npm": "latest-7"

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2018 Verdaccio
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -1,48 +0,0 @@
# E2E CLI Testing
## What is included on these test?
- Default configuration only
- Basic commands eg (`install / add`, `info`, `publish`).
- Test with 3 package managers (`yarn classic`, `pnpm` and `npm@7`)
## How it works?
On run test suites, there is a global setup where will install the local source code of verdaccio in a temporary folder.
Each suite will install.
1. `spawn` a registry on port `6001` using `_bootstrap_verdaccio.yaml` which block any local package being
fetched from remote upstream.
2. Publish local project to the spawned registry (with global `pnpm`)
> The published `verdaccio` should be fetch by each suite to ensure reliability of each test.
## How to write test?
Each of the suite must use a package manager command _(eg: `npm install`)_ and validate the output according what the
user see, either verifying the outcome in JSON form, run a command _(`eg: jest ..`)_ and the expected result.
Each Test should start with the initial setup, this step does the following
- `beforeAll`: Install verdaccio to the suite context that returns a `Setup` object.
- `afterAll`: Stop the child process that runs verdaccio.
```js
beforeAll(async () => {
setup = await initialSetup(tempRootFolder, port);
console.log('--setup', setup.install);
});
```
stop the process is the final step that should occur in every suite.
```js
afterAll(async () => {
setup.child.kill();
});
```
### What should not included on these tests?
- Anything is unrelated with client commands usage, eg: (auth permissions, third party integrations,
hooks, plugins)

@ -1,7 +1,7 @@
{
"private": true,
"name": "@verdaccio/e2e-cli-npm8",
"version": "2.0.0-6-next.1",
"version": "1.0.0",
"dependencies": {
"@verdaccio/test-cli-commons": "workspace:1.0.0",
"npm": "next-8"

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2018 Verdaccio
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -1,48 +0,0 @@
# E2E CLI Testing
## What is included on these test?
- Default configuration only
- Basic commands eg (`install / add`, `info`, `publish`).
- Test with 3 package managers (`yarn classic`, `pnpm` and `npm@7`)
## How it works?
On run test suites, there is a global setup where will install the local source code of verdaccio in a temporary folder.
Each suite will install.
1. `spawn` a registry on port `6001` using `_bootstrap_verdaccio.yaml` which block any local package being
fetched from remote upstream.
2. Publish local project to the spawned registry (with global `pnpm`)
> The published `verdaccio` should be fetch by each suite to ensure reliability of each test.
## How to write test?
Each of the suite must use a package manager command _(eg: `npm install`)_ and validate the output according what the
user see, either verifying the outcome in JSON form, run a command _(`eg: jest ..`)_ and the expected result.
Each Test should start with the initial setup, this step does the following
- `beforeAll`: Install verdaccio to the suite context that returns a `Setup` object.
- `afterAll`: Stop the child process that runs verdaccio.
```js
beforeAll(async () => {
setup = await initialSetup(tempRootFolder, port);
console.log('--setup', setup.install);
});
```
stop the process is the final step that should occur in every suite.
```js
afterAll(async () => {
setup.child.kill();
});
```
### What should not included on these tests?
- Anything is unrelated with client commands usage, eg: (auth permissions, third party integrations,
hooks, plugins)

@ -1,7 +1,7 @@
{
"private": true,
"name": "@verdaccio/e2e-cli-pnpm6",
"version": "2.0.0-6-next.1",
"version": "1.0.0",
"dependencies": {
"@verdaccio/test-cli-commons": "workspace:1.0.0",
"pnpm": "latest-6"

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2018 Verdaccio
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -1,48 +0,0 @@
# E2E CLI Testing
## What is included on these test?
- Default configuration only
- Basic commands eg (`install / add`, `info`, `publish`).
- Test with 3 package managers (`yarn classic`, `pnpm` and `npm@7`)
## How it works?
On run test suites, there is a global setup where will install the local source code of verdaccio in a temporary folder.
Each suite will install.
1. `spawn` a registry on port `6001` using `_bootstrap_verdaccio.yaml` which block any local package being
fetched from remote upstream.
2. Publish local project to the spawned registry (with global `pnpm`)
> The published `verdaccio` should be fetch by each suite to ensure reliability of each test.
## How to write test?
Each of the suite must use a package manager command _(eg: `npm install`)_ and validate the output according what the
user see, either verifying the outcome in JSON form, run a command _(`eg: jest ..`)_ and the expected result.
Each Test should start with the initial setup, this step does the following
- `beforeAll`: Install verdaccio to the suite context that returns a `Setup` object.
- `afterAll`: Stop the child process that runs verdaccio.
```js
beforeAll(async () => {
setup = await initialSetup(tempRootFolder, port);
console.log('--setup', setup.install);
});
```
stop the process is the final step that should occur in every suite.
```js
afterAll(async () => {
setup.child.kill();
});
```
### What should not included on these tests?
- Anything is unrelated with client commands usage, eg: (auth permissions, third party integrations,
hooks, plugins)

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2018 Verdaccio
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -1,48 +0,0 @@
# E2E CLI Testing
## What is included on these test?
- Default configuration only
- Basic commands eg (`install / add`, `info`, `publish`).
- Test with 3 package managers (`yarn classic`, `pnpm` and `npm@7`)
## How it works?
On run test suites, there is a global setup where will install the local source code of verdaccio in a temporary folder.
Each suite will install.
1. `spawn` a registry on port `6001` using `_bootstrap_verdaccio.yaml` which block any local package being
fetched from remote upstream.
2. Publish local project to the spawned registry (with global `pnpm`)
> The published `verdaccio` should be fetch by each suite to ensure reliability of each test.
## How to write test?
Each of the suite must use a package manager command _(eg: `npm install`)_ and validate the output according what the
user see, either verifying the outcome in JSON form, run a command _(`eg: jest ..`)_ and the expected result.
Each Test should start with the initial setup, this step does the following
- `beforeAll`: Install verdaccio to the suite context that returns a `Setup` object.
- `afterAll`: Stop the child process that runs verdaccio.
```js
beforeAll(async () => {
setup = await initialSetup(tempRootFolder, port);
console.log('--setup', setup.install);
});
```
stop the process is the final step that should occur in every suite.
```js
afterAll(async () => {
setup.child.kill();
});
```
### What should not included on these tests?
- Anything is unrelated with client commands usage, eg: (auth permissions, third party integrations,
hooks, plugins)

@ -1,7 +1,7 @@
{
"private": true,
"name": "@verdaccio/e2e-cli-yarn1",
"version": "2.0.0-6-next.1",
"version": "1.0.0",
"dependencies": {
"@verdaccio/test-cli-commons": "workspace:1.0.0",
"yarn": "1.22.19"

@ -0,0 +1,3 @@
{
"extends": "../../../.babelrc"
}

@ -0,0 +1,7 @@
{
"rules": {
"no-console": 0,
"@typescript-eslint/no-var-requires": 0,
"@typescript-eslint/explicit-member-accessibility": 0
}
}

@ -0,0 +1,35 @@
import { join } from 'path';
import { initialSetup, prepareYarnModernProject } from '@verdaccio/test-cli-commons';
import { getYarnCommand, yarn } from './utils';
describe('install a package', () => {
jest.setTimeout(10000);
let registry;
let projectFolder;
beforeAll(async () => {
const setup = await initialSetup();
registry = setup.registry;
await registry.init();
const { tempFolder } = await prepareYarnModernProject(
join(__dirname, './yarn-project'),
'yarn-2',
registry.getRegistryUrl(),
getYarnCommand()
);
projectFolder = tempFolder;
});
test('should run yarn 2 info json body', async () => {
const resp = await yarn(projectFolder, 'npm', 'info', 'verdaccio', '--json');
const parsedBody = JSON.parse(resp.stdout as string);
expect(parsedBody.name).toEqual('verdaccio');
expect(parsedBody.dependencies).toBeDefined();
});
afterAll(async () => {
registry.stop();
});
});

@ -0,0 +1,6 @@
const { defaults } = require('jest-config');
const config = require('../../../jest/config');
module.exports = Object.assign({}, config, {
moduleFileExtensions: [...defaults.moduleFileExtensions, 'ts'],
});

@ -0,0 +1,12 @@
{
"private": true,
"name": "@verdaccio/e2e-cli-yarn2",
"version": "1.0.0",
"dependencies": {
"@verdaccio/test-cli-commons": "workspace:1.0.0",
"@yarnpkg/cli-dist": "2.4.1"
},
"scripts": {
"test": "jest"
}
}

@ -0,0 +1,8 @@
{
"extends": "../../../tsconfig.reference.json",
"references": [
{
"path": "../cli-commons"
}
]
}

@ -0,0 +1,15 @@
import { join } from 'path';
import { exec } from '@verdaccio/test-cli-commons';
export function getCommand(projectFolder) {
return join(projectFolder, './.yarn/releases/yarn.js');
}
export function getYarnCommand() {
return join(__dirname, './node_modules/@yarnpkg/cli-dist/bin/yarn.js');
}
export function yarn(projectFolder, ...args: string[]) {
return exec({ cwd: projectFolder }, getCommand(projectFolder), args);
}

@ -0,0 +1,7 @@
httpRetry: 10
httpTimeout: 100000
npmRegistryServer: ${registry}
yarnPath: .yarn/releases/yarn.js
unsafeHttpWhitelist:
- localhost

@ -0,0 +1,4 @@
{
"name": "foo",
"version": "1.0.0"
}

@ -0,0 +1,3 @@
{
"extends": "../../../.babelrc"
}

@ -0,0 +1,7 @@
{
"rules": {
"no-console": 0,
"@typescript-eslint/no-var-requires": 0,
"@typescript-eslint/explicit-member-accessibility": 0
}
}

@ -0,0 +1,35 @@
import { join } from 'path';
import { initialSetup, prepareYarnModernProject } from '@verdaccio/test-cli-commons';
import { getYarnCommand, yarn } from './utils';
describe('install a package', () => {
jest.setTimeout(10000);
let registry;
let projectFolder;
beforeAll(async () => {
const setup = await initialSetup();
registry = setup.registry;
await registry.init();
const { tempFolder } = await prepareYarnModernProject(
join(__dirname, './yarn-project'),
'yarn-3',
registry.getRegistryUrl(),
getYarnCommand()
);
projectFolder = tempFolder;
});
test('should run yarn 3 info json body', async () => {
const resp = await yarn(projectFolder, 'npm', 'info', 'verdaccio', '--json');
const parsedBody = JSON.parse(resp.stdout as string);
expect(parsedBody.name).toEqual('verdaccio');
expect(parsedBody.dependencies).toBeDefined();
});
afterAll(async () => {
registry.stop();
});
});

@ -0,0 +1,6 @@
const { defaults } = require('jest-config');
const config = require('../../../jest/config');
module.exports = Object.assign({}, config, {
moduleFileExtensions: [...defaults.moduleFileExtensions, 'ts'],
});

@ -0,0 +1,12 @@
{
"private": true,
"name": "@verdaccio/e2e-cli-yarn3",
"version": "1.0.0",
"dependencies": {
"@verdaccio/test-cli-commons": "workspace:1.0.0",
"@yarnpkg/cli-dist": "3.2.2"
},
"scripts": {
"test": "jest"
}
}

@ -0,0 +1,8 @@
{
"extends": "../../../tsconfig.reference.json",
"references": [
{
"path": "../cli-commons"
}
]
}

@ -0,0 +1,15 @@
import { join } from 'path';
import { exec } from '@verdaccio/test-cli-commons';
export function getCommand(projectFolder) {
return join(projectFolder, './.yarn/releases/yarn.js');
}
export function getYarnCommand() {
return join(__dirname, './node_modules/@yarnpkg/cli-dist/bin/yarn.js');
}
export function yarn(projectFolder, ...args: string[]) {
return exec({ cwd: projectFolder }, getCommand(projectFolder), args);
}

@ -0,0 +1,7 @@
httpRetry: 10
httpTimeout: 100000
npmRegistryServer: ${registry}
yarnPath: .yarn/releases/yarn.js
unsafeHttpWhitelist:
- localhost

@ -0,0 +1,4 @@
{
"name": "foo",
"version": "1.0.0"
}

@ -0,0 +1,3 @@
{
"extends": "../../../.babelrc"
}

@ -0,0 +1,7 @@
{
"rules": {
"no-console": 0,
"@typescript-eslint/no-var-requires": 0,
"@typescript-eslint/explicit-member-accessibility": 0
}
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,35 @@
import { join } from 'path';
import { initialSetup, prepareYarnModernProject } from '@verdaccio/test-cli-commons';
import { getYarnCommand, yarn } from './utils';
describe('install a package', () => {
jest.setTimeout(10000);
let registry;
let projectFolder;
beforeAll(async () => {
const setup = await initialSetup();
registry = setup.registry;
await registry.init();
const { tempFolder } = await prepareYarnModernProject(
join(__dirname, './yarn-project'),
'yarn-4',
registry.getRegistryUrl(),
getYarnCommand()
);
projectFolder = tempFolder;
});
test('should run yarn 4 info json body', async () => {
const resp = await yarn(projectFolder, 'npm', 'info', 'verdaccio', '--json');
const parsedBody = JSON.parse(resp.stdout as string);
expect(parsedBody.name).toEqual('verdaccio');
expect(parsedBody.dependencies).toBeDefined();
});
afterAll(async () => {
registry.stop();
});
});

@ -0,0 +1,6 @@
const { defaults } = require('jest-config');
const config = require('../../../jest/config');
module.exports = Object.assign({}, config, {
moduleFileExtensions: [...defaults.moduleFileExtensions, 'ts'],
});

@ -0,0 +1,11 @@
{
"private": true,
"name": "@verdaccio/e2e-cli-yarn4",
"version": "1.0.0",
"dependencies": {
"@verdaccio/test-cli-commons": "workspace:1.0.0"
},
"scripts": {
"test": "jest"
}
}

@ -0,0 +1,8 @@
{
"extends": "../../../tsconfig.reference.json",
"references": [
{
"path": "../cli-commons"
}
]
}

@ -0,0 +1,16 @@
import { join } from 'path';
import { exec } from '@verdaccio/test-cli-commons';
export function getCommand(projectFolder) {
return join(projectFolder, './.yarn/releases/yarn.js');
}
export function getYarnCommand() {
// FUTURE: yarn 4 rc still not available via registry
return join(__dirname, './bin/yarn-4.0.0-rc.14.cjs');
}
export function yarn(projectFolder, ...args: string[]) {
return exec({ cwd: projectFolder }, getCommand(projectFolder), args);
}

@ -0,0 +1,7 @@
httpRetry: 10
httpTimeout: 100000
npmRegistryServer: ${registry}
yarnPath: .yarn/releases/yarn.js
unsafeHttpWhitelist:
- localhost

@ -0,0 +1,4 @@
{
"name": "foo",
"version": "1.0.0"
}