diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index 5ccba335b..1d64d0ffc 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -33,11 +33,21 @@ jobs: ci_infer: runs-on: ubuntu-latest - container: ghcr.io/nlohmann/json-ci:v2.4.0 steps: + - name: Harden Runner + uses: step-security/harden-runner@bf7454d06d71f1098171f2acdf0cd4708d7b5920 # v2.20.0 + with: + egress-policy: audit + + - name: Install Infer + run: | + wget -q -O - "https://github.com/facebook/infer/releases/download/v1.3.0/infer-linux-x86_64-v1.3.0.tar.xz" | sudo tar -C /opt -xJ + sudo ln -s /opt/infer-linux-x86_64-v1.3.0/bin/infer /usr/local/bin/infer - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false + - name: Get latest CMake and ninja + uses: lukka/get-cmake@f5b8fbb4d77cec1acc5a5f9f0df4beffaf5d98d9 # v4.3.4 - name: Run CMake run: cmake -S . -B build -DJSON_CI=On - name: Build @@ -143,11 +153,30 @@ jobs: strategy: matrix: compiler: ['4.8', '4.9', '5', '6'] - container: ghcr.io/nlohmann/json-ci:v2.4.0 + # official gcc:4.8/4.9/5/6 images fail to check out code (too old for + # actions/checkout); install the old compilers on top of official ubuntu:20.04 + # instead, mirroring what the (now retired) custom json-ci image did. + container: ubuntu:20.04 steps: + - name: Install g++-${{ matrix.compiler }} + run: | + export DEBIAN_FRONTEND=noninteractive + apt-get update + apt-get install -y --no-install-recommends software-properties-common ca-certificates gnupg make git + add-apt-repository -y ppa:ubuntu-toolchain-r/test + apt-add-repository -y "deb http://archive.ubuntu.com/ubuntu/ bionic main" + apt-add-repository -y "deb http://archive.ubuntu.com/ubuntu/ bionic universe" + apt-add-repository -y "deb http://archive.ubuntu.com/ubuntu/ xenial main" + apt-add-repository -y "deb http://archive.ubuntu.com/ubuntu/ xenial universe" + apt-add-repository -y "deb http://archive.ubuntu.com/ubuntu/ xenial-updates main" + apt-add-repository -y "deb http://archive.ubuntu.com/ubuntu/ xenial-updates universe" + apt-get update + apt-get install -y --no-install-recommends g++-${{ matrix.compiler }} - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false + - name: Get latest CMake and ninja + uses: lukka/get-cmake@f5b8fbb4d77cec1acc5a5f9f0df4beffaf5d98d9 # v4.3.4 - name: Run CMake run: CXX=g++-${{ matrix.compiler }} cmake -S . -B build -DJSON_CI=On - name: Build @@ -287,17 +316,22 @@ jobs: ci_icpc: runs-on: ubuntu-latest - container: ghcr.io/nlohmann/json-ci:v2.2.0 + # Intel discontinued the classic icc/icpc compiler in oneAPI 2024.0; this is + # Intel's own last officially published image that still includes it. + container: intel/oneapi-hpckit:2023.2.1-devel-ubuntu22.04 steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false + - name: Get latest CMake and ninja + uses: lukka/get-cmake@f5b8fbb4d77cec1acc5a5f9f0df4beffaf5d98d9 # v4.3.4 - name: Run CMake run: cmake -S . -B build -DJSON_CI=On - name: Build - run: | - . /opt/intel/oneapi/setvars.sh - cmake --build build --target ci_icpc + # No need to source setvars.sh here: unlike the old custom image, this + # official image already has the oneAPI environment (icc/icpc on PATH) + # baked in, and re-sourcing it fails with "already been run" (exit 3). + run: cmake --build build --target ci_icpc ci_icpx: runs-on: ubuntu-latest diff --git a/docs/mkdocs/docs/community/quality_assurance.md b/docs/mkdocs/docs/community/quality_assurance.md index 02ccccd9d..200a129ef 100644 --- a/docs/mkdocs/docs/community/quality_assurance.md +++ b/docs/mkdocs/docs/community/quality_assurance.md @@ -70,10 +70,10 @@ Note: Some modern features (like C++20 ranges or filesystem support) may be disa | CUDA 12.1.1 (nvcc) | x86_64 | Ubuntu 22.04 LTS | GitHub | | CUDA 12.6.3 (nvcc) | x86_64 | Ubuntu 22.04 LTS | GitHub | | Emscripten 4.0.6 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | - | GNU 4.8.5 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | - | GNU 4.9.3 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | - | GNU 5.5.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | - | GNU 6.4.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | + | GNU 4.8.5 | x86_64 | Ubuntu 20.04 LTS | GitHub | + | GNU 4.9.3 | x86_64 | Ubuntu 20.04 LTS | GitHub | + | GNU 5.5.0 | x86_64 | Ubuntu 20.04 LTS | GitHub | + | GNU 6.4.0 | x86_64 | Ubuntu 20.04 LTS | GitHub | | GNU 7.5.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 8.5.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 9.3.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | @@ -90,7 +90,7 @@ Note: Some modern features (like C++20 ranges or filesystem support) may be disa | GNU 15.1.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 16.1.0 | x86_64 | Ubuntu 22.04.1 LTS | GitHub | | GNU 16.1.0 | arm64 | Linux 6.1.100 | Cirrus CI | - | icpc (ICC) 2021.5.0 20211109 | x86_64 | Ubuntu 20.04.3 LTS | GitHub | + | icpc (ICC) 2021.10.0 20230609 | x86_64 | Ubuntu 22.04 LTS | GitHub | | icpx (Intel oneAPI DPC++/C++) 2025.3.2 | x86_64 | Ubuntu 24.04 LTS | GitHub | | nvc++ (NVIDIA HPC SDK) 25.5-0 | x86_64 | Ubuntu 22.04 LTS | GitHub | | MSVC 19.0.24241.7 | x86 | Windows 8.1 | AppVeyor | diff --git a/tests/src/unit-deserialization.cpp b/tests/src/unit-deserialization.cpp index 0ade1ad52..cedcb21a9 100644 --- a/tests/src/unit-deserialization.cpp +++ b/tests/src/unit-deserialization.cpp @@ -227,6 +227,11 @@ bool check_utf8() // Runtime check of the active ANSI code page // 65001 == UTF-8 return GetACP() == 65001; +#elif defined(__ICC) || defined(__INTEL_COMPILER) + // classic Intel ICC does not encode narrow string literals containing + // non-ASCII source characters as UTF-8, so comparing a decoded u8 literal + // against a narrow string literal containing the same characters fails + return false; #else return true; #endif diff --git a/tests/src/unit-regression2.cpp b/tests/src/unit-regression2.cpp index 3be8f9d5c..62ef843dd 100644 --- a/tests/src/unit-regression2.cpp +++ b/tests/src/unit-regression2.cpp @@ -798,7 +798,9 @@ TEST_CASE("regression tests 2") #ifdef JSON_HAS_CPP_20 #ifndef _LIBCPP_VERSION // see https://github.com/nlohmann/json/issues/4490 -#if __has_include() + // classic Intel ICC reports as includable but cannot actually compile + // std::span/std::as_bytes usage below +#if __has_include() && !defined(__ICC) && !defined(__INTEL_COMPILER) SECTION("issue #2546 - parsing containers of std::byte") { const char DATA[] = R"("Hello, world!")"; // NOLINT(misc-const-correctness,cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)