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