From b1c4bb8914d6de3c5dccd3bd644ea3187ee6311e Mon Sep 17 00:00:00 2001 From: JeremyRand <244188+JeremyRand@users.noreply.github.com> Date: Mon, 13 Sep 2021 16:20:54 +0000 Subject: [PATCH] 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. --- .cirrus.yml | 221 ++++++++++++++++++ .dockerignore | 1 + contrib/android/Dockerfile | 2 +- contrib/android/build.sh | 5 +- electrum/tests/regtest.py | 7 +- .../{start_bitcoind.sh => run_bitcoind.sh} | 6 +- .../{start_electrumx.sh => run_electrumx.sh} | 2 +- 7 files changed, 233 insertions(+), 11 deletions(-) create mode 100644 .cirrus.yml create mode 120000 .dockerignore rename electrum/tests/regtest/{start_bitcoind.sh => run_bitcoind.sh} (77%) rename electrum/tests/regtest/{start_electrumx.sh => run_electrumx.sh} (91%) diff --git a/.cirrus.yml b/.cirrus.yml new file mode 100644 index 000000000..8b3e6f4b2 --- /dev/null +++ b/.cirrus.yml @@ -0,0 +1,221 @@ +task: + container: + image: $ELECTRUM_IMAGE + cpu: 1 + memory: 1G + matrix: + - name: Tox Python $ELECTRUM_PYTHON_VERSION + env: + ELECTRUM_IMAGE: python:$ELECTRUM_PYTHON_VERSION + TOXENV: py3 + ELECTRUM_PYTHON_NAME: python3 + matrix: + - env: + ELECTRUM_PYTHON_VERSION: 3.6 + - env: + ELECTRUM_PYTHON_VERSION: 3.7 + - env: + ELECTRUM_PYTHON_VERSION: 3.8 + - env: + ELECTRUM_PYTHON_VERSION: 3.9 + - env: + ELECTRUM_PYTHON_VERSION: 3 + - env: + ELECTRUM_PYTHON_VERSION: rc + - name: Tox PyPy + allow_failures: true + env: + ELECTRUM_IMAGE: pypy:3 + TOXENV: pypy3 + ELECTRUM_PYTHON_NAME: pypy3 + pip_cache: + folder: ~/.cache/pip + fingerprint_script: echo $ELECTRUM_IMAGE && cat $ELECTRUM_REQUIREMENTS + populate_script: mkdir -p ~/.cache/pip + electrum_cache: + folder: /tmp/electrum-build + populate_script: mkdir -p /tmp/electrum-build + version_script: + - $ELECTRUM_PYTHON_NAME --version + tag_script: + - git tag + install_script: + - apt-get update + - apt-get -y install libsecp256k1-0 + - pip install -r $ELECTRUM_REQUIREMENTS + tox_script: + - tox + coveralls_script: + - coveralls + env: + ELECTRUM_REQUIREMENTS: contrib/requirements/requirements-travis.txt + +task: + name: Locale + container: + image: $ELECTRUM_IMAGE + cpu: 1 + memory: 1G + pip_cache: + folder: ~/.cache/pip + fingerprint_script: echo Locale && echo $ELECTRUM_IMAGE && cat $ELECTRUM_REQUIREMENTS + populate_script: mkdir -p ~/.cache/pip + electrum_cache: + folder: /tmp/electrum-build + populate_script: mkdir -p /tmp/electrum-build + install_script: + - apt-get update + - apt-get -y install libsecp256k1-0 + - pip install -r $ELECTRUM_REQUIREMENTS + - pip install requests + locale_script: + - contrib/push_locale + env: + ELECTRUM_IMAGE: python:3.7 + ELECTRUM_REQUIREMENTS: contrib/requirements/requirements-travis.txt + depends_on: + - Tox Python 3.9 + only_if: $CIRRUS_BRANCH == 'master' + +task: + name: Regtest functional tests + container: + image: $ELECTRUM_IMAGE + cpu: 1 + memory: 1G + pip_cache: + folder: ~/.cache/pip + fingerprint_script: echo Regtest && echo $ELECTRUM_IMAGE && cat $ELECTRUM_REQUIREMENTS + populate_script: mkdir -p ~/.cache/pip + electrum_cache: + folder: /tmp/electrum-build + populate_script: mkdir -p /tmp/electrum-build + bitcoind_cache: + folder: /tmp/bitcoind + populate_script: mkdir -p /tmp/bitcoind + install_script: + - apt-get update + - apt-get -y install libsecp256k1-0 curl jq bc + - pip3 install .[tests] + - pip3 install electrumx + - "BITCOIND_VERSION=$(curl https://bitcoincore.org/en/download/ | grep -E -i --only-matching 'Latest version: [0-9\\.]+' | grep -E --only-matching '[0-9\\.]+')" + - BITCOIND_FILENAME=bitcoin-$BITCOIND_VERSION-x86_64-linux-gnu.tar.gz + - BITCOIND_PATH=/tmp/bitcoind/$BITCOIND_FILENAME + - BITCOIND_URL=https://bitcoincore.org/bin/bitcoin-core-$BITCOIND_VERSION/$BITCOIND_FILENAME + - tar -xaf $BITCOIND_PATH || (rm -f /tmp/bitcoind/* && curl --output $BITCOIND_PATH $BITCOIND_URL && tar -xaf $BITCOIND_PATH) + - cp -a bitcoin-$BITCOIND_VERSION/* /usr/ + bitcoind_service_background_script: + - electrum/tests/regtest/run_bitcoind.sh + electrumx_service_background_script: + - electrum/tests/regtest/run_electrumx.sh + regtest_script: + - sleep 10s + - python3 -m unittest electrum/tests/regtest.py + env: + ELECTRUM_IMAGE: python:3.7 + ELECTRUM_REQUIREMENTS: contrib/requirements/requirements-travis.txt + # ElectrumX exits with an error without this: + ALLOW_ROOT: 1 + +task: + container: + image: $ELECTRUM_IMAGE + cpu: 1 + memory: 1G + pip_cache: + folder: ~/.cache/pip + fingerprint_script: echo Flake8 && echo $ELECTRUM_IMAGE && cat $ELECTRUM_REQUIREMENTS + populate_script: mkdir -p ~/.cache/pip + electrum_cache: + folder: /tmp/electrum-build + populate_script: mkdir -p /tmp/electrum-build + install_script: + - pip install flake8 + flake8_script: + - flake8 . --count --select=$ELECTRUM_LINTERS --show-source --statistics + env: + ELECTRUM_IMAGE: python:3.7 + ELECTRUM_REQUIREMENTS: contrib/requirements/requirements-travis.txt + matrix: + - name: Flake8 Mandatory + env: + ELECTRUM_LINTERS: E9,F63,F7,F82 + - name: Flake8 Non-Mandatory + env: + ELECTRUM_LINTERS: E,F,W,C90 + allow_failures: true + +task: + name: Windows build + container: + dockerfile: contrib/build-wine/Dockerfile + cpu: 1 + memory: 2G + build_script: + - cd contrib/build-wine + - ./make_win.sh + binaries_artifacts: + path: "contrib/build-wine/dist/*" + env: + CIRRUS_WORKING_DIR: /opt/wine64/drive_c/electrum + +task: + name: Android build + container: + dockerfile: contrib/android/Dockerfile + cpu: 2 + memory: 2G + build_script: + - ./contrib/android/make_apk + binaries_artifacts: + path: "dist/*" + +task: + name: MacOS build + macos_instance: + image: catalina-xcode-11.3.1 + env: + TARGET_OS: macOS + install_script: + - git fetch --all --tags + build_script: + - ./contrib/osx/make_osx + sum_script: + - ls -lah dist + - shasum -a 256 dist/*.dmg + binaries_artifacts: + path: "dist/*" + +task: + name: AppImage build + container: + dockerfile: contrib/build-linux/appimage/Dockerfile + cpu: 2 + memory: 1G + build_script: + - ./contrib/build-linux/appimage/make_appimage.sh + binaries_artifacts: + path: "dist/*" + +task: + name: tarball build + container: + dockerfile: contrib/build-linux/sdist/Dockerfile + cpu: 1 + memory: 1G + build_script: + - ./contrib/build-linux/sdist/make_sdist.sh + binaries_artifacts: + path: "dist/*" + +task: + name: Submodules + container: + image: python:3.7 + cpu: 1 + memory: 1G + fetch_script: + - git fetch --all --tags + check_script: + - ./contrib/deterministic-build/check_submodules.sh + only_if: $CIRRUS_TAG != '' diff --git a/.dockerignore b/.dockerignore new file mode 120000 index 000000000..3e4e48b0b --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +.gitignore \ No newline at end of file diff --git a/contrib/android/Dockerfile b/contrib/android/Dockerfile index 6401a7002..9f8fbd855 100644 --- a/contrib/android/Dockerfile +++ b/contrib/android/Dockerfile @@ -151,7 +151,7 @@ RUN chown ${USER} /opt USER ${USER} -COPY requirements-build-android.txt /opt/deterministic-build/ +COPY contrib/deterministic-build/requirements-build-android.txt /opt/deterministic-build/ RUN python3 -m pip install --no-dependencies --user \ -r /opt/deterministic-build/requirements-build-android.txt diff --git a/contrib/android/build.sh b/contrib/android/build.sh index f199eb533..853b9b862 100755 --- a/contrib/android/build.sh +++ b/contrib/android/build.sh @@ -22,12 +22,11 @@ if [ ! -z "$ELECBUILD_NOCACHE" ] ; then fi info "building docker image." -cp "$CONTRIB/deterministic-build/requirements-build-android.txt" "$CONTRIB_ANDROID/requirements-build-android.txt" sudo docker build \ $DOCKER_BUILD_FLAGS \ -t electrum-android-builder-img \ - "$CONTRIB_ANDROID" -rm "$CONTRIB_ANDROID/requirements-build-android.txt" + --file "$CONTRIB_ANDROID/Dockerfile" \ + "$PROJECT_ROOT" # maybe do fresh clone diff --git a/electrum/tests/regtest.py b/electrum/tests/regtest.py index 46468be29..7a1b83365 100644 --- a/electrum/tests/regtest.py +++ b/electrum/tests/regtest.py @@ -7,9 +7,10 @@ class TestLightning(unittest.TestCase): @staticmethod def run_shell(args, timeout=30): - process = subprocess.Popen(['electrum/tests/regtest/regtest.sh'] + args, stderr=subprocess.STDOUT, stdout=subprocess.PIPE) - for line in iter(process.stdout.readline, b''): - sys.stdout.write(line.decode(sys.stdout.encoding)) + process = subprocess.Popen(['electrum/tests/regtest/regtest.sh'] + args, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, universal_newlines=True) + for line in iter(process.stdout.readline, ''): + sys.stdout.write(line) + sys.stdout.flush() process.wait(timeout=timeout) process.stdout.close() assert process.returncode == 0 diff --git a/electrum/tests/regtest/start_bitcoind.sh b/electrum/tests/regtest/run_bitcoind.sh similarity index 77% rename from electrum/tests/regtest/start_bitcoind.sh rename to electrum/tests/regtest/run_bitcoind.sh index 4622215fd..aebe188c7 100755 --- a/electrum/tests/regtest/start_bitcoind.sh +++ b/electrum/tests/regtest/run_bitcoind.sh @@ -17,9 +17,9 @@ rpcbind=0.0.0.0 rpcport=18554 EOF rm -rf ~/.bitcoin/regtest -screen -S bitcoind -X quit || true -screen -S bitcoind -m -d bitcoind -regtest +bitcoind -regtest & sleep 6 bitcoin-cli createwallet test_wallet addr=$(bitcoin-cli getnewaddress) -bitcoin-cli generatetoaddress 150 $addr > /dev/null +bitcoin-cli generatetoaddress 150 $addr +tail -f ~/.bitcoin/regtest/debug.log diff --git a/electrum/tests/regtest/start_electrumx.sh b/electrum/tests/regtest/run_electrumx.sh similarity index 91% rename from electrum/tests/regtest/start_electrumx.sh rename to electrum/tests/regtest/run_electrumx.sh index 8a1085423..e53cc1688 100755 --- a/electrum/tests/regtest/start_electrumx.sh +++ b/electrum/tests/regtest/run_electrumx.sh @@ -4,4 +4,4 @@ set -eux pipefail cd rm -rf $HOME/electrumx_db mkdir $HOME/electrumx_db -COST_SOFT_LIMIT=0 COST_HARD_LIMIT=0 COIN=BitcoinSegwit SERVICES=tcp://:51001,rpc:// NET=regtest DAEMON_URL=http://doggman:donkey@127.0.0.1:18554 DB_DIRECTORY=$HOME/electrumx_db electrumx_server > $HOME/electrumx.log & +COST_SOFT_LIMIT=0 COST_HARD_LIMIT=0 COIN=BitcoinSegwit SERVICES=tcp://:51001,rpc:// NET=regtest DAEMON_URL=http://doggman:donkey@127.0.0.1:18554 DB_DIRECTORY=$HOME/electrumx_db electrumx_server