Skip to content

Commit

Permalink
Update Morello CI (#590)
Browse files Browse the repository at this point in the history
* Move Morello CI to track default release

- Log some details of the build environment

- Remove workarounds overcome by events

* Morello CI: parameterize run queue and boot env

* Morello CI to run as a non-root user

For reasons unrelated to snmalloc, it's become more convenient to engage
in a little white lie, as it were, that the CI jobs are not `root` on
the worker nodes.  So I'm testing changes on the cluster orchestration
goo to run the github runner as a non-root user.  However, much as with
GitHub's own runners, the runner user is in the `wheel`, and `root` will
have no password, so we can still `su` up to `root` when needed.

Of course, when we are already root, we can `su` to anyone we like,
including `root`, so these changes are compatible with both the old and
new world order and have been tested with both.
  • Loading branch information
nwf-msr authored Feb 20, 2023
1 parent b9b9055 commit 50cb8b8
Showing 1 changed file with 34 additions and 25 deletions.
59 changes: 34 additions & 25 deletions .github/workflows/morello.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,28 @@
name: snmalloc CI for Morello

# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the master branch
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches: [ main ]
pull_request:
branches: [ main ]

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
inputs:
bootenv_label:
description: "Morello host environment"
type: string
required: true
default: "benchmark"

runqueue_label:
description: "Morello runner queue (production or test scripts?)"
required: true
type: choice
options:
- "msr-morello"
- "msr-morello-test"

jobs:
# UNIX-like, but with some needed TLC for the moment, so not folded in to the main unixlike CI.
Expand All @@ -25,42 +38,46 @@ jobs:
include:
- os: "morello"
caps: Hybrid
dependencies: |
pkg64 install -y llvm-localbase cmake ninja
dependencies: >-
llvm-localbase cmake ninja
cmake-flags: >
-DCMAKE_CXX_COMPILER=/usr/local64/bin/clang++
-DCMAKE_C_COMPILER=/usr/local64/bin/clang
-DCMAKE_CXX_FLAGS='-march=morello -Xclang -morello-vararg=new'
-DCMAKE_C_FLAGS='-march=morello -Xclang -morello-vararg=new'
- os: "morello"
caps: Purecap
dependencies: |
pkg64 install -y llvm-localbase cmake ninja
dependencies: >-
llvm-localbase cmake ninja
cmake-flags: >
-DCMAKE_CXX_COMPILER=/usr/local64/bin/clang++
-DCMAKE_C_COMPILER=/usr/local64/bin/clang
-DCMAKE_CXX_FLAGS='-march=morello -mabi=purecap -Xclang -morello-vararg=new'
-DCMAKE_C_FLAGS='-march=morello -mabi=purecap -Xclang -morello-vararg=new'
-DSNMALLOC_LINK_ICF=OFF
# SNMALLOC_LINK_ICF=OFF until the fix for
# https://git.morello-project.org/morello/llvm-project/-/issues/51 , namely
# https://git.morello-project.org/morello/llvm-project/-/commit/f41cb9104e0793de87d98b38acb274b2e3266091
# lands in a package or a release. That's probably the Fall 2022 release.
# Don't abort runners if a single one fails
fail-fast: false
# Morello needs special handling to get picked up by our self-hosted runners
# When/if we do integrate this back into the unixlike matrix above, we could
# say something like::
# runs-on: >-
# ${{ (matrix.os == 'morello' && fromJSON('["self-hosted", "msr-morello", "2022.05-benchmark"]'))
# ${{ (matrix.os == 'morello' && fromJSON('["self-hosted", "msr-morello", "benchmark"]'))
# || matrix.os }}
# to dispatch dynamically.
runs-on: ["self-hosted", "msr-morello", "2022.05-benchmark"]
runs-on: >-
${{ fromJSON(format(
'[ "self-hosted", "{0}", "{1}" ]',
inputs.runqueue_label || 'msr-morello',
inputs.bootenv_label || 'benchmark' )) }}
name: ${{ matrix.os }} ${{ matrix.build-type }} ${{ matrix.caps }}
steps:
- uses: actions/checkout@v2
- name: Install build dependencies
run: ${{ matrix.dependencies }}
run: |
su -l root -c "pkg64 install -y ${{ matrix.dependencies }}"
- name: Log environment details
run: |
uname -a
mount
- name: Configure CMake
run: >
cmake
Expand All @@ -70,24 +87,16 @@ jobs:
${{ matrix.extra-cmake-flags }}
# Build with a nice ninja status line
- name: Build
# https://github.com/ChristopherHX/github-act-runner seemingly ignores working-directory,
# but everyone agrees that we start in ${{github.workspace}} by default, so just cd into
# the build directory ourselves. See
# https://docs.github.com/en/actions/learn-github-actions/contexts#github-context
# https://github.com/ChristopherHX/github-act-runner/issues/61
# working-directory: ${{github.workspace}}/build
working-directory: ${{github.workspace}}/build
run: |
cd build
NINJA_STATUS="%p [%f:%s/%t] %o/s, %es" ninja
- name: Test file size of binaries is sane
# working-directory: ${{github.workspace}}/build
working-directory: ${{github.workspace}}/build
run: |
cd build
ls -l func-first_operation-fast ; [ $(ls -l func-first_operation-fast | awk '{ print $5}') -lt 10000000 ]
# If the tests are enabled for this job, run them
- name: Test
if: ${{ matrix.build-only != 'yes' }}
# working-directory: ${{github.workspace}}/build
working-directory: ${{github.workspace}}/build
run: |
cd build
ctest --output-on-failure -j 4 -C ${{ matrix.build-type }} --timeout 400

0 comments on commit 50cb8b8

Please sign in to comment.