Skip to content

Commit

Permalink
CI: Split off clang toolchain builds from normal CI and schedule them
Browse files Browse the repository at this point in the history
Clang builds will no longer be apart of the automated CI for every Push/
Pull Request, and will instead be ran at 00:00 UTC every day, with the
results posted to the discord #clang-toolchain channel.
  • Loading branch information
IdanHo authored and awesomekling committed Aug 8, 2021
1 parent 97010d4 commit bac3c2c
Show file tree
Hide file tree
Showing 2 changed files with 245 additions and 150 deletions.
99 changes: 99 additions & 0 deletions .github/workflows/clang.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
name: Clang toolchain status
on:
schedule:
- cron: '0 0 * * *'

jobs:
build_and_test_serenity:
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
arch: [ 'i686', 'x86_64' ]

steps:
- uses: actions/checkout@v2

- name: Install Ubuntu dependencies
run: |
sudo add-apt-repository ppa:canonical-server/server-backports
sudo apt-get update
sudo apt-get install libmpfr-dev libmpc-dev ninja-build e2fsprogs qemu-utils qemu-system-i386
- name: Check versions
run: set +e; g++ --version; g++-10 --version; ninja --version; qemu-system-i386 --version

- name: Regenerate Toolchain
run: TRY_USE_LOCAL_TOOLCHAIN=y ARCH="${{ matrix.arch }}" ${{ github.workspace }}/Toolchain/BuildClang.sh

- name: Create build directory
run: |
mkdir -p ${{ github.workspace }}/Build
mkdir -p ${{ github.workspace }}/Build/UCD
- name: UnicodeData cache
# TODO: Change the version to the released version when https://github.com/actions/cache/pull/489 (or 571) is merged.
uses: actions/cache@03e00da99d75a2204924908e1cca7902cafce66b
with:
path: ${{ github.workspace }}/Build/UCD
key: UnicodeData-${{ hashFiles('Userland/Libraries/LibUnicode/unicode_data.cmake') }}

- name: Create build environment
working-directory: ${{ github.workspace }}/Build
run: cmake .. -GNinja -DSERENITY_ARCH=${{ matrix.arch }} -DUSE_CLANG_TOOLCHAIN=ON -DENABLE_UNDEFINED_SANITIZER=ON -DENABLE_PCI_IDS_DOWNLOAD=OFF -DENABLE_USB_IDS_DOWNLOAD=OFF -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10

- name: Build Serenity and Tests
working-directory: ${{ github.workspace }}/Build
run: cmake --build .
- name: Show ccache stats after build
run: ccache -s

- name: Create Serenity Rootfs
working-directory: ${{ github.workspace }}/Build
run: ninja install && ninja image

- name: Run On-Target Tests
working-directory: ${{ github.workspace }}/Build
env:
SERENITY_QEMU_CPU: "max,vmx=off"
SERENITY_KERNEL_CMDLINE: "boot_mode=self-test"
SERENITY_RUN: "ci"
run: |
echo "::group::ninja run # Qemu output"
ninja run
echo "::endgroup::"
echo "::group::Verify Output File"
mkdir fsmount
sudo mount -t ext2 -o loop,rw _disk_image fsmount
echo "Results: "
sudo cat fsmount/home/anon/test-results.log
if ! sudo grep -q "Failed: 0" fsmount/home/anon/test-results.log
then
echo "::error :^( Tests failed, failing job"
exit 1
fi
echo "::endgroup::"
timeout-minutes: 60

- name: Print Target Logs
# Extremely useful if Serenity hangs trying to run one of the tests
if: ${{ !cancelled() }}
working-directory: ${{ github.workspace }}/Build
run: '[ ! -e debug.log ] || cat debug.log'

notify_discord:
runs-on: ubuntu-20.04
needs: build_and_test_serenity
if: always()
steps:
- uses: actions/checkout@v2
- uses: technote-space/workflow-conclusion-action@v2
- name: Send discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_CLANG_WEBHOOK }}
DISCORD_USERNAME: GitHub # we have to set these manually for non-default messages
DISCORD_AVATAR: https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png
uses: IdanHo/action-discord@754598254f288e6d8e9fca637832e3c163515ba8
with:
args: "The clang build ${{ env.WORKFLOW_CONCLUSION == 'success' && 'passed :white_check_mark:' || 'failed :x:' }} :( https://github.com/SerenityOS/serenity/runs/${{github.run_id}}"

Loading

0 comments on commit bac3c2c

Please sign in to comment.