Skip to content

fix(kad): target the requested bucket when refreshing (#2842) #757

fix(kad): target the requested bucket when refreshing (#2842)

fix(kad): target the requested bucket when refreshing (#2842) #757

name: Test Multiformat Extensions
on:
push:
branches:
- master
pull_request:
workflow_dispatch:
merge_group:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
pick-platform:
runs-on: ubuntu-latest
outputs:
os: ${{ steps.pick.outputs.os }}
cpu: ${{ steps.pick.outputs.cpu }}
cc: ${{ steps.pick.outputs.cc }}
builder: ${{ steps.pick.outputs.builder }}
shell: ${{ steps.pick.outputs.shell }}
nim_ref: ${{ steps.pick.outputs.nim_ref }}
nim_mm: ${{ steps.pick.outputs.nim_mm }}
steps:
- name: Pick random platform
id: pick
run: |
declare -a OSS=("linux" "linux" "linux-gcc-14" "macos-15" "windows" "windows")
declare -a CPUS=("amd64" "i386" "amd64" "arm64" "amd64" "amd64")
declare -a CCS=("gcc" "gcc" "gcc" "clang" "clang" "gcc")
declare -a BUILDERS=("ubuntu-22.04" "ubuntu-22.04" "ubuntu-24.04" "macos-15" "windows-2022" "windows-2022")
declare -a SHELLS=("bash" "bash" "bash" "bash" "bash" "msys2 {0}")
PLATFORM_INDEX=$((RANDOM % 6))
echo "os=${OSS[$PLATFORM_INDEX]}" >> $GITHUB_OUTPUT
echo "cpu=${CPUS[$PLATFORM_INDEX]}" >> $GITHUB_OUTPUT
echo "cc=${CCS[$PLATFORM_INDEX]}" >> $GITHUB_OUTPUT
echo "builder=${BUILDERS[$PLATFORM_INDEX]}" >> $GITHUB_OUTPUT
echo "shell=${SHELLS[$PLATFORM_INDEX]}" >> $GITHUB_OUTPUT
declare -a NIM_REFS=("v2.2.4" "v2.2.10" "v2.2.10")
declare -a NIM_MMS=("refc" "refc" "orc")
NIM_INDEX=$((RANDOM % 3))
echo "nim_ref=${NIM_REFS[$NIM_INDEX]}" >> $GITHUB_OUTPUT
echo "nim_mm=${NIM_MMS[$NIM_INDEX]}" >> $GITHUB_OUTPUT
test:
needs: pick-platform
env:
NIMBLE_COMMIT: 42ef70c2102a942c46f13eb76872326edd525cec # v0.22.3
timeout-minutes: 55
runs-on: ${{ needs.pick-platform.outputs.builder }}
name: "test_multiformat_exts"
defaults:
run:
shell: ${{ needs.pick-platform.outputs.shell }}
steps:
- name: selected platform
# msys2 is only installed by Setup Nim below, so it cannot be the shell here.
shell: bash
run: echo "(${{ needs.pick-platform.outputs.os }}-${{ needs.pick-platform.outputs.cpu }} / ${{ needs.pick-platform.outputs.cc }} / Nim ${{ needs.pick-platform.outputs.nim_ref }} / ${{ needs.pick-platform.outputs.nim_mm }})"
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Setup Nim
uses: "./.github/actions/install_nim"
with:
os: ${{ needs.pick-platform.outputs.os }}
cpu: ${{ needs.pick-platform.outputs.cpu }}
shell: ${{ needs.pick-platform.outputs.shell }}
nim_ref: ${{ needs.pick-platform.outputs.nim_ref }}
- name: Restore dependencies from cache
id: deps-cache
uses: actions/cache@v5
with:
path: |
nimbledeps
tests/nimbledeps
key: nimbledeps-${{ needs.pick-platform.outputs.os }}-${{ needs.pick-platform.outputs.cpu }}-${{ needs.pick-platform.outputs.cc }}-${{ hashFiles('.pinned', 'tests/.pinned') }}
- name: Restore llvm-mingw (Windows) from cache
if: runner.os == 'Windows' && needs.pick-platform.outputs.cc == 'clang'
id: windows-mingw-cache
uses: actions/cache@v5
with:
path: external/mingw-${{ needs.pick-platform.outputs.cpu }}
key: 'mingw-llvm-17-${{ needs.pick-platform.outputs.cpu }}'
- name: Install llvm-mingw dependency (Windows)
if: >
steps.windows-mingw-cache.outputs.cache-hit != 'true' &&
runner.os == 'Windows' &&
needs.pick-platform.outputs.cc == 'clang'
run: |
mkdir -p external
MINGW_BASE="https://github.com/mstorsjo/llvm-mingw/releases/download/20230905"
MINGW_URL="$MINGW_BASE/llvm-mingw-20230905-ucrt-x86_64.zip"
curl -L "$MINGW_URL" -o "external/mingw-${{ needs.pick-platform.outputs.cpu }}.zip"
7z x -y "external/mingw-${{ needs.pick-platform.outputs.cpu }}.zip" -oexternal/mingw-${{ needs.pick-platform.outputs.cpu }}/
mv external/mingw-${{ needs.pick-platform.outputs.cpu }}/**/* ./external/mingw-${{ needs.pick-platform.outputs.cpu }}
- name: Use gcc 14
if: needs.pick-platform.outputs.os == 'linux-gcc-14'
run: |
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 14
sudo update-alternatives --set gcc /usr/bin/gcc-14
- name: Path to cached dependencies (Windows)
if: >
runner.os == 'Windows' &&
needs.pick-platform.outputs.cc == 'clang'
run: |
echo '${{ github.workspace }}'"/external/mingw-${{ needs.pick-platform.outputs.cpu }}/bin" >> $GITHUB_PATH
echo "." >> $GITHUB_PATH
- name: Install nasm (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
choco install nasm --no-progress -y
"C:\Program Files\NASM" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append
- name: Install deps
if: ${{ steps.deps-cache.outputs.cache-hit != 'true' }}
run: |
nimble install_pinned
cd tests && nimble install_pinned
- name: Build prerequisites
run: make nimble.paths tests/nimble.paths
- name: Build test_multiformat_exts
id: build-test
run: |
NIMFLAGS="--mm:${{ needs.pick-platform.outputs.nim_mm }} --opt:speed --styleCheck:usages --styleCheck:error --parallelBuild:0 --threads:on --skipUserCfg"
NIMFLAGS="$NIMFLAGS -d:libp2p_multicodec_exts=../tests/libp2p/multiformat_exts/multicodec_exts.nim"
NIMFLAGS="$NIMFLAGS -d:libp2p_multiaddress_exts=../tests/libp2p/multiformat_exts/multiaddress_exts.nim"
NIMFLAGS="$NIMFLAGS -d:libp2p_multihash_exts=../tests/libp2p/multiformat_exts/multihash_exts.nim"
NIMFLAGS="$NIMFLAGS -d:libp2p_multibase_exts=../tests/libp2p/multiformat_exts/multibase_exts.nim"
NIMFLAGS="$NIMFLAGS -d:libp2p_contentids_exts=../tests/libp2p/multiformat_exts/contentids_exts.nim"
NIMFLAGS="$NIMFLAGS -d:path=multiformat_exts"
if [[ '${{ needs.pick-platform.outputs.cc }}' == 'clang' ]]; then
NIMFLAGS="$NIMFLAGS --cc:clang"
fi
nim c $NIMFLAGS ./tests/test_all
- name: Run tests
id: run-tests
run: |
./tests/test_all --output-level=VERBOSE --console --xml:tests/results_test_multiformat_exts.xml
- name: Fix xml newlines
if: ${{ !cancelled() && steps.run-tests.outcome == 'failure' }}
run: |
nim c -r tools/fix_xml_newlines.nim
- name: Test Report
uses: dorny/test-reporter@v2
if: ${{ !cancelled() && steps.run-tests.outcome == 'failure' }}
with:
name: Test Report
path: tests/results_*.xml
reporter: jest-junit
list-suites: 'failed'
list-tests: 'failed'
fail-on-error: 'false'