ctplt 0.0.1

A package manager + build system for C and C++
Documentation
name: ci
on:
  push:
    branches:
      - master
      - ci
    paths-ignore:
      - '**.md'  # Ignore README changes
  pull_request:
    paths-ignore:
      - '**.md'

permissions:
  contents: read

env:
  CATAPULT_LOG: 'info'
  RUST_BACKTRACE: '1'  # Make debugging easier if catapult fails at runtime

jobs:
  check-formatting:
    name: Check formatting
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - run: cargo fmt --check --verbose
  test:
    name: Cargo Test
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - run: cargo test

  ubuntu-ninja-gcc:
    name: Build and Run (Ubuntu / Ninja / GCC)
    runs-on: ubuntu-latest
    steps:
      - run: >
          sudo apt-get install -y
          llvm
          nasm
          ninja-build
      - name: Checkout
        uses: actions/checkout@v4
      - run: cargo build
      - run: ./target/debug/catapult -S test_data/test_01 -B build -G Ninja -T test_data/toolchain_gcc.toml
      - run: tree build
      - run: cat build/build.ninja
      - run: ninja -C build -v myexe mytest
      - run: tree build
      - run: ./build/test_one/myexe abc def
      - run: ./build/my_depend/mytest

  ubuntu-ninja-clang:
    name: Build and Run (Ubuntu / Ninja / Clang)
    runs-on: ubuntu-latest
    steps:
      - run: >
          sudo apt-get install -y
          llvm
          nasm
          ninja-build
      - name: Checkout
        uses: actions/checkout@v4
      - run: cargo build

      - run: ./target/debug/catapult --source-dir test_data/test_01 --build-dir build_debug --generator Ninja --toolchain test_data/toolchain_clang.toml --profile Debug
      - run: tree build_debug
      - run: cat build_debug/build.ninja
      - run: ninja -C build_debug -v myexe mytest
      - run: tree build_debug
      - run: ./build_debug/test_one/myexe abc def
      - run: ./build_debug/my_depend/mytest

      - run: ./target/debug/catapult --source-dir test_data/test_01 --build-dir build_release --generator Ninja --toolchain test_data/toolchain_clang.toml --profile Release
      - run: tree build_release
      - run: cat build_release/build.ninja
      - run: ninja -C build_release -v myexe mytest
      - run: tree build_release
      - run: ./build_release/test_one/myexe abc def
      - run: ./build_release/my_depend/mytest

  ubuntu-ninja-emscripten:
    name: Build and Run (Ubuntu / Ninja / Emscripten)
    runs-on: ubuntu-latest
    steps:
      - run: >
          sudo apt-get install -y
          ninja-build
      - name: Checkout
        uses: actions/checkout@v4
      # Ubuntu repos have an old version of emscripten with a bug (https://github.com/emscripten-core/emscripten/pull/16917)
      # so install from source instead
      - name: Install Emscripten
        uses: ./.github/install-emscripten
      - run: cargo build

      - run: ./target/debug/catapult --source-dir test_data/test_01 --build-dir build_debug --generator Ninja --toolchain test_data/toolchain_emscripten.toml --profile Debug
      - run: tree build_debug
      - run: cat build_debug/build.ninja
      - run: ninja -C build_debug -v myexe mytest
      - run: tree build_debug
      - run: node ./build_debug/test_one/myexe abc def
      - run: node ./build_debug/my_depend/mytest

      - run: ./target/debug/catapult --source-dir test_data/test_01 --build-dir build_release --generator Ninja --toolchain test_data/toolchain_emscripten.toml --profile Release
      - run: tree build_release
      - run: cat build_release/build.ninja
      - run: ninja -C build_release -v myexe mytest
      - run: tree build_release
      - run: node ./build_release/test_one/myexe abc def
      - run: node ./build_release/my_depend/mytest

  windows-msvc:
    name: Build and Run (Windows / MSVC)
    runs-on: windows-latest
    steps:
      - run: >
          choco install
          nasm
      - name: Checkout
        uses: actions/checkout@v4
      - run: cargo build
      - run: ./target/debug/catapult --source-dir test_data/test_01 --build-dir build --generator MSVC --toolchain test_data/toolchain_msvc.toml
      - run: tree /f build

      - shell: cmd
        run: >
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
          && MSBuild build/test_one.sln
      - run: tree /f build
      - run: ./build/x64/Debug/myexe.exe abc def

      - shell: cmd
        run: >
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
          && MSBuild build/test_one.sln -property:Configuration=MinSizeRel;Platform=x64
      - run: tree /f build
      - run: ./build/x64/MinSizeRel/myexe.exe abc def

      - shell: cmd
        run: >
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
          && MSBuild build/test_one.sln -property:Configuration=RelWithDebInfo;Platform=x64
      - run: tree /f build
      - run: ./build/x64/RelWithDebInfo/myexe.exe abc def

      - shell: cmd
        run: >
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
          && MSBuild build/test_one.sln -property:Configuration=Release;Platform=x64
      - run: tree /f build
      - run: ./build/x64/Release/myexe.exe abc def

  windows-ninja-clang:
    name: Build and Run (Windows / Ninja / Clang)
    runs-on: windows-latest
    steps:
      - run: >
          choco install
          nasm
          ninja
      - name: Checkout
        uses: actions/checkout@v4
      - run: cargo build
      - run: ./target/debug/catapult --source-dir test_data/test_01 --build-dir build --generator Ninja --toolchain test_data/toolchain_clang_win.toml --profile Debug
      - run: tree /f build
      - run: Get-Content build/build.ninja
      - run: ninja -C build -v myexe mytest
      - run: tree /f build
      - run: ./build/test_one/myexe.exe abc def
      - run: ./build/my_depend/mytest.exe