From 45680f9a2d36d3c14ed1daa20565d849a53aa80f Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Mon, 25 Jul 2022 18:30:30 +0300 Subject: [PATCH] Drop CircleCI runs (#2082) --- .circleci/config.yml | 369 ------------------ .../actions/run-python-test-set/action.yml | 2 +- Dockerfile.compute-tools | 2 +- .../batch_others/test_wal_acceptor_async.py | 5 +- 4 files changed, 4 insertions(+), 374 deletions(-) delete mode 100644 .circleci/config.yml diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 00a51eb906..0000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,369 +0,0 @@ -version: 2.1 - -executors: - neon-xlarge-executor: - resource_class: xlarge - docker: - # NB: when changed, do not forget to update rust image tag in all Dockerfiles - - image: neondatabase/rust:1.58 - neon-executor: - docker: - - image: neondatabase/rust:1.58 - -jobs: - # A job to build postgres - build-postgres: - executor: neon-xlarge-executor - parameters: - build_type: - type: enum - enum: ["debug", "release"] - environment: - BUILD_TYPE: << parameters.build_type >> - steps: - # Checkout the git repo (circleci doesn't have a flag to enable submodules here) - - checkout - - # Grab the postgres git revision to build a cache key. - # Append makefile as it could change the way postgres is built. - # Note this works even though the submodule hasn't been checkout out yet. - - run: - name: Get postgres cache key - command: | - git rev-parse HEAD:vendor/postgres > /tmp/cache-key-postgres - cat Makefile >> /tmp/cache-key-postgres - - - restore_cache: - name: Restore postgres cache - keys: - # Restore ONLY if the rev key matches exactly - - v05-postgres-cache-<< parameters.build_type >>-{{ checksum "/tmp/cache-key-postgres" }} - - # Build postgres if the restore_cache didn't find a build. - # `make` can't figure out whether the cache is valid, since - # it only compares file timestamps. - - run: - name: build postgres - command: | - if [ ! -e tmp_install/bin/postgres ]; then - # "depth 1" saves some time by not cloning the whole repo - git submodule update --init --depth 1 - # bail out on any warnings - COPT='-Werror' mold -run make postgres -j$(nproc) - fi - - - save_cache: - name: Save postgres cache - key: v05-postgres-cache-<< parameters.build_type >>-{{ checksum "/tmp/cache-key-postgres" }} - paths: - - tmp_install - - # A job to build Neon rust code - build-neon: - executor: neon-xlarge-executor - parameters: - build_type: - type: enum - enum: ["debug", "release"] - environment: - BUILD_TYPE: << parameters.build_type >> - steps: - # Checkout the git repo (without submodules) - - checkout - - # Grab the postgres git revision to build a cache key. - # Append makefile as it could change the way postgres is built. - # Note this works even though the submodule hasn't been checkout out yet. - - run: - name: Get postgres cache key - command: | - git rev-parse HEAD:vendor/postgres > /tmp/cache-key-postgres - cat Makefile >> /tmp/cache-key-postgres - - - - restore_cache: - name: Restore postgres cache - keys: - # Restore ONLY if the rev key matches exactly - - v05-postgres-cache-<< parameters.build_type >>-{{ checksum "/tmp/cache-key-postgres" }} - - - restore_cache: - name: Restore rust cache - keys: - # Require an exact match. While an out of date cache might speed up the build, - # there's no way to clean out old packages, so the cache grows every time something - # changes. - - v05-rust-cache-deps-<< parameters.build_type >>-{{ checksum "Cargo.lock" }} - - # Build the rust code, including test binaries - - run: - name: Rust build << parameters.build_type >> - command: | - if [[ $BUILD_TYPE == "debug" ]]; then - CARGO_FLAGS= - elif [[ $BUILD_TYPE == "release" ]]; then - CARGO_FLAGS="--release --features profiling" - fi - - export CARGO_INCREMENTAL=0 - export CACHEPOT_BUCKET=zenith-rust-cachepot - export RUSTC_WRAPPER="" - export AWS_ACCESS_KEY_ID="${CACHEPOT_AWS_ACCESS_KEY_ID}" - export AWS_SECRET_ACCESS_KEY="${CACHEPOT_AWS_SECRET_ACCESS_KEY}" - mold -run cargo build $CARGO_FLAGS --features failpoints --bins --tests - cachepot -s - - - save_cache: - name: Save rust cache - key: v05-rust-cache-deps-<< parameters.build_type >>-{{ checksum "Cargo.lock" }} - paths: - - ~/.cargo/registry - - ~/.cargo/git - - target - - # Run rust unit tests - - run: - name: cargo test - command: | - if [[ $BUILD_TYPE == "debug" ]]; then - CARGO_FLAGS= - elif [[ $BUILD_TYPE == "release" ]]; then - CARGO_FLAGS=--release - fi - - cargo test $CARGO_FLAGS - - # Install the rust binaries, for use by test jobs - - run: - name: Install rust binaries - command: | - binaries=$( - cargo metadata --format-version=1 --no-deps | - jq -r '.packages[].targets[] | select(.kind | index("bin")) | .name' - ) - - mkdir -p /tmp/zenith/bin - mkdir -p /tmp/zenith/test_bin - mkdir -p /tmp/zenith/etc - - # Install target binaries - for bin in $binaries; do - SRC=target/$BUILD_TYPE/$bin - DST=/tmp/zenith/bin/$bin - cp $SRC $DST - done - - # Install the postgres binaries, for use by test jobs - - run: - name: Install postgres binaries - command: | - cp -a tmp_install /tmp/zenith/pg_install - - # Save rust binaries for other jobs in the workflow - - persist_to_workspace: - root: /tmp/zenith - paths: - - "*" - - check-codestyle-python: - executor: neon-executor - steps: - - checkout - - restore_cache: - keys: - - v2-python-deps-{{ checksum "poetry.lock" }} - - run: - name: Install deps - command: ./scripts/pysync - - save_cache: - key: v2-python-deps-{{ checksum "poetry.lock" }} - paths: - - /home/circleci/.cache/pypoetry/virtualenvs - - run: - name: Print versions - when: always - command: | - poetry run python --version - poetry show - - run: - name: Run yapf to ensure code format - when: always - command: poetry run yapf --recursive --diff . - - run: - name: Run mypy to check types - when: always - command: poetry run mypy . - - run-pytest: - executor: neon-executor - parameters: - # pytest args to specify the tests to run. - # - # This can be a test file name, e.g. 'test_pgbench.py, or a subdirectory, - # or '-k foobar' to run tests containing string 'foobar'. See pytest man page - # section SPECIFYING TESTS / SELECTING TESTS for details. - # - # Select the type of Rust build. Must be "release" or "debug". - build_type: - type: string - default: "debug" - # This parameter is required, to prevent the mistake of running all tests in one job. - test_selection: - type: string - default: "" - # Arbitrary parameters to pytest. For example "-s" to prevent capturing stdout/stderr - extra_params: - type: string - default: "" - needs_postgres_source: - type: boolean - default: false - run_in_parallel: - type: boolean - default: true - save_perf_report: - type: boolean - default: false - environment: - BUILD_TYPE: << parameters.build_type >> - steps: - - attach_workspace: - at: /tmp/zenith - - checkout - - when: - condition: << parameters.needs_postgres_source >> - steps: - - run: git submodule update --init --depth 1 - - restore_cache: - keys: - - v2-python-deps-{{ checksum "poetry.lock" }} - - run: - name: Install deps - command: ./scripts/pysync - - save_cache: - key: v2-python-deps-{{ checksum "poetry.lock" }} - paths: - - /home/circleci/.cache/pypoetry/virtualenvs - - run: - name: Run pytest - # pytest doesn't output test logs in real time, so CI job may fail with - # `Too long with no output` error, if a test is running for a long time. - # In that case, tests should have internal timeouts that are less than - # no_output_timeout, specified here. - no_output_timeout: 10m - environment: - - NEON_BIN: /tmp/zenith/bin - - POSTGRES_DISTRIB_DIR: /tmp/zenith/pg_install - - TEST_OUTPUT: /tmp/test_output - # this variable will be embedded in perf test report - # and is needed to distinguish different environments - - PLATFORM: zenith-local-ci - command: | - PERF_REPORT_DIR="$(realpath test_runner/perf-report-local)" - rm -rf $PERF_REPORT_DIR - - TEST_SELECTION="test_runner/<< parameters.test_selection >>" - EXTRA_PARAMS="<< parameters.extra_params >>" - if [ -z "$TEST_SELECTION" ]; then - echo "test_selection must be set" - exit 1 - fi - if << parameters.run_in_parallel >>; then - EXTRA_PARAMS="-n4 $EXTRA_PARAMS" - fi - if << parameters.save_perf_report >>; then - if [[ $CIRCLE_BRANCH == "main" ]]; then - mkdir -p "$PERF_REPORT_DIR" - EXTRA_PARAMS="--out-dir $PERF_REPORT_DIR $EXTRA_PARAMS" - fi - fi - - export GITHUB_SHA=$CIRCLE_SHA1 - - # Run the tests. - # - # The junit.xml file allows CircleCI to display more fine-grained test information - # in its "Tests" tab in the results page. - # --verbose prints name of each test (helpful when there are - # multiple tests in one file) - # -rA prints summary in the end - # -n4 uses four processes to run tests via pytest-xdist - # -s is not used to prevent pytest from capturing output, because tests are running - # in parallel and logs are mixed between different tests - ./scripts/pytest \ - --junitxml=$TEST_OUTPUT/junit.xml \ - --tb=short \ - --verbose \ - -m "not remote_cluster" \ - -rA $TEST_SELECTION $EXTRA_PARAMS - - if << parameters.save_perf_report >>; then - if [[ $CIRCLE_BRANCH == "main" ]]; then - export REPORT_FROM="$PERF_REPORT_DIR" - export REPORT_TO=local - scripts/generate_and_push_perf_report.sh - fi - fi - - run: - # CircleCI artifacts are preserved one file at a time, so skipping - # this step isn't a good idea. If you want to extract the - # pageserver state, perhaps a tarball would be a better idea. - name: Delete all data but logs - when: always - command: | - du -sh /tmp/test_output/* - find /tmp/test_output -type f ! -name "*.log" ! -name "regression.diffs" ! -name "junit.xml" ! -name "*.filediff" ! -name "*.stdout" ! -name "*.stderr" ! -name "flamegraph.svg" ! -name "*.metrics" -delete - du -sh /tmp/test_output/* - - store_artifacts: - path: /tmp/test_output - # The store_test_results step tells CircleCI where to find the junit.xml file. - - store_test_results: - path: /tmp/test_output - # Save data (if any) - - persist_to_workspace: - root: /tmp/zenith - paths: - - "*" - -workflows: - build_and_test: - jobs: - - check-codestyle-python - - build-postgres: - name: build-postgres-<< matrix.build_type >> - matrix: - parameters: - build_type: ["debug", "release"] - - build-neon: - name: build-neon-<< matrix.build_type >> - matrix: - parameters: - build_type: ["debug", "release"] - requires: - - build-postgres-<< matrix.build_type >> - - run-pytest: - name: pg_regress-tests-<< matrix.build_type >> - matrix: - parameters: - build_type: ["debug", "release"] - test_selection: batch_pg_regress - needs_postgres_source: true - requires: - - build-neon-<< matrix.build_type >> - - run-pytest: - name: other-tests-<< matrix.build_type >> - matrix: - parameters: - build_type: ["debug", "release"] - test_selection: batch_others - requires: - - build-neon-<< matrix.build_type >> - - run-pytest: - name: benchmarks - context: PERF_TEST_RESULT_CONNSTR - build_type: release - test_selection: performance - run_in_parallel: false - save_perf_report: true - requires: - - build-neon-release diff --git a/.github/actions/run-python-test-set/action.yml b/.github/actions/run-python-test-set/action.yml index 0d058d47c1..a956929d92 100644 --- a/.github/actions/run-python-test-set/action.yml +++ b/.github/actions/run-python-test-set/action.yml @@ -99,7 +99,7 @@ runs: # Run the tests. # - # The junit.xml file allows CircleCI to display more fine-grained test information + # The junit.xml file allows CI tools to display more fine-grained test information # in its "Tests" tab in the results page. # --verbose prints name of each test (helpful when there are # multiple tests in one file) diff --git a/Dockerfile.compute-tools b/Dockerfile.compute-tools index 87b73e139c..76cbc2ac30 100644 --- a/Dockerfile.compute-tools +++ b/Dockerfile.compute-tools @@ -1,5 +1,5 @@ # First transient image to build compute_tools binaries -# NB: keep in sync with rust image version in .circle/config.yml +# NB: keep in sync with rust image version in .github/workflows/build_and_test.yml FROM neondatabase/rust:1.58 AS rust-build # Enable https://github.com/paritytech/cachepot to cache Rust crates' compilation results in Docker builds. diff --git a/test_runner/batch_others/test_wal_acceptor_async.py b/test_runner/batch_others/test_wal_acceptor_async.py index 9577c0980e..bf7d8e3645 100644 --- a/test_runner/batch_others/test_wal_acceptor_async.py +++ b/test_runner/batch_others/test_wal_acceptor_async.py @@ -146,9 +146,8 @@ async def run_restarts_under_load(env: NeonEnv, max_transfer=100, period_time=4, iterations=10): - # Set timeout for this test at 5 minutes. It should be enough for test to complete - # and less than CircleCI's no_output_timeout, taking into account that this timeout - # is checked only at the beginning of every iteration. + # Set timeout for this test at 5 minutes. It should be enough for test to complete, + # taking into account that this timeout is checked only at the beginning of every iteration. test_timeout_at = time.monotonic() + 5 * 60 pg_conn = await pg.connect_async()