Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

factor out common workflows #332

Merged
merged 11 commits into from
Feb 17, 2024
8 changes: 7 additions & 1 deletion .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

name: PR

on: [pull_request]
on: [pull_request, workflow_call]

jobs:
gitlint:
Expand All @@ -26,3 +26,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: seL4/ci-actions/bashisms@master

style:
name: Style
runs-on: ubuntu-latest
steps:
- uses: seL4/ci-actions/style@master
lsf37 marked this conversation as resolved.
Show resolved Hide resolved
7 changes: 1 addition & 6 deletions .github/workflows/push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ on:
branches:
- master
pull_request:
workflow_call:

jobs:
check:
Expand All @@ -25,9 +26,3 @@ jobs:
- uses: seL4/ci-actions/link-check@master
with:
exclude: '/node_modules/'

style:
name: Style
runs-on: ubuntu-latest
steps:
- uses: seL4/ci-actions/style@master
119 changes: 119 additions & 0 deletions .github/workflows/sel4bench-hw.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
# Copyright 2022, Proofcraft Pty Ltd
#
# SPDX-License-Identifier: BSD-2-Clause

# Build and run sel4bench on pull requests, on label request

name: seL4Bench-HW

on:
workflow_call:

# intended to run on
# pull_request_target:
# types: [opened, reopened, synchronize, labeled]

# downgrade permissions to read-only as you would have in a standard PR action
permissions:
contents: read

jobs:
code:
name: Freeze Code
runs-on: ubuntu-latest
if: ${{ github.event_name == 'pull_request_target' &&
lsf37 marked this conversation as resolved.
Show resolved Hide resolved
(
github.event.action != 'labeled' &&
contains(github.event.pull_request.labels.*.name, 'hw-bench') ||
github.event.action == 'labeled' &&
github.event.label.name == 'hw-bench'
) }}
outputs:
xml: ${{ steps.repo.outputs.xml }}
steps:
- id: repo
uses: seL4/ci-actions/repo-checkout@master
with:
manifest_repo: sel4bench-manifest
manifest: master.xml
sha: ${{ github.event.pull_request.head.sha }}

build:
name: Build
needs: code
runs-on: ubuntu-latest
# To reduce the load on GitHub runner numbers and machine queue we cancel
# any older runs of this workflow for the current PR.
concurrency:
group: ${{ github.workflow }}-sel4bench-build-pr-${{ github.event.number }}-${{ strategy.job-index }}
cancel-in-progress: true
strategy:
fail-fast: false
matrix:
march: [armv7a, armv8a, nehalem, rv64imac]
steps:
- name: Build
uses: seL4/ci-actions/sel4bench@master
with:
xml: ${{ needs.code.outputs.xml }}
march: ${{ matrix.march }}
- name: Upload images
uses: actions/upload-artifact@v4
with:
name: images-sel4bench-${{ matrix.march }}
path: '*-images.tar.gz'

hw-run:
name: HW Benchmark
if: ${{ github.repository_owner == 'seL4' }}
runs-on: ubuntu-latest
needs: [build]
concurrency:
group: ${{ github.workflow }}-sel4bench-hw-run-pr-${{ github.event.number }}-${{ strategy.job-index }}
cancel-in-progress: true
strategy:
fail-fast: false
matrix:
platform:
- sabre
- imx8mm_evk
- odroid_c2
- odroid_xu4
- am335x_boneblack
- tx1
- tx2
- hifive
include:
- platform: pc99
req: skylake
- platform: pc99
req: haswell3
steps:
- name: Get machine queue
uses: actions/checkout@v4
with:
repository: seL4/machine_queue
path: machine_queue
- name: Get march
id: plat
uses: seL4/ci-actions/march-of-platform@master
with:
platform: ${{ matrix.platform }}
- name: Download image
uses: actions/download-artifact@v4
with:
name: images-sel4bench-${{ steps.plat.outputs.march }}
- name: Run
uses: seL4/ci-actions/sel4bench-hw@master
with:
platform: ${{ matrix.platform }}
req: ${{ matrix.req }}
index: $${{ strategy.job-index }}
env:
HW_SSH: ${{ secrets.HW_SSH }}
- name: Upload results
uses: actions/upload-artifact@v4
with:
# funky expression below is to work around lack of ternary operator
name: sel4bench-results-${{ matrix.platform }}${{ matrix.req != '' && format('-{0}', matrix.req) || '' }}
path: '*.json'
125 changes: 125 additions & 0 deletions .github/workflows/sel4test-hw.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
# Copyright 2021, Proofcraft Pty Ltd
#
# SPDX-License-Identifier: BSD-2-Clause

# sel4test hardware builds and runs
#
# See sel4test-hw/builds.yml in the repo seL4/ci-actions for configs.

name: seL4Test-HW

on:
workflow_call:

# intended to run on
# pull_request_target:
# types: [opened, reopened, synchronize, labeled]
# needs PR target for secrets access; guard by requiring label

# downgrade permissions to read-only as you would have in a standard PR action
permissions:
contents: read

jobs:
code:
name: Freeze Code
runs-on: ubuntu-latest
if: ${{ github.event_name == 'pull_request_target' &&
(
github.event.action != 'labeled' &&
(contains(github.event.pull_request.labels.*.name, 'hw-build') ||
contains(github.event.pull_request.labels.*.name, 'hw-test')) ||
github.event.action == 'labeled' &&
(github.event.label.name == 'hw-build' ||
github.event.label.name == 'hw-test')
) }}
outputs:
xml: ${{ steps.repo.outputs.xml }}
steps:
- id: repo
uses: seL4/ci-actions/repo-checkout@master
with:
manifest_repo: sel4test-manifest
manifest: master.xml
sha: ${{ github.event.pull_request.head.sha }}

hw-build:
name: HW Build
runs-on: ubuntu-latest
needs: code
# To reduce the load (especially on the machine queue) we cancel any older
# runs of this workflow for the current PR.
concurrency:
group: ${{ github.workflow }}-sel4test-build-pr-${{ github.event.number }}-${{ strategy.job-index }}
cancel-in-progress: true
strategy:
fail-fast: false
matrix:
# There is no "rv32imac" hardware yet.
march: [armv7a, armv8a, nehalem, rv64imac]
compiler: [gcc, clang]
steps:
- name: Build
uses: seL4/ci-actions/sel4test-hw@master
with:
xml: ${{ needs.code.outputs.xml }}
march: ${{ matrix.march }}
compiler: ${{ matrix.compiler }}
- name: Upload images
uses: actions/upload-artifact@v4
with:
name: images-sel4test-${{ matrix.march }}-${{ matrix.compiler }}
path: '*-images.tar.gz'
- name: Upload kernel.elf files
uses: actions/upload-artifact@v4
with:
name: kernel.elf-sel4test-${{ matrix.march }}-${{ matrix.compiler }}
path: '*-kernel.elf'

the_matrix:
axel-h marked this conversation as resolved.
Show resolved Hide resolved
name: Matrix
needs: hw-build
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.matrix.outputs.matrix }}
steps:
- id: matrix
uses: seL4/ci-actions/sel4test-hw-matrix@master

hw-run:
name: HW Run
runs-on: ubuntu-latest
needs: the_matrix
if: ${{ github.repository_owner == 'seL4' &&
axel-h marked this conversation as resolved.
Show resolved Hide resolved
(github.event_name == 'push' ||
github.event_name == 'pull_request_target' &&
github.event.action != 'labeled' &&
contains(github.event.pull_request.labels.*.name, 'hw-test') ||
github.event_name == 'pull_request_target' &&
github.event.action == 'labeled' &&
github.event.label.name == 'hw-test') }}
concurrency:
group: ${{ github.workflow }}-sel4test-hw-run-pr-${{ github.event.number }}-${{ strategy.job-index }}
cancel-in-progress: true
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.the_matrix.outputs.matrix) }}
steps:
- name: Get machine queue
uses: actions/checkout@v4
with:
repository: seL4/machine_queue
path: machine_queue
- name: Download image
uses: actions/download-artifact@v4
with:
name: images-sel4test-${{ matrix.march }}-${{ matrix.compiler }}
- name: Run
uses: seL4/ci-actions/sel4test-hw-run@master
with:
platform: ${{ matrix.platform }}
compiler: ${{ matrix.compiler }}
mode: ${{ matrix.mode }}
index: $${{ strategy.job-index }}
env:
HW_SSH: ${{ secrets.HW_SSH }}
29 changes: 29 additions & 0 deletions .github/workflows/sel4test-sim.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Copyright 2021, Proofcraft Pty Ltd
#
# SPDX-License-Identifier: BSD-2-Clause

# sel4test simulation runs
#
# See sel4test-sim/builds.yml in the repo seL4/ci-actions for configs.

name: seL4Test-Sim

on:
workflow_call:

jobs:
sim:
axel-h marked this conversation as resolved.
Show resolved Hide resolved
name: Simulation
runs-on: ubuntu-latest
strategy:
matrix:
march: [armv7a, armv8a, nehalem, rv32imac, rv64imac]
compiler: [gcc, clang]
concurrency:
group: ${{ github.workflow }}-sel4sim-pr-${{ github.event.number }}-${{ strategy.job-index }}
cancel-in-progress: true
steps:
- uses: seL4/ci-actions/sel4test-sim@master
with:
march: ${{ matrix.march }}
compiler: ${{ matrix.compiler }}
19 changes: 15 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

[![CI](https://github.com/seL4/ci-actions/actions/workflows/push.yml/badge.svg)](https://github.com/seL4/ci-actions/actions/workflows/push.yml)

# CI actions for seL4 repositories
# CI actions and Workflows for seL4 repositories

This repository collects definitions for continuous integration (CI)
tasks/actions for the repositories of the seL4 foundation. While some of these
Expand All @@ -15,11 +15,22 @@ The idea is to concentrate most of the GitHub workflow definitions here in a
single repository to avoid duplication, share code between actions, and to make
it easier to replicate a similar CI setup on other platforms.

Currently, everything is fairly GitHub-specific, but that could change over
time.

Shared JavaScript is in [`js/`](js/), and shared shell scripts are in [`scripts/`](scripts/)

This repository also defines a number of GitHub action workflows that can be
called from other repositories. These are all files in `.github/workflows` that
define an `on: workflow_call` trigger. In particular:

- [pr.yml](.github/workflows/pr.yml) for standard pull requests checks (gitlint,
whitespace, shell checks, style)
- [push.yml](.github/workflows/push.yml) for standard push checks (links, licenses)
- [sel4test-sim.yml](.github/workflows/sel4test-sim.yml) for running the
seL4 simulation tests
- [sel4test-hw.yml](.github/workflows/sel4test-hw.yml) for running the
seL4 hardware tests
- [sel4bench-hw.yml](.github/workflows/sel4bench-hw.yml) for running the
seL4 hardware benchmarks

## Availabe actions

The following GitHub actions are available:
Expand Down