diff --git a/contrib/teamcity/build-configurations.yml b/contrib/teamcity/build-configurations.yml index 488cd8b0f..049678dff 100644 --- a/contrib/teamcity/build-configurations.yml +++ b/contrib/teamcity/build-configurations.yml @@ -1,958 +1,957 @@ --- # Templates can be referenced in builds to avoid duplication templates: gitian_builds: script: | "${TOPLEVEL}/contrib/teamcity/gitian.sh" timeout: 9000 artifacts: gitian-results: '' guix_builds: script: | "${TOPLEVEL}/contrib/teamcity/guix.sh" timeout: 14400 artifacts: guix-results: '' check+secp256k1: targets: - - all - install - install-secp256k1 - - check - check-secp256k1 - check-functional diff-node: runOnDiffRegex: - cmake/ - src/ - test/ - CMakeLists.txt secp256k1: runOnDiffRegex: - src/secp256k1/ Werror: true targets: - - secp256k1 - install-secp256k1 - - check-secp256k1 ibd: targets: - - bitcoind post_build: | "${TOPLEVEL}/contrib/teamcity/ibd.sh" -disablewallet -debug=net timeout: 28800 artifacts: ibd/debug.log: log/debug.log ibd-no-assumevalid-checkpoint: targets: - - bitcoind post_build: | "${TOPLEVEL}/contrib/teamcity/ibd.sh" -disablewallet -assumevalid=0 -checkpoints=0 -debug=net timeout: 28800 artifacts: ibd/debug.log: log/debug.log # This template expects the following environment variables to be set: # - JS_PROJECT_ROOT: the root directory for the js project being tested, # relative to the repository top level (no trailing /). # - DEPENDS_MOCK_CHRONIK_CLIENT: "true" if these tests require # the mock-chronik-client library, otherwise unset # - DEPENDS_ECASH_LIB_WASM: "true" if these tests require ecash-lib-wasm # to be built, otherwise unset # - DEPENDS_CHRONIK_CLIENT: "true" if these tests require chronik-client # to be build, otherwise unset js-mocha: artifacts: coverage.tar.gz: coverage.tar.gz script: | # Convert hyphen separated words to space separated capitalized words project_to_suite() { HYPHEN_SEPARATED=$1 WORD_SEPARATED=($(echo "${HYPHEN_SEPARATED//-/ }")) echo "${WORD_SEPARATED[@]^}" } PROJECT_NAME="$(basename ${JS_PROJECT_ROOT})" TEST_SUITE_NAME="$(project_to_suite ${PROJECT_NAME})" # Install mock-chronik-client dependencies if this test uses them if [ -z "${DEPENDS_MOCK_CHRONIK_CLIENT+x}" ] ; then echo "Test does not depend on mock-chronik-client, skipping mock-chronik-client dependencies..." else echo "Test depends on mock-chronik-client. Installing mock-chronik-client dependencies..." pushd "${TOPLEVEL}/modules/mock-chronik-client" npm ci fi # Build ecash-lib-wasm for ecash-lib's WebAssembly part if [ -z "${DEPENDS_ECASH_LIB_WASM+x}" ] ; then echo "Test does not depend on ecash-lib-wasm, skipping" else echo "Test depends on ecash-lib-wasm. Building WebAssembly..." pushd "${TOPLEVEL}/modules/ecash-lib-wasm" ./build-wasm.sh fi if [ -z "${DEPENDS_CHRONIK_CLIENT+x}" ] ; then echo "Test does not depend on chronik-client" else echo "Test depends on chronik-client. Building TypeScript..." pushd "${TOPLEVEL}/modules/chronik-client" npm ci fi pushd "${TOPLEVEL}/${JS_PROJECT_ROOT}" MOCHA_JUNIT_DIR="test_results" MOCHA_JUNIT_PATH="${MOCHA_JUNIT_DIR}/${PROJECT_NAME}-junit.xml" rm -rf "${MOCHA_JUNIT_DIR}" && mkdir -p "${MOCHA_JUNIT_DIR}" npm ci # Test build if this is a typescript app that builds if [ -z "${RUN_NPM_BUILD+x}" ] ; then echo "CI not configured to test build." else echo "CI configured to test build. Building..." npm run build fi # Make sure the report is available even if the tests fail move_junit_report() { mv "${MOCHA_JUNIT_PATH}" "${BUILD_DIR}/" } trap "move_junit_report" EXIT nyc \ --reporter=text \ --reporter=lcov \ --reporter=teamcity \ npm test -- \ --reporter mocha-junit-reporter \ --reporter-options mochaFile="${MOCHA_JUNIT_PATH}" \ --reporter-options testsuitesTitle="${TEST_SUITE_NAME} Unit Tests" \ --reporter-options rootSuiteTitle="${TEST_SUITE_NAME}" # Generate a summary report lcov \ --rc lcov_branch_coverage=1 \ --summary coverage/lcov.info \ > coverage/lcov-report/coverage-summary.txt 2>&1 pushd coverage/lcov-report tar -czf ../coverage.tar.gz -- * popd mv coverage/coverage.tar.gz "${BUILD_DIR}/" rm -rf coverage # This template expect the following environment variables to be set: # - JS_PROJECT_ROOT: the root directory for the js project being tested, # relative to the repository top level (no trailing /). js-mocha-integration-tests: artifacts: coverage.tar.gz: coverage.tar.gz post_build: | # Convert hyphen separated words to space separated capitalized words project_to_suite() { HYPHEN_SEPARATED=$1 WORD_SEPARATED=($(echo "${HYPHEN_SEPARATED//-/ }")) echo "${WORD_SEPARATED[@]^}" } PROJECT_NAME="$(basename ${JS_PROJECT_ROOT})" TEST_SUITE_NAME="$(project_to_suite ${PROJECT_NAME})" # Build ecash-lib-wasm for ecash-lib's WebAssembly part if [ -z "${DEPENDS_ECASH_LIB_WASM+x}" ] ; then echo "Test does not depend on ecash-lib-wasm, skipping" else echo "Test depends on ecash-lib-wasm. Building WebAssembly..." pushd "${TOPLEVEL}/modules/ecash-lib-wasm" ./build-wasm.sh fi if [ -z "${DEPENDS_CHRONIK_CLIENT+x}" ] ; then echo "Test does not depend on chronik-client" else echo "Test depends on chronik-client. Building TypeScript..." pushd "${TOPLEVEL}/modules/chronik-client" npm ci fi pushd "${TOPLEVEL}/${JS_PROJECT_ROOT}" MOCHA_JUNIT_DIR="test_results" MOCHA_JUNIT_PATH="${MOCHA_JUNIT_DIR}/${PROJECT_NAME}-integration-tests-junit.xml" rm -rf "${MOCHA_JUNIT_DIR}" && mkdir -p "${MOCHA_JUNIT_DIR}" npm ci # Make sure the report is available even if the tests fail move_junit_report() { mv "${MOCHA_JUNIT_PATH}" "${BUILD_DIR}/" } trap "move_junit_report" EXIT nyc \ --reporter=text \ --reporter=lcov \ --reporter=teamcity \ npm run integration-tests -- \ --reporter mocha-junit-reporter \ --reporter-options mochaFile="${MOCHA_JUNIT_PATH}" \ --reporter-options testsuitesTitle="${TEST_SUITE_NAME} Integration Tests" \ --reporter-options rootSuiteTitle="${TEST_SUITE_NAME}" # Generate a summary report lcov \ --rc lcov_branch_coverage=1 \ --summary coverage/lcov.info \ > coverage/lcov-report/coverage-summary.txt 2>&1 pushd coverage/lcov-report tar -czf ../coverage.tar.gz -- * popd mv coverage/coverage.tar.gz "${BUILD_DIR}/" rm -rf coverage # The build descriptions. # If a script is defined, then this will be the only step to run. # Otherwise a list of targets can be specified, grouped by parallel runs. # Example: # targets: # - - build11 # - build12 # - - build21 # - build22 # Will run: # ninja build11 build12 # ninja build21 build22 builds: build-asan: Werror: true clang: true fail_fast: true cmake_flags: - '-DCMAKE_CXX_FLAGS=-DARENA_DEBUG' - '-DCRYPTO_USE_ASM=OFF' - '-DENABLE_SANITIZERS=address' templates: - check+secp256k1 timeout: 2400 env: ASAN_OPTIONS: log_path=stdout LSAN_OPTIONS: log_path=stdout build-bench: runOnDiffRegex: - src/bench/ Werror: true targets: - - all - install-bitcoin-bench - - bench-bitcoin timeout: 1200 artifacts: src/bench/BitcoinABC_Bench.csv: bench/BitcoinABC_Bench.csv src/bench/BitcoinABC_Bench.json: bench/BitcoinABC_Bench.json post_build: | "${TOPLEVEL}/contrib/teamcity/nanobench_json_to_teamcity_messages.py" \ "Bitcoin ABC Benchmark" \ "${BUILD_DIR}/src/bench/BitcoinABC_Bench.json" build-chronik: runOnDiffRegex: - chronik/ cmake_flags: - '-DBUILD_BITCOIN_CHRONIK=ON' targets: - - check-crates - - all - install - - check - check-functional build-chronik-plugins: runOnDiffRegex: - chronik/ cmake_flags: - '-DBUILD_BITCOIN_CHRONIK=ON' - '-DBUILD_BITCOIN_CHRONIK_PLUGINS=ON' targets: - - check-crates - - all - install - - check - check-functional build-clang: Werror: true clang: true targets: - - all - install - install-secp256k1 - - check - check-secp256k1 templates: - diff-node timeout: 1200 build-clang-tidy: clang: true cmake_flags: - '-DENABLE_CLANG_TIDY=ON' targets: - - all - - check templates: - diff-node timeout: 1800 build-coverage: gcc: true cmake_flags: - '-DENABLE_COVERAGE=ON' - '-DENABLE_BRANCH_COVERAGE=ON' targets: - - coverage-check-extended post_build: | "${TOPLEVEL}/contrib/teamcity/upload-coverage.sh" check-extended timeout: 4800 artifacts: coverage.tar.gz: coverage.tar.gz build-debug: Werror: true cmake_flags: - '-DCMAKE_BUILD_TYPE=Debug' templates: - check+secp256k1 - diff-node timeout: 1200 build-diff: Werror: true targets: - - all - install - install-secp256k1 - - check-all - check-upgrade-activated templates: - diff-node timeout: 1200 build-docs: targets: - - doc-rpc - doc-doxygen post_build: | xvfb-run -a -e /dev/stderr ninja install-manpages-html timeout: 600 artifacts: doc/*: doc build-fuzzer: runOnDiffRegex: - src/test/fuzz/ - test/fuzz/ clang: true Werror: true cmake_flags: - '-DENABLE_SANITIZERS=fuzzer' targets: - - bitcoin-fuzzers build-ibd: templates: - ibd build-ibd-no-assumevalid-checkpoint: templates: - ibd-no-assumevalid-checkpoint build-linux32: cross_build: static_depends: linux32 toolchain: Linux32 cmake_flags: - '-DBUILD_BITCOIN_CHRONIK=ON' templates: - check+secp256k1 timeout: 3600 build-linux64: cross_build: static_depends: linux64 toolchain: Linux64 cmake_flags: - '-DBUILD_BITCOIN_CHRONIK=ON' - '-DBUILD_BITCOIN_CHAINSTATE=ON' templates: - check+secp256k1 timeout: 3600 build-linux-aarch64: cross_build: static_depends: linux-aarch64 toolchain: LinuxAArch64 emulator: qemu-aarch64-static cmake_flags: - '-DBUILD_BITCOIN_CHRONIK=ON' - '-DBUILD_BITCOIN_CHAINSTATE=ON' # The ZMQ functional test will fail with qemu (due to a qemu limitation), # so disable it to avoid the failure. # Extracted from stderr: # Unknown host QEMU_IFLA type: 50 # Unknown host QEMU_IFLA type: 51 # Unknown QEMU_IFLA_BRPORT type 33 - "-DBUILD_BITCOIN_ZMQ=OFF" # This is an horrible hack to workaround a qemu bug: # https://bugs.launchpad.net/qemu/+bug/1748612 # Qemu emits a message for unsupported features called by the guest. # Because the output filtering is not working at all, it causes the # qemu stderr to end up in the node stderr and fail the functional # tests. # Disabling the unsupported feature (here bypassing the config # detection) fixes the issue. # FIXME: get rid of the hack, either by using a better qemu version # or by filtering stderr at the framework level. - "-DHAVE_DECL_GETIFADDRS=OFF" templates: - check+secp256k1 timeout: 3600 env: QEMU_LD_PREFIX: /usr/aarch64-linux-gnu build-linux-arm: cross_build: static_depends: linux-arm toolchain: LinuxARM emulator: qemu-arm-static cmake_flags: - '-DBUILD_BITCOIN_CHRONIK=ON' - '-DBUILD_BITCOIN_CHAINSTATE=ON' # The ZMQ functional test will fail with qemu (due to a qemu limitation), # so disable it to avoid the failure. # Extracted from stderr: # Unknown host QEMU_IFLA type: 50 # Unknown host QEMU_IFLA type: 51 # Unknown QEMU_IFLA_BRPORT type 33 - "-DBUILD_BITCOIN_ZMQ=OFF" # This is an horrible hack to workaround a qemu bug: # https://bugs.launchpad.net/qemu/+bug/1748612 # Qemu emits a message for unsupported features called by the guest. # Because the output filtering is not working at all, it causes the # qemu stderr to end up in the node stderr and fail the functional # tests. # Disabling the unsupported feature (here bypassing the config # detection) fixes the issue. # FIXME: get rid of the hack, either by using a better qemu version # or by filtering stderr at the framework level. - "-DHAVE_DECL_GETIFADDRS=OFF" templates: - check+secp256k1 timeout: 3600 env: QEMU_LD_PREFIX: /usr/arm-linux-gnueabihf build-make-generator: generator: name: 'Unix Makefiles' command: make flags: - '-k' templates: - check+secp256k1 timeout: 1200 build-master: cmake_flags: - '-DBUILD_BITCOIN_CHAINSTATE=ON' Werror: true targets: - - all - install - install-secp256k1 - - check-extended - check-upgrade-activated-extended - check-electrum timeout: 4800 build-native-osx: templates: - check+secp256k1 timeout: 3600 build-osx: cross_build: static_depends: osx toolchain: OSX cmake_flags: - '-DBUILD_BITCOIN_CHAINSTATE=ON' # Uncomment to build Chronik once the cxx crate is working for OSX # - '-DBUILD_BITCOIN_CHRONIK=ON' targets: - - all - install - install-secp256k1 - install-tests post_build: | export PYTHONPATH="${TOPLEVEL}/depends/x86_64-apple-darwin/native/lib/python3/dist-packages:${PYTHONPATH:-}" ninja osx-dmg timeout: 3600 artifacts: Bitcoin-ABC.dmg: Bitcoin-ABC.dmg build-secp256k1: runOnDiffRegex: - src/secp256k1/ cmake_flags: - '-DSECP256K1_ENABLE_MODULE_ECDH=ON' - '-DSECP256K1_ENABLE_MODULE_MULTISET=ON' templates: - secp256k1 timeout: 600 build-secp256k1-java: runOnDiffRegex: - src/secp256k1/ cmake_flags: - '-DSECP256K1_ENABLE_MODULE_ECDH=ON' - '-DSECP256K1_ENABLE_JNI=ON' - '-DUSE_JEMALLOC=OFF' templates: - secp256k1 timeout: 600 build-secp256k1-bench: runOnDiffRegex: - src/secp256k1/ cmake_flags: - '-DSECP256K1_ENABLE_MODULE_ECDH=ON' - '-DSECP256K1_ENABLE_MODULE_MULTISET=ON' targets: - - install-secp256k1-bench - - bench-secp256k1 timeout: 1200 build-tsan: Werror: true clang: true fail_fast: true cmake_flags: - '-DENABLE_SANITIZERS=thread' targets: - - all - install - - check - check-functional timeout: 2400 env: TSAN_OPTIONS: log_path=stdout build-ubsan: Werror: true clang: true fail_fast: true cmake_flags: - '-DENABLE_SANITIZERS=undefined' templates: - check+secp256k1 timeout: 2400 env: UBSAN_OPTIONS: log_path=stdout build-win64: cross_build: static_depends: win64 toolchain: Win64 cmake_flags: - '-DBUILD_BITCOIN_CHRONIK=ON' - '-DBUILD_BITCOIN_CHAINSTATE=ON' - "-DBUILD_BITCOIN_SEEDER=OFF" - "-DCPACK_STRIP_FILES=ON" - "-DUSE_JEMALLOC=OFF" targets: - - all - install - install-secp256k1 # install-tests is broken on debian bullseye because the leveldb tests # do not export any symbol and trigger a mingw linker bug: # https://sourceware.org/bugzilla/show_bug.cgi?id=26588 # We still install most test suites so we can use the artifacts and run # them on the native platform. #- install-tests - install-test-suite-bitcoin - install-test-suite-bitcoin-qt - install-test-suite-avalanche - install-test-suite-pow - - package post_build: | wine "${ARTIFACT_DIR}/bin/test_bitcoin.exe" --run_test=\!radix_tests,rcu_tests,denialofservice_tests/outbound_slow_chain_eviction timeout: 3600 artifacts: bitcoin-abc-*-x86_64-w64-mingw32.exe: bitcoin-abc-x86_64-w64-mingw32.exe build-without-bip70: Werror: true cmake_flags: - '-DENABLE_BIP70=OFF' targets: - - all - install - - check - check-functional timeout: 1800 build-without-cli: Werror: true cmake_flags: - '-DBUILD_BITCOIN_CLI=OFF' targets: - - all - install - - check-functional timeout: 1200 build-without-qt: Werror: true cmake_flags: - '-DBUILD_BITCOIN_QT=OFF' targets: - - all - install - - check timeout: 1200 build-without-wallet: Werror: true cmake_flags: - '-DBUILD_BITCOIN_WALLET=OFF' - '-DBUILD_BITCOIN_CHAINSTATE=ON' targets: - - all - install - - check - check-functional templates: - diff-node timeout: 1200 build-without-zmq: Werror: true cmake_flags: - '-DBUILD_BITCOIN_ZMQ=OFF' targets: - - all - install - - check - check-functional timeout: 1800 check-buildbot: runOnDiffRegex: - contrib/buildbot/ targets: - - check-buildbot timeout: 600 check-seeds: targets: - - bitcoind - bitcoin-cli post_build: | # Run on different ports to avoid a race where the rpc port used in the first run # may not be closed in time for the second to start. SEEDS_DIR="${TOPLEVEL}"/contrib/seeds RPC_PORT=18832 "${SEEDS_DIR}"/check-seeds.sh main 80 RPC_PORT=18833 "${SEEDS_DIR}"/check-seeds.sh test 70 timeout: 600 check-source-control-tools: cmake_flags: - '-DENABLE_SOURCE_CONTROL_TOOLS_TESTS=ON' targets: - - check-source-control-tools timeout: 600 gitian-linux: templates: - gitian_builds env: OS_NAME: linux gitian-osx: templates: - gitian_builds env: OS_NAME: osx gitian-win: templates: - gitian_builds env: OS_NAME: win guix-linux: templates: - guix_builds env: HOSTS: "x86_64-linux-gnu aarch64-linux-gnu arm-linux-gnueabihf" guix-osx: templates: - guix_builds env: HOSTS: "x86_64-apple-darwin" guix-win: templates: - guix_builds env: HOSTS: "x86_64-w64-mingw32" lint-circular-dependencies: runOnDiffRegex: - src/ - test/lint/ script: | "${TOPLEVEL}/test/lint/lint-circular-dependencies.sh" cashtab-tests: runOnDiffRegex: - cashtab/ - modules/mock-chronik-client/ artifacts: coverage.tar.gz: coverage.tar.gz env: # Any string will work, CI just needs to be defined CI: 'teamcity' JEST_SUITE_NAME: "Cashtab Test suites" JEST_JUNIT_SUITE_NAME: "CashTab Unit Tests" JEST_JUNIT_OUTPUT_DIR: "test/junit" JEST_JUNIT_OUTPUT_NAME: "cashtab.xml" script: | # Cashtab tests depend on mock-chronik-cleint # Install any mock-chronik-client dependencies before running tests echo "Installing mock-chronik-client dependencies..." pushd "${TOPLEVEL}/modules/mock-chronik-client" npm ci pushd "${TOPLEVEL}/cashtab" npm ci npm run build # Make sure the report is available even if the tests fail move_junit_report() { mv test "${BUILD_DIR}/" } trap "move_junit_report" EXIT npm run test --coverage -- \ --reporters=default \ --reporters=jest-junit \ --coverageReporters=text \ --coverageReporters=lcov \ --coverageReporters=teamcity # Generate a summary report lcov \ --rc lcov_branch_coverage=1 \ --summary coverage/lcov.info \ > coverage/lcov-report/coverage-summary.txt 2>&1 pushd coverage/lcov-report tar -czf ../coverage.tar.gz -- * popd mv coverage/coverage.tar.gz "${BUILD_DIR}/" cashtab-components-tests: runOnDiffRegex: - modules/cashtab-components/ env: # Any string will work, CI just needs to be defined CI: 'teamcity' JEST_SUITE_NAME: "Cashtab Components Test suites" JEST_JUNIT_SUITE_NAME: "CashTab Components Unit Tests" JEST_JUNIT_OUTPUT_DIR: "test/junit" JEST_JUNIT_OUTPUT_NAME: "cashtab-components.xml" script: | pushd "${TOPLEVEL}/modules/cashtab-components" npm ci npm run build # Make sure the report is available even if the tests fail move_junit_report() { mv test "${BUILD_DIR}/" } trap "move_junit_report" EXIT npm run test -- \ --reporters=default \ --reporters=jest-junit alias-server-tests: runOnDiffRegex: - apps/alias-server/ - modules/mock-chronik-client/ env: JS_PROJECT_ROOT: apps/alias-server DEPENDS_MOCK_CHRONIK_CLIENT: "true" templates: - js-mocha ecash-herald-tests: runOnDiffRegex: - apps/ecash-herald/ - modules/mock-chronik-client/ env: JS_PROJECT_ROOT: apps/ecash-herald DEPENDS_MOCK_CHRONIK_CLIENT: "true" templates: - js-mocha token-server-tests: runOnDiffRegex: - apps/token-server/ - modules/mock-chronik-client/ env: JS_PROJECT_ROOT: apps/token-server DEPENDS_MOCK_CHRONIK_CLIENT: "true" RUN_NPM_BUILD: "true" templates: - js-mocha mock-chronik-client-tests: runOnDiffRegex: - modules/mock-chronik-client/ env: JS_PROJECT_ROOT: modules/mock-chronik-client templates: - js-mocha app-dev-examples: runOnDiffRegex: - apps/examples/ - modules/mock-chronik-client/ env: JS_PROJECT_ROOT: apps/examples DEPENDS_MOCK_CHRONIK_CLIENT: "true" templates: - js-mocha chronik-client-tests: runOnDiffRegex: - modules/chronik-client/ env: JS_PROJECT_ROOT: modules/chronik-client templates: - js-mocha ecash-lib-tests: runOnDiffRegex: - modules/ecash-lib/ env: JS_PROJECT_ROOT: modules/ecash-lib RUN_NPM_BUILD: "true" DEPENDS_ECASH_LIB_WASM: "true" DEPENDS_CHRONIK_CLIENT: "true" templates: - js-mocha ecash-lib-integration-tests: cmake_flags: - '-DBUILD_BITCOIN_CHRONIK=ON' targets: - - all runOnDiffRegex: - chronik/ - modules/chronik-client/ - modules/ecash-lib/ env: JS_PROJECT_ROOT: modules/ecash-lib DEPENDS_ECASH_LIB_WASM: "true" DEPENDS_CHRONIK_CLIENT: "true" templates: - js-mocha-integration-tests chronik-client-integration-tests: cmake_flags: - '-DBUILD_BITCOIN_CHRONIK=ON' targets: - - all runOnDiffRegex: - chronik/ - modules/chronik-client/ env: JS_PROJECT_ROOT: modules/chronik-client templates: - js-mocha-integration-tests ecashaddrjs-tests: runOnDiffRegex: - modules/ecashaddrjs/ env: JS_PROJECT_ROOT: modules/ecashaddrjs templates: - js-mocha ecash-script-tests: runOnDiffRegex: - modules/ecash-script/ env: JS_PROJECT_ROOT: modules/ecash-script templates: - js-mocha ecash-coinselect-tests: runOnDiffRegex: - modules/ecash-coinselect/ env: JS_PROJECT_ROOT: modules/ecash-coinselect templates: - js-mocha electrum-tests: runOnDiffRegex: - electrum/ targets: - - check-electrum electrum-functional-tests: script: | pip3 install -r "${TOPLEVEL}/electrum/contrib/requirements/requirements.txt" pip3 install -r "${TOPLEVEL}/electrum/contrib/requirements/requirements-regtest.txt" pytest "${TOPLEVEL}/electrum/electrumabc/tests/regtest" preview-e.cash: docker: context: web/e.cash port: 3000 build_args: - "PREVIEW_BUILD=next.preview.js" preview-chronik.e.cash: docker: context: modules/ - port: 3000 build_args: - "NGINX_CONF=nginx-preview.conf" preview-explorer: docker: context: web/explorer port: 3035 preview-cashtab: docker: context: cashtab build_args: - "NGINX_CONF=nginx-preview.conf" diff --git a/modules/Dockerfile b/modules/Dockerfile index 0b66ff42b..a084d271b 100644 --- a/modules/Dockerfile +++ b/modules/Dockerfile @@ -1,30 +1,35 @@ # Multi-stage # 1) Node image for building frontend assets # 2) nginx stage to serve frontend assets # Stage 1 FROM node:20-buster-slim AS builder # First, copy chronik-client and install its dependencies at the same relative path WORKDIR /app/chronik-client COPY chronik-client/ . RUN npm ci +RUN npm run build # Then, copy and build docs -WORKDIR /app/chronik.e.cash/ +WORKDIR /app/docs/chronik.e.cash/ COPY docs/chronik.e.cash/package.json . COPY docs/chronik.e.cash/package-lock.json . RUN npm ci +# Copy everything in docs/chronik.e.cash COPY docs/chronik.e.cash/ . +# If you do not have an .abclatestversion file, create one by copying .abclatestversion.sample +# Note, in CI, you must create .abclatestversion before running this Dockerfile +RUN if [ ! -f .abclatestversion ]; then mv .abclatestversion.sample .abclatestversion; fi RUN npm run build # Stage 2 FROM nginx ARG NGINX_CONF=nginx.conf COPY docs/chronik.e.cash/$NGINX_CONF /etc/nginx/conf.d/default.conf # Copy static assets from builder stage -COPY --from=builder /app/chronik.e.cash/build /usr/share/nginx/html/ +COPY --from=builder /app/docs/chronik.e.cash/build /usr/share/nginx/html/ # Containers run nginx with global directives and daemon off ENTRYPOINT ["nginx", "-g", "daemon off;"] diff --git a/modules/docs/chronik.e.cash/.gitignore b/modules/docs/chronik.e.cash/.gitignore index 828341737..e8b1306a4 100644 --- a/modules/docs/chronik.e.cash/.gitignore +++ b/modules/docs/chronik.e.cash/.gitignore @@ -1,27 +1,28 @@ # Copyright (c) 2024 The Bitcoin developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. # Dependencies /node_modules # Production /build # Generated files .docusaurus .cache-loader # Misc .DS_Store .env.local .env.development.local .env.test.local .env.production.local npm-debug.log* yarn-debug.log* yarn-error.log* # This file is generated in CI with the latest version of Bitcoin ABC .abclatestversion + diff --git a/modules/docs/chronik.e.cash/README.md b/modules/docs/chronik.e.cash/README.md index 33a069efa..fd68c4d52 100644 --- a/modules/docs/chronik.e.cash/README.md +++ b/modules/docs/chronik.e.cash/README.md @@ -1,13 +1,15 @@ # chronik.e.cash Documentation site with live methods for chronik and chronik-client. This website is built using [Docusaurus](https://docusaurus.io/), a modern static website generator. # Development The latest version of Bitcoin ABC is needed to generate appropriate download links. Docusaurus gets this information from the file `.abclatestversion`. In order to run docusaurus locally, you will need this file in place. `cp .abclatestversion.sample .abclatestversion` + +For deployment, it should be overwritten with the latest version.