mirror of
https://github.com/codex-storage/nim-leopard.git
synced 2025-01-18 07:01:13 +00:00
41cd86df5b
* initial implementation and tests * [wip] refactor checking of RS code validity * [wip] point GHA badge link to main branch instead of initial_impl * [wip] delete leftover echo at bottom of test_leopard.nim * [wip] add basic usage info to README * [wip] more basic info added to README re: requirements, installation, usage * [wip] add config.nims with --tlsEmulation:off to check if it helps with perf on Windows * [wip] use `object` instead of `object of CatchableError` for LeopardError workaround for edge case encountered in context of nimbus-build-system project * [wip] clarify wording in README re: stability * [wip] can use `object of CatchableError` for LeopardError with workaround * Initial implementation * make Leo a case object * initial test * cleanup * remove echo * use `func` where possible * comments, misc * make construction more convenient * add more tests * more tests * unused warnings * remove sideeffects pragma * fix importc pragma on unix * fix windows build * fix ci * better warning * adding more comprehensive tests * moar tests * add TODO for usage * Update leopard/leopard.nim Co-authored-by: Michael Bradley <michaelsbradleyjr@gmail.com> * Update leopard/wrapper.nim Co-authored-by: Michael Bradley <michaelsbradleyjr@gmail.com> * add tests to reuse same encoder/decoder * check that parity and data buffers are < 65536 * test that data+parity isn't > 65536 Co-authored-by: Michael Bradley, Jr <michaelsbradleyjr@gmail.com>
155 lines
5.5 KiB
YAML
155 lines
5.5 KiB
YAML
name: Tests
|
|
|
|
on: [pull_request, push]
|
|
|
|
jobs:
|
|
tests:
|
|
env:
|
|
NPROC: 2
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
cache_nonce: [ 1 ]
|
|
nim_version: [ 1.2.18, 1.4.8, 1.6.4 ]
|
|
platform:
|
|
- {
|
|
icon: 🐧,
|
|
label: Linux,
|
|
os: ubuntu,
|
|
shell: bash --noprofile --norc -eo pipefail
|
|
}
|
|
- {
|
|
icon: 🍎,
|
|
label: macOS,
|
|
os: macos,
|
|
shell: bash --noprofile --norc -eo pipefail
|
|
}
|
|
- {
|
|
icon: 🏁,
|
|
label: Windows,
|
|
os: windows,
|
|
shell: msys2
|
|
}
|
|
name: ${{ matrix.platform.icon }} ${{ matrix.platform.label }} - Nim v${{ matrix.nim_version }}
|
|
runs-on: ${{ matrix.platform.os }}-latest
|
|
defaults:
|
|
run:
|
|
shell: ${{ matrix.platform.shell }} {0}
|
|
|
|
steps:
|
|
# - name: Install tools and libraries via APT (Linux)
|
|
# if: matrix.platform.os == 'ubuntu'
|
|
# run: |
|
|
# sudo apt update
|
|
# sudo apt install -y \
|
|
# ...
|
|
|
|
- name: Install tools and libraries via Homebrew (macOS)
|
|
if: matrix.platform.os == 'macos'
|
|
run: |
|
|
brew update
|
|
brew install \
|
|
findutils \
|
|
libomp
|
|
|
|
- name: Install tools and libraries via MSYS2 (Windows)
|
|
if: matrix.platform.os == 'windows'
|
|
uses: msys2/setup-msys2@v2
|
|
with:
|
|
msystem: UCRT64
|
|
install: >
|
|
base-devel
|
|
git
|
|
mingw-w64-ucrt-x86_64-cmake
|
|
mingw-w64-ucrt-x86_64-toolchain
|
|
|
|
- name: Checkout sources from GitHub
|
|
uses: actions/checkout@v2
|
|
with:
|
|
submodules: true
|
|
|
|
- name: Calculate cache member paths
|
|
id: calc-paths
|
|
run: |
|
|
if [[ ${{ matrix.platform.os }} = windows ]]; then
|
|
echo "::set-output name=bash_env::$(cygpath -m "${HOME}")/.bash_env"
|
|
echo "::set-output name=choosenim::$(cygpath -m "${USERPROFILE}")/.choosenim"
|
|
echo "::set-output name=nimble::$(cygpath -m "${HOME}")/.nimble"
|
|
else
|
|
echo "::set-output name=bash_env::${HOME}/.bash_env"
|
|
echo "::set-output name=choosenim::${HOME}/.choosenim"
|
|
echo "::set-output name=nimble::${HOME}/.nimble"
|
|
fi
|
|
|
|
- name: Restore choosenim and Nim tooling from cache
|
|
id: choosenim-nim-tooling-cache
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: |
|
|
${{ steps.calc-paths.outputs.bash_env }}
|
|
${{ steps.calc-paths.outputs.choosenim }}
|
|
${{ steps.calc-paths.outputs.nimble }}/bin
|
|
key: ${{ matrix.platform.os }}-nim_version:${{ matrix.nim_version }}-cache_nonce:${{ matrix.cache_nonce }}
|
|
|
|
- name: Install choosenim and Nim tooling
|
|
if: steps.choosenim-nim-tooling-cache.outputs.cache-hit != 'true'
|
|
run: |
|
|
mkdir -p "${HOME}/Downloads"
|
|
cd "${HOME}/Downloads"
|
|
curl https://nim-lang.org/choosenim/init.sh -sSf -O
|
|
chmod +x init.sh
|
|
if [[ ${{ matrix.platform.os }} = windows ]]; then
|
|
mkdir -p "$(cygpath "${USERPROFILE}")/.nimble/bin"
|
|
fi
|
|
CHOOSENIM_CHOOSE_VERSION=${{ matrix.nim_version }} ./init.sh -y
|
|
if [[ ${{ matrix.platform.os }} = windows ]]; then
|
|
mv "$(cygpath "${USERPROFILE}")/.nimble" "${HOME}/"
|
|
# intention is to rely only on libs provided by the OS and MSYS2 env
|
|
rm -rf "${HOME}/.nimble/bin/"*.dll
|
|
rm -rf "${HOME}/.nimble/bin/"*.pem
|
|
fi
|
|
echo 'export NIMBLE_DIR="${HOME}/.nimble"' >> "${HOME}/.bash_env"
|
|
echo 'export PATH="${NIMBLE_DIR}/bin:${PATH}"' >> "${HOME}/.bash_env"
|
|
|
|
- name: Install project dependencies
|
|
run: |
|
|
source "${HOME}/.bash_env"
|
|
cd "${NIMBLE_DIR}/bin"
|
|
# delete broken symlinks, which can arise because e.g. the cache
|
|
# restored a symlink that points to an executable within
|
|
# ../pkgs/foo-1.2.3/ but the project's .nimble file has been updated
|
|
# to install foo-#head; in the case of a broken symlink, nimble's
|
|
# auto-overwrite fails
|
|
if [[ ${{ matrix.platform.os }} = macos ]]; then
|
|
gfind . -xtype l -delete
|
|
else
|
|
find . -xtype l -delete
|
|
fi
|
|
cd -
|
|
nimble --accept install
|
|
|
|
- name: Build and run tests
|
|
run: |
|
|
source "${HOME}/.bash_env"
|
|
if [[ ${{ matrix.platform.os }} = windows ]]; then
|
|
touch tests/testleopard.exe
|
|
else
|
|
touch tests/testleopard
|
|
fi
|
|
if [[ ${{ matrix.platform.os }} = macos ]]; then
|
|
export PATH="$(brew --prefix)/opt/llvm/bin:${PATH}"
|
|
export LDFLAGS="-L$(brew --prefix)/opt/libomp/lib -L$(brew --prefix)/opt/llvm/lib -Wl,-rpath,$(brew --prefix)/opt/llvm/lib"
|
|
nimble test -d:verbose -d:release -d:LeopardCmakeFlags="-DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=$(brew --prefix)/opt/llvm/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix)/opt/llvm/bin/clang++" -d:LeopardExtraCompilerlags="-fopenmp" -d:LeopardExtraLinkerFlags="-fopenmp -L$(brew --prefix)/opt/libomp/lib"
|
|
else
|
|
nimble test -d:verbose -d:release
|
|
fi
|
|
if [[ ${{ matrix.platform.os }} = macos ]]; then
|
|
echo
|
|
echo otool -L tests/testleopard
|
|
otool -L tests/testleopard
|
|
else
|
|
echo
|
|
echo ldd tests/testleopard
|
|
ldd tests/testleopard
|
|
fi
|