name: Build + Test on: push: branches: - main pull_request: branches: - main env: # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) BUILD_TYPE: Release CC: clang CXX: clang++ jobs: build: runs-on: ${{ matrix.arch }} strategy: matrix: arch: [[self-hosted, x64], [self-hosted, ARMv8.0], [self-hosted, ARMv8.2]] fail-fast: false steps: - uses: actions/checkout@v2 - name : submodule checkout # Need to update submodules run: git submodule update --init --depth 1 - name: Clean Build Environment run: rm -Rf ${{runner.workspace}}/build - name: Create Build Environment # Some projects don't allow in-source building, so create a separate build directory # We'll use this as our working directory for all subsequent commands run: cmake -E make_directory ${{runner.workspace}}/build - name: Configure CMake # Use a bash shell so we can use the same syntax for environment variable # access regardless of the host operating system shell: bash working-directory: ${{runner.workspace}}/build # Note the current convention is to use the -S and -B options here to specify source # and build directories, but this is only available with CMake 3.13 and higher. # The CMake binaries on the Github Actions machines are (as of this writing) 3.12 run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -G Ninja -DENABLE_LTO=False -DENABLE_ASSERTIONS=True - name: Build working-directory: ${{runner.workspace}}/build shell: bash # Execute the build. You can specify a specific target with "--target " run: cmake --build . --config $BUILD_TYPE - name: ASM Tests working-directory: ${{runner.workspace}}/build shell: bash # Execute the unit tests run: cmake --build . --config $BUILD_TYPE --target asm_tests - name: ASM Test Results move if: ${{ always() }} shell: bash working-directory: ${{runner.workspace}}/build run: mv ${{runner.workspace}}/build/Testing/Temporary/LastTest.log ${{runner.workspace}}/build/Testing/Temporary/LastTest_ASM.log || true - name: IR Tests working-directory: ${{runner.workspace}}/build shell: bash # Execute the unit tests run: cmake --build . --config $BUILD_TYPE --target ir_tests - name: IR Test Results move if: ${{ always() }} shell: bash working-directory: ${{runner.workspace}}/build run: mv ${{runner.workspace}}/build/Testing/Temporary/LastTest.log ${{runner.workspace}}/build/Testing/Temporary/LastTest_IR.log || true - name: Posix Tests working-directory: ${{runner.workspace}}/build shell: bash # Execute the posixtest run: cmake --build . --config $BUILD_TYPE --target posix_tests - name: Posix Test Results move if: ${{ always() }} shell: bash working-directory: ${{runner.workspace}}/build run: mv ${{runner.workspace}}/build/Testing/Temporary/LastTest.log ${{runner.workspace}}/build/Testing/Temporary/LastTest_Posix.log || true - name: gvisor tests working-directory: ${{runner.workspace}}/build shell: bash # Execute the gvisor tests run: cmake --build . --config $BUILD_TYPE --target gvisor_tests - name: GVisor Test Results move if: ${{ always() }} shell: bash working-directory: ${{runner.workspace}}/build run: mv ${{runner.workspace}}/build/Testing/Temporary/LastTest.log ${{runner.workspace}}/build/Testing/Temporary/LastTest_GVisor.log || true - name: gcc target tests 64 working-directory: ${{runner.workspace}}/build shell: bash # Execute the gvisor tests run: cmake --build . --config $BUILD_TYPE --target gcc_target_tests_64 - name: GCC64 Test Results move if: ${{ always() }} shell: bash working-directory: ${{runner.workspace}}/build run: mv ${{runner.workspace}}/build/Testing/Temporary/LastTest.log ${{runner.workspace}}/build/Testing/Temporary/LastTest_GCC64.log || true - name: Truncate test results if: ${{ always() }} shell: bash working-directory: ${{runner.workspace}}/build # Cap out the log files at 20M in case something crash spins and dumps fault text # ASM tests get quite close to 10MB run: truncate --size=20M ${{runner.workspace}}/build/Testing/Temporary/LastTest_*.log || true - name: Set runner name if: ${{ always() }} run: echo "runner_name=$(hostname)" >> $GITHUB_ENV - name: Upload results if: ${{ always() }} uses: 'actions/upload-artifact@v2' with: name: Results-${{ env.runner_name }} path: ${{runner.workspace}}/build/Testing/Temporary/LastTest_*.log retention-days: 3