task: container: image: $ELECTRUM_IMAGE cpu: 1 memory: 2G matrix: - name: "unittests: Tox Python $ELECTRUM_PYTHON_VERSION" env: ELECTRUM_IMAGE: python:$ELECTRUM_PYTHON_VERSION TOXENV: py3 ELECTRUM_PYTHON_NAME: python3 matrix: - env: ELECTRUM_PYTHON_VERSION: 3.8 - env: ELECTRUM_PYTHON_VERSION: 3.9 - env: ELECTRUM_PYTHON_VERSION: 3.10 - env: ELECTRUM_PYTHON_VERSION: 3.11 - env: ELECTRUM_PYTHON_VERSION: 3.12 - name: "unittests: Tox Python 3 debug mode" env: ELECTRUM_PYTHON_VERSION: 3.11 # enable additional checks: PYTHONASYNCIODEBUG: "1" PYTHONDEVMODE: "1" pip_cache: folder: ~/.cache/pip fingerprint_script: echo $ELECTRUM_IMAGE && cat $ELECTRUM_REQUIREMENTS_CI && cat $ELECTRUM_REQUIREMENTS version_script: - $ELECTRUM_PYTHON_NAME --version tag_script: - git tag install_script: - apt-get update - apt-get -y install libsecp256k1-dev # qml test reqs: - apt-get -y install libgl1 libegl1 libxkbcommon0 libdbus-1-3 - pip install -r $ELECTRUM_REQUIREMENTS_CI tox_script: - export PYTHONASYNCIODEBUG - export PYTHONDEVMODE - tox coveralls_script: - if [ ! -z "$COVERALLS_REPO_TOKEN" ] ; then coveralls ; fi env: ELECTRUM_REQUIREMENTS_CI: contrib/requirements/requirements-ci.txt ELECTRUM_REQUIREMENTS: contrib/requirements/requirements.txt # following CI_* env vars are set up for coveralls CI_NAME: "CirrusCI" CI_BUILD_NUMBER: $CIRRUS_BUILD_ID CI_JOB_ID: $CIRRUS_TASK_ID CI_BUILD_URL: "https://cirrus-ci.com/task/$CIRRUS_TASK_ID" CI_BRANCH: $CIRRUS_BRANCH CI_PULL_REQUEST: $CIRRUS_PR # in addition, COVERALLS_REPO_TOKEN is set as an "override" in https://cirrus-ci.com/settings/... depends_on: - "linter: Flake8 Mandatory" task: name: "locale: upload to crowdin" container: image: $ELECTRUM_IMAGE cpu: 1 memory: 1G pip_cache: folder: ~/.cache/pip fingerprint_script: echo Locale && echo $ELECTRUM_IMAGE && cat $ELECTRUM_REQUIREMENTS_CI install_script: - apt-get update - apt-get -y install gettext qttools5-dev-tools - pip install -r $ELECTRUM_REQUIREMENTS_CI - pip install requests locale_script: - contrib/push_locale env: ELECTRUM_IMAGE: python:3.8 ELECTRUM_REQUIREMENTS_CI: contrib/requirements/requirements-ci.txt # in addition, crowdin_api_key is set as an "override" in https://cirrus-ci.com/settings/... depends_on: - "unittests: Tox Python 3.8" only_if: $CIRRUS_BRANCH == 'master' task: name: "Regtest functional tests" compute_engine_instance: image_project: cirrus-images image: family/docker-builder platform: linux cpu: 1 memory: 1G pip_cache: folder: ~/.cache/pip fingerprint_script: echo Regtest && echo docker_builder && cat $ELECTRUM_REQUIREMENTS bitcoind_cache: folder: /tmp/bitcoind populate_script: mkdir -p /tmp/bitcoind install_script: - apt-get update - apt-get -y install curl jq bc # install electrum - pip3 install .[tests] # install e-x some commits after 1.16.0 tag - pip3 install git+https://github.com/spesmilo/electrumx.git@4e66804dc0d668cd6bd4602b547e2f5b2e227e97 - "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/ libsecp_build_cache: folder: contrib/_saved_secp256k1_build fingerprint_script: sha256sum ./contrib/make_libsecp256k1.sh populate_script: - apt-get -y install automake libtool - ./contrib/make_libsecp256k1.sh - mkdir contrib/_saved_secp256k1_build - cp electrum/libsecp256k1.so.* contrib/_saved_secp256k1_build/ libsecp_install_script: - cp contrib/_saved_secp256k1_build/* electrum/ bitcoind_service_background_script: - tests/regtest/run_bitcoind.sh electrumx_service_background_script: - tests/regtest/run_electrumx.sh regtest_script: - sleep 10s - python3 -m unittest tests/regtest.py env: ELECTRUM_REQUIREMENTS: contrib/requirements/requirements.txt # ElectrumX exits with an error without this: ALLOW_ROOT: 1 depends_on: - "linter: Flake8 Mandatory" task: container: image: $ELECTRUM_IMAGE cpu: 1 memory: 1G pip_cache: folder: ~/.cache/pip fingerprint_script: echo Flake8 && echo $ELECTRUM_IMAGE && cat $ELECTRUM_REQUIREMENTS install_script: - pip install "flake8==7.0.0" "flake8-bugbear==24.1.16" flake8_script: - flake8 . --count --select="$ELECTRUM_LINTERS" --ignore="$ELECTRUM_LINTERS_IGNORE" --show-source --statistics --exclude "*_pb2.py,electrum/_vendor/" env: ELECTRUM_IMAGE: python:3.8 ELECTRUM_REQUIREMENTS: contrib/requirements/requirements.txt matrix: - name: "linter: Flake8 Mandatory" env: # list of error codes: # - https://flake8.pycqa.org/en/latest/user/error-codes.html # - https://pycodestyle.pycqa.org/en/latest/intro.html#error-codes # - https://github.com/PyCQA/flake8-bugbear/tree/8c0e7eb04217494d48d0ab093bf5b31db0921989#list-of-warnings ELECTRUM_LINTERS: E9,E101,E129,E273,E274,E703,E71,E722,F63,F7,F82,W191,W29,B ELECTRUM_LINTERS_IGNORE: B007,B009,B010,B019,B036 - name: "linter: Flake8 Non-Mandatory" env: ELECTRUM_LINTERS: E,F,W,C90,B ELECTRUM_LINTERS_IGNORE: "" allow_failures: true # Cron jobs configured in https://cirrus-ci.com/settings/... # - job "nightly" on branch "master" at "0 30 2 * * ?" (every day at 02:30Z) task: name: "build: Windows" matrix: - trigger_type: manual only_if: $CIRRUS_CRON == "" - trigger_type: automatic only_if: $CIRRUS_CRON == "nightly" container: dockerfile: contrib/build-wine/Dockerfile cpu: 1 memory: 2G pip_cache: folder: contrib/build-wine/.cache/win32/wine_pip_cache fingerprint_script: - echo $CIRRUS_TASK_NAME - git ls-files -s contrib/deterministic-build/*.txt - git ls-files -s contrib/build-wine/ build2_cache: folder: contrib/build-wine/.cache/win32/build fingerprint_script: - echo $CIRRUS_TASK_NAME - cat contrib/make_libsecp256k1.sh | sha256sum - cat contrib/make_libusb.sh | sha256sum - cat contrib/make_zbar.sh | sha256sum - git ls-files -s contrib/build-wine/ 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 CIRRUS_DOCKER_CONTEXT: contrib/build-wine depends_on: - "unittests: Tox Python 3.8" task: name: "build: Android (QML $APK_ARCH)" matrix: - trigger_type: manual only_if: $CIRRUS_CRON == "" - trigger_type: automatic only_if: $CIRRUS_CRON == "nightly" timeout_in: 90m container: dockerfile: contrib/android/Dockerfile cpu: 8 memory: 24G env: APK_ARCH: arm64-v8a packages_tld_folder_cache: folder: packages fingerprint_script: - echo $CIRRUS_TASK_NAME && cat contrib/deterministic-build/requirements.txt && cat contrib/make_packages.sh - git ls-files -s contrib/android/ p4a_cache: folders: - ".buildozer/android/platform/build-$APK_ARCH/packages" - ".buildozer/android/platform/build-$APK_ARCH/build" fingerprint_script: # note: should *at least* depend on Dockerfile and p4a_recipes/, but contrib/android/ is simplest - git ls-files -s contrib/android/ - echo "qml $APK_ARCH" build_script: - ./contrib/android/make_apk.sh qml "$APK_ARCH" debug binaries_artifacts: path: "dist/*" depends_on: - "unittests: Tox Python 3.8" ## mac build disabled, as Cirrus CI no longer supports Intel-based mac builds #task: # name: "build: macOS" # macos_instance: # image: catalina-xcode-11.3.1 # env: # TARGET_OS: macOS # pip_cache: # folder: ~/Library/Caches/pip # fingerprint_script: # - echo $CIRRUS_TASK_NAME # - git ls-files -s contrib/deterministic-build/*.txt # - git ls-files -s contrib/osx/ # build2_cache: # folder: contrib/osx/.cache # fingerprint_script: # - echo $CIRRUS_TASK_NAME # - cat contrib/make_libsecp256k1.sh | shasum -a 256 # - cat contrib/make_libusb.sh | shasum -a 256 # - cat contrib/make_zbar.sh | shasum -a 256 # - git ls-files -s contrib/osx/ # install_script: # - git fetch --all --tags # build_script: # - ./contrib/osx/make_osx.sh # sum_script: # - ls -lah dist # - shasum -a 256 dist/*.dmg # binaries_artifacts: # path: "dist/*" task: name: "build: AppImage" matrix: - trigger_type: manual only_if: $CIRRUS_CRON == "" - trigger_type: automatic only_if: $CIRRUS_CRON == "nightly" container: dockerfile: contrib/build-linux/appimage/Dockerfile cpu: 2 memory: 2G pip_cache: folder: contrib/build-linux/appimage/.cache/pip_cache fingerprint_script: - echo $CIRRUS_TASK_NAME - git ls-files -s contrib/deterministic-build/*.txt - git ls-files -s contrib/build-linux/appimage/ build2_cache: folder: contrib/build-linux/appimage/.cache/appimage fingerprint_script: - echo $CIRRUS_TASK_NAME - cat contrib/make_libsecp256k1.sh | sha256sum - git ls-files -s contrib/build-linux/appimage/ build_script: - ./contrib/build-linux/appimage/make_appimage.sh binaries_artifacts: path: "dist/*" env: CIRRUS_DOCKER_CONTEXT: contrib/build-linux/appimage depends_on: - "unittests: Tox Python 3.8" task: container: dockerfile: contrib/build-linux/sdist/Dockerfile cpu: 1 memory: 1G pip_cache: folder: ~/.cache/pip fingerprint_script: - echo $CIRRUS_TASK_NAME - git ls-files -s contrib/deterministic-build/*.txt - git ls-files -s contrib/build-linux/sdist/ build_script: - ./contrib/build-linux/sdist/make_sdist.sh binaries_artifacts: path: "dist/*" matrix: - name: "build: tarball" - name: "build: source-only tarball" env: OMIT_UNCLEAN_FILES: 1 depends_on: - "unittests: Tox Python 3.8" task: name: "check submodules" container: image: python:3.8 cpu: 1 memory: 1G fetch_script: - git fetch --all --tags check_script: - ./contrib/deterministic-build/check_submodules.sh only_if: $CIRRUS_TAG != ''