I kursen använder vi Travis CI för att köra våra test och vi använder gh-pages på Github för våra applikationer. Jag ville därför att Travis CI skulle publisera på gh-pages automatisk om testen lyckas och är gröna.

Gulp

Eftersom vi använder gulp, använder jag gulp-gh-pages för att pusha den genererade koden till gh-pages:

npm install gulp-gh-pages --save-dev

var deploy = require('gulp-gh-pages');

gulp.task('deploy', ['deploy:dist', 'deploy:docs'], function () {
  return gulp.src('.tmp/**/*.*')
    .pipe(deploy());
});

deploy:dist och deploy:docs genererar kod och dokumentation och lägger det i mappen .tmp/.

Travis CI

För att Travis ska ha tillåtelse att pusha till Github, måste namn, epost och token sparas för att senare användas för att sätta upp git hos Travis. För att inte behöva spara detta publikt i .travis.yml, har Travis skapat ett Ruby-gem som krypterar datan.

gem install travis

travis encrypt 'GIT_NAME="Ditt namn" GIT_EMAIL=foo@bar.com GH_TOKEN=token' --add

Du skapar din token på Github.com → settings → applications. Med --add läggs den enctryptade strängen automatiskt till i .travis.yaml. Travis använder den för att skapa environment variabler, som du kan använda för att sätta upp git.

env:
  global:
    secure: hemligt
before_script:
  - git config --global user.email "$GIT_EMAIL"
  - git config --global user.name "$GIT_NAME"
after_success:
  - gulp deploy

Du måste även ändra i gulpfile.js så att gulp deploy vet vilken remote den ska pusha till.

return gulp.src('.tmp/**/*.*')
  .pipe(deploy({
    remoteUrl: 'https://' + process.env.GH_TOKEN + '@github.com/anvnamn/repo.git'
  }));

Länkar

Det tog ett tag att få det att fungera, och dessa texter var till stor hjälp, även om de har valt att lösa det lite anorlunda jämfört med hur jag har löst det.