travis-after-all
is a script that can help you execute code only once
in a build matrix
based on whether the build has succeeded or failed.
Or to put it in another way, travis-after-all
is basically a temporary
workaround for: travis-ci/travis-ci#929
.
[1] Include the command that executes the travis-after-all
script
inside after_script
(or inside of a script that is included inside after_script
).
[2] Based on the (exit) code returned by travis-after-all
, run
your custom code.
See examples.
--
Terminology:
-
A job passed if either the tests passed, or the tests failed, but the job was allowed to fail.
-
A build succeeded if all jobs passed and there is at least one job whose tests passed.
-
A build failed if there is at least one job that didn't pass, or if all jobs passed, but for all of them the tests failed.
--
Meaning of (exit) codes:
-
0
- is returned to the job that was assigned to run the code if the build succeeded -
1
- is returned to the job that was assigned to run the code if the build failed -
2
- is returned to the jobs that where not assigned to do anything -
3
- is returned if something went wrong (e.g.:travis-after-all
failed to connect to Travis CI's API)
This section gives two examples of how your Travis job can obtain and
use travis-after-all
.
Install travis-after-all
as a devDependency
.
npm install --save-dev travis-after-all
Then, in your .travis.yml
file, add:
# ...
after_script:
- |
declare exitCode;
# -- [1] -------------------------------------------------------
$(npm bin)/travis-after-all
exitCode=$?
# -- [2] -------------------------------------------------------
if [ $exitCode -eq 0 ]; then
# Here goes the code that needs to be executed if the build succeeded
fi
if [ $exitCode -eq 1 ]; then
# Here goes the code that needs to be executed if the build failed
fi
# ...
You can also run travis-after-all
from within your node
script,
e.g.:
var travisAfterAll = require('travis-after-all');
function callback(code, error) {
if ( error !== undefined ) {
// ...
} else {
if ( code === 0 ) {
// Here goes the code that needs to be executed if the build succeeded
} else if ( code === 1) {
// Here goes the code that needs to be executed if the build failed
}
}
}
travisAfterAll(callback);
In your .travis.yml
file add:
# ...
after_script:
- |
declare exitCode
# -- [1] -------------------------------------------------------
curl -sSL https://raw.githubusercontent.com/alrra/travis-after-all/1.4.4/lib/travis-after-all.js | node
exitCode=$?
# -- [2] -------------------------------------------------------
if [ $exitCode -eq 0 ]; then
# Here goes the code that needs to be executed if the build succeeded
fi
if [ $exitCode -eq 1 ]; then
# Here goes the code that needs to be executed if the build failed
fi
# ...
Note: travis-after-all
is written in JavaScript, however, since
Travis includes the Node runtime by default,
it can be used no matter what build environment
you have.
The code is available under the MIT license.