Add prepare phase to encode/decode #259
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Tests | |
on: [pull_request, push] | |
jobs: | |
tests: | |
env: | |
NPROC: 2 | |
strategy: | |
fail-fast: false | |
matrix: | |
cache_nonce: [ 1 ] | |
nim_version: [ 1.6.20 ] # add stable for testing 2.0+ | |
platform: | |
- { | |
icon: π§, | |
label: Linux, | |
os: ubuntu, | |
runner: ubuntu-latest, | |
shell: bash --noprofile --norc -eo pipefail | |
} | |
- { | |
icon: π, | |
label: macOS, | |
os: macos, | |
runner: macos-13, # x86 | |
shell: bash --noprofile --norc -eo pipefail | |
} | |
- { | |
icon: π, | |
label: Windows, | |
os: windows, | |
runner: windows-latest, | |
shell: msys2 | |
} | |
name: ${{ matrix.platform.icon }} ${{ matrix.platform.label }} - Nim v${{ matrix.nim_version }} | |
runs-on: ${{ matrix.platform.runner }} | |
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 \ | |
llvm@14 | |
- 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 llvm@14)/bin:${PATH}" | |
export LDFLAGS="-L$(brew --prefix libomp)/lib -L$(brew --prefix llvm@14)/lib -Wl,-rpath,$(brew --prefix llvm@14)/lib" | |
compiler_extra_options="-d:LeopardCmakeFlags='-DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=$(brew --prefix llvm@14)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@14)/bin/clang++' -d:LeopardExtraCompilerlags='-fopenmp' -d:LeopardExtraLinkerFlags='-fopenmp -L$(brew --prefix libomp)/lib'" | |
fi | |
eval nimble --verbose test -d:release --mm:refc ${compiler_extra_options} | |
eval nimble --verbose test -d:release --mm:orc ${compiler_extra_options} | |
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 |