github.com/ethereum/go-ethereum@v1.16.1/crypto/secp256k1/libsecp256k1/.github/workflows/ci.yml (about) 1 name: CI 2 on: 3 pull_request: 4 push: 5 branches: 6 - '**' 7 tags-ignore: 8 - '**' 9 10 concurrency: 11 group: ${{ github.event_name != 'pull_request' && github.run_id || github.ref }} 12 cancel-in-progress: true 13 14 env: 15 ### compiler options 16 HOST: 17 WRAPPER_CMD: 18 # Specific warnings can be disabled with -Wno-error=foo. 19 # -pedantic-errors is not equivalent to -Werror=pedantic and thus not implied by -Werror according to the GCC manual. 20 WERROR_CFLAGS: '-Werror -pedantic-errors' 21 MAKEFLAGS: '-j4' 22 BUILD: 'check' 23 ### secp256k1 config 24 ECMULTWINDOW: 15 25 ECMULTGENKB: 86 26 ASM: 'no' 27 WIDEMUL: 'auto' 28 WITH_VALGRIND: 'yes' 29 EXTRAFLAGS: 30 ### secp256k1 modules 31 EXPERIMENTAL: 'no' 32 ECDH: 'no' 33 RECOVERY: 'no' 34 EXTRAKEYS: 'no' 35 SCHNORRSIG: 'no' 36 MUSIG: 'no' 37 ELLSWIFT: 'no' 38 ### test options 39 SECP256K1_TEST_ITERS: 64 40 BENCH: 'yes' 41 SECP256K1_BENCH_ITERS: 2 42 CTIMETESTS: 'yes' 43 # Compile and run the examples. 44 EXAMPLES: 'yes' 45 46 jobs: 47 docker_cache: 48 name: "Build Docker image" 49 runs-on: ubuntu-latest 50 steps: 51 - name: Set up Docker Buildx 52 uses: docker/setup-buildx-action@v3 53 with: 54 # See: https://github.com/moby/buildkit/issues/3969. 55 driver-opts: | 56 network=host 57 58 - name: Build container 59 uses: docker/build-push-action@v5 60 with: 61 file: ./ci/linux-debian.Dockerfile 62 tags: linux-debian-image 63 cache-from: type=gha 64 cache-to: type=gha,mode=min 65 66 linux_debian: 67 name: "x86_64: Linux (Debian stable)" 68 runs-on: ubuntu-latest 69 needs: docker_cache 70 71 strategy: 72 fail-fast: false 73 matrix: 74 configuration: 75 - env_vars: { WIDEMUL: 'int64', RECOVERY: 'yes' } 76 - env_vars: { WIDEMUL: 'int64', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes' } 77 - env_vars: { WIDEMUL: 'int128' } 78 - env_vars: { WIDEMUL: 'int128_struct', ELLSWIFT: 'yes' } 79 - env_vars: { WIDEMUL: 'int128', RECOVERY: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes' } 80 - env_vars: { WIDEMUL: 'int128', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes' } 81 - env_vars: { WIDEMUL: 'int128', ASM: 'x86_64', ELLSWIFT: 'yes' } 82 - env_vars: { RECOVERY: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes' } 83 - env_vars: { CTIMETESTS: 'no', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', CPPFLAGS: '-DVERIFY' } 84 - env_vars: { BUILD: 'distcheck', WITH_VALGRIND: 'no', CTIMETESTS: 'no', BENCH: 'no' } 85 - env_vars: { CPPFLAGS: '-DDETERMINISTIC' } 86 - env_vars: { CFLAGS: '-O0', CTIMETESTS: 'no' } 87 - env_vars: { CFLAGS: '-O1', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes' } 88 - env_vars: { ECMULTGENKB: 2, ECMULTWINDOW: 2 } 89 - env_vars: { ECMULTGENKB: 86, ECMULTWINDOW: 4 } 90 cc: 91 - 'gcc' 92 - 'clang' 93 - 'gcc-snapshot' 94 - 'clang-snapshot' 95 96 env: 97 CC: ${{ matrix.cc }} 98 99 steps: 100 - name: Checkout 101 uses: actions/checkout@v4 102 103 - name: CI script 104 env: ${{ matrix.configuration.env_vars }} 105 uses: ./.github/actions/run-in-docker-action 106 with: 107 dockerfile: ./ci/linux-debian.Dockerfile 108 tag: linux-debian-image 109 110 - run: cat tests.log || true 111 if: ${{ always() }} 112 - run: cat noverify_tests.log || true 113 if: ${{ always() }} 114 - run: cat exhaustive_tests.log || true 115 if: ${{ always() }} 116 - run: cat ctime_tests.log || true 117 if: ${{ always() }} 118 - run: cat bench.log || true 119 if: ${{ always() }} 120 - run: cat config.log || true 121 if: ${{ always() }} 122 - run: cat test_env.log || true 123 if: ${{ always() }} 124 - name: CI env 125 run: env 126 if: ${{ always() }} 127 128 i686_debian: 129 name: "i686: Linux (Debian stable)" 130 runs-on: ubuntu-latest 131 needs: docker_cache 132 133 strategy: 134 fail-fast: false 135 matrix: 136 cc: 137 - 'i686-linux-gnu-gcc' 138 - 'clang --target=i686-pc-linux-gnu -isystem /usr/i686-linux-gnu/include' 139 140 env: 141 HOST: 'i686-linux-gnu' 142 ECDH: 'yes' 143 RECOVERY: 'yes' 144 EXTRAKEYS: 'yes' 145 SCHNORRSIG: 'yes' 146 MUSIG: 'yes' 147 ELLSWIFT: 'yes' 148 CC: ${{ matrix.cc }} 149 150 steps: 151 - name: Checkout 152 uses: actions/checkout@v4 153 154 - name: CI script 155 uses: ./.github/actions/run-in-docker-action 156 with: 157 dockerfile: ./ci/linux-debian.Dockerfile 158 tag: linux-debian-image 159 160 - run: cat tests.log || true 161 if: ${{ always() }} 162 - run: cat noverify_tests.log || true 163 if: ${{ always() }} 164 - run: cat exhaustive_tests.log || true 165 if: ${{ always() }} 166 - run: cat ctime_tests.log || true 167 if: ${{ always() }} 168 - run: cat bench.log || true 169 if: ${{ always() }} 170 - run: cat config.log || true 171 if: ${{ always() }} 172 - run: cat test_env.log || true 173 if: ${{ always() }} 174 - name: CI env 175 run: env 176 if: ${{ always() }} 177 178 s390x_debian: 179 name: "s390x (big-endian): Linux (Debian stable, QEMU)" 180 runs-on: ubuntu-latest 181 needs: docker_cache 182 183 env: 184 WRAPPER_CMD: 'qemu-s390x' 185 SECP256K1_TEST_ITERS: 16 186 HOST: 's390x-linux-gnu' 187 WITH_VALGRIND: 'no' 188 ECDH: 'yes' 189 RECOVERY: 'yes' 190 EXTRAKEYS: 'yes' 191 SCHNORRSIG: 'yes' 192 MUSIG: 'yes' 193 ELLSWIFT: 'yes' 194 CTIMETESTS: 'no' 195 196 steps: 197 - name: Checkout 198 uses: actions/checkout@v4 199 200 - name: CI script 201 uses: ./.github/actions/run-in-docker-action 202 with: 203 dockerfile: ./ci/linux-debian.Dockerfile 204 tag: linux-debian-image 205 206 - run: cat tests.log || true 207 if: ${{ always() }} 208 - run: cat noverify_tests.log || true 209 if: ${{ always() }} 210 - run: cat exhaustive_tests.log || true 211 if: ${{ always() }} 212 - run: cat ctime_tests.log || true 213 if: ${{ always() }} 214 - run: cat bench.log || true 215 if: ${{ always() }} 216 - run: cat config.log || true 217 if: ${{ always() }} 218 - run: cat test_env.log || true 219 if: ${{ always() }} 220 - name: CI env 221 run: env 222 if: ${{ always() }} 223 224 arm32_debian: 225 name: "ARM32: Linux (Debian stable, QEMU)" 226 runs-on: ubuntu-latest 227 needs: docker_cache 228 229 strategy: 230 fail-fast: false 231 matrix: 232 configuration: 233 - env_vars: {} 234 - env_vars: { EXPERIMENTAL: 'yes', ASM: 'arm32' } 235 236 env: 237 WRAPPER_CMD: 'qemu-arm' 238 SECP256K1_TEST_ITERS: 16 239 HOST: 'arm-linux-gnueabihf' 240 WITH_VALGRIND: 'no' 241 ECDH: 'yes' 242 RECOVERY: 'yes' 243 EXTRAKEYS: 'yes' 244 SCHNORRSIG: 'yes' 245 MUSIG: 'yes' 246 ELLSWIFT: 'yes' 247 CTIMETESTS: 'no' 248 249 steps: 250 - name: Checkout 251 uses: actions/checkout@v4 252 253 - name: CI script 254 env: ${{ matrix.configuration.env_vars }} 255 uses: ./.github/actions/run-in-docker-action 256 with: 257 dockerfile: ./ci/linux-debian.Dockerfile 258 tag: linux-debian-image 259 260 - run: cat tests.log || true 261 if: ${{ always() }} 262 - run: cat noverify_tests.log || true 263 if: ${{ always() }} 264 - run: cat exhaustive_tests.log || true 265 if: ${{ always() }} 266 - run: cat ctime_tests.log || true 267 if: ${{ always() }} 268 - run: cat bench.log || true 269 if: ${{ always() }} 270 - run: cat config.log || true 271 if: ${{ always() }} 272 - run: cat test_env.log || true 273 if: ${{ always() }} 274 - name: CI env 275 run: env 276 if: ${{ always() }} 277 278 arm64_debian: 279 name: "ARM64: Linux (Debian stable, QEMU)" 280 runs-on: ubuntu-latest 281 needs: docker_cache 282 283 env: 284 WRAPPER_CMD: 'qemu-aarch64' 285 SECP256K1_TEST_ITERS: 16 286 HOST: 'aarch64-linux-gnu' 287 WITH_VALGRIND: 'no' 288 ECDH: 'yes' 289 RECOVERY: 'yes' 290 EXTRAKEYS: 'yes' 291 SCHNORRSIG: 'yes' 292 MUSIG: 'yes' 293 ELLSWIFT: 'yes' 294 CTIMETESTS: 'no' 295 296 strategy: 297 fail-fast: false 298 matrix: 299 configuration: 300 - env_vars: { } # gcc 301 - env_vars: # clang 302 CC: 'clang --target=aarch64-linux-gnu' 303 - env_vars: # clang-snapshot 304 CC: 'clang-snapshot --target=aarch64-linux-gnu' 305 306 steps: 307 - name: Checkout 308 uses: actions/checkout@v4 309 310 - name: CI script 311 env: ${{ matrix.configuration.env_vars }} 312 uses: ./.github/actions/run-in-docker-action 313 with: 314 dockerfile: ./ci/linux-debian.Dockerfile 315 tag: linux-debian-image 316 317 - run: cat tests.log || true 318 if: ${{ always() }} 319 - run: cat noverify_tests.log || true 320 if: ${{ always() }} 321 - run: cat exhaustive_tests.log || true 322 if: ${{ always() }} 323 - run: cat ctime_tests.log || true 324 if: ${{ always() }} 325 - run: cat bench.log || true 326 if: ${{ always() }} 327 - run: cat config.log || true 328 if: ${{ always() }} 329 - run: cat test_env.log || true 330 if: ${{ always() }} 331 - name: CI env 332 run: env 333 if: ${{ always() }} 334 335 ppc64le_debian: 336 name: "ppc64le: Linux (Debian stable, QEMU)" 337 runs-on: ubuntu-latest 338 needs: docker_cache 339 340 env: 341 WRAPPER_CMD: 'qemu-ppc64le' 342 SECP256K1_TEST_ITERS: 16 343 HOST: 'powerpc64le-linux-gnu' 344 WITH_VALGRIND: 'no' 345 ECDH: 'yes' 346 RECOVERY: 'yes' 347 EXTRAKEYS: 'yes' 348 SCHNORRSIG: 'yes' 349 MUSIG: 'yes' 350 ELLSWIFT: 'yes' 351 CTIMETESTS: 'no' 352 353 steps: 354 - name: Checkout 355 uses: actions/checkout@v4 356 357 - name: CI script 358 uses: ./.github/actions/run-in-docker-action 359 with: 360 dockerfile: ./ci/linux-debian.Dockerfile 361 tag: linux-debian-image 362 363 - run: cat tests.log || true 364 if: ${{ always() }} 365 - run: cat noverify_tests.log || true 366 if: ${{ always() }} 367 - run: cat exhaustive_tests.log || true 368 if: ${{ always() }} 369 - run: cat ctime_tests.log || true 370 if: ${{ always() }} 371 - run: cat bench.log || true 372 if: ${{ always() }} 373 - run: cat config.log || true 374 if: ${{ always() }} 375 - run: cat test_env.log || true 376 if: ${{ always() }} 377 - name: CI env 378 run: env 379 if: ${{ always() }} 380 381 valgrind_debian: 382 name: "Valgrind (memcheck)" 383 runs-on: ubuntu-latest 384 needs: docker_cache 385 386 strategy: 387 fail-fast: false 388 matrix: 389 configuration: 390 - env_vars: { CC: 'clang', ASM: 'auto' } 391 - env_vars: { CC: 'i686-linux-gnu-gcc', HOST: 'i686-linux-gnu', ASM: 'auto' } 392 - env_vars: { CC: 'clang', ASM: 'no', ECMULTGENKB: 2, ECMULTWINDOW: 2 } 393 - env_vars: { CC: 'i686-linux-gnu-gcc', HOST: 'i686-linux-gnu', ASM: 'no', ECMULTGENKB: 2, ECMULTWINDOW: 2 } 394 395 env: 396 # The `--error-exitcode` is required to make the test fail if valgrind found errors, 397 # otherwise it will return 0 (https://www.valgrind.org/docs/manual/manual-core.html). 398 WRAPPER_CMD: 'valgrind --error-exitcode=42' 399 ECDH: 'yes' 400 RECOVERY: 'yes' 401 EXTRAKEYS: 'yes' 402 SCHNORRSIG: 'yes' 403 MUSIG: 'yes' 404 ELLSWIFT: 'yes' 405 CTIMETESTS: 'no' 406 SECP256K1_TEST_ITERS: 2 407 408 steps: 409 - name: Checkout 410 uses: actions/checkout@v4 411 412 - name: CI script 413 env: ${{ matrix.configuration.env_vars }} 414 uses: ./.github/actions/run-in-docker-action 415 with: 416 dockerfile: ./ci/linux-debian.Dockerfile 417 tag: linux-debian-image 418 419 - run: cat tests.log || true 420 if: ${{ always() }} 421 - run: cat noverify_tests.log || true 422 if: ${{ always() }} 423 - run: cat exhaustive_tests.log || true 424 if: ${{ always() }} 425 - run: cat ctime_tests.log || true 426 if: ${{ always() }} 427 - run: cat bench.log || true 428 if: ${{ always() }} 429 - run: cat config.log || true 430 if: ${{ always() }} 431 - run: cat test_env.log || true 432 if: ${{ always() }} 433 - name: CI env 434 run: env 435 if: ${{ always() }} 436 437 sanitizers_debian: 438 name: "UBSan, ASan, LSan" 439 runs-on: ubuntu-latest 440 needs: docker_cache 441 442 strategy: 443 fail-fast: false 444 matrix: 445 configuration: 446 - env_vars: { CC: 'clang', ASM: 'auto' } 447 - env_vars: { CC: 'i686-linux-gnu-gcc', HOST: 'i686-linux-gnu', ASM: 'auto' } 448 - env_vars: { CC: 'clang', ASM: 'no', ECMULTGENKB: 2, ECMULTWINDOW: 2 } 449 - env_vars: { CC: 'i686-linux-gnu-gcc', HOST: 'i686-linux-gnu', ASM: 'no', ECMULTGENKB: 2, ECMULTWINDOW: 2 } 450 451 env: 452 ECDH: 'yes' 453 RECOVERY: 'yes' 454 EXTRAKEYS: 'yes' 455 SCHNORRSIG: 'yes' 456 MUSIG: 'yes' 457 ELLSWIFT: 'yes' 458 CTIMETESTS: 'no' 459 CFLAGS: '-fsanitize=undefined,address -g' 460 UBSAN_OPTIONS: 'print_stacktrace=1:halt_on_error=1' 461 ASAN_OPTIONS: 'strict_string_checks=1:detect_stack_use_after_return=1:detect_leaks=1' 462 LSAN_OPTIONS: 'use_unaligned=1' 463 SECP256K1_TEST_ITERS: 32 464 465 steps: 466 - name: Checkout 467 uses: actions/checkout@v4 468 469 - name: CI script 470 env: ${{ matrix.configuration.env_vars }} 471 uses: ./.github/actions/run-in-docker-action 472 with: 473 dockerfile: ./ci/linux-debian.Dockerfile 474 tag: linux-debian-image 475 476 - run: cat tests.log || true 477 if: ${{ always() }} 478 - run: cat noverify_tests.log || true 479 if: ${{ always() }} 480 - run: cat exhaustive_tests.log || true 481 if: ${{ always() }} 482 - run: cat ctime_tests.log || true 483 if: ${{ always() }} 484 - run: cat bench.log || true 485 if: ${{ always() }} 486 - run: cat config.log || true 487 if: ${{ always() }} 488 - run: cat test_env.log || true 489 if: ${{ always() }} 490 - name: CI env 491 run: env 492 if: ${{ always() }} 493 494 msan_debian: 495 name: "MSan" 496 runs-on: ubuntu-latest 497 needs: docker_cache 498 499 strategy: 500 fail-fast: false 501 matrix: 502 configuration: 503 - env_vars: 504 CTIMETESTS: 'yes' 505 CFLAGS: '-fsanitize=memory -fsanitize-recover=memory -g' 506 - env_vars: 507 ECMULTGENKB: 2 508 ECMULTWINDOW: 2 509 CTIMETESTS: 'yes' 510 CFLAGS: '-fsanitize=memory -fsanitize-recover=memory -g -O3' 511 - env_vars: 512 # -fsanitize-memory-param-retval is clang's default, but our build system disables it 513 # when ctime_tests when enabled. 514 CFLAGS: '-fsanitize=memory -fsanitize-recover=memory -fsanitize-memory-param-retval -g' 515 CTIMETESTS: 'no' 516 517 env: 518 ECDH: 'yes' 519 RECOVERY: 'yes' 520 EXTRAKEYS: 'yes' 521 SCHNORRSIG: 'yes' 522 MUSIG: 'yes' 523 ELLSWIFT: 'yes' 524 CC: 'clang' 525 SECP256K1_TEST_ITERS: 32 526 ASM: 'no' 527 WITH_VALGRIND: 'no' 528 529 steps: 530 - name: Checkout 531 uses: actions/checkout@v4 532 533 - name: CI script 534 env: ${{ matrix.configuration.env_vars }} 535 uses: ./.github/actions/run-in-docker-action 536 with: 537 dockerfile: ./ci/linux-debian.Dockerfile 538 tag: linux-debian-image 539 540 - run: cat tests.log || true 541 if: ${{ always() }} 542 - run: cat noverify_tests.log || true 543 if: ${{ always() }} 544 - run: cat exhaustive_tests.log || true 545 if: ${{ always() }} 546 - run: cat ctime_tests.log || true 547 if: ${{ always() }} 548 - run: cat bench.log || true 549 if: ${{ always() }} 550 - run: cat config.log || true 551 if: ${{ always() }} 552 - run: cat test_env.log || true 553 if: ${{ always() }} 554 - name: CI env 555 run: env 556 if: ${{ always() }} 557 558 mingw_debian: 559 name: ${{ matrix.configuration.job_name }} 560 runs-on: ubuntu-latest 561 needs: docker_cache 562 563 env: 564 WRAPPER_CMD: 'wine' 565 WITH_VALGRIND: 'no' 566 ECDH: 'yes' 567 RECOVERY: 'yes' 568 EXTRAKEYS: 'yes' 569 SCHNORRSIG: 'yes' 570 MUSIG: 'yes' 571 ELLSWIFT: 'yes' 572 CTIMETESTS: 'no' 573 574 strategy: 575 fail-fast: false 576 matrix: 577 configuration: 578 - job_name: 'x86_64 (mingw32-w64): Windows (Debian stable, Wine)' 579 env_vars: 580 HOST: 'x86_64-w64-mingw32' 581 - job_name: 'i686 (mingw32-w64): Windows (Debian stable, Wine)' 582 env_vars: 583 HOST: 'i686-w64-mingw32' 584 585 steps: 586 - name: Checkout 587 uses: actions/checkout@v4 588 589 - name: CI script 590 env: ${{ matrix.configuration.env_vars }} 591 uses: ./.github/actions/run-in-docker-action 592 with: 593 dockerfile: ./ci/linux-debian.Dockerfile 594 tag: linux-debian-image 595 596 - run: cat tests.log || true 597 if: ${{ always() }} 598 - run: cat noverify_tests.log || true 599 if: ${{ always() }} 600 - run: cat exhaustive_tests.log || true 601 if: ${{ always() }} 602 - run: cat ctime_tests.log || true 603 if: ${{ always() }} 604 - run: cat bench.log || true 605 if: ${{ always() }} 606 - run: cat config.log || true 607 if: ${{ always() }} 608 - run: cat test_env.log || true 609 if: ${{ always() }} 610 - name: CI env 611 run: env 612 if: ${{ always() }} 613 614 x86_64-macos-native: 615 name: "x86_64: macOS Ventura, Valgrind" 616 # See: https://github.com/actions/runner-images#available-images. 617 runs-on: macos-13 618 619 env: 620 CC: 'clang' 621 HOMEBREW_NO_AUTO_UPDATE: 1 622 HOMEBREW_NO_INSTALL_CLEANUP: 1 623 624 strategy: 625 fail-fast: false 626 matrix: 627 env_vars: 628 - { WIDEMUL: 'int64', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes' } 629 - { WIDEMUL: 'int128_struct', ECMULTGENKB: 2, ECMULTWINDOW: 4 } 630 - { WIDEMUL: 'int128', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes' } 631 - { WIDEMUL: 'int128', RECOVERY: 'yes' } 632 - { WIDEMUL: 'int128', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes' } 633 - { WIDEMUL: 'int128', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', CC: 'gcc' } 634 - { WIDEMUL: 'int128', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', WRAPPER_CMD: 'valgrind --error-exitcode=42', SECP256K1_TEST_ITERS: 2 } 635 - { WIDEMUL: 'int128', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', CC: 'gcc', WRAPPER_CMD: 'valgrind --error-exitcode=42', SECP256K1_TEST_ITERS: 2 } 636 - { WIDEMUL: 'int128', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', MUSIG: 'yes', ELLSWIFT: 'yes', CPPFLAGS: '-DVERIFY', CTIMETESTS: 'no' } 637 - BUILD: 'distcheck' 638 639 steps: 640 - name: Checkout 641 uses: actions/checkout@v4 642 643 - name: Install Homebrew packages 644 run: | 645 brew install --quiet automake libtool gcc 646 ln -s $(brew --prefix gcc)/bin/gcc-?? /usr/local/bin/gcc 647 648 - name: Install and cache Valgrind 649 uses: ./.github/actions/install-homebrew-valgrind 650 651 - name: CI script 652 env: ${{ matrix.env_vars }} 653 run: ./ci/ci.sh 654 655 - run: cat tests.log || true 656 if: ${{ always() }} 657 - run: cat noverify_tests.log || true 658 if: ${{ always() }} 659 - run: cat exhaustive_tests.log || true 660 if: ${{ always() }} 661 - run: cat ctime_tests.log || true 662 if: ${{ always() }} 663 - run: cat bench.log || true 664 if: ${{ always() }} 665 - run: cat config.log || true 666 if: ${{ always() }} 667 - run: cat test_env.log || true 668 if: ${{ always() }} 669 - name: CI env 670 run: env 671 if: ${{ always() }} 672 673 arm64-macos-native: 674 name: "ARM64: macOS Sonoma" 675 # See: https://github.com/actions/runner-images#available-images. 676 runs-on: macos-14 677 678 env: 679 CC: 'clang' 680 HOMEBREW_NO_AUTO_UPDATE: 1 681 HOMEBREW_NO_INSTALL_CLEANUP: 1 682 WITH_VALGRIND: 'no' 683 CTIMETESTS: 'no' 684 685 strategy: 686 fail-fast: false 687 matrix: 688 env_vars: 689 - { WIDEMUL: 'int64', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', ELLSWIFT: 'yes' } 690 - { WIDEMUL: 'int128_struct', ECMULTGENPRECISION: 2, ECMULTWINDOW: 4 } 691 - { WIDEMUL: 'int128', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', ELLSWIFT: 'yes' } 692 - { WIDEMUL: 'int128', RECOVERY: 'yes' } 693 - { WIDEMUL: 'int128', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', ELLSWIFT: 'yes' } 694 - { WIDEMUL: 'int128', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', ELLSWIFT: 'yes', CC: 'gcc' } 695 - { WIDEMUL: 'int128', RECOVERY: 'yes', ECDH: 'yes', EXTRAKEYS: 'yes', SCHNORRSIG: 'yes', ELLSWIFT: 'yes', CPPFLAGS: '-DVERIFY' } 696 - BUILD: 'distcheck' 697 698 steps: 699 - name: Checkout 700 uses: actions/checkout@v4 701 702 - name: Install Homebrew packages 703 run: | 704 brew install --quiet automake libtool gcc 705 ln -s $(brew --prefix gcc)/bin/gcc-?? /usr/local/bin/gcc 706 707 - name: CI script 708 env: ${{ matrix.env_vars }} 709 run: ./ci/ci.sh 710 711 - run: cat tests.log || true 712 if: ${{ always() }} 713 - run: cat noverify_tests.log || true 714 if: ${{ always() }} 715 - run: cat exhaustive_tests.log || true 716 if: ${{ always() }} 717 - run: cat ctime_tests.log || true 718 if: ${{ always() }} 719 - run: cat bench.log || true 720 if: ${{ always() }} 721 - run: cat config.log || true 722 if: ${{ always() }} 723 - run: cat test_env.log || true 724 if: ${{ always() }} 725 - name: CI env 726 run: env 727 if: ${{ always() }} 728 729 win64-native: 730 name: ${{ matrix.configuration.job_name }} 731 # See: https://github.com/actions/runner-images#available-images. 732 runs-on: windows-2022 733 734 strategy: 735 fail-fast: false 736 matrix: 737 configuration: 738 - job_name: 'x64 (MSVC): Windows (VS 2022, shared)' 739 cmake_options: '-A x64 -DBUILD_SHARED_LIBS=ON' 740 - job_name: 'x64 (MSVC): Windows (VS 2022, static)' 741 cmake_options: '-A x64 -DBUILD_SHARED_LIBS=OFF' 742 - job_name: 'x64 (MSVC): Windows (VS 2022, int128_struct)' 743 cmake_options: '-A x64 -DSECP256K1_TEST_OVERRIDE_WIDE_MULTIPLY=int128_struct' 744 - job_name: 'x64 (MSVC): Windows (VS 2022, int128_struct with __(u)mulh)' 745 cmake_options: '-A x64 -DSECP256K1_TEST_OVERRIDE_WIDE_MULTIPLY=int128_struct' 746 cpp_flags: '/DSECP256K1_MSVC_MULH_TEST_OVERRIDE' 747 - job_name: 'x86 (MSVC): Windows (VS 2022)' 748 cmake_options: '-A Win32' 749 750 steps: 751 - name: Checkout 752 uses: actions/checkout@v4 753 754 - name: Generate buildsystem 755 run: cmake -E env CFLAGS="/WX ${{ matrix.configuration.cpp_flags }}" cmake -B build -DSECP256K1_ENABLE_MODULE_RECOVERY=ON -DSECP256K1_BUILD_EXAMPLES=ON ${{ matrix.configuration.cmake_options }} 756 757 - name: Build 758 run: cmake --build build --config RelWithDebInfo -- /p:UseMultiToolTask=true /maxCpuCount 759 760 - name: Binaries info 761 # Use the bash shell included with Git for Windows. 762 shell: bash 763 run: | 764 cd build/bin/RelWithDebInfo && file *tests.exe bench*.exe libsecp256k1-*.dll || true 765 766 - name: Check 767 run: | 768 ctest -C RelWithDebInfo --test-dir build -j ([int]$env:NUMBER_OF_PROCESSORS + 1) 769 build\bin\RelWithDebInfo\bench_ecmult.exe 770 build\bin\RelWithDebInfo\bench_internal.exe 771 build\bin\RelWithDebInfo\bench.exe 772 773 win64-native-headers: 774 name: "x64 (MSVC): C++ (public headers)" 775 # See: https://github.com/actions/runner-images#available-images. 776 runs-on: windows-2022 777 778 steps: 779 - name: Checkout 780 uses: actions/checkout@v4 781 782 - name: Add cl.exe to PATH 783 uses: ilammy/msvc-dev-cmd@v1 784 785 - name: C++ (public headers) 786 run: | 787 cl.exe -c -WX -TP include/*.h 788 789 cxx_fpermissive_debian: 790 name: "C++ -fpermissive (entire project)" 791 runs-on: ubuntu-latest 792 needs: docker_cache 793 794 env: 795 CC: 'g++' 796 CFLAGS: '-fpermissive -g' 797 CPPFLAGS: '-DSECP256K1_CPLUSPLUS_TEST_OVERRIDE' 798 WERROR_CFLAGS: 799 ECDH: 'yes' 800 RECOVERY: 'yes' 801 EXTRAKEYS: 'yes' 802 SCHNORRSIG: 'yes' 803 MUSIG: 'yes' 804 ELLSWIFT: 'yes' 805 806 steps: 807 - name: Checkout 808 uses: actions/checkout@v4 809 810 - name: CI script 811 uses: ./.github/actions/run-in-docker-action 812 with: 813 dockerfile: ./ci/linux-debian.Dockerfile 814 tag: linux-debian-image 815 816 - run: cat tests.log || true 817 if: ${{ always() }} 818 - run: cat noverify_tests.log || true 819 if: ${{ always() }} 820 - run: cat exhaustive_tests.log || true 821 if: ${{ always() }} 822 - run: cat ctime_tests.log || true 823 if: ${{ always() }} 824 - run: cat bench.log || true 825 if: ${{ always() }} 826 - run: cat config.log || true 827 if: ${{ always() }} 828 - run: cat test_env.log || true 829 if: ${{ always() }} 830 - name: CI env 831 run: env 832 if: ${{ always() }} 833 834 cxx_headers_debian: 835 name: "C++ (public headers)" 836 runs-on: ubuntu-latest 837 needs: docker_cache 838 839 steps: 840 - name: Checkout 841 uses: actions/checkout@v4 842 843 - name: CI script 844 uses: ./.github/actions/run-in-docker-action 845 with: 846 dockerfile: ./ci/linux-debian.Dockerfile 847 tag: linux-debian-image 848 command: | 849 g++ -Werror include/*.h 850 clang -Werror -x c++-header include/*.h 851 852 sage: 853 name: "SageMath prover" 854 runs-on: ubuntu-latest 855 container: 856 image: sagemath/sagemath:latest 857 options: --user root 858 859 steps: 860 - name: Checkout 861 uses: actions/checkout@v4 862 863 - name: CI script 864 run: | 865 cd sage 866 sage prove_group_implementations.sage 867 868 release: 869 runs-on: ubuntu-latest 870 871 steps: 872 - name: Checkout 873 uses: actions/checkout@v4 874 875 - run: ./autogen.sh && ./configure --enable-dev-mode && make distcheck 876 877 - name: Check installation with Autotools 878 env: 879 CI_INSTALL: ${{ runner.temp }}/${{ github.run_id }}${{ github.action }}/install 880 run: | 881 ./autogen.sh && ./configure --prefix=${{ env.CI_INSTALL }} && make clean && make install && ls -RlAh ${{ env.CI_INSTALL }} 882 gcc -o ecdsa examples/ecdsa.c $(PKG_CONFIG_PATH=${{ env.CI_INSTALL }}/lib/pkgconfig pkg-config --cflags --libs libsecp256k1) -Wl,-rpath,"${{ env.CI_INSTALL }}/lib" && ./ecdsa 883 884 - name: Check installation with CMake 885 env: 886 CI_BUILD: ${{ runner.temp }}/${{ github.run_id }}${{ github.action }}/build 887 CI_INSTALL: ${{ runner.temp }}/${{ github.run_id }}${{ github.action }}/install 888 run: | 889 cmake -B ${{ env.CI_BUILD }} -DCMAKE_INSTALL_PREFIX=${{ env.CI_INSTALL }} && cmake --build ${{ env.CI_BUILD }} && cmake --install ${{ env.CI_BUILD }} && ls -RlAh ${{ env.CI_INSTALL }} 890 gcc -o ecdsa examples/ecdsa.c -I ${{ env.CI_INSTALL }}/include -L ${{ env.CI_INSTALL }}/lib*/ -l secp256k1 -Wl,-rpath,"${{ env.CI_INSTALL }}/lib",-rpath,"${{ env.CI_INSTALL }}/lib64" && ./ecdsa