0
Fork 0
mirror of https://github.com/verdaccio/verdaccio.git synced 2025-01-06 22:40:26 -05:00

Merge pull request #511 from verdaccio/fix-502

fix: Update website and move it to the root
This commit is contained in:
Juan Picado @jotadeveloper 2018-01-20 23:02:21 +01:00 committed by GitHub
commit 3c6a219c60
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
31 changed files with 345 additions and 159 deletions

View file

@ -1 +0,0 @@
theme: jekyll-theme-minimal

View file

@ -13,14 +13,14 @@ Verdaccio relies on `yarn` instead `npm` to download depenedencies.
## 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
--- | --- |
@ -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)**
#### 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*
@ -58,10 +58,12 @@ script | Description
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
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
pretest | A shorcut for transpile the code
test:ci | run test generating coverage
test:only | run only test
coverage:publish | publish on `codecov` the coverage (don't use it)
coverage:publish | publish on `codecov` the coverage (CI task specific, do not use it)
lint | run the linting for javascript code.
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`.

View file

@ -8,10 +8,19 @@ The verdaccio CLI is your go start the application.
## Commands
```bash
$ verdaccio --listen 4000 --config ./config.yaml
$ verdaccio --listen 4000 --config ~./config.yaml
```
Command | Default | Example | Description
--- | --- | --- | ---
--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.

View file

@ -99,7 +99,7 @@ publish:
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
@ -107,7 +107,7 @@ publish:
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
@ -157,8 +157,7 @@ notify:
```
> For more detailed configuration settings, please [check the source code](https://github.com/verdaccio/verdaccio/tree/master/conf).

View file

@ -61,9 +61,9 @@ We have support for **Kubernetes**, **Puppet**, **Ansible** and **Chef** and we
### 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).
@ -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).
## 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) |

View file

@ -3,12 +3,20 @@ id: dev-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
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
Either something bad happened or auth was unsuccessful.
@ -61,10 +69,79 @@ Auth.prototype.authenticate = function (user, password, callback) {
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
// 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.

View file

@ -5,7 +5,9 @@ title: Docker
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
@ -39,6 +41,8 @@ The Canary version (master branch) is tagged as `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
To run the docker container:

View file

@ -8,13 +8,14 @@ Verdaccio is a multiplatform web application, to install you need at least some
#### Prerequisites
1. Node higher than
- For version *2.x* we support from **4.6.1**
- For version *3.x* we support as minimum **6.12.0**
2. npm *>=3.x* or yarn
- For version `verdaccio@2.x` we support from Node `v4.6.1`.
- For version `verdaccio@3.x` we support as minimum Node `6.12.0`
2. npm `>=3.x` or `yarn`
3. The web interface support browsers `Chrome, Firefox, Edge, and IE9`
## 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`
@ -27,8 +28,6 @@ or using `yarn`
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
Once has been installed you only need to execute the CLI command.

View file

@ -3,7 +3,7 @@ id: 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

View file

@ -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/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/chainlink/charts/tree/master/stable/verdaccio](https://github.com/chainlink/charts/tree/master/stable/verdaccio) | Kubernetes support | Kubernetes
## Experimental Repos
@ -24,7 +25,6 @@ The following repositories aims to be part of the future infraestructure of `ver
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/blog](https://github.com/verdaccio/blog) | Any article related with verdaccio | Markdown

View file

@ -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/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.
@ -25,22 +25,29 @@ yarn run test
That will trigger only two first groups of test, unit and functional.
### 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
'use strict';
const verdaccio = require('../../src/api/index');
const config = require('./partials/config');
let assert = require('assert');
let parseInterval = require('../../src/lib/utils').parseInterval;
describe('basic system test', () => {
describe('Parse interval', function() {
before(function(done) {
..... some magic stuff before the show
});
beforeAll(function(done) {
// something important
});
it('server should respond on /', function(done) {
... this is an async test
});});
afterAll((done) => {
// undo something important
});
test('server should respond on /', done => {
// your test
done();
});
});
```
### 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.
```javascript
// create 3 server instances
require('./lib/startup');
...
// we create 3 server instances
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() {
// recover the server instances
const server = process.server;
const server2 = process.server2;
const server3 = process.server3;
// On start initialise 3 verdaccio servers
before(function(done) {
Promise.all([
require('./lib/startup').start('./store/test-storage', '/store/config-1.yaml'),
require('./lib/startup').start('./store/test-storage2', '/store/config-2.yaml'),
require('./lib/startup').start('./store/test-storage3', '/store/config-3.yaml'),
]).then(() => {
done();
}).catch(function(error) {
console.error("error on start servers", error);
// we check whether all instances has been started, since run in independent processes
beforeAll((done) => {
Promise.all([
process1.init(),
process2.init(),
process3.init()]).then((forks) => {
_.map(forks, (fork) => {
processRunning.push(fork[0]);
});
express.start(EXPRESS_PORT).then((app) =>{
done();
}, (err) => {
done(err);
});
}).catch((error) => {
done(error);
});
});
});
before(function() {
return Promise.all([server, server2, server3].map(function(server) {
// save a lsof -p output in order to compare on finish on finish all test
}));
});
..........
// 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();
// after finish all, we ensure are been stoped
afterAll(() => {
_.map(processRunning, (fork) => {
fork.stop();
});
express.server.close();
});
});
});
```
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
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
'use strict';
module.exports = function() {
// you can access the 3 instance through process global variables
const server = process.server;
const server2 = process.server2;
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/);
});
export default function(server) {
// we recieve any server instance via arguments
test('add tag - 404', () => {
// we interact with the server instance.
return server.addTag('testpkg-tag', 'tagtagtag', '0.0.1').status(404).body_error(/no such package/);
});
};
});
```
### 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.**

View file

@ -5,6 +5,8 @@ title: "Uplinks"
An *uplink* is a link with an external registry that provides acccess to external packages.
![Uplinks](/img/uplinks.png)
### Usage
```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
--- | --- | --- | --- | --- | --- | ---
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
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
@ -38,7 +40,7 @@ headers | list | No | authorization: "Basic YourBase64EncodedCredentials==" | al
### You Must know
* Uplinks must be registries compatible with the `npm` endpoints. Eg: *verdaccio*, *sinopia@1.4.0*, *npmjs registry*, *yarn registry* and more.
* Setting `cache` to false will help to save space in your hard drive.
* 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. 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.
* The (timeout, maxage and fail_timeout) format follow the [NGINX measurement units](http://nginx.org/en/docs/syntax.html)

View file

@ -3,6 +3,8 @@ id: webui
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.
```yaml

35
docs/what-is-verdaccio.md Normal file
View 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
````

View file

@ -130,7 +130,8 @@
"enterprise",
"modules",
"proxy",
"server"
"server",
"verdaccio"
],
"scripts": {
"release": "standard-version -a -s",

View file

@ -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.

View file

@ -17,6 +17,7 @@
"installation": "Installation",
"kubernetes": "Kubernetes",
"logger": "Logger",
"node-api": "Node API",
"notifications": "Notifications",
"packages": "Package Access",
"plugins": "Plugins",
@ -29,6 +30,7 @@
"uplinks": "Uplinks",
"use-cases": "Use Cases",
"webui": "Web User Interface",
"what-is-verdaccio": "What is Verdaccio?",
"windows": "Installing As a Windows Service",
"Docs": "Docs",
"Help": "Help",
@ -42,7 +44,7 @@
"Guides": "Guides"
},
"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",
"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",

View file

@ -127,7 +127,7 @@ const languages = [
tag: 'pt-PT',
},
{
enabled: true,
enabled: false,
name: 'Português (Brasil)',
tag: 'pt-BR',
},

View file

@ -22,7 +22,7 @@ class Help extends React.Component {
content: (
<translate>
Learn more using the [documentation on this
site.](/test-site/docs/en/doc1.html)
site.](/docs/en/installation.html)
</translate>
),
title: <translate>Browse Docs</translate>,

View file

@ -18,16 +18,18 @@ class Help extends React.Component {
const supportLinks = [
{
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',
},
{
content: 'Ask questions about the documentation and project',
title: 'Join the community',
content: 'You can follow and contact us on [Twitter](https://twitter.com/verdaccio_npm).',
title: 'Twitter',
},
{
content: "Find out what's new with this project",
title: 'Stay up to date',
content: "If the documentation is not enough help, you can try browsing into our " +
"[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">
<h2>Need help?</h2>
</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" />
</div>
</Container>

View file

@ -137,9 +137,9 @@ class Index extends React.Component {
<GridBlock
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.',
image: siteConfig.baseUrl + 'img/verdaccio-tiny@3x.png',
image: siteConfig.baseUrl + 'img/package_managers_grey.png',
imageAlign: 'right',
title: 'The most popular npm clients are supported',
},
@ -159,7 +159,7 @@ class Index extends React.Component {
'```bash\n' +
'helm install --name npm stable/verdaccio\n' +
'```\n',
image: siteConfig.baseUrl + 'img/verdaccio-tiny@3x.png',
image: siteConfig.baseUrl + 'img/devops_support_grey.png',
imageAlign: 'left',
title: 'Making the DevOps work easy',
},

View file

@ -31,9 +31,9 @@ class Users extends React.Component {
<p>This project is used by many folks</p>
</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
href="https://github.com/facebook/docusaurus/edit/master/website/siteConfig.js"
href="https://github.com/verdaccio/verdaccio/edit/master/website/siteConfig.js"
className="button">
Add your company
</a>

View file

@ -1,6 +1,7 @@
{
"docs": {
"Introduction": [
"what-is-verdaccio",
"installation",
"cli"
],

View file

@ -13,7 +13,7 @@ const siteConfig = {
tagline: 'A lightweight private npm proxy registry',
url: 'http://www.verdaccio.org' /* your website url */,
organizationName: 'verdaccio',
baseUrl: '/verdaccio/' /* base url for your project */,
baseUrl: '/' /* base url for your project */,
projectName: 'verdaccio',
headerLinks: [
{doc: 'installation', label: 'Docs'},
@ -24,7 +24,7 @@ const siteConfig = {
/* path to images for header/footer */
headerIcon: 'img/verdaccio-tiny.png',
footerIcon: 'img/verdaccio-blackwhite.png',
favicon: 'img/favicon.png',
favicon: 'img/favicon.ico',
/* colors for website */
colors: {
primaryColor: '#4B5E40',

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 984 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB