Skip to content

Commit b1c4bb8

Browse files
authored
Add Cirrus CI (#7431)
* Cirrus: Add Tox task * Cirrus: Add Locale task * Cirrus: Add Flake8 Task * Cirrus: Add Regtest task * Regtest: Flush stdout Allows viewing output sooner. * Regtest: Read process.stdout in text mode Improves ability to quickly see output. * Cirrus: Add Windows task * Cirrus: Add Android task * Cirrus: Add macOS task * Cirrus: Add AppImage task * Cirrus: Add tarball task * Cirrus: Add Submodules task * Android: remove superfluous cp/rm * Add .dockerignore Symlink to .gitignore.
1 parent 846a3f8 commit b1c4bb8

File tree

7 files changed

+233
-11
lines changed

7 files changed

+233
-11
lines changed

.cirrus.yml

+221
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,221 @@
1+
task:
2+
container:
3+
image: $ELECTRUM_IMAGE
4+
cpu: 1
5+
memory: 1G
6+
matrix:
7+
- name: Tox Python $ELECTRUM_PYTHON_VERSION
8+
env:
9+
ELECTRUM_IMAGE: python:$ELECTRUM_PYTHON_VERSION
10+
TOXENV: py3
11+
ELECTRUM_PYTHON_NAME: python3
12+
matrix:
13+
- env:
14+
ELECTRUM_PYTHON_VERSION: 3.6
15+
- env:
16+
ELECTRUM_PYTHON_VERSION: 3.7
17+
- env:
18+
ELECTRUM_PYTHON_VERSION: 3.8
19+
- env:
20+
ELECTRUM_PYTHON_VERSION: 3.9
21+
- env:
22+
ELECTRUM_PYTHON_VERSION: 3
23+
- env:
24+
ELECTRUM_PYTHON_VERSION: rc
25+
- name: Tox PyPy
26+
allow_failures: true
27+
env:
28+
ELECTRUM_IMAGE: pypy:3
29+
TOXENV: pypy3
30+
ELECTRUM_PYTHON_NAME: pypy3
31+
pip_cache:
32+
folder: ~/.cache/pip
33+
fingerprint_script: echo $ELECTRUM_IMAGE && cat $ELECTRUM_REQUIREMENTS
34+
populate_script: mkdir -p ~/.cache/pip
35+
electrum_cache:
36+
folder: /tmp/electrum-build
37+
populate_script: mkdir -p /tmp/electrum-build
38+
version_script:
39+
- $ELECTRUM_PYTHON_NAME --version
40+
tag_script:
41+
- git tag
42+
install_script:
43+
- apt-get update
44+
- apt-get -y install libsecp256k1-0
45+
- pip install -r $ELECTRUM_REQUIREMENTS
46+
tox_script:
47+
- tox
48+
coveralls_script:
49+
- coveralls
50+
env:
51+
ELECTRUM_REQUIREMENTS: contrib/requirements/requirements-travis.txt
52+
53+
task:
54+
name: Locale
55+
container:
56+
image: $ELECTRUM_IMAGE
57+
cpu: 1
58+
memory: 1G
59+
pip_cache:
60+
folder: ~/.cache/pip
61+
fingerprint_script: echo Locale && echo $ELECTRUM_IMAGE && cat $ELECTRUM_REQUIREMENTS
62+
populate_script: mkdir -p ~/.cache/pip
63+
electrum_cache:
64+
folder: /tmp/electrum-build
65+
populate_script: mkdir -p /tmp/electrum-build
66+
install_script:
67+
- apt-get update
68+
- apt-get -y install libsecp256k1-0
69+
- pip install -r $ELECTRUM_REQUIREMENTS
70+
- pip install requests
71+
locale_script:
72+
- contrib/push_locale
73+
env:
74+
ELECTRUM_IMAGE: python:3.7
75+
ELECTRUM_REQUIREMENTS: contrib/requirements/requirements-travis.txt
76+
depends_on:
77+
- Tox Python 3.9
78+
only_if: $CIRRUS_BRANCH == 'master'
79+
80+
task:
81+
name: Regtest functional tests
82+
container:
83+
image: $ELECTRUM_IMAGE
84+
cpu: 1
85+
memory: 1G
86+
pip_cache:
87+
folder: ~/.cache/pip
88+
fingerprint_script: echo Regtest && echo $ELECTRUM_IMAGE && cat $ELECTRUM_REQUIREMENTS
89+
populate_script: mkdir -p ~/.cache/pip
90+
electrum_cache:
91+
folder: /tmp/electrum-build
92+
populate_script: mkdir -p /tmp/electrum-build
93+
bitcoind_cache:
94+
folder: /tmp/bitcoind
95+
populate_script: mkdir -p /tmp/bitcoind
96+
install_script:
97+
- apt-get update
98+
- apt-get -y install libsecp256k1-0 curl jq bc
99+
- pip3 install .[tests]
100+
- pip3 install electrumx
101+
- "BITCOIND_VERSION=$(curl https://bitcoincore.org/en/download/ | grep -E -i --only-matching 'Latest version: [0-9\\.]+' | grep -E --only-matching '[0-9\\.]+')"
102+
- BITCOIND_FILENAME=bitcoin-$BITCOIND_VERSION-x86_64-linux-gnu.tar.gz
103+
- BITCOIND_PATH=/tmp/bitcoind/$BITCOIND_FILENAME
104+
- BITCOIND_URL=https://bitcoincore.org/bin/bitcoin-core-$BITCOIND_VERSION/$BITCOIND_FILENAME
105+
- tar -xaf $BITCOIND_PATH || (rm -f /tmp/bitcoind/* && curl --output $BITCOIND_PATH $BITCOIND_URL && tar -xaf $BITCOIND_PATH)
106+
- cp -a bitcoin-$BITCOIND_VERSION/* /usr/
107+
bitcoind_service_background_script:
108+
- electrum/tests/regtest/run_bitcoind.sh
109+
electrumx_service_background_script:
110+
- electrum/tests/regtest/run_electrumx.sh
111+
regtest_script:
112+
- sleep 10s
113+
- python3 -m unittest electrum/tests/regtest.py
114+
env:
115+
ELECTRUM_IMAGE: python:3.7
116+
ELECTRUM_REQUIREMENTS: contrib/requirements/requirements-travis.txt
117+
# ElectrumX exits with an error without this:
118+
ALLOW_ROOT: 1
119+
120+
task:
121+
container:
122+
image: $ELECTRUM_IMAGE
123+
cpu: 1
124+
memory: 1G
125+
pip_cache:
126+
folder: ~/.cache/pip
127+
fingerprint_script: echo Flake8 && echo $ELECTRUM_IMAGE && cat $ELECTRUM_REQUIREMENTS
128+
populate_script: mkdir -p ~/.cache/pip
129+
electrum_cache:
130+
folder: /tmp/electrum-build
131+
populate_script: mkdir -p /tmp/electrum-build
132+
install_script:
133+
- pip install flake8
134+
flake8_script:
135+
- flake8 . --count --select=$ELECTRUM_LINTERS --show-source --statistics
136+
env:
137+
ELECTRUM_IMAGE: python:3.7
138+
ELECTRUM_REQUIREMENTS: contrib/requirements/requirements-travis.txt
139+
matrix:
140+
- name: Flake8 Mandatory
141+
env:
142+
ELECTRUM_LINTERS: E9,F63,F7,F82
143+
- name: Flake8 Non-Mandatory
144+
env:
145+
ELECTRUM_LINTERS: E,F,W,C90
146+
allow_failures: true
147+
148+
task:
149+
name: Windows build
150+
container:
151+
dockerfile: contrib/build-wine/Dockerfile
152+
cpu: 1
153+
memory: 2G
154+
build_script:
155+
- cd contrib/build-wine
156+
- ./make_win.sh
157+
binaries_artifacts:
158+
path: "contrib/build-wine/dist/*"
159+
env:
160+
CIRRUS_WORKING_DIR: /opt/wine64/drive_c/electrum
161+
162+
task:
163+
name: Android build
164+
container:
165+
dockerfile: contrib/android/Dockerfile
166+
cpu: 2
167+
memory: 2G
168+
build_script:
169+
- ./contrib/android/make_apk
170+
binaries_artifacts:
171+
path: "dist/*"
172+
173+
task:
174+
name: MacOS build
175+
macos_instance:
176+
image: catalina-xcode-11.3.1
177+
env:
178+
TARGET_OS: macOS
179+
install_script:
180+
- git fetch --all --tags
181+
build_script:
182+
- ./contrib/osx/make_osx
183+
sum_script:
184+
- ls -lah dist
185+
- shasum -a 256 dist/*.dmg
186+
binaries_artifacts:
187+
path: "dist/*"
188+
189+
task:
190+
name: AppImage build
191+
container:
192+
dockerfile: contrib/build-linux/appimage/Dockerfile
193+
cpu: 2
194+
memory: 1G
195+
build_script:
196+
- ./contrib/build-linux/appimage/make_appimage.sh
197+
binaries_artifacts:
198+
path: "dist/*"
199+
200+
task:
201+
name: tarball build
202+
container:
203+
dockerfile: contrib/build-linux/sdist/Dockerfile
204+
cpu: 1
205+
memory: 1G
206+
build_script:
207+
- ./contrib/build-linux/sdist/make_sdist.sh
208+
binaries_artifacts:
209+
path: "dist/*"
210+
211+
task:
212+
name: Submodules
213+
container:
214+
image: python:3.7
215+
cpu: 1
216+
memory: 1G
217+
fetch_script:
218+
- git fetch --all --tags
219+
check_script:
220+
- ./contrib/deterministic-build/check_submodules.sh
221+
only_if: $CIRRUS_TAG != ''

.dockerignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.gitignore

contrib/android/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ RUN chown ${USER} /opt
151151
USER ${USER}
152152

153153

154-
COPY requirements-build-android.txt /opt/deterministic-build/
154+
COPY contrib/deterministic-build/requirements-build-android.txt /opt/deterministic-build/
155155
RUN python3 -m pip install --no-dependencies --user \
156156
-r /opt/deterministic-build/requirements-build-android.txt
157157

contrib/android/build.sh

+2-3
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,11 @@ if [ ! -z "$ELECBUILD_NOCACHE" ] ; then
2222
fi
2323

2424
info "building docker image."
25-
cp "$CONTRIB/deterministic-build/requirements-build-android.txt" "$CONTRIB_ANDROID/requirements-build-android.txt"
2625
sudo docker build \
2726
$DOCKER_BUILD_FLAGS \
2827
-t electrum-android-builder-img \
29-
"$CONTRIB_ANDROID"
30-
rm "$CONTRIB_ANDROID/requirements-build-android.txt"
28+
--file "$CONTRIB_ANDROID/Dockerfile" \
29+
"$PROJECT_ROOT"
3130

3231

3332
# maybe do fresh clone

electrum/tests/regtest.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ class TestLightning(unittest.TestCase):
77

88
@staticmethod
99
def run_shell(args, timeout=30):
10-
process = subprocess.Popen(['electrum/tests/regtest/regtest.sh'] + args, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
11-
for line in iter(process.stdout.readline, b''):
12-
sys.stdout.write(line.decode(sys.stdout.encoding))
10+
process = subprocess.Popen(['electrum/tests/regtest/regtest.sh'] + args, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, universal_newlines=True)
11+
for line in iter(process.stdout.readline, ''):
12+
sys.stdout.write(line)
13+
sys.stdout.flush()
1314
process.wait(timeout=timeout)
1415
process.stdout.close()
1516
assert process.returncode == 0

electrum/tests/regtest/start_bitcoind.sh electrum/tests/regtest/run_bitcoind.sh

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ rpcbind=0.0.0.0
1717
rpcport=18554
1818
EOF
1919
rm -rf ~/.bitcoin/regtest
20-
screen -S bitcoind -X quit || true
21-
screen -S bitcoind -m -d bitcoind -regtest
20+
bitcoind -regtest &
2221
sleep 6
2322
bitcoin-cli createwallet test_wallet
2423
addr=$(bitcoin-cli getnewaddress)
25-
bitcoin-cli generatetoaddress 150 $addr > /dev/null
24+
bitcoin-cli generatetoaddress 150 $addr
25+
tail -f ~/.bitcoin/regtest/debug.log

electrum/tests/regtest/start_electrumx.sh electrum/tests/regtest/run_electrumx.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ set -eux pipefail
44
cd
55
rm -rf $HOME/electrumx_db
66
mkdir $HOME/electrumx_db
7-
COST_SOFT_LIMIT=0 COST_HARD_LIMIT=0 COIN=BitcoinSegwit SERVICES=tcp://:51001,rpc:// NET=regtest DAEMON_URL=http://doggman:[email protected]:18554 DB_DIRECTORY=$HOME/electrumx_db electrumx_server > $HOME/electrumx.log &
7+
COST_SOFT_LIMIT=0 COST_HARD_LIMIT=0 COIN=BitcoinSegwit SERVICES=tcp://:51001,rpc:// NET=regtest DAEMON_URL=http://doggman:[email protected]:18554 DB_DIRECTORY=$HOME/electrumx_db electrumx_server

0 commit comments

Comments
 (0)