99 tags :
1010 - " v*.*.*"
1111
12- # pull_request runs the matrix/build on the PR head with the fork-scoped token
13- # (no comment perms on base repo).
1412 pull_request :
1513 branches :
1614 - develop
1715
18-
1916concurrency :
2017 group : ${{format('{0}:{1}', github.repository, github.ref)}}
2118 cancel-in-progress : true
2623 container :
2724 image : ubuntu:24.04
2825 name : Generate Test Matrix
29- # Permissions allow Danger to read PR context and post comments.
30- permissions :
31- contents : read
32- pull-requests : write
3326 outputs :
3427 matrix : ${{ steps.cpp-matrix.outputs.matrix }}
3528 llvm-matrix : ${{ steps.llvm-matrix.outputs.llvm-matrix }}
7366 apple-clang: Release
7467 msvc: RelWithDebInfo
7568 install : |
76- gcc: git build-essential pkg-config python3 curl unzip openjdk-11-jdk pkg-config libncurses-dev libxml2-utils libxml2-dev
77- gcc Coverage: git build-essential pkg-config python3 curl unzip openjdk-11-jdk pkg-config libncurses-dev libxml2-utils libxml2-dev lcov
78- clang: git build-essential pkg-config python3 curl unzip openjdk-11-jdk pkg-config libncurses-dev libxml2-utils libxml2-dev g++-14=14.2.0-4ubuntu2~24.04
69+ gcc: git build-essential pkg-config python3 curl openjdk-11-jdk pkg-config libncurses-dev libxml2-utils libxml2-dev
70+ gcc Coverage: git build-essential pkg-config python3 curl openjdk-11-jdk pkg-config libncurses-dev libxml2-utils libxml2-dev lcov
71+ clang: git build-essential pkg-config python3 curl openjdk-11-jdk pkg-config libncurses-dev libxml2-utils libxml2-dev g++-14=14.2.0-4ubuntu2~24.04
7972 msvc: ''
8073 extra-values : |
8174 use-libcxx: {{#if (and (ieq compiler 'clang') (ge major 19)) }}true{{else}}false{{/if}}
@@ -332,6 +325,36 @@ jobs:
332325 path : ${{ steps.rmatrix.outputs.llvm-path }}
333326 key : ${{ matrix.llvm-archive-basename }}
334327
328+ - name : Download LLVM Binaries
329+ id : llvm-download
330+ if : steps.llvm-cache.outputs.cache-hit != 'true'
331+ run : |
332+ set -x
333+ url=https://mrdocs.com/llvm+clang/${{ matrix.llvm-archive-filename }}
334+ http_status=$(curl -s -o /dev/null -w "%{http_code}" -I "$url")
335+ if [ "$http_status" -eq 200 ]; then
336+ found="true"
337+ echo "found=$found" >> $GITHUB_OUTPUT
338+ curl -L -o ${{ matrix.llvm-archive-filename }} "$url"
339+ install_prefix=${{ steps.rmatrix.outputs.llvm-path }}
340+ mkdir -p $install_prefix
341+ if [[ ${{ matrix.llvm-archive-extension }} == '7z' ]]; then
342+ 7z x ${{ matrix.llvm-archive-filename }} -o$install_prefix
343+ else
344+ tar -xjf ${{ matrix.llvm-archive-filename }} -C $install_prefix
345+ fi
346+ if [[ $(ls -1 $install_prefix | wc -l) -eq 1 ]]; then
347+ single_dir=$(ls -1 $install_prefix)
348+ if [[ -d $install_prefix/$single_dir ]]; then
349+ mv $install_prefix/$single_dir/* $install_prefix/
350+ rmdir $install_prefix/$single_dir
351+ fi
352+ fi
353+ else
354+ found="false"
355+ echo "found=$found" >> $GITHUB_OUTPUT
356+ fi
357+
335358 # Installs libc++ separately, using the LLVM standalone runtimes build.
336359 # The libc++ built here will be built using the host compiler, so this is
337360 # limited by what libc++ at the current LLVM revision supports.
@@ -345,27 +368,16 @@ jobs:
345368 # FIXME: Build this for the GCC and MacOS sanitizer jobs.
346369 # Currently GCC fails linking it, and for MacOS there are compiler-rt
347370 # requirements not satisfied.
348- - name : Fetch LLVM source archive
349- if : steps.llvm-cache.outputs.cache-hit != 'true'
350- run : |
351- set -eux
352- mkdir -p ../third-party
353- cd ../third-party
354- archive="llvm-${{ matrix.llvm-hash }}.zip"
355- if [ ! -d llvm-project ]; then
356- curl -L -o "$archive" "https://github.com/llvm/llvm-project/archive/${{ matrix.llvm-hash }}.zip"
357- unzip -q "$archive"
358- mv "llvm-project-${{ matrix.llvm-hash }}" llvm-project
359- rm "$archive"
360- fi
361-
362371 - name : Install libc++
363372 id : install_libcxx
364373 uses : alandefreitas/cpp-actions/cmake-workflow@v1.8.12
365- if : matrix.use-libcxx == 'true' && steps.llvm-cache.outputs.cache-hit != 'true'
374+ if : matrix.use-libcxx == 'true' && steps.llvm-cache.outputs.cache-hit != 'true' && steps.llvm-download.outputs.found != 'true'
366375 with :
367376 cmake-version : ' >=3.26'
368377 source-dir : ../third-party/llvm-project/runtimes
378+ git-repository : https://github.com/llvm/llvm-project.git
379+ git-tag : ${{ matrix.llvm-hash }}
380+ download-dir : ../third-party/llvm-project
369381 build-dir : ${sourceDir}/build
370382 build-type : ${{ matrix.build-type }}
371383 extra-args : |
@@ -396,13 +408,16 @@ jobs:
396408 - name : Install LLVM
397409 id : install_llvm
398410 uses : alandefreitas/cpp-actions/cmake-workflow@v1.8.12
399- if : steps.llvm-cache.outputs.cache-hit != 'true'
411+ if : steps.llvm-cache.outputs.cache-hit != 'true' && steps.llvm-download.outputs.found != 'true'
400412 with :
401413 cmake-version : ' >=3.26'
402414 source-dir : ../third-party/llvm-project/llvm
415+ git-repository : https://github.com/llvm/llvm-project.git
416+ git-tag : ${{ matrix.llvm-hash }}
417+ download-dir : ../third-party/llvm-project
403418 patches : |
404- ./third-party/patches/llvm/ llvm/CMakePresets.json
405- ./third-party/patches/llvm/ llvm/CMakeUserPresets.json
419+ ./third-party/llvm/CMakePresets.json
420+ ./third-party/llvm/CMakeUserPresets.json
406421 build-dir : ${sourceDir}/build
407422 preset : ${{ matrix.llvm-build-preset }}
408423 build-type : ${{ matrix.build-type }}
@@ -438,8 +453,8 @@ jobs:
438453 source-dir : ../third-party/duktape
439454 url : https://github.com/svaarala/duktape/releases/download/v2.7.0/duktape-2.7.0.tar.xz
440455 patches : |
441- ./third-party/patches/ duktape/CMakeLists.txt
442- ./third-party/patches/ duktape/duktapeConfig.cmake.in
456+ ./third-party/duktape/CMakeLists.txt
457+ ./third-party/duktape/duktapeConfig.cmake.in
443458 build-dir : ${sourceDir}/build
444459 cc : ${{ steps.setup-cpp.outputs.cc }}
445460 cxx : ${{ steps.setup-cpp.outputs.cxx }}
@@ -458,8 +473,8 @@ jobs:
458473 source-dir : ../third-party/lua
459474 url : https://github.com/lua/lua/archive/refs/tags/v5.4.8.tar.gz
460475 patches : |
461- ./third-party/patches/ lua/CMakeLists.txt
462- ./third-party/patches/ lua/LuaConfig.cmake.in
476+ ./third-party/lua/CMakeLists.txt
477+ ./third-party/lua/LuaConfig.cmake.in
463478 build-dir : ${sourceDir}/build
464479 cc : ${{ steps.setup-cpp.outputs.cc }}
465480 cxx : ${{ steps.setup-cpp.outputs.cxx }}
@@ -881,17 +896,6 @@ jobs:
881896 npx gulp lint
882897 npx gulp
883898
884- - name : Ensure all refs for Antora
885- if : github.event_name == 'push' && (contains(fromJSON('["master", "develop"]'), github.ref_name) || startsWith(github.ref, 'refs/tags/')) && runner.os == 'Linux'
886- run : |
887- set -euo pipefail
888- # Make sure Antora sees every branch and tag from the upstream repo,
889- # regardless of who triggered the workflow.
890- git remote set-url origin https://github.com/cppalliance/mrdocs.git
891- git fetch --prune --prune-tags origin \
892- '+refs/heads/*:refs/remotes/origin/*' \
893- '+refs/tags/*:refs/tags/*'
894-
895899 - name : Generate Remote Documentation
896900 working-directory : docs
897901 run : |
@@ -1009,7 +1013,6 @@ jobs:
10091013 root="$(pwd)/demos/$project/$variant"
10101014 src="$root/adoc"
10111015 dst="$root/adoc-asciidoc"
1012- stylesheet="$(pwd)/share/mrdocs/addons/generator/common/layouts/style.css"
10131016
10141017 # Create the top-level output dir
10151018 mkdir -p "$dst"
@@ -1020,7 +1023,7 @@ jobs:
10201023 rel="${f#"$src/"}" # path relative to $src
10211024 outdir="$dst/$(dirname "$rel")" # mirror subdir inside $dst
10221025 mkdir -p "$outdir"
1023- asciidoctor -a stylesheet="${stylesheet}" - D "$outdir" "$f"
1026+ asciidoctor -D "$outdir" "$f"
10241027 done
10251028 done
10261029 fi
@@ -1224,9 +1227,69 @@ jobs:
12241227 with :
12251228 apt-get : ${{ matrix.install }}
12261229
1230+ - name : Check website releases
1231+ id : website-releases
1232+ run : |
1233+ set -x
1234+ archive_url="https://mrdocs.com/llvm+clang/${{ matrix.llvm-archive-filename }}"
1235+ http_status=$(curl -s -o /dev/null -w "%{http_code}" -I "$archive_url")
1236+ if [ "$http_status" -eq 200 ]; then
1237+ exists="true"
1238+ else
1239+ exists="false"
1240+ fi
1241+ echo "exists=$exists" >> $GITHUB_OUTPUT
1242+
12271243 - name : LLVM Binaries
12281244 id : llvm-cache
1245+ if : steps.website-releases.outputs.exists != 'true'
12291246 uses : actions/cache@v4
12301247 with :
12311248 path : ${{ steps.rmatrix.outputs.llvm-path }}
12321249 key : ${{ matrix.llvm-archive-basename }}
1250+
1251+ - name : Compress LLVM
1252+ id : llvm-upload
1253+ if : steps.llvm-cache.outputs.cache-hit == 'true'
1254+ shell : bash
1255+ run : |
1256+ # LLVM is be installed with the default compiler
1257+ set -x
1258+
1259+ # Use 7z on windows
1260+ if [[ ${{ runner.os }} == 'Windows' ]]; then
1261+ 7z a -t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on "${{ matrix.llvm-archive-filename }}" "${{ steps.rmatrix.outputs.llvm-path }}"
1262+ else
1263+ tar -cjf "${{ matrix.llvm-archive-filename }}" -C "${{ steps.rmatrix.outputs.llvm-path }}/.." llvm
1264+ fi
1265+
1266+ - name : Website LLVM Releases
1267+ if : steps.llvm-cache.outputs.cache-hit == 'true' && github.event_name == 'push' && (contains(fromJSON('["master", "develop"]'), github.ref_name) || startsWith(github.ref, 'refs/tags/'))
1268+ run : |
1269+ set -x
1270+
1271+ # Ensure required commands exist
1272+ for cmd in ssh-keyscan ssh-agent ssh-add scp; do
1273+ if ! command -v $cmd >/dev/null; then
1274+ echo "$cmd not found"
1275+ exit 1
1276+ fi
1277+ done
1278+
1279+ # Add SSH key
1280+ mkdir -p ~/.ssh
1281+ ssh-keyscan dev-websites.cpp.al >> ~/.ssh/known_hosts
1282+ chmod 600 ~/.ssh/known_hosts
1283+ echo "${{ secrets.DEV_WEBSITES_SSH_KEY }}" > ~/.ssh/github_actions
1284+ chmod 600 ~/.ssh/github_actions
1285+
1286+ # Start ssh-agent and add the key
1287+ SSH_AUTH_SOCK="$RUNNER_TEMP/ssh_agent.sock"
1288+ export SSH_AUTH_SOCK
1289+ ssh-agent -a $SSH_AUTH_SOCK > /dev/null
1290+ ssh-add ~/.ssh/github_actions
1291+
1292+ # Copy llvm archive: This step will copy the archive to www.mrdocs.com/llvm+clang
1293+ llvm_dir="/var/www/mrdox.com/llvm+clang"
1294+ chmod 755 ${{ matrix.llvm-archive-filename }}
1295+ scp -o StrictHostKeyChecking=no $(pwd)/${{ matrix.llvm-archive-filename }} ubuntu@dev-websites.cpp.al:$llvm_dir/
0 commit comments