medic-builds-repo
Design doc for builds repository.
DDOCS are pushed up by travis with a specific name. These are then pulled back down by api and deployed by horticulturalist.
Design Doc requirements
Naming scheme
Three valid examples: medic:medic:3.0.0-beta.1
, medic:medic:3.0.0
, medic:medic:my-awesome-feature-branch
.
The first two chunks between :
is the namespace and the application name respectively. The namespace is just that: it has no logic relevant and is just used to scope things. The application name maps to the original ddoc name. It is what will be used to determine what to call the ddoc when deploying it.
The next section is either the version or the branch. We support both "released" versions (1.2.3
) or and "pre-release" versions (1.2.3-beta.4
). The pre-release label can be whatever you like. We also support an arbitrary branch name.
Metadata
There needs to be a build_info
property in the ddoc:
Usage
All usage is through the builds/releases
view.
Usage is documented via the ddoc integration test, showing how to use the view using the PouchDB library. Other libraries (or straight curl
) will be similar.
Quick notes:
- use
startkey
andendkey
to filter the view to get what you want. - releases and pre-releases are sorted by the major / minor / patch / pre-releasse number
- branches are sorted newest branch first
Testing
You need grunt. To run the integration tests you need CouchDB (1.x or 2.x).
Run the unit tests with grunt unit
.
To also run the integration tests call grunt test
. You need to pass in the URL of the CouchDB database you want to run the tests on. The URL must contain any basic auth required. The DB doesn't have to yet exist. The tests will destroy and re-create this DB when running the tests:
TEST_URL=http://admin:pass@localhost:5984/builds-test grunt test
Deployment
The DDOC can be built with grunt build
.
Automatic deployment to the build server is handled by Travis, when a branch is merged to master. See: https://github.com/medic/medic-builds-repo/blob/master/scripts/pushToServer.js