name: CMake Action description: Configure and build CMake project author: Alfi Maulana branding: color: gray-dark icon: terminal inputs: source-dir: description: The source directory of CMake project required: false default: . build-dir: description: The build directory of CMake project required: false default: build targets: description: List of build targets required: false generator: description: The build system generator of the CMake project required: false c-compiler: description: The preferred executable for compiling C language files required: false cxx-compiler: description: The preferred executable for compiling CXX language files required: false args: description: Additional arguments passed during CMake configuration required: false runs: using: composite steps: - name: Process inputs id: process_inputs shell: bash run: | ARGS="${{ inputs.source-dir }} -B ${{ inputs.build-dir }}" BUILD_ARGS="--build ${{ inputs.build-dir }}" if [ -n '${{ inputs.targets }}' ]; then BUILD_ARGS="$BUILD_ARGS --target ${{ inputs.targets }}" fi if [ -n '${{ inputs.generator }}' ]; then ARGS="$ARGS -G ${{ inputs.generator }}" fi if [ -n '${{ inputs.c-compiler }}' ]; then ARGS="$ARGS -D CMAKE_C_COMPILER=${{ inputs.c-compiler }}" fi if [ -n '${{ inputs.cxx-compiler }}' ]; then ARGS="$ARGS -D CMAKE_CXX_COMPILER=${{ inputs.cxx-compiler }}" fi if [ -n '${{ inputs.args }}' ]; then ARGS="$ARGS ${{ inputs.args }}" fi echo "cmake_args=${ARGS//[$'\t\r\n']}" >> $GITHUB_OUTPUT echo "cmake_build_args=${BUILD_ARGS//[$'\t\r\n']}" >> $GITHUB_OUTPUT - name: Install Ninja if: ${{ inputs.generator == 'Ninja' }} shell: bash run: | case "$OSTYPE" in darwin*) brew install ninja ;; linux*) sudo apt install -y ninja-build ;; *) choco install ninja ;; esac - name: Configure CMake shell: bash run: cmake ${{ steps.process_inputs.outputs.cmake_args }} - name: Build targets shell: bash run: cmake ${{ steps.process_inputs.outputs.cmake_build_args }}