Recursive template instantations #2255
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
branches: [main] | |
jobs: | |
build-linux: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install unit tests requirements | |
run: | | |
pipx install uv | |
uv sync | |
- name: Build | |
run: | | |
. .venv/bin/activate | |
cmake . -Bbuild -DCMAKE_BUILD_TYPE=Release | |
cmake --build build --parallel | |
- name: Test | |
working-directory: build | |
run: | | |
ctest --output-on-failure | |
- name: Parse C++ source files (WASI toolchain) | |
run: | | |
for i in src/parser/cxx/*.cc src/lsp/cxx/lsp/*.cc src/frontend/cxx/*.cc; do | |
echo "Parsing $i" | |
./build/src/frontend/cxx \ | |
-I src/parser \ | |
-I src/lsp \ | |
-I build/_deps/utfcpp-src/source \ | |
-I build/_deps/nlohmann_json-src/include \ | |
-I build/src/parser \ | |
-DCXX_NO_FLATBUFFERS \ | |
-DCXX_NO_FILESYSTEM \ | |
-DCXX_NO_THREADS \ | |
$i | |
done | |
- name: Parse C++ source files (Linux toolchain) | |
run: | | |
for i in src/parser/cxx/*.cc src/lsp/cxx/lsp/*.cc src/frontend/cxx/*.cc; do | |
echo "Parsing $i" | |
./build/src/frontend/cxx \ | |
-toolchain linux \ | |
-I src/parser \ | |
-I src/lsp \ | |
-I build/_deps/utfcpp-src/source \ | |
-I build/_deps/nlohmann_json-src/include \ | |
-I build/src/parser \ | |
-DCXX_NO_FLATBUFFERS \ | |
$i | |
done | |
build-linux-mlir: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install LLVM and MLIR deps | |
run: | | |
wget https://apt.llvm.org/llvm.sh | |
chmod +x llvm.sh | |
sudo ./llvm.sh 20 | |
rm llvm.sh | |
sudo apt-get install -y libmlir-20-dev mlir-20-tools | |
- name: Install unit tests requirements | |
run: | | |
pipx install uv | |
uv sync | |
- name: Build | |
run: | | |
. .venv/bin/activate | |
PATH=/usr/lib/llvm-20/bin:$PATH | |
cmake --preset default-mlir | |
cmake --build build --parallel | |
- name: Test | |
working-directory: build | |
run: | | |
ctest --output-on-failure | |
build-windows: | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install unit tests requirements | |
run: | | |
pipx install uv | |
uv sync | |
- name: Build | |
run: | | |
.\.venv\Scripts\activate | |
cmake . -Bbuild | |
cmake --build build --parallel --config Release | |
- name: Test | |
working-directory: build | |
run: | | |
ctest --verbose -C Release | |
build-emscripten: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup emscripten cache | |
uses: actions/cache@v4 | |
with: | |
path: ~/.emscripten-cache | |
key: ${{ runner.os }}-emscripten-{{ hashFiles('/home/runner/.emscripten-cache/sanity.txt') }} | |
restore-keys: | | |
${{ runner.os }}-emscripten- | |
- name: Install dependencies | |
run: | | |
npm ci | |
- name: Download MLIR | |
run: | | |
npm run download-mlir | |
env: | |
GH_TOKEN: ${{ github.token }} | |
continue-on-error: true | |
- name: Prettier | |
run: | | |
npm -w cxx-frontend run prettier | |
- name: Build | |
run: | | |
npm -w cxx-frontend run build | |
npm -w cxx-frontend pack | |
- name: Build Docs | |
working-directory: packages/cxx-frontend | |
run: | | |
npm -w cxx-frontend run docs | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: cxx-frontend-dist | |
path: | | |
packages/cxx-frontend/dist/ | |
packages/cxx-frontend/docs/ | |
retention-days: 1 | |
build-macos: | |
runs-on: macos-15 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install unit tests requirements | |
run: | | |
pipx install uv | |
uv sync | |
- name: Build | |
run: | | |
. .venv/bin/activate | |
cmake . \ | |
-Bbuild \ | |
-DCMAKE_BUILD_TYPE=Release | |
cmake --build build --parallel | |
- name: Test | |
working-directory: build | |
run: | | |
ctest --verbose | |
- name: Parse C++ source files (macOS toolchain) | |
run: | | |
for i in src/parser/cxx/*.cc src/lsp/cxx/lsp/*.cc src/frontend/cxx/*.cc; do | |
echo "Parsing $i" | |
./build/src/frontend/cxx \ | |
-toolchain macos \ | |
-I src/parser \ | |
-I src/lsp \ | |
-I build/_deps/utfcpp-src/source \ | |
-I build/_deps/nlohmann_json-src/include \ | |
-I build/src/parser \ | |
-DCXX_NO_FLATBUFFERS \ | |
$i | |
done | |
build-wasi: | |
runs-on: ubuntu-latest | |
env: | |
WASMTIME_VERSION: 35.0.0 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Build | |
run: | | |
npm ci | |
npm run build:wasi | |
- name: Install wasmtime | |
run: | | |
wget -nd -P /tmp/ https://github.com/bytecodealliance/wasmtime/releases/download/v${{ env.WASMTIME_VERSION }}/wasmtime-v${{ env.WASMTIME_VERSION }}-$(uname -m)-linux.tar.xz | |
tar -C /usr/local/bin -xvf /tmp/wasmtime-v${{ env.WASMTIME_VERSION }}-$(uname -m)-linux.tar.xz --strip-components=1 --wildcards 'wasmtime-*-linux/wasmtime' | |
- name: Test | |
run: | | |
wasmtime \ | |
-W threads=y -S threads=y \ | |
--dir ${{github.workspace}}/build.wasi/install::/ \ | |
--dir tests::tests \ | |
${{github.workspace}}/build.wasi/install/usr/bin/cxx.wasm -v tests/manual/source.cc | |
- name: Parse C++ source files (wasmtime runtime) | |
run: | | |
PATH=~/wasmtime-v${{ env.WASMTIME_VERSION }}-x86_64-linux:$PATH | |
for i in src/parser/cxx/*.cc src/lsp/cxx/lsp/*.cc src/frontend/cxx/*.cc; do | |
echo "Parsing $i" | |
wasmtime \ | |
-W threads=y -S threads=y \ | |
--dir=src::/src \ | |
--dir=build.wasi/_deps::/build.wasi/_deps \ | |
--dir=build.wasi/src/parser::build.wasi/src/parser \ | |
--dir=build.wasi/src/lsp::build.wasi/src/lsp \ | |
--dir=build.wasi/install/usr::/usr \ | |
build.wasi/install/usr/bin/cxx.wasm \ | |
-I src/parser \ | |
-I src/lsp \ | |
-I build.wasi/_deps/utfcpp-src/source \ | |
-I build.wasi/_deps/nlohmann_json-src/include \ | |
-I build.wasi/src/parser \ | |
-DCXX_NO_FLATBUFFERS \ | |
-DCXX_NO_FILESYSTEM \ | |
-DCXX_NO_THREADS \ | |
$i | |
done | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: cxx-wasi | |
path: | | |
build.wasi/install/usr/bin | |
build.wasi/install/usr/lib/cxx | |
build.wasi/install/usr/lib/wasi-sysroot/include/c++ | |
build.wasi/install/usr/lib/wasi-sysroot/include/wasm32-wasi | |
retention-days: 1 | |
release-please: | |
runs-on: ubuntu-latest | |
if: false && github.repository == 'robertoraggi/cplusplus' && github.ref == 'refs/heads/main' | |
steps: | |
- uses: GoogleCloudPlatform/release-please-action@v3 | |
with: | |
token: ${{ secrets.RELEASE_TOKEN }} | |
release-type: node | |
package-name: cplusplus | |
extra-files: | | |
packages/cxx-frontend/package.json | |
templates/cxx-parse/package.json | |
templates/cxx-browser-esm-vite/package.json | |
templates/cxx-parse-esm/package.json | |
build-playground: | |
runs-on: ubuntu-latest | |
needs: build-emscripten | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: cxx-frontend-dist | |
path: packages/cxx-frontend | |
- name: Configure GitHub Pages | |
uses: actions/configure-pages@v5 | |
- name: Build | |
run: | | |
npm ci | |
npm run build -w @robertoraggi/cxx-playground -- --base /cplusplus | |
mkdir -p packages/cxx-playground/dist/docs | |
cp -a packages/cxx-frontend/docs/. packages/cxx-playground/dist/docs | |
- name: Upload GitHub Pages artifact | |
uses: actions/upload-pages-artifact@v3 | |
with: | |
path: packages/cxx-playground/dist | |
deploy-playground: | |
name: Deploy Playground | |
if: github.repository == 'robertoraggi/cplusplus' && github.ref == 'refs/heads/main' | |
needs: build-playground | |
permissions: | |
pages: write | |
id-token: write | |
environment: | |
name: github-pages | |
url: ${{ steps.deployment.outputs.page_url }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Deploy to GitHub Pages | |
id: deployment | |
uses: actions/deploy-pages@v4 |