Files
Codex Bot 6a0421816a
C/C++ CI / build-alpine-static (map[arch:aarch64 branch:latest-stable flags:-ffunction-sections -mfix-cortex-a53-835769 -mfix-cortex-a53-843419]) (push) Has been cancelled
C/C++ CI / build-alpine-static (map[arch:riscv64 branch:latest-stable flags:-ffunction-sections]) (push) Has been cancelled
C/C++ CI / build-alpine-static (map[arch:x86_64 branch:latest-stable flags:-ffunction-sections]) (push) Has been cancelled
C/C++ CI / build-ubuntu (map[c:gcc-10 cpp:g++-10 flags: os:ubuntu-22.04]) (push) Has been cancelled
C/C++ CI / build-ubuntu (map[c:gcc-11 cpp:g++-11 flags: os:ubuntu-22.04]) (push) Has been cancelled
C/C++ CI / build-ubuntu (map[c:gcc-12 cpp:g++-12 flags: os:ubuntu-22.04]) (push) Has been cancelled
C/C++ CI / build-ubuntu (map[c:gcc-13 cpp:g++-13 flags: os:ubuntu-24.04]) (push) Has been cancelled
C/C++ CI / build-ubuntu (map[c:gcc-14 cpp:g++-14 flags: os:ubuntu-24.04]) (push) Has been cancelled
C/C++ CI / build-ubuntu (map[c:gcc-9 cpp:g++-9 flags: os:ubuntu-22.04]) (push) Has been cancelled
C/C++ CI / build-ubuntu-static-libs (map[flags:-fuse-linker-plugin -ffunction-sections]) (push) Has been cancelled
C/C++ CI / build-ubuntu-aarch64 (map[flags:-fuse-linker-plugin -ffunction-sections -mfix-cortex-a53-835769 -mfix-cortex-a53-843419 os:ubuntu-22.04-arm]) (push) Has been cancelled
C/C++ CI / build-ubuntu-riscv64 (map[flags:-fuse-linker-plugin -ffunction-sections os:ubuntu-24.04]) (push) Has been cancelled
C/C++ CI / build-windows-msys2 (map[c:gcc cxx:g++ flags:-ffunction-sections -Wno-error=maybe-uninitialized -Wno-error=attributes -Wno-attributes]) (push) Has been cancelled
C/C++ CI / build-windows-msbuild (map[grpc:OFF os:2022 rx:ON tls:ON upnp:ON vs:Visual Studio 17 2022 vspath:C:\Program Files\Microsoft Visual Studio\2022\Enterprise]) (push) Has been cancelled
C/C++ CI / build-windows-msbuild (map[grpc:ON os:2022 rx:ON tls:ON upnp:ON vs:Visual Studio 17 2022 vspath:C:\Program Files\Microsoft Visual Studio\2022\Enterprise]) (push) Has been cancelled
C/C++ CI / build-macos (push) Has been cancelled
C/C++ CI / build-macos-aarch64 (push) Has been cancelled
C/C++ CI / build-freebsd (map[architecture:x86-64 host:ubuntu-latest name:freebsd version:13.3]) (push) Has been cancelled
C/C++ CI / build-openbsd (map[architecture:x86-64 host:ubuntu-latest name:openbsd version:7.4]) (push) Has been cancelled
C/C++ CI / build-windows-msys2 (map[c:clang cxx:clang++ flags:-fuse-ld=lld -Wno-unused-command-line-argument -Wno-nan-infinity-disabled -Wno-attributes]) (push) Has been cancelled
clang-tidy / clang-tidy (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
Code coverage / coverage (push) Has been cancelled
cppcheck / cppcheck-ubuntu (push) Has been cancelled
cppcheck / cppcheck-windows (push) Has been cancelled
Microsoft C++ Code Analysis / Analyze (push) Has been cancelled
source-snapshot / source-snapshot (push) Has been cancelled
Sync test (macOS) / sync-test-macos-intel (push) Has been cancelled
Sync test (macOS) / sync-test-macos-arm64 (push) Has been cancelled
Sync test (Ubuntu) / sync-test-ubuntu-tsan (push) Has been cancelled
Sync test (Ubuntu) / sync-test-ubuntu-msan (push) Has been cancelled
Sync test (Ubuntu) / sync-test-ubuntu-ubsan (push) Has been cancelled
Sync test (Ubuntu) / sync-test-ubuntu-asan (push) Has been cancelled
Sync test (Windows) / sync-test-windows-debug-asan (push) Has been cancelled
Sync test (Windows) / sync-test-windows-leaks (push) Has been cancelled
Import current p2pool-salvium snapshot
2026-04-25 11:36:07 +02:00

1003 lines
54 KiB
YAML

spec:
inputs:
release_version:
description: "Version for release (e.g. v4.18). Leave empty for normal CI runs."
default: ""
---
# p2pool-salvium GitLab CI/CD
#
# Pipeline stages:
# 1. analysis - Static analysis (clang-tidy, cppcheck) on free runners
# 2. build - All compilation jobs on free runners
# 3. test - Sync tests + sanitizers on free runners (after builds pass)
# 4. build-paid - macOS builds on paid runners (after free builds + tests pass)
# 5. release - Package & publish (manual, only on version tags)
stages:
- analysis
- build
- test
- build-paid
- release
variables:
GIT_SUBMODULE_STRATEGY: recursive
GIT_SUBMODULE_DEPTH: 1
RELEASE_VERSION: $[[ inputs.release_version ]]
# Common libcurl cmake flags (reused across jobs)
.curl_flags: &curl_flags >-
-DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF
-DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF
-DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON
-DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF
-DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF
-DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON
-DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON
-DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON
-DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON
-DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON
-DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON
-DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON
-DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF
-DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF
-DCURL_DISABLE_TESTS=ON -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF
-DP2POOL_BORINGSSL=ON
-DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON
-DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON
-DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON
-DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/include
# Default rules: run on push to main, MRs, and manual triggers
# Release jobs override this with tag-only rules
.default_rules:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == "main"
- if: $CI_PIPELINE_SOURCE == "web"
# ============================================================
# STAGE 1: ANALYSIS (free runners)
# All must pass before any builds start
# ============================================================
clang-tidy:
stage: analysis
tags: [linux, x86_64, debian_12]
timeout: 30 minutes
extends: .default_rules
script:
- mkdir build && cd build
- cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_C_COMPILER=clang-21 -DCMAKE_CXX_COMPILER=clang++-21 -DDEV_CLANG_TIDY=ON -DSTATIC_LIBS=ON -DWITH_GRPC=ON -DWITH_INDEXED_HASHES=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
- cd ../src
- clang-tidy-21 *.cpp -p ../build -checks=bugprone-*,clang-analyzer-*,llvm-*,cppcoreguidelines-pro-type-const-cast,cppcoreguidelines-pro-type-cstyle-cast,cppcoreguidelines-rvalue-reference-param-not-moved,hicpp-use-emplace,hicpp-use-override,-bugprone-easily-swappable-parameters,-bugprone-empty-catch,-llvm-include-order -warnings-as-errors=* -header-filter='^[^\./]'
cppcheck-linux:
stage: analysis
tags: [linux, x86_64, debian_12]
timeout: 60 minutes
extends: .default_rules
script:
- mkdir build && cd build
- cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DSTATIC_LIBS=ON -DWITH_GRPC=OFF -DWITH_INDEXED_HASHES=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
- python3 ../cppcheck/remove_external.py compile_commands.json
- cd ../cppcheck && ./run.sh
artifacts:
when: always
paths:
- cppcheck/errors_full.txt
- cppcheck/checkers_report.txt
expire_in: 7 days
cppcheck-windows:
stage: analysis
tags: [windows, x86_64, win10pro]
timeout: 120 minutes
extends: .default_rules
variables:
GIT_SUBMODULE_STRATEGY: none
before_script:
- git submodule sync --recursive
- git submodule update --init --force --recursive -- external/src/RandomX external/src/curl external/src/libuv external/src/libzmq external/src/miniupnp external/src/rapidjson external/src/robin-hood-hashing tests/googletest
script:
- |
cd cppcheck
cmd /c run_ci.cmd
artifacts:
when: always
paths:
- cppcheck/errors_full.txt
- cppcheck/checkers_report.txt
expire_in: 7 days
# GitLab SAST (replaces CodeQL)
sast:
stage: analysis
extends: .default_rules
include:
- template: Security/SAST.gitlab-ci.yml
# ============================================================
# STAGE 2: BUILDS (free runners)
# Only run after all analysis passes
# ============================================================
# --- Alpine Static Builds ---
.build_alpine_static:
stage: build
timeout: 90 minutes
extends: .default_rules
script:
- apk add git cmake gcc g++ make linux-headers xz
# Build libcurl
- cd external/src/curl
- cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Os -flto=auto ${ARCH_FLAGS}" ${CURL_FLAGS}
- make -j$(nproc) && cd ../../..
# Build libuv
- cd external/src/libuv && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Os -flto=auto ${ARCH_FLAGS}" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
# Build libzmq
- cd external/src/libzmq && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="-Os -flto=auto ${ARCH_FLAGS}" -DCMAKE_CXX_FLAGS="-Os -flto=auto ${ARCH_FLAGS}" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
# Build p2pool
- mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="${ARCH_FLAGS} -Wl,-s -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="${ARCH_FLAGS} -Wl,-s -Wl,--gc-sections" -DWITH_GRPC=OFF -DSTATIC_BINARY=ON -DARCH_ID=${ARCH_ID}
- make -j$(nproc) p2pool-salvium
# Tests
- ./p2pool-salvium --test
- make -j$(nproc) randomx-tests
- external/src/RandomX/randomx-tests
- cd ../tests && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="${ARCH_FLAGS} -Wl,-s -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="${ARCH_FLAGS} -Wl,-s -Wl,--gc-sections" -DSTATIC_LIBS=ON -DARCH_ID=${ARCH_ID}
- make -j$(nproc) p2pool_tests
- unxz *.xz || true
- ./p2pool_tests
artifacts:
paths:
- build/p2pool-salvium
expire_in: 7 days
build-alpine-static-x64:
extends: .build_alpine_static
tags: [linux, x86_64, alpine]
variables:
ARCH_FLAGS: "-ffunction-sections"
ARCH_ID: "x86_64"
CURL_FLAGS: *curl_flags
# aarch64: native build on GitLab SaaS ARM64 runner
# aarch64: cross-compile on x86, run tests via QEMU user-mode emulation.
# Runs on self-hosted ubuntu-24.04 runner with cross-compiler + qemu pre-installed.
build-alpine-static-aarch64:
stage: build
timeout: 60 minutes
extends: .default_rules
tags: [linux, x86_64, ubuntu_24.04]
variables:
ARCH_FLAGS: "-fuse-linker-plugin -ffunction-sections"
ARCH_ID: "aarch64"
CURL_FLAGS: *curl_flags
TOOLCHAIN: "-DCMAKE_TOOLCHAIN_FILE=$CI_PROJECT_DIR/cmake/aarch64_toolchain.cmake"
script:
# Build libcurl (cross-compiled)
- cd external/src/curl
- cmake . -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_C_FLAGS="-Os -flto=auto ${ARCH_FLAGS}" ${CURL_FLAGS}
- make -j$(nproc) && cd ../../..
# Build libuv
- cd external/src/libuv && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_C_FLAGS="-Os -flto=auto ${ARCH_FLAGS}" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
# Build libzmq
- cd external/src/libzmq && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="-Os -flto=auto ${ARCH_FLAGS}" -DCMAKE_CXX_FLAGS="-Os -flto=auto ${ARCH_FLAGS}" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
# Build p2pool (cross-compiled, fully static)
- mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="${ARCH_FLAGS} -Wl,-s -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="${ARCH_FLAGS} -Wl,-s -Wl,--gc-sections" -DWITH_GRPC=OFF -DSTATIC_BINARY=ON -DARCH_ID=${ARCH_ID}
- make -j$(nproc) p2pool-salvium
# Run self-test via QEMU (p2pool is fully static, no LD_PREFIX needed)
- qemu-aarch64-static ./p2pool-salvium --test
# Set QEMU_LD_PREFIX for all dynamically linked test binaries
- export QEMU_LD_PREFIX=/usr/aarch64-linux-gnu
# Build and run RandomX tests
- make -j$(nproc) randomx-tests
- qemu-aarch64-static external/src/RandomX/randomx-tests
# Build and run full test suite
- cd ../tests && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="${ARCH_FLAGS} -Wl,-s -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="${ARCH_FLAGS} -Wl,-s -Wl,--gc-sections" -DSTATIC_LIBS=ON -DARCH_ID=${ARCH_ID}
- make -j$(nproc) p2pool_tests
- unxz *.xz || true
- qemu-aarch64-static ./p2pool_tests
artifacts:
paths:
- build/p2pool-salvium
expire_in: 7 days
# riscv64: cross-compile on x86, run tests via QEMU user-mode emulation.
# Runs on self-hosted ubuntu-24.04 runner with cross-compiler + qemu pre-installed.
build-alpine-static-riscv64:
stage: build
timeout: 60 minutes
extends: .default_rules
tags: [linux, x86_64, ubuntu_24.04]
variables:
ARCH_FLAGS: "-fuse-linker-plugin -ffunction-sections"
ARCH_ID: "riscv64"
CURL_FLAGS: *curl_flags
TOOLCHAIN: "-DCMAKE_TOOLCHAIN_FILE=$CI_PROJECT_DIR/cmake/riscv64_toolchain.cmake"
script:
# Build libcurl (cross-compiled)
- cd external/src/curl
- cmake . -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_C_FLAGS="-Os -flto=auto ${ARCH_FLAGS}" ${CURL_FLAGS}
- make -j$(nproc) && cd ../../..
# Build libuv
- cd external/src/libuv && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_C_FLAGS="-Os -flto=auto ${ARCH_FLAGS}" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
# Build libzmq
- cd external/src/libzmq && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="-Os -flto=auto ${ARCH_FLAGS}" -DCMAKE_CXX_FLAGS="-Os -flto=auto ${ARCH_FLAGS}" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
# Build p2pool (cross-compiled, fully static)
- mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="${ARCH_FLAGS} -Wl,-s -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="${ARCH_FLAGS} -Wl,-s -Wl,--gc-sections" -DWITH_GRPC=OFF -DSTATIC_BINARY=ON -DARCH_ID=${ARCH_ID}
- make -j$(nproc) p2pool-salvium
# Run self-test via QEMU (p2pool is fully static, no LD_PREFIX needed)
- qemu-riscv64-static ./p2pool-salvium --test
# Set QEMU_LD_PREFIX for all dynamically linked test binaries
- export QEMU_LD_PREFIX=/usr/riscv64-linux-gnu
# Build and run RandomX tests
- make -j$(nproc) randomx-tests
- qemu-riscv64-static external/src/RandomX/randomx-tests
# Build and run full test suite
- cd ../tests && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="${ARCH_FLAGS} -Wl,-s -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="${ARCH_FLAGS} -Wl,-s -Wl,--gc-sections" -DSTATIC_LIBS=ON -DARCH_ID=${ARCH_ID}
- make -j$(nproc) p2pool_tests
- unxz *.xz || true
- qemu-riscv64-static ./p2pool_tests
artifacts:
paths:
- build/p2pool-salvium
expire_in: 7 days
# --- Debian Builds ---
.build_debian:
stage: build
timeout: 60 minutes
extends: .default_rules
variables:
GIT_SUBMODULE_STRATEGY: none
before_script:
- git submodule sync --recursive
- git submodule update --init --force --recursive -- external/src/RandomX external/src/curl external/src/libuv external/src/libzmq external/src/miniupnp external/src/rapidjson external/src/robin-hood-hashing tests/googletest
script:
# Build libcurl
- cd external/src/curl
- cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Os -flto=auto -ffunction-sections" ${CURL_FLAGS}
- make -j$(nproc) && cd ../../..
# Build libuv
- cd external/src/libuv && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Os -flto=auto -ffunction-sections" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
# Build libzmq
- cd external/src/libzmq && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="-Os -flto=auto -ffunction-sections" -DCMAKE_CXX_FLAGS="-Os -flto=auto -ffunction-sections" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
# Build p2pool
- mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_C_FLAGS="-ffunction-sections" -DCMAKE_CXX_FLAGS="-ffunction-sections" -DCMAKE_EXE_LINKER_FLAGS="-Wl,-s -Wl,--gc-sections" -DWITH_GRPC=OFF -DSTATIC_LIBS=ON
- make -j$(nproc) p2pool-salvium
# Tests
- ./p2pool-salvium --test
- make -j$(nproc) randomx-tests
- external/src/RandomX/randomx-tests
- cd ../tests && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_C_FLAGS="-ffunction-sections" -DCMAKE_CXX_FLAGS="-ffunction-sections" -DCMAKE_EXE_LINKER_FLAGS="-Wl,-s -Wl,--gc-sections" -DSTATIC_LIBS=ON
- make -j$(nproc) p2pool_tests
- unxz *.xz || true
- ./p2pool_tests
artifacts:
paths:
- build/p2pool-salvium
expire_in: 7 days
build-debian-12:
extends: .build_debian
tags: [linux, x86_64, debian_12]
variables:
CURL_FLAGS: *curl_flags
# --- Windows Build ---
build-windows-x64:
stage: build
tags: [windows, x86_64, win10pro]
timeout: 60 minutes
extends: .default_rules
variables:
GIT_SUBMODULE_STRATEGY: none
before_script:
- git submodule sync --recursive
- git submodule update --init --force --recursive -- external/src/RandomX external/src/curl external/src/libuv external/src/libzmq external/src/miniupnp external/src/rapidjson external/src/robin-hood-hashing tests/googletest
- git submodule update --init --force -- external/src/grpc
- git -C external/src/grpc submodule update --init --force -- third_party/boringssl-with-bazel third_party/abseil-cpp third_party/cares/cares third_party/re2 third_party/protobuf third_party/zlib third_party/googletest
script:
- |
$vsw = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
if (Test-Path $vsw) {
$MSBUILD = & $vsw -latest -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\amd64\MSBuild.exe | Select-Object -First 1
}
if (-not $MSBUILD) {
$candidates = @(
"${env:ProgramFiles}\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\amd64\MSBuild.exe",
"${env:ProgramFiles}\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin\amd64\MSBuild.exe",
"${env:ProgramFiles}\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\MSBuild.exe",
"${env:ProgramFiles}\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\MSBuild.exe"
)
foreach ($c in $candidates) { if (Test-Path $c) { $MSBUILD = $c; break } }
}
if (-not $MSBUILD) {
$MSBUILD = Get-ChildItem -Path "${env:ProgramFiles}","${env:ProgramFiles(x86)}" -Recurse -Filter "MSBuild.exe" -ErrorAction SilentlyContinue | Where-Object { $_.FullName -match "amd64" } | Select-Object -First 1 -ExpandProperty FullName
}
if (-not $MSBUILD) { throw "MSBuild not found anywhere on this runner" }
Write-Host "Using MSBuild: $MSBUILD"
git apply --verbose --ignore-whitespace --directory=external/src/grpc/third_party/boringssl-with-bazel patches/boringssl/win7.patch
# Build p2pool (MSVC handles deps via cmake)
New-Item -ItemType Directory -Force -Path build
cd build
cmake .. -G "Visual Studio 17 2022" -DCMAKE_SYSTEM_VERSION="10.0" -DWITH_RANDOMX=ON -DWITH_UPNP=ON -DWITH_GRPC=OFF -DWITH_TLS=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
& $MSBUILD -v:m /m /p:Configuration=Release p2pool-salvium.vcxproj
# Tests
Release/p2pool-salvium.exe --test
& $MSBUILD -v:m /m /p:Configuration=Release external\src\RandomX\randomx-tests.vcxproj
external/src/RandomX/Release/randomx-tests.exe
cd ../tests
New-Item -ItemType Directory -Force -Path build
cd build
cmake .. -G "Visual Studio 17 2022" -DCMAKE_SYSTEM_VERSION="10.0" -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
& $MSBUILD -v:m /m /p:Configuration=Release p2pool_tests.vcxproj
cd Release
xz -d sidechain_dump.dat.xz
./p2pool_tests.exe
artifacts:
paths:
- build/Release/p2pool-salvium.exe
expire_in: 7 days
# --- Source Snapshot ---
source-snapshot:
stage: build
tags: [linux, x86_64, debian_12]
timeout: 10 minutes
extends: .default_rules
script:
- cd ..
- tar --exclude=".git" --exclude="build" -cJf p2pool-salvium/build/p2pool_source.tar.xz p2pool-salvium || tar --exclude=".git" --exclude="build" -cJf p2pool_source.tar.xz p2pool-salvium && mv p2pool_source.tar.xz p2pool-salvium/
artifacts:
paths:
- "*.tar.xz"
- build/p2pool_source.tar.xz
expire_in: 7 days
# ============================================================
# STAGE 3: TESTS (free runners, after builds)
# ============================================================
sync-test-tsan:
stage: test
tags: [saas-linux-small-amd64]
image: ubuntu:22.04
timeout: 120 minutes
extends: .default_rules
script:
- apt-get update && apt-get install -y software-properties-common && add-apt-repository -y ppa:ubuntu-toolchain-r/test
- apt-get update && apt-get install -y gcc-12 g++-12 cmake make git build-essential xz-utils python3 procps libcurl4-openssl-dev libuv1-dev libzmq3-dev libhiredis-dev libgss-dev libidn2-0-dev libgrpc++-dev libprotobuf-dev protobuf-compiler protobuf-compiler-grpc
# Build libcurl with TSAN
- cd external/src/curl
- cmake . -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_C_FLAGS="-fsanitize=thread -Og -fno-omit-frame-pointer -g" ${CURL_FLAGS}
- make -j$(nproc) && cd ../../..
# Build libuv with TSAN
- cd external/src/libuv && mkdir -p build && cd build
- cmake .. -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_C_FLAGS="-fsanitize=thread -Og -fno-omit-frame-pointer -g" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
# Build libzmq with TSAN
- cd external/src/libzmq && mkdir -p build && cd build
- cmake .. -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DCMAKE_C_FLAGS="-fsanitize=thread -Og -fno-omit-frame-pointer -g" -DCMAKE_CXX_FLAGS="-fsanitize=thread -Og -fno-omit-frame-pointer -g" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
- make -j$(nproc) && cd ../../../..
# Build p2pool with TSAN
- mkdir -p build && cd build
- cmake .. -DDEV_TEST_SYNC=ON -DDEV_WITH_TSAN=ON -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DCMAKE_C_FLAGS="-fsanitize=thread -Og -fno-omit-frame-pointer -g" -DCMAKE_CXX_FLAGS="-fsanitize=thread -Og -fno-omit-frame-pointer -g" -DWITH_LTO=OFF -DSTATIC_LIBS=ON -DWITH_INDEXED_HASHES=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
- make -j$(nproc) p2pool-salvium
# Run sync test
- mkdir data
- python3 ../tests/src/stratum_dummy.py 1 &
- python3 ../tests/src/stratum_dummy.py 2 &
- python3 ../tests/src/stratum_dummy.py 3 &
- sysctl vm.mmap_rnd_bits=28 || true
- TSAN_OPTIONS="suppressions=../tests/src/tsan_sup.txt halt_on_error=1 history_size=4" ./p2pool-salvium --host core2.whiskymine.io --rpc-port 19081 --zmq-port 19084 --wallet SC11n4s2UEj9Rc8XxppPbegwQethVmREpG9JP3aJUBGRCuD3wEvS4qtYtBjhqSx3S1hw3WDCfmbWKHJqa9g5Vqyo3jrsReJ5vp --out-peers 200 --data-api data --local-api --loglevel 4 --no-color 2>&1 | tee p2pool.log || true
- grep 'Synchronization finished successfully' p2pool.log
- ../scripts/workflows/test-sync-check.sh
variables:
CURL_FLAGS: *curl_flags
artifacts:
when: always
paths:
- build/*.log
- build/data/
expire_in: 7 days
sync-test-msan:
stage: test
tags: [saas-linux-small-amd64]
image: ubuntu:24.04
timeout: 180 minutes
extends: .default_rules
script:
- apt-get update && apt-get install -y gcc g++ cmake make git ninja-build python3 xz-utils procps wget gnupg lsb-release software-properties-common libcurl4-openssl-dev libuv1-dev libzmq3-dev libhiredis-dev libgrpc++-dev libprotobuf-dev protobuf-compiler protobuf-compiler-grpc
- wget https://apt.llvm.org/llvm.sh && chmod +x llvm.sh && ./llvm.sh 21 all
# Build libcxx with MSAN
- git clone --depth=1 https://github.com/llvm/llvm-project -b release/21.x
- cd llvm-project && mkdir build
- cmake -G Ninja -S runtimes -B build -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" -DCMAKE_C_COMPILER=clang-21 -DCMAKE_CXX_COMPILER=clang++-21 -DLLVM_USE_SANITIZER=MemoryWithOrigins -DLIBCXXABI_USE_LLVM_UNWINDER=OFF
- ninja -C build cxx cxxabi
- mkdir -p /tmp/libcxx_msan && cp -r build/include /tmp/libcxx_msan && cp -r build/lib /tmp/libcxx_msan
- cd ..
# Build libcurl with MSAN
- cd external/src/curl
- cmake . -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang-21 -DCMAKE_C_FLAGS="-fsanitize=memory -fsanitize-recover -O2 -fno-omit-frame-pointer -g" ${CURL_FLAGS}
- make -j$(nproc) && cd ../../..
# Build libuv with MSAN
- cd external/src/libuv && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang-21 -DCMAKE_C_FLAGS="-fsanitize=memory -fsanitize-recover -O2 -fno-omit-frame-pointer -g" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
# Build libzmq with MSAN
- cd external/src/libzmq && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang-21 -DCMAKE_CXX_COMPILER=clang++-21 -DCMAKE_C_FLAGS="-fsanitize=memory -fsanitize-recover -O2 -fno-omit-frame-pointer -g" -DCMAKE_CXX_FLAGS="-nostdinc++ -nostdlib++ -fsanitize=memory -fsanitize-recover -isystem /tmp/libcxx_msan/include/c++/v1 -O2 -fno-omit-frame-pointer -g" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
- make -j$(nproc) && cd ../../../..
# Build p2pool with MSAN
- mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang-21 -DCMAKE_CXX_COMPILER=clang++-21 -DCMAKE_C_FLAGS="-fsanitize=memory -fsanitize-recover -O2 -fno-omit-frame-pointer" -DCMAKE_CXX_FLAGS="-nostdinc++ -nostdlib++ -fsanitize=memory -fsanitize-recover -isystem /tmp/libcxx_msan/include/c++/v1 -L/tmp/libcxx_msan/lib -Wl,-rpath /tmp/libcxx_msan/lib -lc++ -lc++abi -Wno-unused-command-line-argument -fuse-ld=lld-21 -O2 -fno-omit-frame-pointer" -DDEV_TEST_SYNC=ON -DDEV_WITH_MSAN=ON -DWITH_LTO=OFF -DSTATIC_LIBS=ON -DWITH_INDEXED_HASHES=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
- make -j$(nproc) p2pool-salvium
# Run sync test
- mkdir data
- python3 ../tests/src/stratum_dummy.py 1 &
- python3 ../tests/src/stratum_dummy.py 2 &
- python3 ../tests/src/stratum_dummy.py 3 &
- sysctl vm.mmap_rnd_bits=28 || true
- MSAN_OPTIONS="halt_on_error=1" ./p2pool-salvium --host core2.whiskymine.io --rpc-port 19081 --zmq-port 19084 --wallet SC11n4s2UEj9Rc8XxppPbegwQethVmREpG9JP3aJUBGRCuD3wEvS4qtYtBjhqSx3S1hw3WDCfmbWKHJqa9g5Vqyo3jrsReJ5vp --out-peers 20 --data-api data --local-api --loglevel 4 --no-color 2>p2pool_msan.log | tee p2pool.log || true
- grep 'Synchronization finished successfully' p2pool.log
- ../scripts/workflows/test-sync-check.sh
variables:
CURL_FLAGS: *curl_flags
artifacts:
when: always
paths:
- build/*.log
- build/data/
expire_in: 7 days
sync-test-ubsan:
stage: test
tags: [saas-linux-small-amd64]
image: ubuntu:22.04
timeout: 60 minutes
extends: .default_rules
script:
- apt-get update && apt-get install -y software-properties-common && add-apt-repository -y ppa:ubuntu-toolchain-r/test
- apt-get update && apt-get install -y gcc-12 g++-12 cmake make git build-essential xz-utils python3 procps libcurl4-openssl-dev libuv1-dev libzmq3-dev libhiredis-dev libgss-dev libidn2-0-dev libgrpc++-dev libprotobuf-dev protobuf-compiler protobuf-compiler-grpc
- mkdir -p build && cd build
- cmake .. -DDEV_TEST_SYNC=ON -DDEV_WITH_UBSAN=ON -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DWITH_LTO=OFF -DWITH_INDEXED_HASHES=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
- make -j$(nproc) p2pool-salvium
- mkdir data
- python3 ../tests/src/stratum_dummy.py 1 &
- python3 ../tests/src/stratum_dummy.py 2 &
- python3 ../tests/src/stratum_dummy.py 3 &
- sysctl vm.mmap_rnd_bits=28 || true
- UBSAN_OPTIONS="suppressions=../tests/src/ubsan_sup.txt halt_on_error=1" ./p2pool-salvium --host core2.whiskymine.io --rpc-port 19081 --zmq-port 19084 --wallet SC11n4s2UEj9Rc8XxppPbegwQethVmREpG9JP3aJUBGRCuD3wEvS4qtYtBjhqSx3S1hw3WDCfmbWKHJqa9g5Vqyo3jrsReJ5vp --out-peers 200 --data-api data --local-api --loglevel 4 --no-color 2>&1 | tee p2pool.log || true
- grep 'Synchronization finished successfully' p2pool.log
- ../scripts/workflows/test-sync-check.sh
artifacts:
when: always
paths:
- build/*.log
- build/data/
expire_in: 7 days
sync-test-asan:
stage: test
tags: [saas-linux-small-amd64]
image: ubuntu:22.04
timeout: 60 minutes
extends: .default_rules
script:
- apt-get update && apt-get install -y software-properties-common && add-apt-repository -y ppa:ubuntu-toolchain-r/test
- apt-get update && apt-get install -y gcc-12 g++-12 cmake make git build-essential xz-utils python3 procps libcurl4-openssl-dev libuv1-dev libzmq3-dev libhiredis-dev libgss-dev libidn2-0-dev libgrpc++-dev libprotobuf-dev protobuf-compiler protobuf-compiler-grpc
- mkdir -p build && cd build
- cmake .. -DDEV_TEST_SYNC=ON -DDEV_DEBUG=ON -DDEV_WITH_ASAN=ON -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DCMAKE_C_FLAGS="-fno-omit-frame-pointer -fsanitize=address -Og -g" -DCMAKE_CXX_FLAGS="-fno-omit-frame-pointer -fsanitize=address -Og -g" -DWITH_LTO=OFF -DWITH_INDEXED_HASHES=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
- make -j$(nproc) p2pool-salvium
- mkdir data
- python3 ../tests/src/stratum_dummy.py 1 &
- python3 ../tests/src/stratum_dummy.py 2 &
- python3 ../tests/src/stratum_dummy.py 3 &
- sysctl vm.mmap_rnd_bits=28 || true
- ASAN_OPTIONS="detect_stack_use_after_return=1 atexit=1" ./p2pool-salvium --host core2.whiskymine.io --rpc-port 19081 --zmq-port 19084 --wallet SC11n4s2UEj9Rc8XxppPbegwQethVmREpG9JP3aJUBGRCuD3wEvS4qtYtBjhqSx3S1hw3WDCfmbWKHJqa9g5Vqyo3jrsReJ5vp --out-peers 200 --data-api data --local-api --loglevel 4 --no-color 2>&1 | tee p2pool.log || true
- grep 'Synchronization finished successfully' p2pool.log
- ../scripts/workflows/test-sync-check.sh
artifacts:
when: always
paths:
- build/*.log
- build/data/
expire_in: 7 days
# --- Coverage ---
coverage:
stage: test
tags: [linux, x86_64, debian_12]
timeout: 60 minutes
extends: .default_rules
script:
# Build tests with coverage
- cd tests && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DDEV_DEBUG=ON -DWITH_INDEXED_HASHES=ON -DWITH_COVERAGE=ON -DCMAKE_C_COMPILER=clang-21 -DCMAKE_CXX_COMPILER=clang++-21 -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
- make -j$(nproc) p2pool_tests
# Run tests
- unxz *.xz || true
- LLVM_PROFILE_FILE="p2pool_tests.profraw" ./p2pool_tests
# Generate coverage report
- llvm-profdata-21 merge -sparse ./p2pool_tests.profraw -o ./p2pool_tests.profdata
- llvm-cov-21 export ./p2pool_tests -format=lcov -instr-profile=./p2pool_tests.profdata > coverage.info
- genhtml --demangle-cpp -o coverage coverage.info
artifacts:
when: always
paths:
- tests/build/coverage/
- tests/build/coverage.info
expire_in: 7 days
coverage: '/lines\.*:\s+(\d+\.\d+)%/'
# --- Per-job status badges ---
generate-badges:
stage: build-paid
tags: [saas-linux-small-amd64]
image: alpine:3.21
when: always
rules:
- if: $CI_COMMIT_BRANCH == "main"
script:
- apk add --no-cache curl jq
- mkdir -p badges
- |
JOBS=$(curl -s --header "JOB-TOKEN: $CI_JOB_TOKEN" \
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/pipelines/${CI_PIPELINE_ID}/jobs?per_page=100")
for JOB_NAME in clang-tidy cppcheck-linux cppcheck-windows coverage \
sync-test-tsan sync-test-asan sync-test-ubsan sync-test-msan \
build-alpine-static-x64 build-alpine-static-aarch64 \
build-alpine-static-riscv64 build-debian-12 build-windows-x64; do
STATUS=$(echo "$JOBS" | jq -r ".[] | select(.name==\"$JOB_NAME\") | .status" | head -1)
case "$STATUS" in
success) LABEL="passing"; COLOR="#4c1" ;;
failed) LABEL="failing"; COLOR="#e05d44" ;;
running) LABEL="running"; COLOR="#dfb317" ;;
*) LABEL="unknown"; COLOR="#9f9f9f" ;;
esac
sh scripts/ci/gen-badge.sh "$JOB_NAME" "$LABEL" "$COLOR" "badges/${JOB_NAME}.svg"
done
artifacts:
paths:
- badges/
when: always
expire_in: 30 days
# ============================================================
# STAGE 4: PAID BUILDS (macOS, after free stages pass)
# ============================================================
build-macos-x64:
stage: build-paid
tags: [saas-macos-medium-m1]
timeout: 90 minutes
extends: .default_rules
script:
- brew install cmake llvm@18
# Build libcurl
- cd external/src/curl
- cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-Os -flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option" ${CURL_FLAGS}
- make -j4 && cd ../../..
# Build libuv
- cd external/src/libuv && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-Os -flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
- make -j4 && cd ../../../..
# Build libzmq
- cd external/src/libzmq && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_CXX_COMPILER="$(brew --prefix llvm@18)/bin/clang++" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-Os -flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option" -DCMAKE_CXX_FLAGS="-Os -flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
- make -j4 && cd ../../../..
# Build p2pool
- mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_CXX_COMPILER="$(brew --prefix llvm@18)/bin/clang++" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option" -DCMAKE_CXX_FLAGS="-flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option" -DCMAKE_ASM_FLAGS="-target x86_64-apple-macos10.13" -DSTATIC_LIBS=ON
- make -j4 p2pool-salvium
- ./p2pool-salvium --test
variables:
CURL_FLAGS: *curl_flags
artifacts:
paths:
- build/p2pool-salvium
expire_in: 7 days
build-macos-aarch64:
stage: build-paid
tags: [saas-macos-medium-m1]
timeout: 30 minutes
extends: .default_rules
script:
- brew install cmake llvm@18
# Build libcurl
- cd external/src/curl
- cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-Os -target arm64-apple-macos-11" ${CURL_FLAGS}
- make -j3 && cd ../../..
# Build libuv
- cd external/src/libuv && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-Os -target arm64-apple-macos-11" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
- make -j3 && cd ../../../..
# Build libzmq
- cd external/src/libzmq && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_CXX_COMPILER="$(brew --prefix llvm@18)/bin/clang++" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-Os -target arm64-apple-macos-11" -DCMAKE_CXX_FLAGS="-Os -target arm64-apple-macos-11" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
- make -j3 && cd ../../../..
# Build p2pool
- mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_CXX_COMPILER="$(brew --prefix llvm@18)/bin/clang++" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-target arm64-apple-macos-11" -DCMAKE_CXX_FLAGS="-target arm64-apple-macos-11" -DSTATIC_LIBS=ON -DWITH_LTO=OFF -DARCH_ID=aarch64
- make -j3 p2pool-salvium
- ./p2pool-salvium --test
variables:
CURL_FLAGS: *curl_flags
artifacts:
paths:
- build/p2pool-salvium
expire_in: 7 days
# ============================================================
# STAGE 5: RELEASE (set RELEASE_VERSION in Run Pipeline UI, e.g. v4.18)
# ============================================================
.release_rules:
rules:
- if: $RELEASE_VERSION
when: on_success
release-linux-x64:
stage: release
tags: [linux, x86_64, debian_12]
timeout: 60 minutes
extends: .release_rules
script:
- cd external/src/curl
- cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Os -flto=auto -ffunction-sections" ${CURL_FLAGS}
- make -j$(nproc) && cd ../../..
- cd external/src/libuv && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Os -flto=auto -ffunction-sections" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
- cd external/src/libzmq && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="-Os -flto=auto -ffunction-sections" -DCMAKE_CXX_FLAGS="-Os -flto=auto -ffunction-sections" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
- mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="-ffunction-sections -Wl,-s -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="-ffunction-sections -Wl,-s -Wl,--gc-sections" -DWITH_GRPC=OFF -DSTATIC_LIBS=ON
- make -j$(nproc) p2pool-salvium
- ./p2pool-salvium --test
- tar -czf p2pool-salvium-${RELEASE_VERSION}-linux-x64.tar.gz p2pool-salvium
variables:
CURL_FLAGS: *curl_flags
artifacts:
paths:
- build/p2pool-salvium-${RELEASE_VERSION}-linux-x64.tar.gz
expire_in: 30 days
release-linux-x64-static:
stage: release
tags: [linux, x86_64, alpine]
timeout: 60 minutes
extends: .release_rules
script:
- apk add git cmake gcc g++ make linux-headers xz
- cd external/src/curl
- cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Os -flto=auto -ffunction-sections" ${CURL_FLAGS}
- make -j$(nproc) && cd ../../..
- cd external/src/libuv && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Os -flto=auto -ffunction-sections" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
- cd external/src/libzmq && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="-Os -flto=auto -ffunction-sections" -DCMAKE_CXX_FLAGS="-Os -flto=auto -ffunction-sections" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
- mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="-ffunction-sections -Wl,-s -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="-ffunction-sections -Wl,-s -Wl,--gc-sections" -DWITH_GRPC=OFF -DSTATIC_BINARY=ON
- make -j$(nproc) p2pool-salvium
- ./p2pool-salvium --test
- tar -czf p2pool-salvium-${RELEASE_VERSION}-linux-x64-static.tar.gz p2pool-salvium
variables:
CURL_FLAGS: *curl_flags
artifacts:
paths:
- build/p2pool-salvium-${RELEASE_VERSION}-linux-x64-static.tar.gz
expire_in: 30 days
release-linux-aarch64:
stage: release
tags: [linux, x86_64, ubuntu_24.04]
timeout: 60 minutes
extends: .release_rules
variables:
CURL_FLAGS: *curl_flags
TOOLCHAIN: "-DCMAKE_TOOLCHAIN_FILE=$CI_PROJECT_DIR/cmake/aarch64_toolchain.cmake"
script:
- cd external/src/curl
- cmake . -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_C_FLAGS="-Os -flto=auto -ffunction-sections" ${CURL_FLAGS}
- make -j$(nproc) && cd ../../..
- cd external/src/libuv && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_C_FLAGS="-Os -flto=auto -ffunction-sections" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
- cd external/src/libzmq && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="-Os -flto=auto -ffunction-sections" -DCMAKE_CXX_FLAGS="-Os -flto=auto -ffunction-sections" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
- mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="-ffunction-sections -Wl,-s -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="-ffunction-sections -Wl,-s -Wl,--gc-sections" -DWITH_GRPC=OFF -DSTATIC_BINARY=ON -DARCH_ID=aarch64
- make -j$(nproc) p2pool-salvium
- qemu-aarch64-static ./p2pool-salvium --test
- tar -czf p2pool-salvium-${RELEASE_VERSION}-linux-aarch64.tar.gz p2pool-salvium
artifacts:
paths:
- build/p2pool-salvium-${RELEASE_VERSION}-linux-aarch64.tar.gz
expire_in: 30 days
release-linux-riscv64:
stage: release
tags: [linux, x86_64, ubuntu_24.04]
timeout: 60 minutes
extends: .release_rules
variables:
CURL_FLAGS: *curl_flags
TOOLCHAIN: "-DCMAKE_TOOLCHAIN_FILE=$CI_PROJECT_DIR/cmake/riscv64_toolchain.cmake"
script:
- cd external/src/curl
- cmake . -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_C_FLAGS="-Os -flto=auto -ffunction-sections" ${CURL_FLAGS}
- make -j$(nproc) && cd ../../..
- cd external/src/libuv && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_C_FLAGS="-Os -flto=auto -ffunction-sections" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
- cd external/src/libzmq && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="-Os -flto=auto -ffunction-sections" -DCMAKE_CXX_FLAGS="-Os -flto=auto -ffunction-sections" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
- make -j$(nproc) && cd ../../../..
- mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release ${TOOLCHAIN} -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_FLAGS="-ffunction-sections -Wl,-s -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="-ffunction-sections -Wl,-s -Wl,--gc-sections" -DWITH_GRPC=OFF -DSTATIC_BINARY=ON -DARCH_ID=riscv64
- make -j$(nproc) p2pool-salvium
- qemu-riscv64-static ./p2pool-salvium --test
- tar -czf p2pool-salvium-${RELEASE_VERSION}-linux-riscv64.tar.gz p2pool-salvium
artifacts:
paths:
- build/p2pool-salvium-${RELEASE_VERSION}-linux-riscv64.tar.gz
expire_in: 30 days
release-windows-x64:
stage: release
tags: [windows, x86_64, win10pro]
timeout: 60 minutes
extends: .release_rules
variables:
GIT_SUBMODULE_STRATEGY: none
before_script:
- git submodule sync --recursive
- git submodule update --init --force --recursive -- external/src/RandomX external/src/curl external/src/libuv external/src/libzmq external/src/miniupnp external/src/rapidjson external/src/robin-hood-hashing
- git submodule update --init --force -- external/src/grpc
- git -C external/src/grpc submodule update --init --force -- third_party/boringssl-with-bazel third_party/abseil-cpp third_party/cares/cares third_party/re2 third_party/protobuf third_party/zlib third_party/googletest
script:
- |
$vsw = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
if (Test-Path $vsw) {
$MSBUILD = & $vsw -latest -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\amd64\MSBuild.exe | Select-Object -First 1
}
if (-not $MSBUILD) {
$candidates = @(
"${env:ProgramFiles}\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\amd64\MSBuild.exe",
"${env:ProgramFiles}\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin\amd64\MSBuild.exe",
"${env:ProgramFiles}\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\MSBuild.exe",
"${env:ProgramFiles}\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\MSBuild.exe"
)
foreach ($c in $candidates) { if (Test-Path $c) { $MSBUILD = $c; break } }
}
if (-not $MSBUILD) {
$MSBUILD = Get-ChildItem -Path "${env:ProgramFiles}","${env:ProgramFiles(x86)}" -Recurse -Filter "MSBuild.exe" -ErrorAction SilentlyContinue | Where-Object { $_.FullName -match "amd64" } | Select-Object -First 1 -ExpandProperty FullName
}
if (-not $MSBUILD) { throw "MSBuild not found anywhere on this runner" }
Write-Host "Using MSBuild: $MSBUILD"
git apply --verbose --ignore-whitespace --directory=external/src/grpc/third_party/boringssl-with-bazel patches/boringssl/win7.patch
New-Item -ItemType Directory -Force -Path build
cd build
cmake .. -G "Visual Studio 17 2022" -DCMAKE_SYSTEM_VERSION="10.0" -DWITH_RANDOMX=ON -DWITH_UPNP=ON -DWITH_GRPC=OFF -DWITH_TLS=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
& $MSBUILD -v:m /m /p:Configuration=Release p2pool-salvium.vcxproj
Release/p2pool-salvium.exe --test
artifacts:
paths:
- build/Release/p2pool-salvium.exe
expire_in: 30 days
release-macos-x64:
stage: release
tags: [saas-macos-medium-m1]
timeout: 90 minutes
extends: .release_rules
script:
- brew install cmake llvm@18
- cd external/src/curl
- cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-Os -flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option" ${CURL_FLAGS}
- make -j4 && cd ../../..
- cd external/src/libuv && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-Os -flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
- make -j4 && cd ../../../..
- cd external/src/libzmq && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_CXX_COMPILER="$(brew --prefix llvm@18)/bin/clang++" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-Os -flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option" -DCMAKE_CXX_FLAGS="-Os -flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
- make -j4 && cd ../../../..
- mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_CXX_COMPILER="$(brew --prefix llvm@18)/bin/clang++" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option" -DCMAKE_CXX_FLAGS="-flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option" -DCMAKE_ASM_FLAGS="-target x86_64-apple-macos10.13" -DSTATIC_LIBS=ON
- make -j4 p2pool-salvium
- strip p2pool-salvium
- ./p2pool-salvium --test
- tar -czf p2pool-salvium-${RELEASE_VERSION}-macos-x64.tar.gz p2pool-salvium
variables:
CURL_FLAGS: *curl_flags
artifacts:
paths:
- build/p2pool-salvium-${RELEASE_VERSION}-macos-x64.tar.gz
expire_in: 30 days
release-macos-aarch64:
stage: release
tags: [saas-macos-medium-m1]
timeout: 30 minutes
extends: .release_rules
script:
- brew install cmake llvm@18
- cd external/src/curl
- cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-Os -target arm64-apple-macos-11" ${CURL_FLAGS}
- make -j3 && cd ../../..
- cd external/src/libuv && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-Os -target arm64-apple-macos-11" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
- make -j3 && cd ../../../..
- cd external/src/libzmq && mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_CXX_COMPILER="$(brew --prefix llvm@18)/bin/clang++" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-Os -target arm64-apple-macos-11" -DCMAKE_CXX_FLAGS="-Os -target arm64-apple-macos-11" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
- make -j3 && cd ../../../..
- mkdir -p build && cd build
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@18)/bin/clang" -DCMAKE_CXX_COMPILER="$(brew --prefix llvm@18)/bin/clang++" -DCMAKE_AR="$(brew --prefix llvm@18)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@18)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-target arm64-apple-macos-11" -DCMAKE_CXX_FLAGS="-target arm64-apple-macos-11" -DSTATIC_LIBS=ON -DWITH_LTO=OFF -DARCH_ID=aarch64
- make -j3 p2pool-salvium
- strip p2pool-salvium
- ./p2pool-salvium --test
- tar -czf p2pool-salvium-${RELEASE_VERSION}-macos-aarch64.tar.gz p2pool-salvium
variables:
CURL_FLAGS: *curl_flags
artifacts:
paths:
- build/p2pool-salvium-${RELEASE_VERSION}-macos-aarch64.tar.gz
expire_in: 30 days
# --- Checksums & GitLab Release ---
create-release:
stage: release
tags: [linux, x86_64, debian_12]
needs:
- job: release-linux-x64
artifacts: true
- job: release-linux-x64-static
artifacts: true
- job: release-linux-aarch64
artifacts: true
- job: release-linux-riscv64
artifacts: true
- job: release-windows-x64
artifacts: true
- job: release-macos-x64
artifacts: true
- job: release-macos-aarch64
artifacts: true
rules:
- if: $RELEASE_VERSION
when: on_success
script:
# Package source (write to /tmp first to avoid 'file changed as we read it')
- cd .. && tar --exclude='.git' --exclude='build' -cJf /tmp/p2pool_source-${RELEASE_VERSION}.tar.xz p2pool-salvium && mv /tmp/p2pool_source-${RELEASE_VERSION}.tar.xz p2pool-salvium/ && cd p2pool-salvium
# Package Windows (MSVC outputs to build/Release/)
- cd build && zip p2pool-salvium-${RELEASE_VERSION}-windows-x64.zip Release/p2pool-salvium.exe && cd ..
# Generate checksums
- |
cd build
sha256sum p2pool-salvium-${RELEASE_VERSION}-linux-x64.tar.gz >> sha256sums.txt || true
sha256sum p2pool-salvium-${RELEASE_VERSION}-linux-x64-static.tar.gz >> sha256sums.txt || true
sha256sum p2pool-salvium-${RELEASE_VERSION}-linux-aarch64.tar.gz >> sha256sums.txt || true
sha256sum p2pool-salvium-${RELEASE_VERSION}-linux-riscv64.tar.gz >> sha256sums.txt || true
sha256sum p2pool-salvium-${RELEASE_VERSION}-windows-x64.zip >> sha256sums.txt || true
sha256sum p2pool-salvium-${RELEASE_VERSION}-macos-x64.tar.gz >> sha256sums.txt || true
sha256sum p2pool-salvium-${RELEASE_VERSION}-macos-aarch64.tar.gz >> sha256sums.txt || true
cd ..
sha256sum p2pool_source-${RELEASE_VERSION}.tar.xz >> build/sha256sums.txt || true
# Upload all artifacts to releases repo Generic Package Registry
- PKG_URL="${CI_API_V4_URL}/projects/${RELEASES_PROJECT_ID}/packages/generic/p2pool-salvium/${RELEASE_VERSION}"
- |
upload() {
local file="$1"
local name
name="$(basename "$file")"
if [ ! -f "$file" ]; then echo "SKIP (missing): ${name}"; return 1; fi
echo "Uploading ${name}..."
curl --fail --silent --show-error \
--header "PRIVATE-TOKEN: ${RELEASES_TOKEN}" \
--upload-file "${file}" \
"${PKG_URL}/${name}" && echo " OK" || { echo " FAILED"; return 1; }
}
upload build/p2pool-salvium-${RELEASE_VERSION}-linux-x64.tar.gz || true
upload build/p2pool-salvium-${RELEASE_VERSION}-linux-x64-static.tar.gz || true
upload build/p2pool-salvium-${RELEASE_VERSION}-linux-aarch64.tar.gz || true
upload build/p2pool-salvium-${RELEASE_VERSION}-linux-riscv64.tar.gz || true
upload build/p2pool-salvium-${RELEASE_VERSION}-windows-x64.zip || true
upload build/p2pool-salvium-${RELEASE_VERSION}-macos-x64.tar.gz || true
upload build/p2pool-salvium-${RELEASE_VERSION}-macos-aarch64.tar.gz || true
upload build/sha256sums.txt || true
upload p2pool_source-${RELEASE_VERSION}.tar.xz || true
# Build release description
- |
cat > /tmp/release_desc.md <<EOF
## P2Pool Salvium ${RELEASE_VERSION}
### Downloads
| Platform | Architecture | File |
|----------|--------------|------|
| Linux | x64 (glibc) | p2pool-salvium-${RELEASE_VERSION}-linux-x64.tar.gz |
| Linux | x64 (static/musl) | p2pool-salvium-${RELEASE_VERSION}-linux-x64-static.tar.gz |
| Linux | aarch64 | p2pool-salvium-${RELEASE_VERSION}-linux-aarch64.tar.gz |
| Linux | riscv64 | p2pool-salvium-${RELEASE_VERSION}-linux-riscv64.tar.gz |
| macOS | x64 (Intel) | p2pool-salvium-${RELEASE_VERSION}-macos-x64.tar.gz |
| macOS | aarch64 (Apple Silicon) | p2pool-salvium-${RELEASE_VERSION}-macos-aarch64.tar.gz |
| Windows | x64 | p2pool-salvium-${RELEASE_VERSION}-windows-x64.zip |
### Verify Downloads
\`\`\`
sha256sum -c sha256sums.txt
\`\`\`
EOF
# Create release in the releases repo via API
- |
jq -n \
--arg tag "${RELEASE_VERSION}" \
--arg name "P2Pool Salvium ${RELEASE_VERSION}" \
--rawfile desc /tmp/release_desc.md \
--arg pkg "${PKG_URL}" \
'{
tag_name: $tag,
name: $name,
ref: "main",
description: $desc,
assets: { links: [
{ name: "Linux x64 (glibc)", url: ($pkg + "/p2pool-salvium-" + $tag + "-linux-x64.tar.gz"), link_type: "package" },
{ name: "Linux x64 (static/musl)", url: ($pkg + "/p2pool-salvium-" + $tag + "-linux-x64-static.tar.gz"), link_type: "package" },
{ name: "Linux aarch64", url: ($pkg + "/p2pool-salvium-" + $tag + "-linux-aarch64.tar.gz"), link_type: "package" },
{ name: "Linux riscv64", url: ($pkg + "/p2pool-salvium-" + $tag + "-linux-riscv64.tar.gz"), link_type: "package" },
{ name: "Windows x64", url: ($pkg + "/p2pool-salvium-" + $tag + "-windows-x64.zip"), link_type: "package" },
{ name: "macOS x64 (Intel)", url: ($pkg + "/p2pool-salvium-" + $tag + "-macos-x64.tar.gz"), link_type: "package" },
{ name: "macOS aarch64 (Apple Silicon)", url: ($pkg + "/p2pool-salvium-" + $tag + "-macos-aarch64.tar.gz"), link_type: "package" },
{ name: "SHA256 Checksums", url: ($pkg + "/sha256sums.txt"), link_type: "other" },
{ name: "Source", url: ($pkg + "/p2pool_source-" + $tag + ".tar.xz"), link_type: "other" }
]}
}' > /tmp/release.json
curl --fail --header "PRIVATE-TOKEN: ${RELEASES_TOKEN}" \
--header "Content-Type: application/json" \
--request POST \
"${CI_API_V4_URL}/projects/${RELEASES_PROJECT_ID}/releases" \
--data @/tmp/release.json