AEgir
Automated JavaScript project management.
Project Structure
The project structure when using this is quite strict, to ease
replication and configuration overhead.
All source code should be placed under src
, with the main entry
point being src/index.js
.
All test files should be placed under test
. Individual test files should end in .spec.js
and setup files for the node and the browser should be test/node.js
and test/browser.js
respectively.
Your package.json
should have the following entries.
"main": "src/index.js",
"scripts": {
"lint": "aegir-lint",
"release": "aegir-release",
"build": "aegir-build",
"test": "aegir-test",
"test:node": "aegir-test node",
"test:browser": "aegir-test browser",
"coverage": "aegir-coverage",
"coverage-publish": "aegir-coverage publish"
}
Stack Requirements
To bring you its many benefits, aegir
requires
Tasks
Linting
Linting uses eslint and standard
with some custom rules to enforce some more strictness.
You can run it using
$ aegir-lint
$ gulp lint
Testing
You can run it using
$ aegir-test
$ gulp test
There are also browser and node specific tasks
$ aegir-test node
$ gulp test:node
$ aegir-test browser
$ gulp test:browser
If the needed environment variables are set, tests are also run on [Sauce Labs].
You will need
$SAUCE=true
SAUCE_USERNAME=<username>
SAUCE_ACCESS_KEY=<access key>
Fixtures
Loading fixture files in node and the browser can be painful, that's why aegir provides
a method to do this. For it to work you have to put your fixtures in the folder test/fixtures
, and then
const loadFixture = require('aegir/fixtures')
const myFixture = loadFixture(__dirname, 'fixtures/largefixture')
If you write a module like interface-ipfs-core
which is to be consumed by other modules tests you need to pass in a third parameter such that
the server is able to serve the correct files.
For example
const loadFixture = require('aegir/fixtures'
const myFixture = loadFixture(__dirname, 'fixtures/coolfixture', 'awesome-tests')
require('awesome-tests')
'use strict'
module.exports = {
karma: {
files: [{
pattern: 'node_modules/awesome-tests/test/fixtures/**/*',
watched: false,
served: true,
included: false
}]
}
}
Coverage
You can run it using
$ aegir-coverage
$ gulp coverage
To auto publish coverage reports from Travis to Coveralls add this to
your .travis.yml
file. For more details see node-coveralls.
script:
- npm run coverage
after_success:
- npm run coverage-publish
Building
This will build a browser ready version into dist
, so after publishing the results will be available under
https://unpkg.com/<module-name>/dist/index.js
https://unpkg.com/<module-name>/dist/index.min.js
You can run it using
$ aegir-build
$ gulp build
Releasing
- Run linting
- Run tests
- Build everything
- Bump the version in
package.json
- Generate a changelog based on the git log
- Commit the version change &
CHANGELOG.md
- Create a git tag
- Run
git push
to upstream/master
- Publish a release to Github releases (if
GH_TOKEN
is available) - Publish to npm
$ gulp release --type major
$ aegir-release --type major
$ gulp release --type minor
$ aegir-release --type minor
$ gulp release
$ aegir-release
You can also specify a --env
for a release, which can be either
'node'
, 'browser'
or 'no-build'
.
$ aegir-release --env node
$ gulp release --env node
You can generate a changelog for all versions by using --first
$ aegir-relase --first
You can skip all changelog generation and the github release by passing
in --no-changelog
.
Other Notes
There is a badge.
[![aegir](https://img.shields.io/badge/follows-aegir-blue.svg?style=flat-square)](https://github.com/dignifiedquire/aegir)
License
MIT