0
Fork 0
mirror of https://github.com/verdaccio/verdaccio.git synced 2024-12-30 22:34:10 -05:00

docs: increase dev documentation

This commit is contained in:
Juan Picado @jotadeveloper 2017-10-29 07:46:05 +01:00
parent b5d10ddf93
commit d47f0b6a06
No known key found for this signature in database
GPG key ID: 18AC54485952D158
4 changed files with 129 additions and 24 deletions

View file

@ -64,7 +64,6 @@ from a fresh look at the code and the outstanding issues. So here we are 🎉
## Extend Verdaccio
* [Installing Plugins](plugins.md)
* Create your own plugins
## DevOps

View file

@ -0,0 +1,67 @@
# Creating Plugins
There are many ways to extend `verdaccio`, currently we only support `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`.
##### OnError
Either something bad happened or auth was unsuccessful.
```
callback(null, false)
```
##### OnSuccess
The auth was successful.
`groups` is an array of strings where the user is part of.
```
callback(null, groups);
```
### Example
```javascript
function Auth(config, stuff) {
var self = Object.create(Auth.prototype);
self._users = {};
// config for this module
self._config = config;
// verdaccio logger
self._logger = stuff.logger;
// pass verdaccio logger to ldapauth
self._config.client_options.log = stuff.logger;
return self;
}
Auth.prototype.authenticate = function (user, password, callback) {
var LdapClient = new LdapAuth(self._config.client_options);
....
LdapClient.authenticate(user, password, function (err, ldapUser) {
...
var groups;
...
callback(null, groups);
});
};
module.exports = Auth;
```
## Storage Plugins
// in progress
## Middleware Integration
// in progress

View file

@ -1,28 +1,27 @@
# Repositories
`verdaccio` is composed or multiple repositories you might contribute.
`verdaccio` is composed or multiple repositories you might contribute. Look into the **issues** tab whether there is a ticket waiting for you 🤠.
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
Repository | Usage | Stack
--- | ---| ---|
[https://github.com/verdaccio/verdaccio](https://github.com/verdaccio/verdaccio) | The main repository | Node, Express, async, React, Babel, ES6, Mocha, Markdown, HTML, Sass
[https://github.com/verdaccio/streams](https://github.com/verdaccio/streams) | Small library to handle streams | ES6, Babel, *Soon: Flow*
[https://github.com/verdaccio/file-locking](https://github.com/verdaccio/file-locking) | Small library to handle locked files | ES6, Babel, *Soon: Flow*
[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`) | ES6, Babel, Flow
[https://github.com/verdaccio/flow-types](https://github.com/verdaccio/flow-types) | `flow` type definitions for verdaccio and sub dependencies. | Flow, flow-typed
[https://github.com/verdaccio/verdaccio.github.io](https://github.com/verdaccio/verdaccio.github.io) | Public `verdaccio` website and future documentation page. | Markdown, HTML, Sass, Github Pages
[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..) | Docker Compose, Docker
[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
## 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
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/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

@ -10,7 +10,7 @@ Unit and functional tests are executed automatically by running `npm test` from
We use `mocha` for all test.
## Script
## The npm Script
To run the test script you can use either `npm` or `yarn`.
@ -20,8 +20,7 @@ yarn run test
That will trigger only two first groups of test, unit and functional.
### Unit Test
### 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.
```javacript
@ -40,7 +39,7 @@ describe('Parse interval', function() {
});});
```
### Functional Test
### Using test/functional
Funtional testing in verdaccio has a bit more of complextity that needs a deep explanation in order to success in your experience.
@ -112,6 +111,47 @@ The startup file is the responsable to create the 3 verdaccio instances and inje
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.
```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/);
});
});
};
```
### 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.