Speed up host-arm workflow via native execution on Arm64 runners #1184
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: Github Actions | |
| on: [push, pull_request] | |
| jobs: | |
| host-x86: | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| matrix: | |
| compiler: [gcc, clang] | |
| architecture: [arm, riscv] | |
| link_mode: [static] | |
| include: | |
| - compiler: gcc | |
| architecture: arm | |
| link_mode: dynamic | |
| - compiler: clang | |
| architecture: arm | |
| link_mode: dynamic | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Download dependencies | |
| run: | | |
| sudo apt-get update -q -y | |
| sudo apt-get install -q -y graphviz jq | |
| sudo apt-get install -q -y qemu-user | |
| sudo apt-get install -q -y build-essential | |
| sudo apt-get install -q -y gcc-arm-linux-gnueabihf | |
| - name: Determine static or dynamic linking mode | |
| id: determine-mode | |
| run: | | |
| if [ "${{ matrix.link_mode }}" = "dynamic" ]; then | |
| echo "Use dynamic linking mode" | |
| echo "DYNLINK=1" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "Use static linking mode" | |
| echo "DYNLINK=0" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Build artifacts | |
| env: | |
| CC: ${{ matrix.compiler }} | |
| run: | | |
| make ARCH=${{ matrix.architecture }} DYNLINK=${{ steps.determine-mode.outputs.DYNLINK }} | |
| - name: IR regression tests | |
| run: | | |
| make check-snapshot DYNLINK=${{ steps.determine-mode.outputs.DYNLINK }} || exit 1 | |
| - name: Sanitizer-enabled stage 0 tests | |
| env: | |
| CC: ${{ matrix.compiler }} | |
| run: | | |
| make check-sanitizer DYNLINK=${{ steps.determine-mode.outputs.DYNLINK }} || exit 1 | |
| - name: Unit tests | |
| run: | | |
| make check DYNLINK=${{ steps.determine-mode.outputs.DYNLINK }} || exit 1 | |
| host-arm: | |
| runs-on: ubuntu-24.04-arm | |
| strategy: | |
| matrix: | |
| link_mode: [static, dynamic] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Download dependencies | |
| run: | | |
| sudo dpkg --add-architecture armhf | |
| sudo apt-get update -q -y | |
| sudo apt-get install -q -y graphviz jq | |
| sudo apt-get install -q -y build-essential libc6:armhf | |
| sudo wget https://github.com/fastfetch-cli/fastfetch/releases/download/2.58.0/fastfetch-linux-aarch64.deb | |
| sudo dpkg -i fastfetch-linux-aarch64.deb | |
| - name: Determine static or dynamic linking mode | |
| id: determine-mode | |
| run: | | |
| if [ "${{ matrix.link_mode }}" = "dynamic" ]; then | |
| echo "Use dynamic linking mode" | |
| echo "DYNLINK=1" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "Use static linking mode" | |
| echo "DYNLINK=0" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Build artifacts | |
| run: | | |
| make ARCH=arm DYNLINK=${{ steps.determine-mode.outputs.DYNLINK }} | |
| - name: Sanitizer-enabled stage 0 tests | |
| run: | | |
| make check-sanitizer DYNLINK=${{ steps.determine-mode.outputs.DYNLINK }} || exit 1 | |
| - name: Unit tests | |
| run: | | |
| make check DYNLINK=${{ steps.determine-mode.outputs.DYNLINK }} || exit 1 | |
| preprocessor-host: | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| matrix: | |
| compiler: [gcc, clang] | |
| architecture: [arm, riscv] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Download dependencies | |
| run: | | |
| sudo apt-get update -q -y | |
| sudo apt-get install -q -y graphviz jq | |
| sudo apt-get install -q -y qemu-user | |
| sudo apt-get install -q -y build-essential | |
| - name: Configurate config | |
| run: | | |
| make distclean config ARCH=${{ matrix.architecture }} | |
| - name: Preprocess stage 1 source code | |
| env: | |
| CC: ${{ matrix.compiler }} | |
| run: | | |
| make out/shecc | |
| ./out/shecc -E src/main.c > ./out/out.c | |
| - name: Build stage 1 artifact | |
| run: | | |
| ./out/shecc --no-libc -o out/shecc-stage1.elf ./out/out.c | |
| coding-style: | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Coding convention | |
| run: | | |
| sudo apt-get install -q -y clang-format-18 | |
| .ci/check-newline.sh | |
| .ci/check-format.sh | |
| shell: bash |