Skip to content

Commit

Permalink
travis: use multiple build stages
Browse files Browse the repository at this point in the history
This change rewrites .travis.yml to use many build stages/jobs. This
allows our build to run faster, as almost all jobs run in containers.

Stage 1: Run on all pushes to all branches
  - Job Build: just runs "make" to make sure everything is OK

Stage 2: Run on all PRs and pushes to master
  - Job Lint: Makes sure dep, "make gen", "make format", and "make lint"
              are all happy.
  - Job Build 1: Make sure "go get" and "make" will work. This job will
                 later run unit tests.
  - Job Build 2: Same as Job Build 1, except with another go version.
  - Job Integeration: Run integration tests (needs sudo, so needs VM)

Stage 3: Run on releases (if other stages pass)
  - Job Deploy: Publishes amd64 binaries to GitHub.
  • Loading branch information
josephlr committed Feb 12, 2018
1 parent 1347d83 commit 498fef6
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 16 deletions.
88 changes: 72 additions & 16 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,21 +1,77 @@
language: go
sudo: required
go:
- 1.9.x
sudo: false
dist: trusty
go: 1.9.x

addons:
apt:
sources:
- sourceline: 'deb http://en.archive.ubuntu.com/ubuntu/ artful main universe'
packages:
- libpam0g-dev
- e2fsprogs
- protobuf-compiler
- git # Needed to stop git from getting deleted
notifications:
email: false

install:
- make travis-install
stages:
- name: build
if: type = push
- name: presubmits
if: type = pr OR branch = master OR tag IS present
- name: deploy
if: type = push AND tag IS present

script:
- make travis-script
jobs:
include:
- stage: build
install: skip
script: make

- stage: presubmits
env: Generate, Format, and Lint
install:
- wget -q https://github.com/golang/dep/releases/download/v0.4.1/dep-linux-amd64 -O /tmp/dep
- chmod a+x /tmp/dep
- make tools
script:
- /tmp/dep status
- make gen
- bin/files-changed proto
- make format
- bin/files-changed format
- make lint

- &build
env: Build and Unit Tests
install: skip
script:
- go build github.com/google/fscrypt/cmd/fscrypt
- make
- <<: *build
go: 1.8.x

- env: Integration Tests
sudo: required
addons:
apt:
sources:
- sourceline: 'deb http://en.archive.ubuntu.com/ubuntu/ artful main universe'
packages:
- e2fsprogs
install:
- go get -u github.com/mattn/goveralls
- make test-setup
script:
- make coverage.out
- goveralls -coverprofile=coverage.out -service=travis-ci

- stage: deploy
env: Release Binaries
install: skip
script: skip
before_deploy: make
deploy:
- provider: releases
api_key:
secure: TODO
file:
- bin/fscrypt
- bin/pam_fscrypt.so
skip_cleanup: true
on:
repo: google/master
branch: master
tags: true
25 changes: 25 additions & 0 deletions bin/files-changed
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/usr/bin/env bash
# Detect if any files have changed in the git repository. Output an appropriate
# error message if they have changed.

if [[ -n $(git status -s) ]]; then
git diff --minimal HEAD
echo
echo "**************************************************"
case "$1" in
"proto")
echo "* .pb.go files and .proto files are out of sync. *"
echo "* Run \"make gen\" to generate them. *"
;;
"format")
echo "* C or Go files have incorrect formatting. *"
echo "* Run \"make format\" to fix them. *"
;;
*)
echo "* Files have changed in this repository. *"
;;
esac
echo "**************************************************"
git reset HEAD --hard
exit 1
fi

0 comments on commit 498fef6

Please sign in to comment.