diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..5fbfb24 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,85 @@ +name: CI + +on: + push: + branches: [ master, dev ] + pull_request: + branches: [ master, dev ] + +jobs: + build-linux: + runs-on: ubuntu-latest + strategy: + matrix: + fedora: [38, 39, 40] + include: + - fedora: 38 + gcc: 13 + - fedora: 39 + gcc: 13 + - fedora: 40 + gcc: 14 + + container: ghcr.io/fairrootgroup/fairmq-dev/fedora-${{ matrix.fedora }} + + steps: + - uses: actions/checkout@v4 + + - name: Install additional dependencies + run: | + dnf install -y fmt-devel || true + + - name: Configure + run: | + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DDISABLE_COLOR=ON \ + -DUSE_EXTERNAL_FMT=ON \ + -DUSE_BOOST_PRETTY_FUNCTION=ON + + - name: Build + run: cmake --build build + + - name: Test + run: | + cd build + ctest -V --output-on-failure + + build-macos: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [macos-13, macos-14, macos-15] + + steps: + - uses: actions/checkout@v4 + + - name: Cache Homebrew packages + uses: actions/cache@v4 + with: + path: | + ~/Library/Caches/Homebrew + /usr/local/Homebrew/Library/Taps + key: ${{ runner.os }}-${{ matrix.os }}-brew-${{ hashFiles('.github/workflows/ci.yml') }} + restore-keys: | + ${{ runner.os }}-${{ matrix.os }}-brew- + + - name: Install dependencies + run: | + brew install cmake ninja boost fmt + + - name: Configure + run: | + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DDISABLE_COLOR=ON \ + -DUSE_EXTERNAL_FMT=ON \ + -DUSE_BOOST_PRETTY_FUNCTION=ON + + - name: Build + run: cmake --build build + + - name: Test + run: | + cd build + ctest -V --output-on-failure diff --git a/FairLoggerTest.cmake b/FairLoggerTest.cmake index 1267f1a..8bd92a7 100644 --- a/FairLoggerTest.cmake +++ b/FairLoggerTest.cmake @@ -15,14 +15,10 @@ set(CTEST_USE_LAUNCHERS ON) set(CTEST_CONFIGURATION_TYPE "RelWithDebInfo") if(NOT NCPUS) - if(ENV{SLURM_CPUS_PER_TASK}) - set(NCPUS $ENV{SLURM_CPUS_PER_TASK}) - else() - include(ProcessorCount) - ProcessorCount(NCPUS) - if(NCPUS EQUAL 0) - set(NCPUS 1) - endif() + include(ProcessorCount) + ProcessorCount(NCPUS) + if(NCPUS EQUAL 0) + set(NCPUS 1) endif() endif() @@ -32,10 +28,10 @@ else() set(CTEST_SITE $ENV{CTEST_SITE}) endif() -if ("$ENV{LABEL}" STREQUAL "") +if ("$ENV{CTEST_BUILD_NAME}" STREQUAL "") set(CTEST_BUILD_NAME "build") else() - set(CTEST_BUILD_NAME $ENV{LABEL}) + set(CTEST_BUILD_NAME $ENV{CTEST_BUILD_NAME}) endif() ctest_start(Continuous) diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index ad1412f..0000000 --- a/Jenkinsfile +++ /dev/null @@ -1,80 +0,0 @@ -#!groovy - -def jobMatrix(String prefix, String type, List specs) { - def nodes = [:] - for (spec in specs) { - job = "${spec.os}-${spec.ver}-${spec.arch}-${spec.compiler}" - def label = "${type}/${job}" - def selector = "${spec.os}-${spec.ver}-${spec.arch}" - def os = spec.os - def ver = spec.ver - def check = spec.check - - nodes[label] = { - node(selector) { - githubNotify(context: "${prefix}/${label}", description: 'Building ...', status: 'PENDING') - try { - deleteDir() - checkout scm - - def jobscript = 'job.sh' - def ctestcmd = "ctest -S FairLoggerTest.cmake -V --output-on-failure" - sh "echo \"set -e\" >> ${jobscript}" - sh "echo \"export LABEL=\\\"\${JOB_BASE_NAME} ${label}\\\"\" >> ${jobscript}" - if (selector =~ /^macos/) { - sh "echo \"${ctestcmd}\" >> ${jobscript}" - sh "cat ${jobscript}" - sh "bash ${jobscript}" - } else { - def containercmd = "singularity exec -B/shared ${env.SINGULARITY_CONTAINER_ROOT}/fairlogger/${os}.${ver}.sif bash -l -c \\\"${ctestcmd}\\\"" - sh """\ - echo \"echo \\\"*** Job started at .......: \\\$(date -R)\\\"\" >> ${jobscript} - echo \"echo \\\"*** Job ID ...............: \\\${SLURM_JOB_ID}\\\"\" >> ${jobscript} - echo \"echo \\\"*** Compute node .........: \\\$(hostname -f)\\\"\" >> ${jobscript} - echo \"unset http_proxy\" >> ${jobscript} - echo \"unset HTTP_PROXY\" >> ${jobscript} - echo \"${containercmd}\" >> ${jobscript} - """ - sh "cat ${jobscript}" - sh "test/ci/slurm-submit.sh \"FairLogger \${JOB_BASE_NAME} ${label}\" ${jobscript}" - } - - deleteDir() - githubNotify(context: "${prefix}/${label}", description: 'Success', status: 'SUCCESS') - } catch (e) { - deleteDir() - githubNotify(context: "${prefix}/${label}", description: 'Error', status: 'ERROR') - throw e - } - } - } - } - return nodes -} - -pipeline{ - agent none - stages { - stage("Run CI Matrix") { - steps{ - script { - def builds = jobMatrix('alfa-ci', 'build', [ - [os: 'fedora', ver: '32', arch: 'x86_64', compiler: 'gcc-10'], - [os: 'fedora', ver: '33', arch: 'x86_64', compiler: 'gcc-10'], - [os: 'fedora', ver: '34', arch: 'x86_64', compiler: 'gcc-11'], - [os: 'fedora', ver: '35', arch: 'x86_64', compiler: 'gcc-11'], - [os: 'fedora', ver: '36', arch: 'x86_64', compiler: 'gcc-12'], - [os: 'fedora', ver: '37', arch: 'x86_64', compiler: 'gcc-12'], - [os: 'fedora', ver: '38', arch: 'x86_64', compiler: 'gcc-13'], - [os: 'fedora', ver: '39', arch: 'x86_64', compiler: 'gcc-13'], - [os: 'macos', ver: '13', arch: 'x86_64', compiler: 'apple-clang-15'], - [os: 'macos', ver: '14', arch: 'x86_64', compiler: 'apple-clang-15'], - [os: 'macos', ver: '14', arch: 'arm64', compiler: 'apple-clang-15'], - ]) - - parallel(builds) - } - } - } - } -}