forked from MultiChain/multichain
-
Notifications
You must be signed in to change notification settings - Fork 0
/
.travis.yml
166 lines (141 loc) · 7.05 KB
/
.travis.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
os: osx
osx_image: xcode10.2
# do not build tagged commits
# this way we avoid rebuilding upon successful deployment (see below)
if: tag IS blank
language: cpp
# cache V8 artifacts across stages
cache:
# large cache requires large timeout for transfer
timeout: 1800
directories:
- ./v8build
jobs:
include:
# separate fetching and building of V8 into multiple shared-cache stages to avoid hitting the 50 minute time limit
- stage: fetch-v8
install: ./.travis/fetch-v8.sh
script: skip
# include `skip-stages` anywhere in the commit message to skip all of these V8-related stages
# when the cache is up-to-date, this saves a lot of time
if: commit_message !~ /skip-stages/
# build dependencies
- stage: build-v8-stage-1
install: ./.travis/build-v8.sh antlr4 icu inspector torque v8_libbase v8_libplatform v8_libsampler
script: skip
if: commit_message !~ /skip-stages/
- stage: build-v8-stage-2
install: ./.travis/build-v8.sh v8_base
script: skip
if: commit_message !~ /skip-stages/
# finally build V8
- stage: build-v8-stage-3
install: ./.travis/build-v8.sh d8 v8
script: skip
if: commit_message !~ /skip-stages/
# now build and deploy MultiChain
- stage: build-multichain
addons:
# use addon instead of `brew install` since it does not exit with 1
# if packages are already installed
homebrew:
packages:
- autoconf
- automake
- boost
- berkeley-db4
- libtool
- nasm
- openssl
- pkg-config
- python
- rename
install:
# uninstall pre-installed boost and use 1.57
- brew uninstall --ignore-dependencies boost
- brew install boost@1.57
- brew link boost@1.57 --force
# reinstall python, for some reason the default installation errors on importing hashlib
- brew uninstall --ignore-dependencies python@2
- brew install python@2
# make V8 libraries available
- pip install pathlib2
- python ./depends/v8_data_lib.py --multichain $(pwd)
# hide dynamic libraries from the build system so we get a static build
- rename -e 's/.dylib/.dylib.hidden/' /usr/local/opt/boost\@1.57/lib/*.dylib
- rename -e 's/.dylib/.dylib.hidden/' /usr/local/opt/berkeley-db\@4/lib/*.dylib
# reinstall OpenSSL AFTER reinstalling python, but with static libraries only
- sed -i '' 's/^ shared$/ no-shared/' /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/openssl.rb
- brew reinstall openssl --build-from-source
- export CPPFLAGS=-I/usr/local/opt/openssl/include
- export LDFLAGS=-L/usr/local/opt/openssl/lib
# disable all warnings to reduce build verbosity
- export CXXFLAGS=-w
- ./autogen.sh
- ./configure --with-gui=no --with-libs=no --with-miniupnpc=no --with-boost=/usr/local/opt/boost\@1.57
- make -j2
script:
# tiny test
- mkdir /tmp/mc-test
- ./src/multichain-util create test 20006 -datadir=/tmp/mc-test -rpcpassword=rpcpass
- ./src/multichaind test 20006 -daemon -datadir=/tmp/mc-test -pid=/tmp/mc-test/test/multichain.pid
- ./src/multichain-cli test -datadir=/tmp/mc-test getblockchaininfo
- ./src/multichain-cli test -datadir=/tmp/mc-test stop
after_success:
# get the upstream so we can figure out how far behind we are
- git remote add upstream https://github.com/MultiChain/multichain.git
- git fetch upstream
# number of commits that have occurred since we last merged
- MISSED_UPSTREAM_COMMITS=$(git rev-list --count ${TRAVIS_BRANCH}..upstream/${TRAVIS_BRANCH})
# skip this many commits (may be zero) in order to get the hash of the last upstream commit we merged
- LAST_UPSTREAM_COMMIT_HASH=$(git rev-list --max-count 1 --skip ${MISSED_UPSTREAM_COMMITS} upstream/${TRAVIS_BRANCH})
- LAST_UPSTREAM_COMMIT_DATE_ISO=$(git show ${LAST_UPSTREAM_COMMIT_HASH} --format=%ai --no-patch)
- LAST_UPSTREAM_COMMIT_DATE=$(TZ=UTC date -j -f "%Y-%m-%d %H:%M:%S %z" "${LAST_UPSTREAM_COMMIT_DATE_ISO}" "+%Y%m%dT%H%M%S")
# this names the deployed tag and enables the deploy phase
- export TRAVIS_TAG=${TRAVIS_BRANCH}-${LAST_UPSTREAM_COMMIT_DATE}
before_deploy:
# release directory
- RELEASE_DIR=./multichain-${TRAVIS_BRANCH}
- mkdir ${RELEASE_DIR}
# generate small README
- LAST_UPSTREAM_COMMIT_INFO=$(git show ${LAST_UPSTREAM_COMMIT_HASH} --format=oneline --no-patch)
- echo "Build of ${TRAVIS_BRANCH} at ${LAST_UPSTREAM_COMMIT_INFO} (${LAST_UPSTREAM_COMMIT_DATE_ISO})" > ${RELEASE_DIR}/README
- echo "https://github.com/MultiChain/multichain/tree/${LAST_UPSTREAM_COMMIT_HASH}" >> ${RELEASE_DIR}/README
# copy binaries
- cp ./src/multichain-cli ${RELEASE_DIR}
- cp ./src/multichain-util ${RELEASE_DIR}
- cp ./src/multichaind ${RELEASE_DIR}
- cp ./src/multichaind-cold ${RELEASE_DIR}
# name and build the archive
- LAST_UPSTREAM_COMMIT_HASH_SHORT=$(git show $LAST_UPSTREAM_COMMIT_HASH --format=%h --no-patch)
- RELEASE_ARCHIVE=./multichain-${TRAVIS_BRANCH}-${LAST_UPSTREAM_COMMIT_HASH_SHORT}-${TRAVIS_OS_NAME}.tar.gz
- tar czf ${RELEASE_ARCHIVE} ${RELEASE_DIR}
# create checksums for archive
- RELEASE_ARCHIVE_SHA1=${RELEASE_ARCHIVE}.sha1
- shasum -a 1 ${RELEASE_ARCHIVE} | cut -d ' ' -f 1 > ${RELEASE_ARCHIVE_SHA1}
- RELEASE_ARCHIVE_SHA256=${RELEASE_ARCHIVE}.sha256
- shasum -a 256 ${RELEASE_ARCHIVE} | cut -d ' ' -f 1 > ${RELEASE_ARCHIVE_SHA256}
# print information to build log for possible later verification
- echo -e "Deploying ${RELEASE_ARCHIVE}\nSize $(stat -f "%z" ${RELEASE_ARCHIVE})\nSHA1 $(< ${RELEASE_ARCHIVE_SHA1})\nSHA256 $(< ${RELEASE_ARCHIVE_SHA256})"
deploy:
name: "${TRAVIS_BRANCH} at ${LAST_UPSTREAM_COMMIT_HASH_SHORT}"
body: "Build of https://github.com/MultiChain/multichain/tree/${LAST_UPSTREAM_COMMIT_HASH_SHORT} (build log available at ${TRAVIS_BUILD_WEB_URL})"
# deploy as GitHub release
provider: releases
# unencrypted GitHub OAuth token, generated using `travis setup releases` and set in Travis settings
# this means you have to answer `no` when prompted whether to encrypt the API key
# instead, add an environment variable `GITHUB_OAUTH_TOKEN` to your repository settings in Travis,
# and select its value not to be displayed in the build log
api_key: ${GITHUB_OAUTH_TOKEN}
file:
- ${RELEASE_ARCHIVE}
- ${RELEASE_ARCHIVE_SHA1}
- ${RELEASE_ARCHIVE_SHA256}
# otherwise Travis would clean out generated archive
skip_cleanup: true
# for the same tag the file can be overwritten
overwrite: true
on:
repo: ${TRAVIS_REPO_SLUG}
# fulfilled because we set TRAVIS_TAG
tags: true