mirror of
https://github.com/status-im/nim-rocksdb.git
synced 2026-08-27 09:51:06 +00:00
225 lines
7.7 KiB
YAML
225 lines
7.7 KiB
YAML
name: CI
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
test-command:
|
|
description: 'Test command(s) which should be used to test a package'
|
|
default: 'nimble test'
|
|
required: false
|
|
type: string
|
|
nim-versions:
|
|
description: 'List of Nim versions which should be used for testing'
|
|
default: '["version-1-6", "version-2-0", "version-2-2", "devel"]'
|
|
required: false
|
|
type: string
|
|
nimble-version:
|
|
description: 'NIMBLE_COMMIT to use when compiling nimble, defaults to the one shipped with nim'
|
|
default: ''
|
|
required: false
|
|
type: string
|
|
nimble-bin-path:
|
|
description: 'Add .nimble/bin path to GITHUB_PATH'
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
|
|
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:
|
|
env:
|
|
NIMBLE_COMMIT: ${{ inputs.nimble-version }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
target:
|
|
- os: linux
|
|
cpu: amd64
|
|
platform: x64
|
|
builder: ubuntu-latest
|
|
- 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
|
|
platform: x64
|
|
builder: ubuntu-24.04
|
|
- os: windows
|
|
cpu: amd64
|
|
platform: x64
|
|
builder: windows-latest
|
|
# 32 bit not yet supported
|
|
# - os: linux
|
|
# cpu: i386
|
|
# platform: x86
|
|
# builder: ubuntu-latest
|
|
- os: macos
|
|
cpu: amd64
|
|
platform: x64
|
|
builder: macos-15-intel
|
|
- os: macos
|
|
cpu: arm64
|
|
platform: arm64
|
|
builder: macos-latest
|
|
branch: ${{ fromJson(inputs.nim-versions) }}
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
name: '${{ matrix.target.os }}-${{ matrix.target.cpu }} (Nim ${{ matrix.branch }})'
|
|
runs-on: ${{ matrix.target.builder }}
|
|
continue-on-error: ${{ matrix.branch == 'devel' }}
|
|
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: true
|
|
|
|
- name: Install build dependencies (Linux i386)
|
|
if: runner.os == 'Linux' && matrix.target.cpu == 'i386'
|
|
run: |
|
|
sudo dpkg --add-architecture i386
|
|
sudo apt-get update -qq
|
|
sudo DEBIAN_FRONTEND='noninteractive' apt-get 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 -mno-adx "\$@"
|
|
EOF
|
|
cat << EOF > external/bin/g++
|
|
#!/bin/bash
|
|
exec $(which g++) -m32 -mno-adx "\$@"
|
|
EOF
|
|
chmod 755 external/bin/gcc external/bin/g++
|
|
echo '${{ github.workspace }}/external/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: Restore llvm-mingw (Windows) from cache
|
|
if: runner.os == 'Windows'
|
|
id: windows-mingw-cache
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: external/mingw-${{ matrix.target.cpu }}
|
|
key: 'mingw-llvm-17-${{ matrix.target.cpu }}'
|
|
|
|
- name: Install llvm-mingw dependency (Windows)
|
|
if: >
|
|
steps.windows-mingw-cache.outputs.cache-hit != 'true' &&
|
|
runner.os == 'Windows'
|
|
run: |
|
|
mkdir -p external
|
|
MINGW_BASE="https://github.com/mstorsjo/llvm-mingw/releases/download/20241203"
|
|
if [[ '${{ matrix.target.cpu }}' == 'amd64' ]]; then
|
|
MINGW_URL="$MINGW_BASE/llvm-mingw-20241203-ucrt-x86_64.zip"
|
|
else
|
|
MINGW_URL="$MINGW_BASE/llvm-mingw-20241203-ucrt-i686.zip"
|
|
fi
|
|
curl -L "$MINGW_URL" -o "external/mingw-${{ matrix.target.cpu }}.zip"
|
|
7z x -y "external/mingw-${{ matrix.target.cpu }}.zip" -oexternal/mingw-${{ matrix.target.cpu }}/
|
|
mv external/mingw-${{ matrix.target.cpu }}/**/* ./external/mingw-${{ matrix.target.cpu }}
|
|
|
|
- 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: >
|
|
runner.os == 'Windows' &&
|
|
steps.windows-dlls-cache.outputs.cache-hit != 'true'
|
|
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/mingw-${{ matrix.target.cpu }}/bin" >> $GITHUB_PATH
|
|
echo "${{ github.workspace }}/external/dlls-${{ matrix.target.cpu }}" >> $GITHUB_PATH
|
|
|
|
|
|
|
|
- name: Get Nim commit hash
|
|
id: nim-hash
|
|
run: |
|
|
BRANCH="${{ matrix.branch }}"
|
|
HASH=$(curl -s "https://api.github.com/repos/nim-lang/Nim/branches/${{ matrix.branch }}" | jq -r .commit.sha)
|
|
echo "NIM_COMMIT_HASH=$HASH" >> $GITHUB_ENV
|
|
echo "nim_commit_hash=$HASH" >> $GITHUB_OUTPUT
|
|
|
|
- name: Restore Nim build from cache
|
|
id: nim-cache
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
nim/bin
|
|
nim/config
|
|
nim/lib
|
|
nim/nim.nimble
|
|
key: nim-${{ matrix.branch }}-${{ steps.nim-hash.outputs.nim_commit_hash }}-${{ matrix.target.os }}-${{ matrix.target.cpu }}
|
|
|
|
- name: Build Nim and Nimble
|
|
if: steps.nim-cache.outputs.cache-hit != 'true'
|
|
env:
|
|
MAKE: make -j4
|
|
ARCH_OVERRIDE: ${{ matrix.target.platform }}
|
|
NIM_COMMIT: ${{ matrix.branch }}
|
|
QUICK_AND_DIRTY_COMPILER: 1
|
|
QUICK_AND_DIRTY_NIMBLE: 1
|
|
CC: gcc
|
|
run: |
|
|
curl -O -L -s -S https://raw.githubusercontent.com/status-im/nimbus-build-system/master/scripts/build_nim.sh
|
|
bash build_nim.sh nim csources dist/nimble NimBinaries
|
|
|
|
- name: Save Nim build to cache
|
|
if: steps.nim-cache.outputs.cache-hit != 'true'
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
nim/bin
|
|
nim/config
|
|
nim/lib
|
|
nim/nim.nimble
|
|
key: nim-${{ matrix.branch }}-${{ steps.nim-hash.outputs.nim_commit_hash }}-${{ matrix.target.os }}-${{ matrix.target.cpu }}
|
|
|
|
- name: Add Nim bin to GITHUB_PATH
|
|
run: echo '${{ github.workspace }}/nim/bin' >> $GITHUB_PATH
|
|
|
|
- name: Add .nimble/bin path to GITHUB_PATH
|
|
if: ${{ inputs.nimble-bin-path }}
|
|
run: |
|
|
if [[ '${{ runner.os }}' == 'Linux' ]]; then
|
|
echo '/home/runner/.nimble/bin' >> $GITHUB_PATH
|
|
elif [[ '${{ runner.os }}' == 'Windows' ]]; then
|
|
echo 'C:/Users/runneradmin/.nimble/bin' >> $GITHUB_PATH
|
|
else
|
|
echo '~/.nimble/bin' >> $GITHUB_PATH
|
|
fi
|
|
|
|
- name: Run tests
|
|
env:
|
|
PLATFORM: ${{ matrix.target.platform }}
|
|
run: |
|
|
nim --version
|
|
nimble --version
|
|
gcc --version
|
|
nimble install -y --depsOnly
|
|
${{ inputs.test-command }}
|