Literate version of examples/travis.coffee
This commit is contained in:
parent
d184528312
commit
30ce10d627
|
@ -0,0 +1,116 @@
|
||||||
|
# Cylon and Travis
|
||||||
|
|
||||||
|
For this Cylon example, we're going to check on a Travis build every ten
|
||||||
|
seconds, and change the color of a Sphero depending on the result.
|
||||||
|
|
||||||
|
Before you run this, make sure you install the following dependencies:
|
||||||
|
|
||||||
|
- **travis-ci** (npm install travis-ci)
|
||||||
|
- **cylon-sphero** (npm install cylon-sphero)
|
||||||
|
|
||||||
|
First of all, let's load up Cylon. We're going to load the version directly from
|
||||||
|
the repo, since we're here already:
|
||||||
|
|
||||||
|
Cylon = require '..'
|
||||||
|
|
||||||
|
Next, we'll set up Travis. We're going to be using the very useful [travis-ci][]
|
||||||
|
module.
|
||||||
|
|
||||||
|
[travis-ci]: https://github.com/pwmckenna/node-travis-ci
|
||||||
|
|
||||||
|
Travis = require 'travis-ci'
|
||||||
|
|
||||||
|
Now that we've got our Travis module imported, let's set it up:
|
||||||
|
|
||||||
|
travis = new Travis
|
||||||
|
version: '2.0.0'
|
||||||
|
|
||||||
|
Now we have a working interface to the Travis-CI API. Let's set up a username
|
||||||
|
and repo to query Travis about later, as long as we're here. Feel free to change
|
||||||
|
these if you want to try with your own repositories.
|
||||||
|
|
||||||
|
user = "hybridgroup"
|
||||||
|
name = "cylon"
|
||||||
|
|
||||||
|
## Robot
|
||||||
|
|
||||||
|
And with that last bit of setup done, let's start setting up our robot!
|
||||||
|
|
||||||
|
Cylon.robot
|
||||||
|
|
||||||
|
We use a connection to tell Cylon what port it can use to communicate with our
|
||||||
|
Sphero, along with what adaptor it should require (`cylon-sphero`) to connect to
|
||||||
|
it. We give it a name to make it easier to reference later on.
|
||||||
|
|
||||||
|
connection:
|
||||||
|
name: 'sphero', adaptor: 'sphero', port: '/dev/rfcomm0'
|
||||||
|
|
||||||
|
Devices are set up in a similar fashion, but allow us to directly issue commands
|
||||||
|
to the sphero. These are added to the robot's namespace directly to make them
|
||||||
|
easy to access.
|
||||||
|
|
||||||
|
device:
|
||||||
|
name: 'sphero', driver: 'sphero'
|
||||||
|
|
||||||
|
Now that we've told our robot what hardware it has access to, we can start
|
||||||
|
telling it what it should do. The work function passes along one argument,
|
||||||
|
a reference to the robot so we can access it's state and hardware.
|
||||||
|
|
||||||
|
work: (me) ->
|
||||||
|
|
||||||
|
We'll define a function to check Travis and change the Sphero's color depending
|
||||||
|
on the state of the last build.
|
||||||
|
|
||||||
|
checkTravis = ->
|
||||||
|
|
||||||
|
First, it will log that it's checking Travis to the logger:
|
||||||
|
|
||||||
|
Logger.info "Checking last build status for #{user}/#{name}"
|
||||||
|
|
||||||
|
Let's set the default color of the Sphero to blue until we know what the build
|
||||||
|
status is:
|
||||||
|
|
||||||
|
me.sphero.setColor 'blue', true
|
||||||
|
|
||||||
|
Now we'll fetch the Travis build status:
|
||||||
|
|
||||||
|
travis.repos {
|
||||||
|
owner_name: user
|
||||||
|
name: name
|
||||||
|
}, (err, res) ->
|
||||||
|
|
||||||
|
If we were returned a response, we'll check the status of the build and use that
|
||||||
|
to determine what color we should make the Sphero.
|
||||||
|
|
||||||
|
if res.repo
|
||||||
|
switch res.repo.last_build_state
|
||||||
|
|
||||||
|
When the build state is passed, then we'll set the Sphero's color to green:
|
||||||
|
|
||||||
|
when 'passed' then me.sphero.setColor 'green', true
|
||||||
|
|
||||||
|
And if the build has failed, let's set the Sphero's color to red:
|
||||||
|
|
||||||
|
when 'failed' then me.sphero.setColor 'red', true
|
||||||
|
|
||||||
|
Otherwise, we'll just set it to blue:
|
||||||
|
|
||||||
|
else me.sphero.setColor 'blue', true
|
||||||
|
|
||||||
|
And if we didn't get a response from the server, let's just set it to blue.
|
||||||
|
|
||||||
|
else me.sphero.setColor 'blue', true
|
||||||
|
|
||||||
|
Now that we've got that function defined, let's call it to set the initial color
|
||||||
|
of the Sphero:
|
||||||
|
|
||||||
|
do checkTravis
|
||||||
|
|
||||||
|
And every ten seconds, let's keep checking Travis:
|
||||||
|
|
||||||
|
every 10.seconds(), ->
|
||||||
|
do checkTravis
|
||||||
|
|
||||||
|
And now that we've got our work defined, let's start the robot!
|
||||||
|
|
||||||
|
.start()
|
Loading…
Reference in New Issue