work around Nim 2.0.10 issue (#225) #334
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: CI | |
on: | |
push: | |
branches: | |
- master | |
pull_request: | |
workflow_dispatch: | |
concurrency: # Cancel stale PR builds (but not push builds) | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} | |
cancel-in-progress: true | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
target: | |
- os: linux | |
cpu: amd64 | |
- os: linux-gcc-14 # This is to use ubuntu 24 and install gcc 14. Should be removed when ubuntu-latest is 26.04 | |
cpu: amd64 | |
- os: linux | |
cpu: i386 | |
- os: macos | |
cpu: amd64 | |
- os: macos | |
cpu: arm64 | |
- os: windows | |
cpu: amd64 | |
branch: [version-2-0, version-2-2, devel] | |
include: | |
- target: | |
os: linux | |
builder: ubuntu-latest | |
shell: bash | |
- target: | |
os: linux-gcc-14 # This is to use ubuntu 24 and install gcc 14. Should be removed when ubuntu-latest is 26.04 | |
builder: ubuntu-24.04 | |
shell: bash | |
- target: | |
os: macos | |
cpu: amd64 | |
builder: macos-13 | |
shell: bash | |
- target: | |
os: macos | |
cpu: arm64 | |
builder: macos-latest | |
shell: bash | |
- target: | |
os: windows | |
builder: windows-latest | |
shell: msys2 {0} | |
defaults: | |
run: | |
shell: ${{ matrix.shell }} | |
name: '${{ matrix.target.os }}-${{ matrix.target.cpu }} (Nim ${{ matrix.branch }})' | |
runs-on: ${{ matrix.builder }} | |
continue-on-error: ${{ matrix.branch == 'devel' }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install build dependencies (Linux i386) | |
if: runner.os == 'Linux' && matrix.target.cpu == 'i386' | |
run: | | |
sudo dpkg --add-architecture i386 | |
sudo apt-fast update -qq | |
sudo DEBIAN_FRONTEND='noninteractive' apt-fast install \ | |
--no-install-recommends -yq gcc-multilib g++-multilib \ | |
libssl-dev:i386 | |
mkdir -p external/bin | |
cat << EOF > external/bin/gcc | |
#!/bin/bash | |
exec $(which gcc) -m32 "\$@" | |
EOF | |
cat << EOF > external/bin/g++ | |
#!/bin/bash | |
exec $(which g++) -m32 "\$@" | |
EOF | |
chmod 755 external/bin/gcc external/bin/g++ | |
echo '${{ github.workspace }}/external/bin' >> $GITHUB_PATH | |
- name: MSYS2 (Windows i386) | |
if: runner.os == 'Windows' && matrix.target.cpu == 'i386' | |
uses: msys2/setup-msys2@v2 | |
with: | |
path-type: inherit | |
msystem: MINGW32 | |
install: >- | |
base-devel | |
git | |
mingw-w64-i686-toolchain | |
- name: MSYS2 (Windows amd64) | |
if: runner.os == 'Windows' && matrix.target.cpu == 'amd64' | |
uses: msys2/setup-msys2@v2 | |
with: | |
path-type: inherit | |
install: >- | |
base-devel | |
git | |
mingw-w64-x86_64-toolchain | |
- name: Restore Nim DLLs dependencies (Windows) from cache | |
if: runner.os == 'Windows' | |
id: windows-dlls-cache | |
uses: actions/cache@v4 | |
with: | |
path: external/dlls-${{ matrix.target.cpu }} | |
key: 'dlls-${{ matrix.target.cpu }}' | |
- name: Install DLLs dependencies (Windows) | |
if: > | |
steps.windows-dlls-cache.outputs.cache-hit != 'true' && | |
runner.os == 'Windows' | |
run: | | |
mkdir -p external | |
curl -L "https://nim-lang.org/download/windeps.zip" -o external/windeps.zip | |
7z x -y external/windeps.zip -oexternal/dlls-${{ matrix.target.cpu }} | |
- name: Path to cached dependencies (Windows) | |
if: > | |
runner.os == 'Windows' | |
run: | | |
echo "${{ github.workspace }}/external/dlls-${{ matrix.target.cpu }}" >> $GITHUB_PATH | |
- name: Derive environment variables | |
run: | | |
if [[ '${{ matrix.target.cpu }}' == 'amd64' ]]; then | |
PLATFORM=x64 | |
elif [[ '${{ matrix.target.cpu }}' == 'arm64' ]]; then | |
PLATFORM=arm64 | |
else | |
PLATFORM=x86 | |
fi | |
echo "PLATFORM=$PLATFORM" >> $GITHUB_ENV | |
ncpu= | |
MAKE_CMD="make" | |
case '${{ runner.os }}' in | |
'Linux') | |
ncpu=$(nproc) | |
;; | |
'macOS') | |
ncpu=$(sysctl -n hw.ncpu) | |
;; | |
'Windows') | |
ncpu=$NUMBER_OF_PROCESSORS | |
MAKE_CMD="mingw32-make" | |
;; | |
esac | |
[[ -z "$ncpu" || $ncpu -le 0 ]] && ncpu=1 | |
echo "ncpu=$ncpu" >> $GITHUB_ENV | |
echo "MAKE_CMD=${MAKE_CMD}" >> $GITHUB_ENV | |
- name: Build Nim and associated tools | |
run: | | |
curl -O -L -s -S https://raw.githubusercontent.com/status-im/nimbus-build-system/master/scripts/build_nim.sh | |
env MAKE="${MAKE_CMD} -j${ncpu}" ARCH_OVERRIDE=${PLATFORM} NIM_COMMIT=${{ matrix.branch }} \ | |
QUICK_AND_DIRTY_COMPILER=1 QUICK_AND_DIRTY_NIMBLE=1 CC=gcc \ | |
bash build_nim.sh nim csources dist/nimble NimBinaries | |
echo '${{ github.workspace }}/nim/bin' >> $GITHUB_PATH | |
- name: Use gcc 14 | |
# Should be removed when ubuntu-latest is 26.04 | |
if : ${{ matrix.target.os == 'linux-gcc-14' }} | |
run: | | |
# Add GCC-14 to alternatives | |
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 14 | |
# Set GCC-14 as the default | |
sudo update-alternatives --set gcc /usr/bin/gcc-14 | |
- name: Run tests | |
run: | | |
nim --version | |
nimble --version | |
gcc --version | |
nimble install -y --depsOnly | |
# remove nimble.lock and allow nim 1.2 to nim devel have the same behaviour | |
# when compiling | |
rm -f nimble.lock | |
env TEST_LANG="c" nimble test | |
# C++ is unsupported: https://github.com/status-im/nim-json-rpc/issues/119 | |
#env TEST_LANG="cpp" nimble test |