blob: 3bfddc861e5b60740beddf7418b64266eaef24e2 [file] [log] [blame]
name: build
on:
push:
pull_request:
workflow_dispatch:
jobs:
build:
name: ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@v4
- name: Install dependencies (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y cmake librocksdb-dev libgflags-dev libsnappy-dev \
zlib1g-dev libbz2-dev liblz4-dev libzstd-dev
- name: Install dependencies (macOS)
if: runner.os == 'macOS'
run: brew install cmake rocksdb snappy lz4 zstd gflags
- name: Build and install collocatordb
run: |
EXTRA=""
[ "$RUNNER_OS" = "macOS" ] && EXTRA="-DCMAKE_PREFIX_PATH=$(brew --prefix)"
git clone --depth 1 https://korap.ids-mannheim.de/gerrit/ids-kl/collocatordb
cmake -S collocatordb -B collocatordb/build -DCMAKE_INSTALL_PREFIX=/usr/local $EXTRA
cmake --build collocatordb/build -j
sudo cmake --install collocatordb/build
if [ "$RUNNER_OS" = "Linux" ]; then sudo ldconfig; fi
# The build directory has to be build/ inside the sources, the test looks
# for the binary relative to it.
- name: Configure
run: |
EXTRA=""
[ "$RUNNER_OS" = "macOS" ] && EXTRA="-DCMAKE_PREFIX_PATH=$(brew --prefix)"
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/usr/local $EXTRA
- name: Build
run: cmake --build build -j
- name: Test
run: ctest --test-dir build --output-on-failure
# The count based part of the test traps on MacOS, while it runs on Linux
# with rocksdb 8.9, 10.2 and 11.0. Without a backtrace there is nothing to
# go by, so produce one.
- name: Backtrace of the crash (macOS)
if: failure() && runner.os == 'macOS'
run: |
D=$(mktemp -d)
./build/dereko2vec -train tests/data/wpd19_10000.w2vinput -output "$D/m.vecs" \
-type 3 -save-vocab "$D/m.vocab" -size 50 -window 5 -negative 5 \
-threads 4 -iter 1 -min-count 2 -binary 1 > /dev/null 2>&1
lldb --batch -o run -o 'bt all' -o quit -- ./build/dereko2vec \
-train tests/data/wpd19_10000.w2vinput -output "$D/m.rocksdb" \
-type 5 -read-vocab "$D/m.vocab" -threads 8 2>&1 | tail -80
# The training writes the memory mappable form of the model, which
# derekovecs maps. vecs2mmap does the same for models trained earlier.
- name: Check the memory mappable model form
run: |
./build/dereko2vec -train tests/data/wpd19_10000.w2vinput -output /tmp/m.vecs \
-type 3 -size 50 -window 5 -negative 5 -threads 2 -iter 1 -min-count 5 -binary 1
echo "written by the training:"
ls -l /tmp/m.vecs.vecs /tmp/m.vecs.words
rm /tmp/m.vecs.vecs /tmp/m.vecs.words
./build/vecs2mmap /tmp/m.vecs
echo "written by vecs2mmap:"
ls -l /tmp/m.vecs.vecs /tmp/m.vecs.words
- name: Install
run: |
sudo cmake --install build
dereko2vec 2>&1 | head -1
vecs2mmap -h | head -1