mirror of
https://github.com/verdaccio/verdaccio.git
synced 2024-12-30 22:34:10 -05:00
docs: add development documentation, contribution guides, etc, wip
This commit is contained in:
parent
4b99b4f16d
commit
b5d10ddf93
6 changed files with 302 additions and 16 deletions
|
@ -2,10 +2,6 @@
|
||||||
|
|
||||||
`verdaccio` is a fork of **sinopia** and it's backwards compatible.
|
`verdaccio` is a fork of **sinopia** and it's backwards compatible.
|
||||||
|
|
||||||
🚀🚨🚨🚨🚨 **<--- Here we will have a fancy logo soon -->** 🚨🚨🚨🚨🚀
|
|
||||||
|
|
||||||
You can vote 👍🏻👍🏻👍🏻 or contribute in [this thread](https://github.com/verdaccio/verdaccio/issues/237).
|
|
||||||
|
|
||||||
## Why should I use verdaccio?👌
|
## Why should I use verdaccio?👌
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,36 +28,57 @@ from a fresh look at the code and the outstanding issues. So here we are 🎉
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
|
||||||
* [Installation](install.md)
|
* [Installation](install.md)
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
* [Command Line](cli.md)
|
* [Command Line](cli.md)
|
||||||
* [Understand the configuration file](config.md)
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
* [The configuration file](config.md)
|
||||||
* [Setting up *uplinks*](uplinks.md)
|
* [Setting up *uplinks*](uplinks.md)
|
||||||
* [Packages Access](packages.md)
|
* [Packages Access](packages.md)
|
||||||
|
* [Authorization and Access](auth.md)
|
||||||
* [Enable Notifications](notifications.md)
|
* [Enable Notifications](notifications.md)
|
||||||
* [Authorization and access](auth.md)
|
|
||||||
* [Logs](logger.md)
|
* [Custom Logs](logger.md)
|
||||||
|
|
||||||
|
### UI Customization
|
||||||
|
|
||||||
* [Configure the Web](web.md)
|
* [Configure the Web](web.md)
|
||||||
|
|
||||||
## Advanced Configurations
|
|
||||||
|
|
||||||
* [SSL Certificates](ssl.md)
|
## Server Configurations
|
||||||
* [Installing Plugins](plugins.md)
|
|
||||||
|
|
||||||
## Servers
|
|
||||||
|
|
||||||
* [Advanced Server Configuration](server.md)
|
* [Advanced Server Configuration](server.md)
|
||||||
* [Reverse Proxy](reverse-proxy.md)
|
* [Reverse Proxy](reverse-proxy.md)
|
||||||
|
* [SSL Certificates](ssl.md)
|
||||||
|
|
||||||
### Windows Configurations
|
### Windows Specific Settings
|
||||||
|
|
||||||
* [Installing As a Windows Service](windows.md)
|
* [Installing As a Windows Service](windows.md)
|
||||||
* [Installing on IIS server](iis-server.md)
|
* [Installing on IIS server](iis-server.md)
|
||||||
|
|
||||||
|
## Extend Verdaccio
|
||||||
|
* [Installing Plugins](plugins.md)
|
||||||
|
* Create your own plugins
|
||||||
|
|
||||||
## DevOps
|
## DevOps
|
||||||
|
|
||||||
* [Ansible](ansible.md)
|
* [Configure with Ansible](ansible.md)
|
||||||
* [Docker](docker.md)
|
* [Using Docker Image](docker.md)
|
||||||
|
|
||||||
## Recipes
|
## Verdaccio Recipes
|
||||||
|
|
||||||
* [Learn how to protect your packages](recipes/protect-your-dependencies.md)
|
* [Learn how to protect your packages](recipes/protect-your-dependencies.md)
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
* [I want to to contribute](dev/README.md)
|
||||||
|
* [Build verdaccio](dev/build.md)
|
||||||
|
* [Create plugins](dev/plugins.md)
|
||||||
|
* [Repositories](dev/repositories.md)
|
||||||
|
* [Unit Testing](dev/test.md)
|
||||||
|
|
51
wiki/dev/README.md
Normal file
51
wiki/dev/README.md
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
# Contributing
|
||||||
|
|
||||||
|
First of all 👏👏 thanks for visiting this page, for us means you are willing to contribute `verdaccio` and we are happy for that. Jumping into a unfamiliar code base is not easy but we are here to help you.
|
||||||
|
|
||||||
|
## Comunication Channels
|
||||||
|
|
||||||
|
If you are willing for asking we use two channels for discussions:
|
||||||
|
|
||||||
|
* [Public Gitter channel](https://gitter.im/verdaccio/)
|
||||||
|
* [Contributors Slack channel](https://verdaccio-npm.slack.com) (unfortunately only by email invitation, you might ask in Gitter to be included)
|
||||||
|
|
||||||
|
## Firts steps
|
||||||
|
|
||||||
|
As a first glance verdaccio is a single repository, but there are many ways you might contribute and variety of techonologies to practice.
|
||||||
|
|
||||||
|
### Finding my spot
|
||||||
|
|
||||||
|
#### I know or I want to learn Node.js
|
||||||
|
|
||||||
|
Node.js is the base of `verdaccio`, we use libraries as `express`, `commander`, `request` or `async`. Verdaccio is basically a Rest API that create a communication with `npm` clients compatible, as `yarn`.
|
||||||
|
|
||||||
|
#### I would prefer work in the User Interface
|
||||||
|
|
||||||
|
Recently we have moved to modern techonologies as `React` and `element-react`.
|
||||||
|
|
||||||
|
#### I feel more confortable improving the stack
|
||||||
|
|
||||||
|
Of course we will be happy to help us improving the stack, you can upgrade dependenciesas `eslint`, `stylelint`, `webpack`. Or merely improve the `webpack` configuration would be great. Any suggestion is very welcome. Furthermore whether you have experience with **Yeoman** you might help us with the [verdaccio generator](https://github.com/verdaccio/generator-verdaccio-plugin).
|
||||||
|
|
||||||
|
#### I do great Documentation
|
||||||
|
|
||||||
|
Many contributors find typos and grammar issues, that also helps to improve the overall experience for troubleshooting.
|
||||||
|
|
||||||
|
#### I am a Designer
|
||||||
|
|
||||||
|
We have a frontend website [http://www.verdaccio.org/](http://www.verdaccio.org/) that will be happy to see your ideas.
|
||||||
|
|
||||||
|
#### I am a DevOps
|
||||||
|
|
||||||
|
We have a widely popular Docker image [https://hub.docker.com/r/verdaccio/verdaccio/](https://hub.docker.com/r/verdaccio/verdaccio/) that need maintenance and pretty likely huge improvements, we need your knowledge for the benefits of all users.
|
||||||
|
|
||||||
|
We have support for **Puppet**, **Ansible** and **Cheff** and we need help in those fields, feel free to see all repositories.
|
||||||
|
|
||||||
|
## I'm ready to contribute
|
||||||
|
|
||||||
|
If you are thinking *"I've seen already the [repositories](repositories.md) and I'm willing to start right away"* then I have good nws for you, that's the next step.
|
||||||
|
|
||||||
|
You will need learn how to build, [we have prepared a guide just for that](build.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).
|
||||||
|
|
70
wiki/dev/build.md
Normal file
70
wiki/dev/build.md
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
# Build Verdaccio
|
||||||
|
|
||||||
|
Verdaccio relies on `yarn` instead `npm` to download depenedencies.
|
||||||
|
|
||||||
|
*Note: the current build only will build with `➜ yarn --version 0.28.4` or minor. It's not compatible with `yarn 1.x`*
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn install
|
||||||
|
```
|
||||||
|
|
||||||
|
## 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** 🚧.
|
||||||
|
|
||||||
|
|
||||||
|
#### Master branch (2.x)
|
||||||
|
|
||||||
|
On master branch the unique part we have to build is the UI which is based on React.js, webpack and CSS Modules.
|
||||||
|
|
||||||
|
### Scripts
|
||||||
|
|
||||||
|
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
|
||||||
|
pre:ci | specific task for CI, build the UI required for test
|
||||||
|
test:ci | run test generating coverage
|
||||||
|
test:only | run only test
|
||||||
|
test:coverage | run `nyc` as a wrapper to generate coverage with mocha test
|
||||||
|
coverage:html | run `nyc` to generate coverage reports
|
||||||
|
coverage:publish | publish on `codecov` the coverage (don't 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`.
|
||||||
|
pre:webpack | prepare the field for webpack (it a substask of `build:webui`)
|
||||||
|
build:webui | create the static assets for the UI with `webpack`
|
||||||
|
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)
|
||||||
|
|
||||||
|
The next 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*
|
||||||
|
|
||||||
|
### Scripts
|
||||||
|
|
||||||
|
script | Description
|
||||||
|
--- | --- |
|
||||||
|
**flow** | run flow check
|
||||||
|
**dev:start** | transpile and run `verdaccio` with `babel-node` on hot.
|
||||||
|
**code:build** | transpile `verdaccio` with `babel` and copy transpiled code to `build/`
|
||||||
|
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
|
||||||
|
pre:ci | specific task for CI, build the UI required for test
|
||||||
|
test:ci | run test generating coverage
|
||||||
|
test:only | run only test
|
||||||
|
test:coverage | run `nyc` as a wrapper to generate coverage with mocha test
|
||||||
|
coverage:html | run `nyc` to generate coverage reports
|
||||||
|
coverage:publish | publish on `codecov` the coverage (don't 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`.
|
||||||
|
pre:webpack | prepare the field for webpack (it a substask of `build:webui`)
|
||||||
|
build:webui | create the static assets for the UI with `webpack`
|
||||||
|
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)**
|
0
wiki/dev/plugins.md
Normal file
0
wiki/dev/plugins.md
Normal file
28
wiki/dev/repositories.md
Normal file
28
wiki/dev/repositories.md
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
# Repositories
|
||||||
|
|
||||||
|
`verdaccio` is composed or multiple repositories you might contribute.
|
||||||
|
|
||||||
|
Repository | Usage
|
||||||
|
--- | ---|
|
||||||
|
[https://github.com/verdaccio/verdaccio](https://github.com/verdaccio/verdaccio) | The main repository
|
||||||
|
[https://github.com/verdaccio/streams](https://github.com/verdaccio/streams) | Small library to handle streams
|
||||||
|
[https://github.com/verdaccio/file-locking](https://github.com/verdaccio/file-locking) | Small library to handle locked files
|
||||||
|
[https://github.com/verdaccio/local-storage](https://github.com/verdaccio/local-storage) | Default dependency for verdaccio to handle local file system storage (since `v3.x`)
|
||||||
|
[https://github.com/verdaccio/flow-types](https://github.com/verdaccio/flow-types) | `flow` type definitions for verdaccio and sub dependencies.
|
||||||
|
[https://github.com/verdaccio/verdaccio.github.io](https://github.com/verdaccio/verdaccio.github.io) | Public `verdaccio` website and future documentation page.
|
||||||
|
[https://github.com/verdaccio/docker-examples](https://github.com/verdaccio/docker-examples) | Docker examples with `docker-compose` to play around with integrations, (nginx, kubernetes, apache, ldap, etc..)
|
||||||
|
[https://github.com/verdaccio/docker-examples](https://github.com/verdaccio/docker-examples) | Docker examples with `docker-compose` to play around with integrations, (nginx, kubernetes, apache, ldap, etc..)
|
||||||
|
[https://github.com/verdaccio/puppet-verdaccio](https://github.com/verdaccio/puppet-verdaccio) | Puppet support
|
||||||
|
[https://github.com/verdaccio/ansible-verdaccio](https://github.com/verdaccio/ansible-verdaccio) | Ansible support
|
||||||
|
[https://github.com/verdaccio/verdaccio-cookbook](https://github.com/verdaccio/verdaccio-cookbook) | Chef support
|
||||||
|
|
||||||
|
## Experimental Repos
|
||||||
|
|
||||||
|
The following repositories aims to be part of the future infraestructure of `verdaccio` and are just PoC looking for active colaborators.
|
||||||
|
|
||||||
|
Repository | Usage
|
||||||
|
--- | ---|
|
||||||
|
[https://github.com/verdaccio/verdaccio-plugin-auth-htpasswd](https://github.com/verdaccio/verdaccio-plugin-auth-htpasswd) | Default authentification plugin based on Babel
|
||||||
|
[https://github.com/verdaccio/generator-verdaccio-plugin](https://github.com/verdaccio/generator-verdaccio-plugin) | Yeoman generators for future verdaccio plugins
|
||||||
|
[https://github.com/verdaccio/blog](https://github.com/verdaccio/blog) | Any article related with verdaccio
|
||||||
|
|
120
wiki/dev/test.md
Normal file
120
wiki/dev/test.md
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
# Unit Test
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
We use `mocha` for all test.
|
||||||
|
|
||||||
|
## Script
|
||||||
|
|
||||||
|
To run the test script you can use either `npm` or `yarn`.
|
||||||
|
|
||||||
|
```
|
||||||
|
yarn run test
|
||||||
|
```
|
||||||
|
|
||||||
|
That will trigger only two first groups of test, unit and functional.
|
||||||
|
|
||||||
|
### Unit Test
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
```javacript
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
let assert = require('assert');
|
||||||
|
let parseInterval = require('../../src/lib/utils').parseInterval;
|
||||||
|
|
||||||
|
describe('Parse interval', function() {
|
||||||
|
before(function(done) {
|
||||||
|
..... some magic stuff before the show
|
||||||
|
});
|
||||||
|
|
||||||
|
it('server should respond on /', function(done) {
|
||||||
|
... this is an async test
|
||||||
|
});});
|
||||||
|
```
|
||||||
|
|
||||||
|
### Functional Test
|
||||||
|
|
||||||
|
Funtional testing in verdaccio has a bit more of complextity that needs a deep explanation in order to success in your experience.
|
||||||
|
|
||||||
|
All starts in the `index.js` file. Let's dive in into it.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// create 3 server instances
|
||||||
|
require('./lib/startup');
|
||||||
|
...
|
||||||
|
|
||||||
|
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);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
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();
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
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`.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue