Merge pull request #511 from verdaccio/fix-502
fix: Update website and move it to the root
|
@ -1 +0,0 @@
|
||||||
theme: jekyll-theme-minimal
|
|
|
@ -13,14 +13,14 @@ Verdaccio relies on `yarn` instead `npm` to download depenedencies.
|
||||||
|
|
||||||
## Scripts
|
## Scripts
|
||||||
|
|
||||||
We have a list of scripts that you will use for diferent kind of tasks, in the following section we describe all posible task based on branches. (yes 🎉🎉🎉 !! 🚧 we are working in the version 3.x that will provide a better and modern stack based on **Babel** and **Flow** 🚧.
|
We have a list of scripts that you will use for diferent kind of tasks, in the following section
|
||||||
|
we describe all posible task based on branches.
|
||||||
|
|
||||||
|
### Branch (2.x)
|
||||||
|
|
||||||
#### Master branch (2.x)
|
On branch `2.x` the unique part we have to build is the UI which is based on React.js, webpack and CSS Modules.
|
||||||
|
|
||||||
On master branch the unique part we have to build is the UI which is based on React.js, webpack and CSS Modules.
|
#### Scripts
|
||||||
|
|
||||||
### Scripts
|
|
||||||
|
|
||||||
script | Description
|
script | Description
|
||||||
--- | --- |
|
--- | --- |
|
||||||
|
@ -42,9 +42,9 @@ build:docker | create a local docker image with `verdaccio`
|
||||||
build:rpi | create a local docker for raspberry pi image with `verdaccio` **(experimental with no support)**
|
build:rpi | create a local docker for raspberry pi image with `verdaccio` **(experimental with no support)**
|
||||||
|
|
||||||
|
|
||||||
#### Branch (3.x)
|
#### Master branch (3.x)
|
||||||
|
|
||||||
The next major version is based on `babel` and `flow`. If you switch from master ensure to run `yarn install` again.
|
The current major version is based on `babel` and `flow`. If you switch from master ensure to run `yarn install` again.
|
||||||
|
|
||||||
*Note: Only new scripts in bold*
|
*Note: Only new scripts in bold*
|
||||||
|
|
||||||
|
@ -58,10 +58,12 @@ script | Description
|
||||||
release | this script is used to generate changelog and raise up the version according the commits messages
|
release | this script is used to generate changelog and raise up the version according the commits messages
|
||||||
prepublish | it ensures before publish the new ui is being generated
|
prepublish | it ensures before publish the new ui is being generated
|
||||||
test | run all the test `jest`
|
test | run all the test `jest`
|
||||||
|
test:unit | run the unit test
|
||||||
|
test:func | run the funtional test
|
||||||
pre:ci | specific task for CI, build the UI required for test
|
pre:ci | specific task for CI, build the UI required for test
|
||||||
|
pretest | A shorcut for transpile the code
|
||||||
test:ci | run test generating coverage
|
test:ci | run test generating coverage
|
||||||
test:only | run only test
|
coverage:publish | publish on `codecov` the coverage (CI task specific, do not use it)
|
||||||
coverage:publish | publish on `codecov` the coverage (don't use it)
|
|
||||||
lint | run the linting for javascript code.
|
lint | run the linting for javascript code.
|
||||||
lint:css | run the linter for `css`
|
lint:css | run the linter for `css`
|
||||||
dev:webui | run a `webpack` server with hot reloading enabled `http://localhost:4872/#/` it requires a `verdaccio` server running in port `4873`.
|
dev:webui | run a `webpack` server with hot reloading enabled `http://localhost:4872/#/` it requires a `verdaccio` server running in port `4873`.
|
||||||
|
|
13
docs/cli.md
|
@ -8,10 +8,19 @@ The verdaccio CLI is your go start the application.
|
||||||
## Commands
|
## Commands
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ verdaccio --listen 4000 --config ./config.yaml
|
$ verdaccio --listen 4000 --config ~./config.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
Command | Default | Example | Description
|
Command | Default | Example | Description
|
||||||
--- | --- | --- | ---
|
--- | --- | --- | ---
|
||||||
--listen \ **-l** | 4873 | -p 7000 | http port
|
--listen \ **-l** | 4873 | -p 7000 | http port
|
||||||
--config \ **-c** | ~/.local/verdaccio/config.yaml | ~/config.yaml | the configuration file
|
--config \ **-c** | ~/.local/verdaccio/config.yaml | ~./config.yaml | the configuration file
|
||||||
|
|
||||||
|
## Default config file location
|
||||||
|
|
||||||
|
To locate the home directory, we rely on **$XDG_DATA_HOME** as a first choice and Windows environment we look for [APPDATA environment variable](https://www.howtogeek.com/318177/what-is-the-appdata-folder-in-windows/).
|
||||||
|
|
||||||
|
## Default storage location
|
||||||
|
|
||||||
|
We use **$XDG_DATA_HOME** environment variable as default to locate the storage by default which [should be the same](https://askubuntu.com/questions/538526/is-home-local-share-the-default-value-for-xdg-data-home-in-ubuntu-14-04) as $HOME/.local/share.
|
||||||
|
If you are using a custom storage, this location is irrelevant.
|
||||||
|
|
|
@ -99,7 +99,7 @@ publish:
|
||||||
allow_offline: false
|
allow_offline: false
|
||||||
```
|
```
|
||||||
|
|
||||||
<small>Since: *v2.3.6* due [#223](https://github.com/verdaccio/verdaccio/pull/223)</small>
|
<small>Since: `verdaccio@2.3.6` due [#223](https://github.com/verdaccio/verdaccio/pull/223)</small>
|
||||||
|
|
||||||
### URL Prefix
|
### URL Prefix
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ publish:
|
||||||
url_prefix: https://dev.company.local/verdaccio/
|
url_prefix: https://dev.company.local/verdaccio/
|
||||||
```
|
```
|
||||||
|
|
||||||
Since: *v2.3.6* due [#197](https://github.com/verdaccio/verdaccio/pull/197)
|
Since: `verdaccio@2.3.6` due [#197](https://github.com/verdaccio/verdaccio/pull/197)
|
||||||
|
|
||||||
|
|
||||||
### Max Body Size
|
### Max Body Size
|
||||||
|
@ -157,8 +157,7 @@ notify:
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
> For more detailed configuration settings, please [check the source code](https://github.com/verdaccio/verdaccio/tree/master/conf).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -61,9 +61,9 @@ We have support for **Kubernetes**, **Puppet**, **Ansible** and **Chef** and we
|
||||||
|
|
||||||
### I can do translations
|
### I can do translations
|
||||||
|
|
||||||
Verdaccio aims to be multilingual, in order to achieve it we have the awesome support of [Crowdin](https://crowdin.com) that is an amazing platform for translations.
|
Verdaccio aims to be multilingual, in order to achieve it **we have the awesome support** of [Crowdin](https://crowdin.com) that is an amazing platform for translations.
|
||||||
|
|
||||||
<img src="https://d3n8a8pro7vhmx.cloudfront.net/uridu/pages/144/attachments/original/1485948891/Crowdin.png" width="100px"/>
|
<img src="https://d3n8a8pro7vhmx.cloudfront.net/uridu/pages/144/attachments/original/1485948891/Crowdin.png" width="400px"/>
|
||||||
|
|
||||||
We have setup a project where you can choose your favourite language, if you do not find your language feel free to request one [creating a ticket](https://github.com/verdaccio/verdaccio/issues/new).
|
We have setup a project where you can choose your favourite language, if you do not find your language feel free to request one [creating a ticket](https://github.com/verdaccio/verdaccio/issues/new).
|
||||||
|
|
||||||
|
@ -79,3 +79,82 @@ You will need learn how to build, [we have prepared a guide just for that](build
|
||||||
Once you have played around with all scripts and you know how to use them, we are ready to go to the next step, run the [**Unit Test**](test.md).
|
Once you have played around with all scripts and you know how to use them, we are ready to go to the next step, run the [**Unit Test**](test.md).
|
||||||
|
|
||||||
|
|
||||||
|
## Full list of contributors. We want to see your face here !
|
||||||
|
|
||||||
|
[<img alt="juanpicado" src="https://avatars0.githubusercontent.com/u/558752?v=4&s=117" width="117">](https://github.com/juanpicado) |[<img alt="rlidwka" src="https://avatars0.githubusercontent.com/u/999113?v=4&s=117" width="117">](https://github.com/rlidwka) |[<img alt="Meeeeow" src="https://avatars3.githubusercontent.com/u/19658647?v=4&s=117" width="117">](https://github.com/Meeeeow) |[<img alt="trentearl" src="https://avatars2.githubusercontent.com/u/802857?v=4&s=117" width="117">](https://github.com/trentearl) |[<img alt="ayusharma" src="https://avatars0.githubusercontent.com/u/6918450?v=4&s=117" width="117">](https://github.com/ayusharma) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[juanpicado](https://github.com/juanpicado) |[rlidwka](https://github.com/rlidwka) |[Meeeeow](https://github.com/Meeeeow) |[trentearl](https://github.com/trentearl) |[ayusharma](https://github.com/ayusharma) |
|
||||||
|
|
||||||
|
[<img alt="verdacciobot" src="https://avatars0.githubusercontent.com/u/35213902?v=4&s=117" width="117">](https://github.com/verdacciobot) |[<img alt="jmwilkinson" src="https://avatars0.githubusercontent.com/u/17836030?v=4&s=117" width="117">](https://github.com/jmwilkinson) |[<img alt="UnitedMarsupials" src="https://avatars1.githubusercontent.com/u/1486340?v=4&s=117" width="117">](https://github.com/UnitedMarsupials) |[<img alt="ryan-codingintrigue" src="https://avatars0.githubusercontent.com/u/9048902?v=4&s=117" width="117">](https://github.com/ryan-codingintrigue) |[<img alt="ramonornela" src="https://avatars1.githubusercontent.com/u/187946?v=4&s=117" width="117">](https://github.com/ramonornela) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[verdacciobot](https://github.com/verdacciobot) |[jmwilkinson](https://github.com/jmwilkinson) |[UnitedMarsupials](https://github.com/UnitedMarsupials) |[ryan-codingintrigue](https://github.com/ryan-codingintrigue) |[ramonornela](https://github.com/ramonornela) |
|
||||||
|
|
||||||
|
[<img alt="renovate-bot" src="https://avatars0.githubusercontent.com/u/25180681?v=4&s=117" width="117">](https://github.com/renovate-bot) |[<img alt="rodriguesbreno" src="https://avatars2.githubusercontent.com/u/19731692?v=4&s=117" width="117">](https://github.com/rodriguesbreno) |[<img alt="vernak2539" src="https://avatars2.githubusercontent.com/u/521270?v=4&s=117" width="117">](https://github.com/vernak2539) |[<img alt="jachstet-sea" src="https://avatars0.githubusercontent.com/u/7993508?v=4&s=117" width="117">](https://github.com/jachstet-sea) |[<img alt="lgaitan" src="https://avatars0.githubusercontent.com/u/5970350?v=4&s=117" width="117">](https://github.com/lgaitan) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[renovate-bot](https://github.com/renovate-bot) |[rodriguesbreno](https://github.com/rodriguesbreno) |[vernak2539](https://github.com/vernak2539) |[jachstet-sea](https://github.com/jachstet-sea) |[lgaitan](https://github.com/lgaitan) |
|
||||||
|
|
||||||
|
[<img alt="crispy1989" src="https://avatars1.githubusercontent.com/u/2132722?v=4&s=117" width="117">](https://github.com/crispy1989) |[<img alt="neuquino" src="https://avatars1.githubusercontent.com/u/1971027?v=4&s=117" width="117">](https://github.com/neuquino) |[<img alt="markpeterfejes" src="https://avatars3.githubusercontent.com/u/7912231?v=4&s=117" width="117">](https://github.com/markpeterfejes) |[<img alt="steve-p-com" src="https://avatars3.githubusercontent.com/u/5180548?v=4&s=117" width="117">](https://github.com/steve-p-com) |[<img alt="BartDubois" src="https://avatars0.githubusercontent.com/u/1180931?v=4&s=117" width="117">](https://github.com/BartDubois) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[crispy1989](https://github.com/crispy1989) |[neuquino](https://github.com/neuquino) |[markpeterfejes](https://github.com/markpeterfejes) |[steve-p-com](https://github.com/steve-p-com) |[BartDubois](https://github.com/BartDubois) |
|
||||||
|
|
||||||
|
[<img alt="karfau" src="https://avatars1.githubusercontent.com/u/135657?v=4&s=117" width="117">](https://github.com/karfau) |[<img alt="030" src="https://avatars1.githubusercontent.com/u/7524528?v=4&s=117" width="117">](https://github.com/030) |[<img alt="Qwerios" src="https://avatars2.githubusercontent.com/u/254447?v=4&s=117" width="117">](https://github.com/Qwerios) |[<img alt="wiggisser" src="https://avatars3.githubusercontent.com/u/3647678?v=4&s=117" width="117">](https://github.com/wiggisser) |[<img alt="kfatehi" src="https://avatars1.githubusercontent.com/u/175305?v=4&s=117" width="117">](https://github.com/kfatehi) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[karfau](https://github.com/karfau) |[030](https://github.com/030) |[Qwerios](https://github.com/Qwerios) |[wiggisser](https://github.com/wiggisser) |[kfatehi](https://github.com/kfatehi) |
|
||||||
|
|
||||||
|
[<img alt="imsnif" src="https://avatars3.githubusercontent.com/u/795598?v=4&s=117" width="117">](https://github.com/imsnif) |[<img alt="denisbabineau" src="https://avatars2.githubusercontent.com/u/12616025?v=4&s=117" width="117">](https://github.com/denisbabineau) |[<img alt="HCanber" src="https://avatars2.githubusercontent.com/u/800302?v=4&s=117" width="117">](https://github.com/HCanber) |[<img alt="jgoz" src="https://avatars2.githubusercontent.com/u/132233?v=4&s=117" width="117">](https://github.com/jgoz) |[<img alt="josephg" src="https://avatars1.githubusercontent.com/u/47413?v=4&s=117" width="117">](https://github.com/josephg) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[imsnif](https://github.com/imsnif) |[denisbabineau](https://github.com/denisbabineau) |[HCanber](https://github.com/HCanber) |[jgoz](https://github.com/jgoz) |[josephg](https://github.com/josephg) |
|
||||||
|
|
||||||
|
[<img alt="kba" src="https://avatars0.githubusercontent.com/u/273367?v=4&s=117" width="117">](https://github.com/kba) |[<img alt="aledbf" src="https://avatars2.githubusercontent.com/u/161571?v=4&s=117" width="117">](https://github.com/aledbf) |[<img alt="drubin" src="https://avatars0.githubusercontent.com/u/237513?v=4&s=117" width="117">](https://github.com/drubin) |[<img alt="plitex" src="https://avatars3.githubusercontent.com/u/2946823?v=4&s=117" width="117">](https://github.com/plitex) |[<img alt="nedelenbos" src="https://avatars2.githubusercontent.com/u/6542243?v=4&s=117" width="117">](https://github.com/nedelenbos) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[kba](https://github.com/kba) |[aledbf](https://github.com/aledbf) |[drubin](https://github.com/drubin) |[plitex](https://github.com/plitex) |[nedelenbos](https://github.com/nedelenbos) |
|
||||||
|
|
||||||
|
[<img alt="mysiar" src="https://avatars3.githubusercontent.com/u/13708162?v=4&s=117" width="117">](https://github.com/mysiar) |[<img alt="bufferoverflow" src="https://avatars2.githubusercontent.com/u/378909?v=4&s=117" width="117">](https://github.com/bufferoverflow) |[<img alt="osher" src="https://avatars0.githubusercontent.com/u/803101?v=4&s=117" width="117">](https://github.com/osher) |[<img alt="danielo515" src="https://avatars2.githubusercontent.com/u/2270425?v=4&s=117" width="117">](https://github.com/danielo515) |[<img alt="marnel" src="https://avatars3.githubusercontent.com/u/3189424?v=4&s=117" width="117">](https://github.com/marnel) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[mysiar](https://github.com/mysiar) |[bufferoverflow](https://github.com/bufferoverflow) |[osher](https://github.com/osher) |[danielo515](https://github.com/danielo515) |[marnel](https://github.com/marnel) |
|
||||||
|
|
||||||
|
[<img alt="aszmyd" src="https://avatars2.githubusercontent.com/u/3050805?v=4&s=117" width="117">](https://github.com/aszmyd) |[<img alt="estliberitas" src="https://avatars2.githubusercontent.com/u/568962?v=4&s=117" width="117">](https://github.com/estliberitas) |[<img alt="Alexandre-io" src="https://avatars0.githubusercontent.com/u/8135542?v=4&s=117" width="117">](https://github.com/Alexandre-io) |[<img alt="amirmohsen" src="https://avatars1.githubusercontent.com/u/7075106?v=4&s=117" width="117">](https://github.com/amirmohsen) |[<img alt="BarthV" src="https://avatars3.githubusercontent.com/u/1901955?v=4&s=117" width="117">](https://github.com/BarthV) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[aszmyd](https://github.com/aszmyd) |[estliberitas](https://github.com/estliberitas) |[Alexandre-io](https://github.com/Alexandre-io) |[amirmohsen](https://github.com/amirmohsen) |[BarthV](https://github.com/BarthV) |
|
||||||
|
|
||||||
|
[<img alt="BogdanAlexandru" src="https://avatars2.githubusercontent.com/u/5050074?v=4&s=117" width="117">](https://github.com/BogdanAlexandru) |[<img alt="iambrandonn" src="https://avatars2.githubusercontent.com/u/1644549?v=4&s=117" width="117">](https://github.com/iambrandonn) |[<img alt="robi-wan" src="https://avatars3.githubusercontent.com/u/30210?v=4&s=117" width="117">](https://github.com/robi-wan) |[<img alt="crohrer" src="https://avatars3.githubusercontent.com/u/1255222?v=4&s=117" width="117">](https://github.com/crohrer) |[<img alt="psychocode" src="https://avatars3.githubusercontent.com/u/4641709?v=4&s=117" width="117">](https://github.com/psychocode) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[BogdanAlexandru](https://github.com/BogdanAlexandru) |[iambrandonn](https://github.com/iambrandonn) |[robi-wan](https://github.com/robi-wan) |[crohrer](https://github.com/crohrer) |[psychocode](https://github.com/psychocode) |
|
||||||
|
|
||||||
|
[<img alt="conorhastings" src="https://avatars2.githubusercontent.com/u/8263298?v=4&s=117" width="117">](https://github.com/conorhastings) |[<img alt="coreyjewett" src="https://avatars3.githubusercontent.com/u/12782?v=4&s=117" width="117">](https://github.com/coreyjewett) |[<img alt="dbroadhurst" src="https://avatars1.githubusercontent.com/u/5667105?v=4&s=117" width="117">](https://github.com/dbroadhurst) |[<img alt="etiennetremel" src="https://avatars1.githubusercontent.com/u/995474?v=4&s=117" width="117">](https://github.com/etiennetremel) |[<img alt="einfallstoll" src="https://avatars3.githubusercontent.com/u/619048?v=4&s=117" width="117">](https://github.com/einfallstoll) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[conorhastings](https://github.com/conorhastings) |[coreyjewett](https://github.com/coreyjewett) |[dbroadhurst](https://github.com/dbroadhurst) |[etiennetremel](https://github.com/etiennetremel) |[einfallstoll](https://github.com/einfallstoll) |
|
||||||
|
|
||||||
|
[<img alt="gempain" src="https://avatars2.githubusercontent.com/u/13135149?v=4&s=117" width="117">](https://github.com/gempain) |[<img alt="lbguilherme" src="https://avatars0.githubusercontent.com/u/546954?v=4&s=117" width="117">](https://github.com/lbguilherme) |[<img alt="gecruz" src="https://avatars1.githubusercontent.com/u/29457476?v=4&s=117" width="117">](https://github.com/gecruz) |[<img alt="idangozlan" src="https://avatars3.githubusercontent.com/u/1991021?v=4&s=117" width="117">](https://github.com/idangozlan) |[<img alt="jrussellsmyth" src="https://avatars3.githubusercontent.com/u/2998207?v=4&s=117" width="117">](https://github.com/jrussellsmyth) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[gempain](https://github.com/gempain) |[lbguilherme](https://github.com/lbguilherme) |[gecruz](https://github.com/gecruz) |[idangozlan](https://github.com/idangozlan) |[jrussellsmyth](https://github.com/jrussellsmyth) |
|
||||||
|
|
||||||
|
[<img alt="jirutka" src="https://avatars1.githubusercontent.com/u/949228?v=4&s=117" width="117">](https://github.com/jirutka) |[<img alt="kingjan1999" src="https://avatars3.githubusercontent.com/u/3208269?v=4&s=117" width="117">](https://github.com/kingjan1999) |[<img alt="vStone" src="https://avatars2.githubusercontent.com/u/356719?v=4&s=117" width="117">](https://github.com/vStone) |[<img alt="zaventh" src="https://avatars1.githubusercontent.com/u/669283?v=4&s=117" width="117">](https://github.com/zaventh) |[<img alt="jeremymoritz" src="https://avatars3.githubusercontent.com/u/2779583?v=4&s=117" width="117">](https://github.com/jeremymoritz) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[jirutka](https://github.com/jirutka) |[kingjan1999](https://github.com/kingjan1999) |[vStone](https://github.com/vStone) |[zaventh](https://github.com/zaventh) |[jeremymoritz](https://github.com/jeremymoritz) |
|
||||||
|
|
||||||
|
[<img alt="jondlm" src="https://avatars2.githubusercontent.com/u/3290587?v=4&s=117" width="117">](https://github.com/jondlm) |[<img alt="speier" src="https://avatars3.githubusercontent.com/u/415836?v=4&s=117" width="117">](https://github.com/speier) |[<img alt="kodypeterson" src="https://avatars1.githubusercontent.com/u/1934708?v=4&s=117" width="117">](https://github.com/kodypeterson) |[<img alt="mrblackus" src="https://avatars3.githubusercontent.com/u/2353980?v=4&s=117" width="117">](https://github.com/mrblackus) |[<img alt="metaa" src="https://avatars3.githubusercontent.com/u/5056880?v=4&s=117" width="117">](https://github.com/metaa) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[jondlm](https://github.com/jondlm) |[speier](https://github.com/speier) |[kodypeterson](https://github.com/kodypeterson) |[mrblackus](https://github.com/mrblackus) |[metaa](https://github.com/metaa) |
|
||||||
|
|
||||||
|
[<img alt="bajtos" src="https://avatars1.githubusercontent.com/u/1140553?v=4&s=117" width="117">](https://github.com/bajtos) |[<img alt="okv" src="https://avatars3.githubusercontent.com/u/465522?v=4&s=117" width="117">](https://github.com/okv) |[<img alt="Vrtak-CZ" src="https://avatars1.githubusercontent.com/u/112567?v=4&s=117" width="117">](https://github.com/Vrtak-CZ) |[<img alt="rafacesar" src="https://avatars3.githubusercontent.com/u/71136?v=4&s=117" width="117">](https://github.com/rafacesar) |[<img alt="rbpinheiro" src="https://avatars2.githubusercontent.com/u/1257483?v=4&s=117" width="117">](https://github.com/rbpinheiro) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[bajtos](https://github.com/bajtos) |[okv](https://github.com/okv) |[Vrtak-CZ](https://github.com/Vrtak-CZ) |[rafacesar](https://github.com/rafacesar) |[rbpinheiro](https://github.com/rbpinheiro) |
|
||||||
|
|
||||||
|
[<img alt="r3wald" src="https://avatars3.githubusercontent.com/u/190202?v=4&s=117" width="117">](https://github.com/r3wald) |[<img alt="robertgroh" src="https://avatars3.githubusercontent.com/u/5773739?v=4&s=117" width="117">](https://github.com/robertgroh) |[<img alt="prssn" src="https://avatars1.githubusercontent.com/u/951218?v=4&s=117" width="117">](https://github.com/prssn) |[<img alt="RodrigoBalest" src="https://avatars0.githubusercontent.com/u/4810463?v=4&s=117" width="117">](https://github.com/RodrigoBalest) |[<img alt="RomainLK" src="https://avatars3.githubusercontent.com/u/1440514?v=4&s=117" width="117">](https://github.com/RomainLK) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[r3wald](https://github.com/r3wald) |[robertgroh](https://github.com/robertgroh) |[prssn](https://github.com/prssn) |[RodrigoBalest](https://github.com/RodrigoBalest) |[RomainLK](https://github.com/RomainLK) |
|
||||||
|
|
||||||
|
[<img alt="rmg" src="https://avatars2.githubusercontent.com/u/17978?v=4&s=117" width="117">](https://github.com/rmg) |[<img alt="samcday" src="https://avatars0.githubusercontent.com/u/531550?v=4&s=117" width="117">](https://github.com/samcday) |[<img alt="tarun1793" src="https://avatars0.githubusercontent.com/u/1783440?v=4&s=117" width="117">](https://github.com/tarun1793) |[<img alt="tcort" src="https://avatars3.githubusercontent.com/u/216720?v=4&s=117" width="117">](https://github.com/tcort) |[<img alt="grrowl" src="https://avatars2.githubusercontent.com/u/907140?v=4&s=117" width="117">](https://github.com/grrowl) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[rmg](https://github.com/rmg) |[samcday](https://github.com/samcday) |[tarun1793](https://github.com/tarun1793) |[tcort](https://github.com/tcort) |[grrowl](https://github.com/grrowl) |
|
||||||
|
|
||||||
|
[<img alt="tlvince" src="https://avatars2.githubusercontent.com/u/323761?v=4&s=117" width="117">](https://github.com/tlvince) |[<img alt="lordvlad" src="https://avatars2.githubusercontent.com/u/1217769?v=4&s=117" width="117">](https://github.com/lordvlad) |[<img alt="wpasternak" src="https://avatars3.githubusercontent.com/u/958449?v=4&s=117" width="117">](https://github.com/wpasternak) |[<img alt="yannickcr" src="https://avatars2.githubusercontent.com/u/13209?v=4&s=117" width="117">](https://github.com/yannickcr) |[<img alt="yannickglt" src="https://avatars0.githubusercontent.com/u/1006426?v=4&s=117" width="117">](https://github.com/yannickglt) |
|
||||||
|
:---: |:---: |:---: |:---: |:---: |
|
||||||
|
[tlvince](https://github.com/tlvince) |[lordvlad](https://github.com/lordvlad) |[wpasternak](https://github.com/wpasternak) |[yannickcr](https://github.com/yannickcr) |[yannickglt](https://github.com/yannickglt) |
|
||||||
|
|
||||||
|
[<img alt="silkentrance" src="https://avatars3.githubusercontent.com/u/6068824?v=4&s=117" width="117">](https://github.com/silkentrance) |[<img alt="jjaakola" src="https://avatars3.githubusercontent.com/u/3587824?v=4&s=117" width="117">](https://github.com/jjaakola) |[<img alt="maxlaverse" src="https://avatars0.githubusercontent.com/u/3045354?v=4&s=117" width="117">](https://github.com/maxlaverse) |[<img alt="ChadKillingsworth" src="https://avatars2.githubusercontent.com/u/1247639?v=4&s=117" width="117">](https://github.com/ChadKillingsworth) |
|
||||||
|
:---: |:---: |:---: |:---: |
|
||||||
|
[silkentrance](https://github.com/silkentrance) |[jjaakola](https://github.com/jjaakola) |[maxlaverse](https://github.com/maxlaverse) |[ChadKillingsworth](https://github.com/ChadKillingsworth) |
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,12 +3,20 @@ id: dev-plugins
|
||||||
title: "Developing Plugins"
|
title: "Developing Plugins"
|
||||||
---
|
---
|
||||||
|
|
||||||
There are many ways to extend `verdaccio`, currently we only support `authentication plugins`
|
There are many ways to extend `verdaccio`, currently we support `authentication plugins`, `middleware plugins` (since `v2.7.0`) and `storage plugins` since (`v3.x`).
|
||||||
|
|
||||||
## Authentication Plugins
|
## Authentication Plugins
|
||||||
|
|
||||||
This section will describe how it looks like a Verdaccio plugin in a ES5 way. Basically we have to return an object with a single method called `authenticate` that will recieve 3 arguments (`user, password, callback`). Once the authentication has been executed there is 2 options to give a response to `verdaccio`.
|
This section will describe how it looks like a Verdaccio plugin in a ES5 way. Basically we have to return an object with a single method called `authenticate` that will recieve 3 arguments (`user, password, callback`). Once the authentication has been executed there is 2 options to give a response to `verdaccio`.
|
||||||
|
|
||||||
|
### API
|
||||||
|
|
||||||
|
```js
|
||||||
|
function authenticate (user, password, callback) {
|
||||||
|
...more stuff
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
##### OnError
|
##### OnError
|
||||||
|
|
||||||
Either something bad happened or auth was unsuccessful.
|
Either something bad happened or auth was unsuccessful.
|
||||||
|
@ -61,10 +69,79 @@ Auth.prototype.authenticate = function (user, password, callback) {
|
||||||
module.exports = Auth;
|
module.exports = Auth;
|
||||||
```
|
```
|
||||||
|
|
||||||
## Storage Plugins
|
And the setup
|
||||||
|
|
||||||
// in progress
|
```yaml
|
||||||
|
auth:
|
||||||
|
htpasswd:
|
||||||
|
file: ./htpasswd
|
||||||
|
```
|
||||||
|
Where `htpasswd` is the sufix of the plugin name. eg: `verdaccio-htpasswd` and the rest of the body would be the plugin configuration params.
|
||||||
|
|
||||||
## Middleware Integration
|
## Middleware Integration
|
||||||
|
|
||||||
// in progress
|
Middleware plugins have the capability to modify the API layer, either adding new endpoints or intercepting requests. A pretty good example
|
||||||
|
of middleware plugin is the (sinopia-github-oauth)[https://github.com/soundtrackyourbrand/sinopia-github-oauth]) compatible with `verdaccio`.
|
||||||
|
|
||||||
|
### API
|
||||||
|
|
||||||
|
```js
|
||||||
|
function register_middlewares(expressApp, auth, storage) {
|
||||||
|
...more stuff
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
To register a middleware we need an object with a single method called `register_middlewares` that will recieve 3 arguments (`expressApp, auth, storage`).
|
||||||
|
*Auth* is the authentification instance and *storage* is also the main Storage instance that will give you have access to all to the storage actions.
|
||||||
|
|
||||||
|
|
||||||
|
## Storage Plugins
|
||||||
|
|
||||||
|
Since `verdaccio@3.x` we also can plug a custom storage.
|
||||||
|
|
||||||
|
### API
|
||||||
|
|
||||||
|
The storage API is a bit more complex, you will need to create a class that return a `ILocalData` implementation. Please see details bellow.
|
||||||
|
|
||||||
|
```js
|
||||||
|
|
||||||
|
class LocalDatabase<ILocalData>{
|
||||||
|
constructor(config: Config, logger: Logger): ILocalData;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ILocalData {
|
||||||
|
add(name: string): SyncReturn;
|
||||||
|
remove(name: string): SyncReturn;
|
||||||
|
get(): StorageList;
|
||||||
|
getPackageStorage(packageInfo: string): IPackageStorage;
|
||||||
|
sync(): ?SyncReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ILocalPackageManager {
|
||||||
|
writeTarball(name: string): IUploadTarball;
|
||||||
|
readTarball(name: string): IReadTarball;
|
||||||
|
readPackage(fileName: string, callback: Callback): void;
|
||||||
|
createPackage(name: string, value: any, cb: Callback): void;
|
||||||
|
deletePackage(fileName: string, callback: Callback): void;
|
||||||
|
removePackage(callback: Callback): void;
|
||||||
|
updatePackage(pkgFileName: string,
|
||||||
|
updateHandler: Callback,
|
||||||
|
onWrite: Callback,
|
||||||
|
transformPackage: Function,
|
||||||
|
onEnd: Callback): void;
|
||||||
|
savePackage(fileName: string, json: Package, callback: Callback): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IUploadTarball extends stream$PassThrough {
|
||||||
|
abort(): void;
|
||||||
|
done(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IReadTarball extends stream$PassThrough {
|
||||||
|
abort(): void;
|
||||||
|
done(): void;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
> This API still is experimental and might change next minor versions. The default [LocalStorage plugin](https://github.com/verdaccio/local-storage) it comes built-in in `verdaccio` and it is being
|
||||||
|
loaded if any storage plugin has been defined.
|
||||||
|
|
|
@ -5,7 +5,9 @@ title: Docker
|
||||||
|
|
||||||
To pull the latest pre-built [docker image](https://hub.docker.com/r/verdaccio/verdaccio/):
|
To pull the latest pre-built [docker image](https://hub.docker.com/r/verdaccio/verdaccio/):
|
||||||
|
|
||||||
`docker pull verdaccio/verdaccio`
|
```bash
|
||||||
|
docker pull verdaccio/verdaccio
|
||||||
|
```
|
||||||
|
|
||||||
## Tagged Versions
|
## Tagged Versions
|
||||||
|
|
||||||
|
@ -39,6 +41,8 @@ The Canary version (master branch) is tagged as `alpha`
|
||||||
docker pull verdaccio/verdaccio:alpha
|
docker pull verdaccio/verdaccio:alpha
|
||||||
```
|
```
|
||||||
|
|
||||||
|
> If you are interested on a list of tags, [please visit the Docker Hub website](https://hub.docker.com/r/verdaccio/verdaccio/tags/).
|
||||||
|
|
||||||
## Running verdaccio using Docker
|
## Running verdaccio using Docker
|
||||||
|
|
||||||
To run the docker container:
|
To run the docker container:
|
||||||
|
|
|
@ -8,13 +8,14 @@ Verdaccio is a multiplatform web application, to install you need at least some
|
||||||
#### Prerequisites
|
#### Prerequisites
|
||||||
|
|
||||||
1. Node higher than
|
1. Node higher than
|
||||||
- For version *2.x* we support from **4.6.1**
|
- For version `verdaccio@2.x` we support from Node `v4.6.1`.
|
||||||
- For version *3.x* we support as minimum **6.12.0**
|
- For version `verdaccio@3.x` we support as minimum Node `6.12.0`
|
||||||
2. npm *>=3.x* or yarn
|
2. npm `>=3.x` or `yarn`
|
||||||
|
3. The web interface support browsers `Chrome, Firefox, Edge, and IE9`
|
||||||
|
|
||||||
## Installing the CLI
|
## Installing the CLI
|
||||||
|
|
||||||
`Verdaccio` must be install globaly using any of the most modern
|
`verdaccio` must be install globaly using any of the most modern
|
||||||
|
|
||||||
Using `npm`
|
Using `npm`
|
||||||
|
|
||||||
|
@ -27,8 +28,6 @@ or using `yarn`
|
||||||
yarn global add verdaccio
|
yarn global add verdaccio
|
||||||
```
|
```
|
||||||
|
|
||||||
> Warning: Verdaccio current is not support PM2's cluster mode, run it with cluster mode may cause unknown behavior
|
|
||||||
|
|
||||||
## Basic Usage
|
## Basic Usage
|
||||||
|
|
||||||
Once has been installed you only need to execute the CLI command.
|
Once has been installed you only need to execute the CLI command.
|
||||||
|
|
|
@ -3,7 +3,7 @@ id: node-api
|
||||||
title: "Node API"
|
title: "Node API"
|
||||||
---
|
---
|
||||||
|
|
||||||
Verdaccio can be invoqued programmatically.
|
Verdaccio can be invoqued programmatically. The node API was introduced after version `verdaccio@3.0.0-alpha.10`.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ Repository | Usage | Stack
|
||||||
[https://github.com/verdaccio/puppet-verdaccio](https://github.com/verdaccio/puppet-verdaccio) | Puppet support | Puppet
|
[https://github.com/verdaccio/puppet-verdaccio](https://github.com/verdaccio/puppet-verdaccio) | Puppet support | Puppet
|
||||||
[https://github.com/verdaccio/ansible-verdaccio](https://github.com/verdaccio/ansible-verdaccio) | Ansible support | Ansible
|
[https://github.com/verdaccio/ansible-verdaccio](https://github.com/verdaccio/ansible-verdaccio) | Ansible support | Ansible
|
||||||
[https://github.com/verdaccio/verdaccio-cookbook](https://github.com/verdaccio/verdaccio-cookbook) | Chef support | Chef
|
[https://github.com/verdaccio/verdaccio-cookbook](https://github.com/verdaccio/verdaccio-cookbook) | Chef support | Chef
|
||||||
|
[https://github.com/chainlink/charts/tree/master/stable/verdaccio](https://github.com/chainlink/charts/tree/master/stable/verdaccio) | Kubernetes support | Kubernetes
|
||||||
|
|
||||||
## Experimental Repos
|
## Experimental Repos
|
||||||
|
|
||||||
|
@ -24,7 +25,6 @@ The following repositories aims to be part of the future infraestructure of `ver
|
||||||
|
|
||||||
Repository | Usage | Stack
|
Repository | Usage | Stack
|
||||||
--- | ---| ---|
|
--- | ---| ---|
|
||||||
[https://github.com/verdaccio/verdaccio-plugin-auth-htpasswd](https://github.com/verdaccio/verdaccio-plugin-auth-htpasswd) | Default authentification plugin based on Babel | ES6, Babel, Flow
|
[https://github.com/verdaccio/verdaccio-memory](https://github.com/verdaccio/verdaccio-memory) | An experimental storage in memory | ES6, Babel, Flow
|
||||||
[https://github.com/verdaccio/generator-verdaccio-plugin](https://github.com/verdaccio/generator-verdaccio-plugin) | Yeoman generators for future verdaccio plugins | ES6, Babel, Yeoman
|
[https://github.com/verdaccio/generator-verdaccio-plugin](https://github.com/verdaccio/generator-verdaccio-plugin) | Yeoman generators for future verdaccio plugins | ES6, Babel, Yeoman
|
||||||
[https://github.com/verdaccio/blog](https://github.com/verdaccio/blog) | Any article related with verdaccio | Markdown
|
|
||||||
|
|
||||||
|
|
179
docs/test.md
|
@ -7,7 +7,7 @@ All tests are split in three folders:
|
||||||
|
|
||||||
- `test/unit` - Tests that cover functions that transform data in an non-trivial way. These tests simply `require()` a few files and run code in there, so they are very fast.
|
- `test/unit` - Tests that cover functions that transform data in an non-trivial way. These tests simply `require()` a few files and run code in there, so they are very fast.
|
||||||
- `test/functional` - Tests that launch a verdaccio instance and perform a series of requests to it over http. They are slower than unit tests.
|
- `test/functional` - Tests that launch a verdaccio instance and perform a series of requests to it over http. They are slower than unit tests.
|
||||||
- `test/integration` - Tests that launch a verdaccio instance and do requests to it using npm. They are really slow and can hit a real npm registry. **This actually has not been tested or
|
- `test/integration` - Tests that launch a verdaccio instance and do requests to it using npm. They are really slow and can hit a real npm registry. **unmaintained test**
|
||||||
|
|
||||||
Unit and functional tests are executed automatically by running `npm test` from the project's root directory. Integration tests are supposed to be executed manually from time to time.
|
Unit and functional tests are executed automatically by running `npm test` from the project's root directory. Integration tests are supposed to be executed manually from time to time.
|
||||||
|
|
||||||
|
@ -25,22 +25,29 @@ yarn run test
|
||||||
That will trigger only two first groups of test, unit and functional.
|
That will trigger only two first groups of test, unit and functional.
|
||||||
|
|
||||||
### Using test/unit
|
### Using test/unit
|
||||||
The following is just an example how a unit test should looks like. Basically follow the `mocha` standard. Try to describe what exactly does the unit test in a single sentence in the header of the `it` section.
|
The following is just an example how a unit test should looks like. Basically follow the `jest` standard.
|
||||||
|
|
||||||
|
Try to describe what exactly does the unit test in a single sentence in the header of the `test` section.
|
||||||
|
|
||||||
```javacript
|
```javacript
|
||||||
'use strict';
|
const verdaccio = require('../../src/api/index');
|
||||||
|
const config = require('./partials/config');
|
||||||
|
|
||||||
let assert = require('assert');
|
describe('basic system test', () => {
|
||||||
let parseInterval = require('../../src/lib/utils').parseInterval;
|
|
||||||
|
|
||||||
describe('Parse interval', function() {
|
beforeAll(function(done) {
|
||||||
before(function(done) {
|
// something important
|
||||||
..... some magic stuff before the show
|
});
|
||||||
});
|
|
||||||
|
|
||||||
it('server should respond on /', function(done) {
|
afterAll((done) => {
|
||||||
... this is an async test
|
// undo something important
|
||||||
});});
|
});
|
||||||
|
|
||||||
|
test('server should respond on /', done => {
|
||||||
|
// your test
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
### Using test/functional
|
### Using test/functional
|
||||||
|
@ -50,111 +57,85 @@ Funtional testing in verdaccio has a bit more of complextity that needs a deep e
|
||||||
All starts in the `index.js` file. Let's dive in into it.
|
All starts in the `index.js` file. Let's dive in into it.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// create 3 server instances
|
// we create 3 server instances
|
||||||
require('./lib/startup');
|
const config1 = new VerdaccioConfig(
|
||||||
...
|
'./store/test-storage',
|
||||||
|
'./store/config-1.yaml',
|
||||||
|
'http://localhost:55551/');
|
||||||
|
const config2 = new VerdaccioConfig(
|
||||||
|
'./store/test-storage2',
|
||||||
|
'./store/config-2.yaml',
|
||||||
|
'http://localhost:55552/');
|
||||||
|
const config3 = new VerdaccioConfig(
|
||||||
|
'./store/test-storage3',
|
||||||
|
'./store/config-3.yaml',
|
||||||
|
'http://localhost:55553/');
|
||||||
|
const server1: IServerBridge = new Server(config1.domainPath);
|
||||||
|
const server2: IServerBridge = new Server(config2.domainPath);
|
||||||
|
const server3: IServerBridge = new Server(config3.domainPath);
|
||||||
|
const process1: IServerProcess = new VerdaccioProcess(config1, server1, SILENCE_LOG);
|
||||||
|
const process2: IServerProcess = new VerdaccioProcess(config2, server2, SILENCE_LOG);
|
||||||
|
const process3: IServerProcess = new VerdaccioProcess(config3, server3, SILENCE_LOG);
|
||||||
|
const express: any = new ExpressServer();
|
||||||
|
...
|
||||||
|
|
||||||
describe('functional test verdaccio', function() {
|
// we check whether all instances has been started, since run in independent processes
|
||||||
// recover the server instances
|
beforeAll((done) => {
|
||||||
const server = process.server;
|
Promise.all([
|
||||||
const server2 = process.server2;
|
process1.init(),
|
||||||
const server3 = process.server3;
|
process2.init(),
|
||||||
|
process3.init()]).then((forks) => {
|
||||||
// On start initialise 3 verdaccio servers
|
_.map(forks, (fork) => {
|
||||||
before(function(done) {
|
processRunning.push(fork[0]);
|
||||||
Promise.all([
|
});
|
||||||
require('./lib/startup').start('./store/test-storage', '/store/config-1.yaml'),
|
express.start(EXPRESS_PORT).then((app) =>{
|
||||||
require('./lib/startup').start('./store/test-storage2', '/store/config-2.yaml'),
|
done();
|
||||||
require('./lib/startup').start('./store/test-storage3', '/store/config-3.yaml'),
|
}, (err) => {
|
||||||
]).then(() => {
|
done(err);
|
||||||
done();
|
});
|
||||||
}).catch(function(error) {
|
}).catch((error) => {
|
||||||
console.error("error on start servers", error);
|
done(error);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
// after finish all, we ensure are been stoped
|
||||||
|
afterAll(() => {
|
||||||
before(function() {
|
_.map(processRunning, (fork) => {
|
||||||
return Promise.all([server, server2, server3].map(function(server) {
|
fork.stop();
|
||||||
// save a lsof -p output in order to compare on finish on finish all test
|
});
|
||||||
}));
|
express.server.close();
|
||||||
});
|
|
||||||
|
|
||||||
..........
|
|
||||||
// here is the unique line you should add, the new functional test.
|
|
||||||
require('./my-functional-test.js')();
|
|
||||||
|
|
||||||
// On finish kill all server
|
|
||||||
after(function(done) {
|
|
||||||
Promise.all([check(server), check(server2), check(server3)]).then(function() {
|
|
||||||
done();
|
|
||||||
}, (reason) => {
|
|
||||||
assert.equal(reason, null);
|
|
||||||
done();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
|
||||||
});
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Perhaps this is not he best approach, but, it's how works right now. So, you just learnt how the bootstrap works and how to add a new group of functional tests.
|
|
||||||
|
|
||||||
#### The lib/server.js
|
|
||||||
|
|
||||||
The server class is just a wrapper that simulates a `npm` client and provides a simple API for the funtional test.
|
|
||||||
|
|
||||||
As we mention in the previous section, we are creating 3 process servers that are accessible in each process as `process.server;`, `process.server2;` and ``process.server3;`.
|
|
||||||
|
|
||||||
Using such reference you will be able to send request to any of the 3 instance running.
|
|
||||||
|
|
||||||
#### The lib/startup.js
|
|
||||||
|
|
||||||
The startup file is the responsable to create the 3 verdaccio instances and inject them to the `process.x` global variable.
|
|
||||||
|
|
||||||
#### The lib/request.js
|
|
||||||
|
|
||||||
This module holds a `PromiseAssert` which extends from `Promise` adding methods to handle all request from `lib/server.js`.
|
|
||||||
|
|
||||||
### Usage
|
### Usage
|
||||||
|
|
||||||
Here we are gonna describe how it looks like an usual functional test, check inline for more detail information.
|
Here we are gonna describe how it looks like an usual functional test, check inline for more detail information.
|
||||||
|
|
||||||
|
#### The lib/server.js
|
||||||
|
|
||||||
|
The server class is just a wrapper that simulates a `npm` client and provides a simple API for the funtional test.
|
||||||
|
|
||||||
|
As we mention in the previous section, we are creating 3 process servers that are accessible in each process as `server1`, `server2` and ``server3`.
|
||||||
|
|
||||||
|
Using such reference you will be able to send request to any of the 3 instance running.
|
||||||
|
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = function() {
|
export default function(server) {
|
||||||
// you can access the 3 instance through process global variables
|
// we recieve any server instance via arguments
|
||||||
const server = process.server;
|
test('add tag - 404', () => {
|
||||||
const server2 = process.server2;
|
// we interact with the server instance.
|
||||||
|
return server.addTag('testpkg-tag', 'tagtagtag', '0.0.1').status(404).body_error(/no such package/);
|
||||||
describe('my-functional-group-test', function() {
|
|
||||||
before(function() {
|
|
||||||
// create a raw emtpy package
|
|
||||||
const pkg = require('./fixtures/package')('new-package');
|
|
||||||
return server.putPackage('new-package', pkg)
|
|
||||||
// check whether was uploaded correctly
|
|
||||||
.status(201)
|
|
||||||
// check whether body response is ok
|
|
||||||
.body_ok(/created new package/);
|
|
||||||
});
|
|
||||||
|
|
||||||
// since before are not registred, we use emtpy it to display before putPackage was success
|
|
||||||
it('creating new package / srv1', function() {});
|
|
||||||
|
|
||||||
it('should do something else here ..... ', function() {
|
|
||||||
// this should fails since fakeVersion does not exist
|
|
||||||
// note we use server2 because is an uplink of server 1
|
|
||||||
return server2.getTarball('new-package', 'fakeVersion')
|
|
||||||
.status(404)
|
|
||||||
.body_error(/no such file/);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
};
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
### Test/integration
|
### Test/integration
|
||||||
|
|
||||||
These section never has been used, but we are looking for help to make it run properly. All new ideas are very welcome.
|
These section never has been used, but we are looking for help to make it run properly. **All new ideas are very welcome.**
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,8 @@ title: "Uplinks"
|
||||||
|
|
||||||
An *uplink* is a link with an external registry that provides acccess to external packages.
|
An *uplink* is a link with an external registry that provides acccess to external packages.
|
||||||
|
|
||||||
|
![Uplinks](/img/uplinks.png)
|
||||||
|
|
||||||
### Usage
|
### Usage
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
@ -26,7 +28,7 @@ You can define mutiple uplinks and each of them must have an unique name (key).
|
||||||
Property | Type | Required | Example | Support | Description | Default
|
Property | Type | Required | Example | Support | Description | Default
|
||||||
--- | --- | --- | --- | --- | --- | ---
|
--- | --- | --- | --- | --- | --- | ---
|
||||||
url | string | Yes | https://registry.npmjs.org/ | all | The registry url | npmjs
|
url | string | Yes | https://registry.npmjs.org/ | all | The registry url | npmjs
|
||||||
ca | string | No | ~./ssl/client.crt' | all | SSL path certificate |
|
ca | string | No | ~./ssl/client.crt' | all | SSL path certificate | No default
|
||||||
timeout | string | No | 100ms | all | set new timeout for the request | 30s
|
timeout | string | No | 100ms | all | set new timeout for the request | 30s
|
||||||
maxage | string | No |10m | all | limit maximun failure request | 2m
|
maxage | string | No |10m | all | limit maximun failure request | 2m
|
||||||
fail_timeout | string | No |10m | all | defines max time when a request becomes a failure | 5m
|
fail_timeout | string | No |10m | all | defines max time when a request becomes a failure | 5m
|
||||||
|
@ -38,7 +40,7 @@ headers | list | No | authorization: "Basic YourBase64EncodedCredentials==" | al
|
||||||
|
|
||||||
### You Must know
|
### You Must know
|
||||||
|
|
||||||
* Uplinks must be registries compatible with the `npm` endpoints. Eg: *verdaccio*, *sinopia@1.4.0*, *npmjs registry*, *yarn registry* and more.
|
* Uplinks must be registries compatible with the `npm` endpoints. Eg: *verdaccio*, `sinopia@1.4.0`, *npmjs registry*, *yarn registry*, *JFrog*, *Nexus* and more.
|
||||||
* Setting `cache` to false will help to save space in your hard drive.
|
* Setting `cache` to false will help to save space in your hard drive. This will avoid store `tarballs` but [it will keep metadata in folders](https://github.com/verdaccio/verdaccio/issues/391).
|
||||||
* Exceed with multiple uplinks might slow down the lookup of your packages due for each request a npm client does, verdaccio does 1 call for each uplink.
|
* Exceed with multiple uplinks might slow down the lookup of your packages due for each request a npm client does, verdaccio does 1 call for each uplink.
|
||||||
* The (timeout, maxage and fail_timeout) format follow the [NGINX measurement units](http://nginx.org/en/docs/syntax.html)
|
* The (timeout, maxage and fail_timeout) format follow the [NGINX measurement units](http://nginx.org/en/docs/syntax.html)
|
||||||
|
|
|
@ -3,6 +3,8 @@ id: webui
|
||||||
title: "Web User Interface"
|
title: "Web User Interface"
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<p align="center"><img src="https://firebasestorage.googleapis.com/v0/b/jotadeveloper-website.appspot.com/o/verdaccio_long_video2.gif?alt=media&token=4d20cad1-f700-4803-be14-4b641c651b41"></p>
|
||||||
|
|
||||||
Verdaccio has a web user interface to display only the private packges and can be customisable.
|
Verdaccio has a web user interface to display only the private packges and can be customisable.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
|
35
docs/what-is-verdaccio.md
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
---
|
||||||
|
id: what-is-verdaccio
|
||||||
|
title: "What is Verdaccio?"
|
||||||
|
---
|
||||||
|
|
||||||
|
## In a nutshell
|
||||||
|
|
||||||
|
* It's a web app based on Node.js
|
||||||
|
* It's a private npm registry
|
||||||
|
* It's a local network proxy
|
||||||
|
* It's a Pluggable application
|
||||||
|
* It's a fairly easy install and use
|
||||||
|
* We offer Docker and Kubernetes support
|
||||||
|
* It is 100% compatible with yarn, npm and pnpm
|
||||||
|
* It was born based on `sinopia@1.4.0` fork and *backward compatible*
|
||||||
|
* Verdaccio means **A green color popular in late medieval Italy for fresco painting**.
|
||||||
|
|
||||||
|
## What's a registry
|
||||||
|
|
||||||
|
* A repository for packages that implements the CommonJS Compliant Package Registry specification for reading package info
|
||||||
|
* Store npm packages
|
||||||
|
* Provide an API compatible with npm clients
|
||||||
|
* Semantic Versioning (semver) compatible
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -v https://registry.npmjs.org/aaa
|
||||||
|
|
||||||
|
* Connected to registry.npmjs.org (151.101.12.162) port 443 (#0)
|
||||||
|
|
||||||
|
* Connection #0 to host registry.npmjs.org left intact
|
||||||
|
{"_id":"aaa","_rev":"6-ad86dfc8720569871753b5bf561f2741","name":"aaa","description":"aaa...","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.1":{"name":"aaa","version":"0.0.1","description":"aaa...","main":"index.js","scripts":{"test":"test.js"},"repository":{"type":"git","url":"http:/www.google.git"},"keywords":["math"],"author":{"name":"peter"},"license":"BSD","_id":"aaa@0.0.1","dist":
|
||||||
|
{"shasum":"a04fa88ad887a70dd5429652ce23823619dfd7c3","tarball":"https://registry.npmjs.org/aaa/-/aaa-0.0.1.tgz"},"_npmVersion":"1.1.62","_npmUser":{"name":"erhu65","email":"erhu65@gmail.com"},"maintainers":[{"name":"erhu65","email":"erhu65@gmail.com"}],"directories":{}},"0.0.2":{"name":"aaa","version":"0.0.2","description":"aaa...","main":"index.js","scripts":{"test":"test.js"},"repository":{"type":"git","url":"http:/www.google.git"},"keywords":["math"],"author":{"name":"peter"},"license":"BSD","_id":"aaa@0.0.2","dist":
|
||||||
|
{"shasum":"acd2f632b94b0f89765e75bb7b7549ce5b01caa2","tarball":"https://registry.npmjs.org/aaa/-/aaa-0.0.2.tgz"},"_npmVersion":"1.1.62","_npmUser":{"name":"erhu65","email":"erhu65@gmail.com"},"maintainers":[{"name":"erhu65","email":"erhu65@gmail.com"}],"directories":{}}},"readme":"ERROR: No README.md file found!","maintainers":[{"name":"erhu65","email":"erhu65@gmail.com"}],"timmacbook-j:verdaccio.mmacbookmacbook-j:verdaccio.master.git jpicmacbook-j:verdaccio.master.git jpicmacbookmacbookmacbookmacbookmacbook
|
||||||
|
````
|
||||||
|
|
|
@ -130,7 +130,8 @@
|
||||||
"enterprise",
|
"enterprise",
|
||||||
"modules",
|
"modules",
|
||||||
"proxy",
|
"proxy",
|
||||||
"server"
|
"server",
|
||||||
|
"verdaccio"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"release": "standard-version -a -s",
|
"release": "standard-version -a -s",
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
---
|
|
||||||
title: New Version 3.0.0
|
|
||||||
author: Juan Picado
|
|
||||||
authorURL: http://twitter.com/jotadeveloper
|
|
||||||
authorFBID: 1122901551
|
|
||||||
---
|
|
||||||
|
|
||||||
This blog post will test file name parsing issues when periods are present.
|
|
|
@ -17,6 +17,7 @@
|
||||||
"installation": "Installation",
|
"installation": "Installation",
|
||||||
"kubernetes": "Kubernetes",
|
"kubernetes": "Kubernetes",
|
||||||
"logger": "Logger",
|
"logger": "Logger",
|
||||||
|
"node-api": "Node API",
|
||||||
"notifications": "Notifications",
|
"notifications": "Notifications",
|
||||||
"packages": "Package Access",
|
"packages": "Package Access",
|
||||||
"plugins": "Plugins",
|
"plugins": "Plugins",
|
||||||
|
@ -29,6 +30,7 @@
|
||||||
"uplinks": "Uplinks",
|
"uplinks": "Uplinks",
|
||||||
"use-cases": "Use Cases",
|
"use-cases": "Use Cases",
|
||||||
"webui": "Web User Interface",
|
"webui": "Web User Interface",
|
||||||
|
"what-is-verdaccio": "What is Verdaccio?",
|
||||||
"windows": "Installing As a Windows Service",
|
"windows": "Installing As a Windows Service",
|
||||||
"Docs": "Docs",
|
"Docs": "Docs",
|
||||||
"Help": "Help",
|
"Help": "Help",
|
||||||
|
@ -42,7 +44,7 @@
|
||||||
"Guides": "Guides"
|
"Guides": "Guides"
|
||||||
},
|
},
|
||||||
"pages-strings": {
|
"pages-strings": {
|
||||||
"Learn more using the [documentation on this site.](/test-site/docs/en/doc1.html)|no description given": "Learn more using the [documentation on this site.](/test-site/docs/en/doc1.html)",
|
"Learn more using the [documentation on this site.](/docs/en/installation.html)|no description given": "Learn more using the [documentation on this site.](/docs/en/installation.html)",
|
||||||
"Browse Docs|no description given": "Browse Docs",
|
"Browse Docs|no description given": "Browse Docs",
|
||||||
"Ask questions about the documentation and project|no description given": "Ask questions about the documentation and project",
|
"Ask questions about the documentation and project|no description given": "Ask questions about the documentation and project",
|
||||||
"Join the community|no description given": "Join the community",
|
"Join the community|no description given": "Join the community",
|
||||||
|
|
|
@ -127,7 +127,7 @@ const languages = [
|
||||||
tag: 'pt-PT',
|
tag: 'pt-PT',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
enabled: true,
|
enabled: false,
|
||||||
name: 'Português (Brasil)',
|
name: 'Português (Brasil)',
|
||||||
tag: 'pt-BR',
|
tag: 'pt-BR',
|
||||||
},
|
},
|
||||||
|
|
|
@ -22,7 +22,7 @@ class Help extends React.Component {
|
||||||
content: (
|
content: (
|
||||||
<translate>
|
<translate>
|
||||||
Learn more using the [documentation on this
|
Learn more using the [documentation on this
|
||||||
site.](/test-site/docs/en/doc1.html)
|
site.](/docs/en/installation.html)
|
||||||
</translate>
|
</translate>
|
||||||
),
|
),
|
||||||
title: <translate>Browse Docs</translate>,
|
title: <translate>Browse Docs</translate>,
|
||||||
|
|
|
@ -18,16 +18,18 @@ class Help extends React.Component {
|
||||||
const supportLinks = [
|
const supportLinks = [
|
||||||
{
|
{
|
||||||
content:
|
content:
|
||||||
'Learn more using the [documentation on this site.](/test-site/docs/en/doc1.html)',
|
'Learn more about Verdaccio using the [documentation on this site.](/docs/en/installation.html)',
|
||||||
title: 'Browse Docs',
|
title: 'Browse Docs',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
content: 'Ask questions about the documentation and project',
|
content: 'You can follow and contact us on [Twitter](https://twitter.com/verdaccio_npm).',
|
||||||
title: 'Join the community',
|
title: 'Twitter',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
content: "Find out what's new with this project",
|
content: "If the documentation is not enough help, you can try browsing into our " +
|
||||||
title: 'Stay up to date',
|
"[Question Database](https://github.com/verdaccio/verdaccio/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Aquestion+) " +
|
||||||
|
"and also you can chat with the Verdaccio community in [Gitter](https://gitter.im/verdaccio/).",
|
||||||
|
title: 'More Help?',
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -38,7 +40,7 @@ class Help extends React.Component {
|
||||||
<header className="postHeader">
|
<header className="postHeader">
|
||||||
<h2>Need help?</h2>
|
<h2>Need help?</h2>
|
||||||
</header>
|
</header>
|
||||||
<p>This project is maintained by a dedicated group of people.</p>
|
<p>This project is maintained by the Verdaccio community.</p>
|
||||||
<GridBlock contents={supportLinks} layout="threeColumn" />
|
<GridBlock contents={supportLinks} layout="threeColumn" />
|
||||||
</div>
|
</div>
|
||||||
</Container>
|
</Container>
|
||||||
|
|
|
@ -137,9 +137,9 @@ class Index extends React.Component {
|
||||||
<GridBlock
|
<GridBlock
|
||||||
contents={[
|
contents={[
|
||||||
{
|
{
|
||||||
content: '**npm** and **yarn** are part of any development workflow,' +
|
content: '**npm**, **yarn** and **pnpm** are part of any development workflow,' +
|
||||||
' we try to catch up with the latest updates.',
|
' we try to catch up with the latest updates.',
|
||||||
image: siteConfig.baseUrl + 'img/verdaccio-tiny@3x.png',
|
image: siteConfig.baseUrl + 'img/package_managers_grey.png',
|
||||||
imageAlign: 'right',
|
imageAlign: 'right',
|
||||||
title: 'The most popular npm clients are supported',
|
title: 'The most popular npm clients are supported',
|
||||||
},
|
},
|
||||||
|
@ -159,7 +159,7 @@ class Index extends React.Component {
|
||||||
'```bash\n' +
|
'```bash\n' +
|
||||||
'helm install --name npm stable/verdaccio\n' +
|
'helm install --name npm stable/verdaccio\n' +
|
||||||
'```\n',
|
'```\n',
|
||||||
image: siteConfig.baseUrl + 'img/verdaccio-tiny@3x.png',
|
image: siteConfig.baseUrl + 'img/devops_support_grey.png',
|
||||||
imageAlign: 'left',
|
imageAlign: 'left',
|
||||||
title: 'Making the DevOps work easy',
|
title: 'Making the DevOps work easy',
|
||||||
},
|
},
|
||||||
|
|
|
@ -31,9 +31,9 @@ class Users extends React.Component {
|
||||||
<p>This project is used by many folks</p>
|
<p>This project is used by many folks</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="logos">{showcase}</div>
|
<div className="logos">{showcase}</div>
|
||||||
<p>Are you using this project?</p>
|
<p>Are you using this project? Do not be shy and add your company/project logo.</p>
|
||||||
<a
|
<a
|
||||||
href="https://github.com/facebook/docusaurus/edit/master/website/siteConfig.js"
|
href="https://github.com/verdaccio/verdaccio/edit/master/website/siteConfig.js"
|
||||||
className="button">
|
className="button">
|
||||||
Add your company
|
Add your company
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
"docs": {
|
"docs": {
|
||||||
"Introduction": [
|
"Introduction": [
|
||||||
|
"what-is-verdaccio",
|
||||||
"installation",
|
"installation",
|
||||||
"cli"
|
"cli"
|
||||||
],
|
],
|
||||||
|
|
|
@ -13,7 +13,7 @@ const siteConfig = {
|
||||||
tagline: 'A lightweight private npm proxy registry',
|
tagline: 'A lightweight private npm proxy registry',
|
||||||
url: 'http://www.verdaccio.org' /* your website url */,
|
url: 'http://www.verdaccio.org' /* your website url */,
|
||||||
organizationName: 'verdaccio',
|
organizationName: 'verdaccio',
|
||||||
baseUrl: '/verdaccio/' /* base url for your project */,
|
baseUrl: '/' /* base url for your project */,
|
||||||
projectName: 'verdaccio',
|
projectName: 'verdaccio',
|
||||||
headerLinks: [
|
headerLinks: [
|
||||||
{doc: 'installation', label: 'Docs'},
|
{doc: 'installation', label: 'Docs'},
|
||||||
|
@ -24,7 +24,7 @@ const siteConfig = {
|
||||||
/* path to images for header/footer */
|
/* path to images for header/footer */
|
||||||
headerIcon: 'img/verdaccio-tiny.png',
|
headerIcon: 'img/verdaccio-tiny.png',
|
||||||
footerIcon: 'img/verdaccio-blackwhite.png',
|
footerIcon: 'img/verdaccio-blackwhite.png',
|
||||||
favicon: 'img/favicon.png',
|
favicon: 'img/favicon.ico',
|
||||||
/* colors for website */
|
/* colors for website */
|
||||||
colors: {
|
colors: {
|
||||||
primaryColor: '#4B5E40',
|
primaryColor: '#4B5E40',
|
||||||
|
|
BIN
website/static/img/devops_support.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
website/static/img/devops_support_grey.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
website/static/img/favicon.ico
Normal file
After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 984 B |
BIN
website/static/img/packageManagers.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
website/static/img/package_managers_grey.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
website/static/img/uplinks.png
Normal file
After Width: | Height: | Size: 81 KiB |