Skip to content

Commit 346c485

Browse files
Cleanup travis build to only setup needed pre-requisites and cleanly support deployong with API/Cron
1 parent 75bd841 commit 346c485

1 file changed

Lines changed: 135 additions & 111 deletions

File tree

.travis.yml

Lines changed: 135 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,30 @@
11
# boards are ordered by priority so that when monitoring a build developers get feedback on the important ones first.
2-
env:
2+
matrix:
33
#Do not define 'global' env vars here. They cannot be used with API builds
4-
matrix:
5-
- MAKETARGET=lint
6-
- MAKETARGET=zip_devo8
7-
- MAKETARGET=zip_devo10
8-
- MAKETARGET=zip_devo12
9-
- MAKETARGET=zip_devo7e
10-
- MAKETARGET=zip_devof12e
11-
- MAKETARGET=zip_t8sg
12-
- MAKETARGET=zip_at9
13-
- MAKETARGET=zip_devof7
14-
- MAKETARGET=zip_win_emu_devo8
15-
- MAKETARGET=zip_emu_devo8
16-
- MAKETARGET=test
17-
# - COMPILER=latest TARGET=devo8
4+
fast_finish: true
5+
include:
6+
- stage: deploy
7+
env: MAKETARGET="zips winzips"
8+
- stage: build
9+
env: MAKETARGET=lint
10+
- env: MAKETARGET=zip_devo8
11+
- env: MAKETARGET=zip_devo10
12+
- env: MAKETARGET=zip_devo12
13+
- env: MAKETARGET=zip_devo7e
14+
- env: MAKETARGET=zip_devof12e
15+
- env: MAKETARGET=zip_t8sg
16+
- env: MAKETARGET=zip_at9
17+
- env: MAKETARGET=zip_devof7
18+
- env: MAKETARGET=zip_win_emu_devo8
19+
- env: MAKETARGET=zip_emu_devo8
20+
- env: MAKETARGET=test
21+
22+
stages:
23+
- name: deploy
24+
if: type IN (api, cron)
25+
- name: build
26+
if: type NOT IN (api, cron)
1827

19-
matrix:
20-
fast_finish: true
21-
2228
dist: trusty
2329

2430
addons:
@@ -32,119 +38,137 @@ addons:
3238
- mingw32-runtime
3339
- libfltk1.3-dev
3440
- gcovr
35-
# - gcc-arm-none-eabi
3641

37-
#Do NOT set these. They set 'CC' which breaks the build
3842
language: minimal
43+
#Do NOT set these. They set 'CC' which breaks the build
3944
#compiler: gcc
4045

4146
git:
4247
depth: 5
4348

4449
before_install:
45-
- pip install --user cpp-coveralls cpplint
46-
- if [ ! -d "$HOME/gcc-arm-none-eabi-8-2018-q4-major/bin" ]; then
47-
pushd $HOME;
48-
curl --retry 10 --retry-max-time 120 -L "https://developer.arm.com/-/media/Files/downloads/gnu-rm/8-2018q4/gcc-arm-none-eabi-8-2018-q4-major-linux.tar.bz2" | tar xfj -;
49-
popd;
50-
fi;
51-
# don't build 'tests' because they don't work on a cross-compile, so we need to specify 'DIRS' explicitly
52-
- if [ ! -d "$HOME/fltk-1.3.0-w32/bin" ]; then
53-
mkdir $HOME/src;
54-
mkdir $HOME/fltk-1.3.0-w32;
55-
pushd $HOME/src;
56-
curl --retry 10 --retry-max-time 120 -L "http://fltk.org/pub/fltk/1.3.0/fltk-1.3.0-source.tar.gz" | tar xzf -;
57-
cd fltk-1.3.0;
58-
./configure --prefix=$HOME/fltk-1.3.0-w32 --enable-localzlib --enable-localpng --disable-gl --host=i586-mingw32msvc &&
59-
make -j2 DIRS="jpeg zlib png src fluid" &&
60-
make install DIRS="jpeg zlib png src fluid";
61-
popd;
62-
fi;
63-
- if [ ! -d "$HOME/portaudio-w32/bin" ]; then
64-
mkdir $HOME/src;
65-
mkdir $HOME/portaudio-w32;
66-
pushd $HOME/src;
67-
curl --retry 10 --retry-max-time 120 -L "http://www.portaudio.com/archives/pa_stable_v19_20140130.tgz" | tar xzf -;
68-
cd portaudio;
69-
./configure --prefix=$HOME/portaudio-w32 --host=i586-mingw32msvc &&
70-
make -j2 install;
71-
popd;
72-
fi;
73-
- if [ ! -d "$HOME/mpg123-w32/bin" ]; then
74-
mkdir $HOME/src;
75-
mkdir $HOME/mpg123-w32;
76-
pushd $HOME/src;
77-
curl --retry 10 --retry-max-time 120 -L "http://www.mpg123.de/download/mpg123-1.23.8.tar.bz2" | tar xjf -;
78-
cd mpg123-1.23.8;
79-
./configure --prefix=$HOME/mpg123-w32 --host=i586-mingw32msvc --disable-shared && make;
80-
make -j2 install;
81-
strip --strip-unneeded $HOME/mpg123-w32/bin/mpg123.exe;
82-
popd;
83-
fi;
84-
- openssl aes-256-cbc -K $encrypted_54cd4d6ff016_key -iv $encrypted_54cd4d6ff016_iv -in install_nightlies.tar.enc -out install_nightlies.tar -d;
85-
tar -xf install_nightlies.tar;
86-
rm -f install_nightlies.tar
50+
# We'll put env variables global to all builds here
51+
- export GITHUB_TOKEN='789c538d758e0a718c8ae537b7f6656776e20d768de18d546014e20876e1898933cd94648f75e06117e20000b71f080d'
52+
# TRAVIS does not override the TRAVIS_COMMIT_MSG with the 'message' value passed via the API (travis issue #10184)
53+
- source <(curl -s -L "https://api.travis-ci.org/repos/$TRAVIS_REPO_SLUG/builds/$TRAVIS_BUILD_ID" | python -c 'import sys, json; a = json.load(sys.stdin); print "export TRAVIS_COMMIT_MSG=\"" + a.get("message","").replace("\"", "\\\"") + "\""')
8754

8855
install:
89-
- export GITHUB_TOKEN='789c538d758e0a718c8ae537b7f6656776e20d768de18d546014e20876e1898933cd94648f75e06117e20000b71f080d'
90-
- export PATH=$PATH:$HOME/gcc-arm-none-eabi-8-2018-q4-major/bin
91-
# - "export TRAVIS_COMMIT_MSG=\"$(git log --format=%B --no-merges -n 1)\""a
92-
- curl -s -L "https://api.travis-ci.org/repos/$TRAVIS_REPO_SLUG/builds/$TRAVIS_BUILD_ID" | python -c 'import sys, json; a = json.load(sys.stdin); print "export TRAVIS_EVENT_TYPE=" + a.get("event_type",""); print "export TRAVIS_COMMIT_MSG=\"" + a.get("message","").replace("\"", "\\\"") + "\""'
93-
- source <(curl -s -L "https://api.travis-ci.org/repos/$TRAVIS_REPO_SLUG/builds/$TRAVIS_BUILD_ID" | python -c 'import sys, json; a = json.load(sys.stdin); print "export TRAVIS_EVENT_TYPE=" + a.get("event_type",""); print "export TRAVIS_COMMIT_MSG=\"" + a.get("message","").replace("\"", "\\\"") + "\""')
94-
- if [[ "$MAKETARGET" == *"win"* ]]; then
95-
export FLTK_DIR=$HOME/fltk-1.3.0-w32;
96-
export PORTAUDIO_DIR=$HOME/portaudio-w32;
97-
export MPG123_DIR=$HOME/mpg123-w32;
98-
fi;
56+
- |
57+
export reqs=""
58+
case $MAKETARGET in
59+
test) export reqs="$reqs test" ;;
60+
lint) export reqs="$reqs lint" ;;
61+
*win*) export reqs="$reqs win" ;;&
62+
*emu*) ;; # catch emulator builds that don't need arm
63+
*) export reqs="$reqs arm" ;;
64+
esac
65+
echo "Requirements: $reqs"
66+
# These are separated to make it easier to visualize the build in the travis logs
67+
- if [[ $reqs == *"test"* ]]; then pip install --user cpp-coveralls; fi
68+
- if [[ $reqs == *"lint"* ]]; then pip install --user cpplint; fi
69+
- |
70+
if [[ $reqs == *"arm"* ]]; then
71+
if [[ ! -d "$HOME/gcc-arm-none-eabi-8-2018-q4-major/bin" ]]; then
72+
pushd $HOME
73+
curl --retry 10 --retry-max-time 120 -L \
74+
"https://developer.arm.com/-/media/Files/downloads/gnu-rm/8-2018q4/gcc-arm-none-eabi-8-2018-q4-major-linux.tar.bz2" | tar xfj -
75+
popd;
76+
popd
77+
fi
78+
export PATH=$PATH:$HOME/gcc-arm-none-eabi-8-2018-q4-major/bin
79+
fi
80+
- |
81+
if [[ $reqs == *"win"* ]]; then
82+
if [[ ! -d "$HOME/fltk-1.3.0-w32/bin" ]]; then
83+
# don't build 'tests' because they don't work on a cross-compile, so we need to specify 'DIRS' explicitly
84+
mkdir $HOME/src
85+
mkdir $HOME/fltk-1.3.0-w32
86+
pushd $HOME/src
87+
curl --retry 10 --retry-max-time 120 -L "http://fltk.org/pub/fltk/1.3.0/fltk-1.3.0-source.tar.gz" | tar xzf -
88+
cd fltk-1.3.0
89+
./configure --prefix=$HOME/fltk-1.3.0-w32 --enable-localzlib --enable-localpng --disable-gl --host=i586-mingw32msvc && \
90+
make -j2 DIRS="jpeg zlib png src fluid" && \
91+
make install DIRS="jpeg zlib png src fluid"
92+
popd
93+
fi
94+
export FLTK_DIR=$HOME/fltk-1.3.0-w32
95+
fi
96+
- |
97+
if [[ $reqs == *"win"* ]]; then
98+
if [[ ! -d "$HOME/portaudio-w32/bin" ]]; then
99+
mkdir $HOME/src
100+
mkdir $HOME/portaudio-w32
101+
pushd $HOME/src
102+
curl --retry 10 --retry-max-time 120 -L "http://www.portaudio.com/archives/pa_stable_v19_20140130.tgz" | tar xzf -
103+
cd portaudio
104+
./configure --prefix=$HOME/portaudio-w32 --host=i586-mingw32msvc && \
105+
make -j2 install
106+
popd
107+
fi
108+
export PORTAUDIO_DIR=$HOME/portaudio-w32
109+
fi
110+
- |
111+
if [[ $reqs == *"win"* ]]; then
112+
if [[ ! -d "$HOME/mpg123-w32/bin" ]]; then
113+
mkdir $HOME/src
114+
mkdir $HOME/mpg123-w32
115+
pushd $HOME/src
116+
curl --retry 10 --retry-max-time 120 -L "http://www.mpg123.de/download/mpg123-1.23.8.tar.bz2" | tar xjf -
117+
cd mpg123-1.23.8
118+
./configure --prefix=$HOME/mpg123-w32 --host=i586-mingw32msvc --disable-shared && make && \
119+
make -j2 install
120+
strip --strip-unneeded $HOME/mpg123-w32/bin/mpg123.exe
121+
popd
122+
fi
123+
export MPG123_DIR=$HOME/mpg123-w32
124+
fi
125+
- |
126+
if [[ "$TRAVIS_EVENT_TYPE" == "api" || "$TRAVIS_EVENT_TYPE" == "cron" ]]; then
127+
openssl aes-256-cbc -K $encrypted_54cd4d6ff016_key -iv $encrypted_54cd4d6ff016_iv -in install_nightlies.tar.enc -out install_nightlies.tar -d
128+
tar -xf install_nightlies.tar;
129+
rm -f install_nightlies.tar
130+
fi
99131
100132
before_script:
101-
- echo $PATH
102-
- echo $HOME
103-
- arm-none-eabi-gcc --version
133+
- env | sort
134+
- arm-none-eabi-gcc --version 2> /dev/null | true
104135

105136
script:
106-
- cd src;
107-
- if [[ "$TRAVIS_EVENT_TYPE" == "cron" && "$MAKETARGET" == "zip_devo8" ]]; then
108-
export MAKETARGET="zips winzips";
109-
export FLTK_DIR=$HOME/fltk-1.3.0-w32;
110-
export PORTAUDIO_DIR=$HOME/portaudio-w32;
111-
export MPG123_DIR=$HOME/mpg123-w32;
112-
fi;
113-
- make -j2 $MAKETARGET;
114-
- if [ "$MAKETARGET" == "test" ]; then
115-
./test.elf;
116-
fi;
117-
- ../utils/archive_build_size.py "$MAKETARGET" || /bin/true;
137+
- cd src
138+
- make -j2 $MAKETARGET
139+
- |
140+
if [[ "$TRAVIS_EVENT_TYPE" == "push" || "$TRAVIS_EVENT_TYPE" == "pull_request" ]]; then
141+
../utils/archive_build_size.py "$MAKETARGET" || /bin/true;
142+
fi
143+
- |
144+
if [[ "$MAKETARGET" == "test" ]]; then
145+
./test.elf
146+
../utils/coverage-summary.sh;
147+
coveralls -r . -b . --gcov-options '\-lp' -E '.*/tests/test_.*' -E '.*/objs/';
148+
fi
118149
119150
after_success:
120-
- if [ "$TRAVIS_EVENT_TYPE" == "api" ]; then
121-
export NIGHTLY_DATE=$(echo $TRAVIS_COMMIT_MSG | egrep -o '[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}');
122-
if [[ "$TRAVIS_COMMIT_MSG" == "Nightly Build "* ]] && [ "$NIGHTLY_DATE" != "" ]; then
123-
echo "Uploading Nightly - $NIGHTLY_DATE";
124-
../utils/upload_test_build.pl -skip -nightly "$NIGHTLY_DATE" -delete;
125-
../utils/upload_test_build.pl -skip -nightly "$NIGHTLY_DATE" *.zip;
126-
else
127-
export RELEASE_VERSION=$(echo $TRAVIS_BRANCH | egrep -o '[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+');
128-
if [ "$RELEASE_VERSION" != "" ] && [ "$TRAVIS_BRANCH" == "v$RELEASE_VERSION" ]; then
129-
echo "Releasing $RELEASE_VERSION";
130-
../utils/upload_test_build.pl -skip -release "$RELEASE_VERSION" -delete;
131-
../utils/upload_test_build.pl -skip -release "$RELEASE_VERSION" *.zip;
132-
fi;
151+
- |
152+
if [[ "TRAVIS_BUILD_STAGE_NAME != "Deploy" ]]; then
153+
travis_terminate 0
154+
fi
155+
- |
156+
if [[ "$TRAVIS_EVENT_TYPE" == "api" && $TRAVIS_BRANCH != "master" ]]; then
157+
export RELEASE_VERSION=$(echo $TRAVIS_BRANCH | egrep -o '[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+');
158+
if [[ "$RELEASE_VERSION" != "" && "$TRAVIS_BRANCH" == "v$RELEASE_VERSION" ]]; then
159+
echo "Releasing $RELEASE_VERSION";
160+
../utils/upload_test_build.pl -skip -release "$RELEASE_VERSION" -delete;
161+
../utils/upload_test_build.pl -skip -release "$RELEASE_VERSION" *.zip;
133162
fi;
134-
fi;
135-
- if [[ "$TRAVIS_EVENT_TYPE" == "cron" && "$MAKETARGET" == "zips winzips" ]]; then
136-
export NIGHTLY_DATE=$(date "+%Y-%m-%d");
137-
if [ "$NIGHTLY_DATE" != "" ]; then
163+
else
164+
export NIGHTLY_DATE=$(date "+%Y-%m-%d");
165+
if [[ "$NIGHTLY_DATE" != "" ]]; then
138166
echo "Uploading Nightly - $NIGHTLY_DATE";
139167
../utils/upload_test_build.pl -skip -nightly "$NIGHTLY_DATE" -delete;
140168
../utils/upload_test_build.pl -skip -nightly "$NIGHTLY_DATE" *.zip;
141-
fi;
142-
fi;
143-
- if [ "$MAKETARGET" == "test" ]; then
144-
../utils/coverage-summary.sh;
145-
coveralls -r . -b . --gcov-options '\-lp' -E '.*/tests/test_.*' -E '.*/objs/';
146-
fi;
147-
169+
fi
170+
fi
171+
148172
cache:
149173
apt: true
150174
directories:

0 commit comments

Comments
 (0)