Skip to content

Tests

Tests #32791

Workflow file for this run

name: Tests
on:
push:
branches:
- master
- ci
- "release/*"
pull_request:
branches:
- '**'
schedule:
- cron: "0 */3 * * *"
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: false
- uses: actions/checkout@v4
with:
fetch-depth: 50
submodules: true
- name: Set up Python
uses: actions/setup-python@v5
id: setup-python
with:
python-version: '3.12.2'
cache: 'pip'
cache-dependency-path: |
pyproject.toml
# The below is technically a lie as we are technically not
# inside a virtual env, but there is really no reason to bother
# actually creating and activating one as below works just fine.
- name: Export $VIRTUAL_ENV
run: |
venv="$(python -c 'import sys; sys.stdout.write(sys.prefix)')"
echo "VIRTUAL_ENV=${venv}" >> $GITHUB_ENV
- name: Set up uv cache
uses: actions/cache@v4
with:
path: ~/.cache/uv
key: uv-cache-${{ runner.os }}-py-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('pyproject.toml') }}
- name: Cached requirements.txt
uses: actions/cache@v4
id: requirements-cache
with:
path: requirements.txt
key: edb-requirements-${{ hashFiles('pyproject.toml') }}
- name: Compute requirements.txt
if: steps.requirements-cache.outputs.cache-hit != 'true'
run: |
python -m pip install pip-tools
pip-compile --no-strip-extras --all-build-deps \
--extra test,language-server \
--output-file requirements.txt pyproject.toml
- name: Install Python dependencies
run: |
python -c "import sys; print(sys.prefix)"
python -m pip install uv~=0.1.0 && uv pip install -U -r requirements.txt
- name: Compute cache keys and download the running times log
env:
GIST_TOKEN: ${{ secrets.CI_BOT_GIST_TOKEN }}
run: |
mkdir -p shared-artifacts
if [ "$(uname)" = "Darwin" ]; then
find /usr/lib -type f -name 'lib*' -exec stat -f '%N %z' {} + | sort | shasum -a 256 | cut -d ' ' -f1 > shared-artifacts/lib_cache_key.txt
else
find /usr/lib -type f -name 'lib*' -printf '%P %s\n' | sort | sha256sum | cut -d ' ' -f1 > shared-artifacts/lib_cache_key.txt
fi
python setup.py -q ci_helper --type cli > shared-artifacts/edgedbcli_git_rev.txt
python setup.py -q ci_helper --type rust >shared-artifacts/rust_cache_key.txt
python setup.py -q ci_helper --type ext >shared-artifacts/ext_cache_key.txt
python setup.py -q ci_helper --type parsers >shared-artifacts/parsers_cache_key.txt
python setup.py -q ci_helper --type postgres >shared-artifacts/postgres_git_rev.txt
python setup.py -q ci_helper --type libpg_query >shared-artifacts/libpg_query_git_rev.txt
echo 'f8cd94309eaccbfba5dea7835b88c78377608a37' >shared-artifacts/stolon_git_rev.txt
python setup.py -q ci_helper --type bootstrap >shared-artifacts/bootstrap_cache_key.txt
echo EDGEDBCLI_GIT_REV=$(cat shared-artifacts/edgedbcli_git_rev.txt) >> $GITHUB_ENV
echo POSTGRES_GIT_REV=$(cat shared-artifacts/postgres_git_rev.txt) >> $GITHUB_ENV
echo LIBPG_QUERY_GIT_REV=$(cat shared-artifacts/libpg_query_git_rev.txt) >> $GITHUB_ENV
echo STOLON_GIT_REV=$(cat shared-artifacts/stolon_git_rev.txt) >> $GITHUB_ENV
echo BUILD_LIB=$(python setup.py -q ci_helper --type build_lib) >> $GITHUB_ENV
echo BUILD_TEMP=$(python setup.py -q ci_helper --type build_temp) >> $GITHUB_ENV
curl \
-H "Accept: application/vnd.github.v3+json" \
-u edgedb-ci:$GIST_TOKEN \
https://api.github.com/gists/8b722a65397f7c4c0df72f5394efa04c \
| jq '.files."time_stats.csv".raw_url' \
| xargs curl > shared-artifacts/time_stats.csv
- name: Upload shared artifacts
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
with:
name: shared-artifacts
path: shared-artifacts
retention-days: 1
# Restore binary cache
- name: Handle cached EdgeDB CLI binaries
uses: actions/cache@v4
id: cli-cache
with:
path: build/cli
key: edb-cli-v4-${{ env.EDGEDBCLI_GIT_REV }}
- name: Handle cached Rust extensions
uses: actions/cache@v4
id: rust-cache
with:
path: build/rust_extensions
key: edb-rust-v4-${{ hashFiles('shared-artifacts/rust_cache_key.txt') }}
restore-keys: |
edb-rust-v4-
- name: Handle cached Cython extensions
uses: actions/cache@v4
id: ext-cache
with:
path: build/extensions
key: edb-ext-v6-${{ hashFiles('shared-artifacts/ext_cache_key.txt') }}
- name: Handle cached PostgreSQL build
uses: actions/cache@v4
id: postgres-cache
with:
path: build/postgres/install
key: edb-postgres-v3-${{ env.POSTGRES_GIT_REV }}-${{ hashFiles('shared-artifacts/lib_cache_key.txt') }}
- name: Handle cached Stolon build
uses: actions/cache@v4
id: stolon-cache
with:
path: build/stolon/bin
key: edb-stolon-v2-${{ env.STOLON_GIT_REV }}
- name: Handle cached libpg_query build
uses: actions/cache@v4
id: libpg-query-cache
with:
path: edb/pgsql/parser/libpg_query/libpg_query.a
key: edb-libpg_query-v1-${{ env.LIBPG_QUERY_GIT_REV }}
# Install system dependencies for building
- name: Install system deps
if: |
steps.cli-cache.outputs.cache-hit != 'true' ||
steps.rust-cache.outputs.cache-hit != 'true' ||
steps.ext-cache.outputs.cache-hit != 'true' ||
steps.stolon-cache.outputs.cache-hit != 'true' ||
steps.postgres-cache.outputs.cache-hit != 'true'
run: |
sudo apt-get update
sudo apt-get install -y uuid-dev libreadline-dev bison flex libprotobuf-c-dev
- name: Install Rust toolchain
if: |
steps.cli-cache.outputs.cache-hit != 'true' ||
steps.rust-cache.outputs.cache-hit != 'true'
uses: dsherret/rust-toolchain-file@v1
# Build EdgeDB CLI
- name: Handle EdgeDB CLI build cache
uses: actions/cache@v4
if: steps.cli-cache.outputs.cache-hit != 'true'
with:
path: ${{ env.BUILD_TEMP }}/rust/cli
key: edb-cli-build-v7-${{ env.EDGEDBCLI_GIT_REV }}
restore-keys: |
edb-cli-build-v7-
- name: Build EdgeDB CLI
env:
CARGO_HOME: ${{ env.BUILD_TEMP }}/rust/cli/cargo_home
CACHE_HIT: ${{ steps.cli-cache.outputs.cache-hit }}
run: |
if [[ "$CACHE_HIT" == "true" ]]; then
cp -v build/cli/bin/edgedb edb/cli/edgedb
else
python setup.py -v build_cli
fi
# Build Rust extensions
- name: Handle Rust extensions build cache
uses: actions/cache@v4
if: steps.rust-cache.outputs.cache-hit != 'true'
with:
path: ${{ env.BUILD_TEMP }}/rust/extensions
key: edb-rust-build-v1-${{ hashFiles('shared-artifacts/rust_cache_key.txt') }}
restore-keys: |
edb-rust-build-v1-
- name: Build Rust extensions
env:
CARGO_HOME: ${{ env.BUILD_TEMP }}/rust/extensions/cargo_home
CACHE_HIT: ${{ steps.rust-cache.outputs.cache-hit }}
run: |
if [[ "$CACHE_HIT" != "true" ]]; then
rm -rf ${BUILD_LIB}
mkdir -p build/rust_extensions
rsync -av ./build/rust_extensions/ ${BUILD_LIB}/
python setup.py -v build_rust
rsync -av ${BUILD_LIB}/ build/rust_extensions/
rm -rf ${BUILD_LIB}
fi
rsync -av ./build/rust_extensions/edb/ ./edb/
# Build libpg_query
- name: Build libpg_query
if: |
steps.libpg-query-cache.outputs.cache-hit != 'true' &&
steps.ext-cache.outputs.cache-hit != 'true'
run: |
python setup.py build_libpg_query
# Build extensions
- name: Handle Cython extensions build cache
uses: actions/cache@v4
if: steps.ext-cache.outputs.cache-hit != 'true'
with:
path: ${{ env.BUILD_TEMP }}/edb
key: edb-ext-build-v4-${{ hashFiles('shared-artifacts/ext_cache_key.txt') }}
- name: Build Cython extensions
env:
CACHE_HIT: ${{ steps.ext-cache.outputs.cache-hit }}
BUILD_EXT_MODE: py-only
run: |
if [[ "$CACHE_HIT" != "true" ]]; then
rm -rf ${BUILD_LIB}
mkdir -p ./build/extensions
rsync -av ./build/extensions/ ${BUILD_LIB}/
BUILD_EXT_MODE=py-only python setup.py -v build_ext
rsync -av ${BUILD_LIB}/ ./build/extensions/
rm -rf ${BUILD_LIB}
fi
rsync -av ./build/extensions/edb/ ./edb/
# Build parsers
- name: Handle compiled parsers cache
uses: actions/cache@v4
id: parsers-cache
with:
path: build/lib
key: edb-parsers-v3-${{ hashFiles('shared-artifacts/parsers_cache_key.txt') }}
restore-keys: |
edb-parsers-v3-
- name: Build parsers
env:
CACHE_HIT: ${{ steps.parsers-cache.outputs.cache-hit }}
run: |
if [[ "$CACHE_HIT" != "true" ]]; then
rm -rf ${BUILD_LIB}
mkdir -p ./build/lib
rsync -av ./build/lib/ ${BUILD_LIB}/
python setup.py -v build_parsers
rsync -av ${BUILD_LIB}/ ./build/lib/
rm -rf ${BUILD_LIB}
fi
rsync -av ./build/lib/edb/ ./edb/
# Build PostgreSQL
- name: Build PostgreSQL
env:
CACHE_HIT: ${{ steps.postgres-cache.outputs.cache-hit }}
run: |
if [[ "$CACHE_HIT" == "true" ]]; then
cp build/postgres/install/stamp build/postgres/
else
python setup.py build_postgres
cp build/postgres/stamp build/postgres/install/
fi
# Build Stolon
- name: Set up Go
if: steps.stolon-cache.outputs.cache-hit != 'true'
uses: actions/setup-go@v2
with:
go-version: 1.16
- uses: actions/checkout@v4
if: steps.stolon-cache.outputs.cache-hit != 'true'
with:
repository: edgedb/stolon
path: build/stolon
ref: ${{ env.STOLON_GIT_REV }}
fetch-depth: 0
submodules: false
- name: Build Stolon
if: steps.stolon-cache.outputs.cache-hit != 'true'
run: |
mkdir -p build/stolon/bin/
curl -fsSL https://releases.hashicorp.com/consul/1.10.1/consul_1.10.1_linux_amd64.zip | zcat > build/stolon/bin/consul
chmod +x build/stolon/bin/consul
cd build/stolon && make
# Install edgedb-server and populate egg-info
- name: Install edgedb-server
env:
BUILD_EXT_MODE: skip
run: |
# --no-build-isolation because we have explicitly installed all deps
# and don't want them to be reinstalled in an "isolated env".
pip install --no-build-isolation --no-deps -e .[test,docs]
# Refresh the bootstrap cache
- name: Handle bootstrap cache
uses: actions/cache@v4
id: bootstrap-cache
with:
path: build/cache
key: edb-bootstrap-v2-${{ hashFiles('shared-artifacts/bootstrap_cache_key.txt') }}
restore-keys: |
edb-bootstrap-v2-
- name: Bootstrap EdgeDB Server
if: steps.bootstrap-cache.outputs.cache-hit != 'true'
run: |
edb server --bootstrap-only
cargo-test:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: false
- uses: actions/checkout@v4
with:
fetch-depth: 50
submodules: true
- name: Set up Python
uses: actions/setup-python@v5
id: setup-python
with:
python-version: '3.12.2'
cache: 'pip'
cache-dependency-path: |
pyproject.toml
# The below is technically a lie as we are technically not
# inside a virtual env, but there is really no reason to bother
# actually creating and activating one as below works just fine.
- name: Export $VIRTUAL_ENV
run: |
venv="$(python -c 'import sys; sys.stdout.write(sys.prefix)')"
echo "VIRTUAL_ENV=${venv}" >> $GITHUB_ENV
- name: Set up uv cache
uses: actions/cache@v4
with:
path: ~/.cache/uv
key: uv-cache-${{ runner.os }}-py-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('pyproject.toml') }}
- name: Download requirements.txt
uses: actions/cache@v4
with:
path: requirements.txt
key: edb-requirements-${{ hashFiles('pyproject.toml') }}
- name: Install Python dependencies
run: python -m pip install uv~=0.1.0 && uv pip install -U -r requirements.txt
- name: Download cache key
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
name: shared-artifacts
path: shared-artifacts
- name: Generate environment variables
run: |
echo BUILD_TEMP=$(python setup.py -q ci_helper --type build_temp) >> $GITHUB_ENV
- name: Handle Rust extensions build cache
uses: actions/cache@v4
id: rust-cache
with:
path: ${{ env.BUILD_TEMP }}/rust/extensions
key: edb-rust-build-v1-${{ hashFiles('shared-artifacts/rust_cache_key.txt') }}
- name: Install Rust toolchain
uses: dsherret/rust-toolchain-file@v1
- name: Cargo test
env:
CARGO_TARGET_DIR: ${{ env.BUILD_TEMP }}/rust/extensions
CARGO_HOME: ${{ env.BUILD_TEMP }}/rust/extensions/cargo_home
run:
cargo test --all-features
python-test:
needs: build
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
shard: [
1, 2, 3, 4,
5, 6, 7, 8,
9, 10, 11, 12,
13, 14, 15, 16,
]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: false
- uses: actions/checkout@v4
with:
fetch-depth: 50
submodules: true
- name: Set up Python
uses: actions/setup-python@v5
id: setup-python
with:
python-version: '3.12.2'
cache: 'pip'
cache-dependency-path: |
pyproject.toml
# The below is technically a lie as we are technically not
# inside a virtual env, but there is really no reason to bother
# actually creating and activating one as below works just fine.
- name: Export $VIRTUAL_ENV
run: |
venv="$(python -c 'import sys; sys.stdout.write(sys.prefix)')"
echo "VIRTUAL_ENV=${venv}" >> $GITHUB_ENV
- name: Set up uv cache
uses: actions/cache@v4
with:
path: ~/.cache/uv
key: uv-cache-${{ runner.os }}-py-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('pyproject.toml') }}
- name: Download requirements.txt
uses: actions/cache@v4
with:
path: requirements.txt
key: edb-requirements-${{ hashFiles('pyproject.toml') }}
- name: Install Python dependencies
run: python -m pip install uv~=0.1.0 && uv pip install -U -r requirements.txt
# Restore the artifacts and environment variables
- name: Download shared artifacts
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
name: shared-artifacts
path: shared-artifacts
- name: Set environment variables
run: |
echo EDGEDBCLI_GIT_REV=$(cat shared-artifacts/edgedbcli_git_rev.txt) >> $GITHUB_ENV
echo POSTGRES_GIT_REV=$(cat shared-artifacts/postgres_git_rev.txt) >> $GITHUB_ENV
echo STOLON_GIT_REV=$(cat shared-artifacts/stolon_git_rev.txt) >> $GITHUB_ENV
echo BUILD_LIB=$(python setup.py -q ci_helper --type build_lib) >> $GITHUB_ENV
echo BUILD_TEMP=$(python setup.py -q ci_helper --type build_temp) >> $GITHUB_ENV
# Restore build cache
- name: Restore cached EdgeDB CLI binaries
uses: actions/cache@v4
id: cli-cache
with:
path: build/cli
key: edb-cli-v4-${{ env.EDGEDBCLI_GIT_REV }}
- name: Restore cached Rust extensions
uses: actions/cache@v4
id: rust-cache
with:
path: build/rust_extensions
key: edb-rust-v4-${{ hashFiles('shared-artifacts/rust_cache_key.txt') }}
- name: Restore cached Cython extensions
uses: actions/cache@v4
id: ext-cache
with:
path: build/extensions
key: edb-ext-v6-${{ hashFiles('shared-artifacts/ext_cache_key.txt') }}
- name: Restore compiled parsers cache
uses: actions/cache@v4
id: parsers-cache
with:
path: build/lib
key: edb-parsers-v3-${{ hashFiles('shared-artifacts/parsers_cache_key.txt') }}
- name: Restore cached PostgreSQL build
uses: actions/cache@v4
id: postgres-cache
with:
path: build/postgres/install
key: edb-postgres-v3-${{ env.POSTGRES_GIT_REV }}-${{ hashFiles('shared-artifacts/lib_cache_key.txt') }}
- name: Restore cached Stolon build
uses: actions/cache@v4
id: stolon-cache
with:
path: build/stolon/bin
key: edb-stolon-v2-${{ env.STOLON_GIT_REV }}
- name: Restore bootstrap cache
uses: actions/cache@v4
id: bootstrap-cache
with:
path: build/cache
key: edb-bootstrap-v2-${{ hashFiles('shared-artifacts/bootstrap_cache_key.txt') }}
- name: Stop if we cannot retrieve the cache
if: |
steps.cli-cache.outputs.cache-hit != 'true' ||
steps.rust-cache.outputs.cache-hit != 'true' ||
steps.ext-cache.outputs.cache-hit != 'true' ||
steps.parsers-cache.outputs.cache-hit != 'true' ||
steps.postgres-cache.outputs.cache-hit != 'true' ||
steps.stolon-cache.outputs.cache-hit != 'true' ||
steps.bootstrap-cache.outputs.cache-hit != 'true'
run: |
echo ::error::Cannot retrieve build cache.
exit 1
- name: Validate cached binaries
run: |
# Validate EdgeDB CLI
./build/cli/bin/edgedb --version || exit 1
# Validate Stolon
./build/stolon/bin/stolon-sentinel --version || exit 1
./build/stolon/bin/stolon-keeper --version || exit 1
./build/stolon/bin/stolon-proxy --version || exit 1
# Validate PostgreSQL
./build/postgres/install/bin/postgres --version || exit 1
./build/postgres/install/bin/pg_config --version || exit 1
- name: Restore cache into the source tree
run: |
cp -v build/cli/bin/edgedb edb/cli/edgedb
cp -v build/cli/bin/edgedb edb/cli/gel
rsync -av ./build/rust_extensions/edb/ ./edb/
rsync -av ./build/extensions/edb/ ./edb/
rsync -av ./build/lib/edb/ ./edb/
cp build/postgres/install/stamp build/postgres/
- name: Install edgedb-server
env:
BUILD_EXT_MODE: skip
run: |
# --no-build-isolation because we have explicitly installed all deps
# and don't want them to be reinstalled in an "isolated env".
pip install --no-build-isolation --no-deps -e .[test,docs]
# Run the test
- name: Install Rust toolchain
uses: dsherret/rust-toolchain-file@v1
- name: Test
env:
SHARD: ${{ matrix.shard }}
EDGEDB_TEST_REPEATS: 1
run: |
mkdir -p results/
cp shared-artifacts/time_stats.csv results/running_times_${SHARD}.csv
edb test --jobs 2 --verbose --shard ${SHARD}/16 \
--running-times-log=results/running_times_${SHARD}.csv \
--result-log=results/result_${SHARD}.json
- name: Upload test results
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
if: ${{ always() }}
with:
name: python-test-results-${{ matrix.shard }}
path: results
retention-days: 1
python-test-list:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: false
- uses: actions/checkout@v4
with:
fetch-depth: 50
submodules: true
- name: Set up Python
uses: actions/setup-python@v5
id: setup-python
with:
python-version: '3.12.2'
cache: 'pip'
cache-dependency-path: |
pyproject.toml
# The below is technically a lie as we are technically not
# inside a virtual env, but there is really no reason to bother
# actually creating and activating one as below works just fine.
- name: Export $VIRTUAL_ENV
run: |
venv="$(python -c 'import sys; sys.stdout.write(sys.prefix)')"
echo "VIRTUAL_ENV=${venv}" >> $GITHUB_ENV
- name: Set up uv cache
uses: actions/cache@v4
with:
path: ~/.cache/uv
key: uv-cache-${{ runner.os }}-py-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('pyproject.toml') }}
- name: Download requirements.txt
uses: actions/cache@v4
with:
path: requirements.txt
key: edb-requirements-${{ hashFiles('pyproject.toml') }}
- name: Install Python dependencies
run: python -m pip install uv~=0.1.0 && uv pip install -U -r requirements.txt
# Restore the artifacts and environment variables
- name: Download shared artifacts
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
name: shared-artifacts
path: shared-artifacts
- name: Set environment variables
run: |
echo EDGEDBCLI_GIT_REV=$(cat shared-artifacts/edgedbcli_git_rev.txt) >> $GITHUB_ENV
echo POSTGRES_GIT_REV=$(cat shared-artifacts/postgres_git_rev.txt) >> $GITHUB_ENV
echo STOLON_GIT_REV=$(cat shared-artifacts/stolon_git_rev.txt) >> $GITHUB_ENV
echo BUILD_LIB=$(python setup.py -q ci_helper --type build_lib) >> $GITHUB_ENV
echo BUILD_TEMP=$(python setup.py -q ci_helper --type build_temp) >> $GITHUB_ENV
# Restore build cache
- name: Restore cached EdgeDB CLI binaries
uses: actions/cache@v4
id: cli-cache
with:
path: build/cli
key: edb-cli-v4-${{ env.EDGEDBCLI_GIT_REV }}
- name: Restore cached Rust extensions
uses: actions/cache@v4
id: rust-cache
with:
path: build/rust_extensions
key: edb-rust-v4-${{ hashFiles('shared-artifacts/rust_cache_key.txt') }}
- name: Restore cached Cython extensions
uses: actions/cache@v4
id: ext-cache
with:
path: build/extensions
key: edb-ext-v6-${{ hashFiles('shared-artifacts/ext_cache_key.txt') }}
- name: Restore compiled parsers cache
uses: actions/cache@v4
id: parsers-cache
with:
path: build/lib
key: edb-parsers-v3-${{ hashFiles('shared-artifacts/parsers_cache_key.txt') }}
- name: Restore cached PostgreSQL build
uses: actions/cache@v4
id: postgres-cache
with:
path: build/postgres/install
key: edb-postgres-v3-${{ env.POSTGRES_GIT_REV }}-${{ hashFiles('shared-artifacts/lib_cache_key.txt') }}
- name: Restore cached Stolon build
uses: actions/cache@v4
id: stolon-cache
with:
path: build/stolon/bin
key: edb-stolon-v2-${{ env.STOLON_GIT_REV }}
- name: Restore bootstrap cache
uses: actions/cache@v4
id: bootstrap-cache
with:
path: build/cache
key: edb-bootstrap-v2-${{ hashFiles('shared-artifacts/bootstrap_cache_key.txt') }}
- name: Stop if we cannot retrieve the cache
if: |
steps.cli-cache.outputs.cache-hit != 'true' ||
steps.rust-cache.outputs.cache-hit != 'true' ||
steps.ext-cache.outputs.cache-hit != 'true' ||
steps.parsers-cache.outputs.cache-hit != 'true' ||
steps.postgres-cache.outputs.cache-hit != 'true' ||
steps.stolon-cache.outputs.cache-hit != 'true' ||
steps.bootstrap-cache.outputs.cache-hit != 'true'
run: |
echo ::error::Cannot retrieve build cache.
exit 1
- name: Validate cached binaries
run: |
# Validate EdgeDB CLI
./build/cli/bin/edgedb --version || exit 1
# Validate Stolon
./build/stolon/bin/stolon-sentinel --version || exit 1
./build/stolon/bin/stolon-keeper --version || exit 1
./build/stolon/bin/stolon-proxy --version || exit 1
# Validate PostgreSQL
./build/postgres/install/bin/postgres --version || exit 1
./build/postgres/install/bin/pg_config --version || exit 1
- name: Restore cache into the source tree
run: |
cp -v build/cli/bin/edgedb edb/cli/edgedb
cp -v build/cli/bin/edgedb edb/cli/gel
rsync -av ./build/rust_extensions/edb/ ./edb/
rsync -av ./build/extensions/edb/ ./edb/
rsync -av ./build/lib/edb/ ./edb/
cp build/postgres/install/stamp build/postgres/
- name: Install edgedb-server
env:
BUILD_EXT_MODE: skip
run: |
# --no-build-isolation because we have explicitly installed all deps
# and don't want them to be reinstalled in an "isolated env".
pip install --no-build-isolation --no-deps -e .[test,docs]
# List tests and upload
- name: Generate complete list of tests for verification
env:
SHARD: ${{ matrix.shard }}
EDGEDB_TEST_REPEATS: 1
run: |
edb test --list > shared-artifacts/all_tests.txt
- name: Upload list of tests
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
with:
name: test-list
path: shared-artifacts
retention-days: 1
test-conclusion:
needs: [cargo-test, python-test, python-test-list]
runs-on: ubuntu-latest
if: ${{ always() }}
steps:
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12.2'
- name: Install Python deps
run: |
python -m pip install requests click
- uses: actions/checkout@v4
with:
submodules: false
- name: Download python-test results
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
pattern: python-test-results-*
merge-multiple: true
path: results
# Render results and exit if they were unsuccessful
- name: Render results
run: |
python edb/tools/test/results.py 'results/result_*.json'
- name: Download shared artifacts
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
name: shared-artifacts
path: shared-artifacts
- name: Download test list
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
name: test-list
path: shared-artifacts
- name: Merge stats and verify tests completion
shell: python
env:
GIST_TOKEN: ${{ secrets.CI_BOT_GIST_TOKEN }}
GIT_REF: ${{ github.ref }}
run: |
import csv
import glob
import io
import os
import requests
orig = {}
new = {}
all_tests = set()
with open("shared-artifacts/time_stats.csv") as f:
for name, t, c in csv.reader(f):
assert name not in orig, "duplicate test name in original stats!"
orig[name] = (t, int(c))
with open("shared-artifacts/all_tests.txt") as f:
for line in f:
assert line not in all_tests, "duplicate test name in this run!"
all_tests.add(line.strip())
for new_file in glob.glob("results/running_times_*.csv"):
with open(new_file) as f:
for name, t, c in csv.reader(f):
if int(c) > orig.get(name, (0, 0))[1]:
if name.startswith("setup::"):
new[name] = (t, c)
else:
assert name not in new, f"duplicate test! {name}"
new[name] = (t, c)
all_tests.remove(name)
assert not all_tests, "Tests not run! \n" + "\n".join(all_tests)
if os.environ["GIT_REF"] == "refs/heads/master":
buf = io.StringIO()
writer = csv.writer(buf)
orig.update(new)
for k, v in sorted(orig.items()):
writer.writerow((k,) + v)
resp = requests.patch(
"https://api.github.com/gists/8b722a65397f7c4c0df72f5394efa04c",
headers={"Accept": "application/vnd.github.v3+json"},
auth=("edgedb-ci", os.environ["GIST_TOKEN"]),
json={"files": {"time_stats.csv": {"content": buf.getvalue()}}},
)
resp.raise_for_status()
workflow-notifications:
if: failure() && github.event_name != 'pull_request'
name: Notify in Slack on failures
needs:
- test-conclusion
runs-on: ubuntu-latest
permissions:
actions: 'read'
steps:
- name: Slack Workflow Notification
uses: Gamesight/slack-workflow-status@26a36836c887f260477432e4314ec3490a84f309
with:
repo_token: ${{secrets.GITHUB_TOKEN}}
slack_webhook_url: ${{secrets.ACTIONS_SLACK_WEBHOOK_URL}}
name: 'Workflow notifications'
icon_emoji: ':hammer:'
include_jobs: 'on-failure'