Skip to content

Commpath

Commpath #116

Workflow file for this run

# FIXME Handle case where only a subset of nodes generate logs.
# FIXME More refactoring, possibly with bash functions and filename templates as ENV variables
# Lessons learned:
# Invoking tar via bash -c really wants full paths for both parameters.
# Given that, there's no need for a cd call ahead of it.
# YAML env variables don't get translated in bash -c strings.
# Use ${{ env.FOO }} to dereference YAML environment variables.
# The env space is global across jobs.
name: ci
on:
push:
branches:
- devel
- commpath
pull_request:
branches:
- devel
permissions:
contents: read
packages: read
concurrency:
group: ci-${{github.ref}}-${{github.event.pull_request.number || github.run_number}}
cancel-in-progress: true
jobs:
################################################################################
# spindle-serial-ubuntu
################################################################################
spindle-serial-ubuntu:
name: Testsuite (Serial, Ubuntu, debug=${{ matrix.debug }})
environment: Spindle CI
runs-on: ubuntu-latest
timeout-minutes: 20
env:
TARBALL: ./serial_ubunutu_dbg${{ matrix.debug }}_${{ github.run_id }}_${{ github.run_attempt }}.tar.bz2
UNIQNAME: spindle_serial_ubuntu_${{ matrix.debug }}_sha${{ github.sha }}_run${{ github.run_id }}_attempt${{ github.run_attempt }}
strategy:
fail-fast: false
matrix:
debug: [0, 1, 2, 3]
steps:
- name: Check out Spindle
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Setup Docker Compose
uses: docker/setup-compose-action@364cc21a5de5b1ee4a7f5f9d3fa374ce0ccde746
with:
version: latest
- name: Build spindle-serial-ubuntu image
id: serial-ubuntu-build
run: |
cd containers/spindle-serial-ubuntu
docker compose --progress=plain build
- name: Bring spindle-serial-ubuntu up
id: serial-ubuntu-up
run: |
cd containers/spindle-serial-ubuntu
docker compose up -d
- name: Verify munge works in spindle-serial-ubuntu
id: serial-ubuntu-munge
run: |
docker exec spindlenode bash -c 'munge -n | unmunge'
# Matrix across "debug"
- name: Run spindle-serial-ubuntu testsuite
timeout-minutes: ${{ matrix.debug == 0 && 2 || 2 }}
run: |
if [ "${{ matrix.debug }}" = "0" ]; then
docker exec spindlenode bash -c \
'cd Spindle-build/testsuite && ./runTests'
else
docker exec spindlenode bash -c \
"cd Spindle-build/testsuite && SPINDLE_DEBUG=${{ matrix.debug }} ./runTests"
fi
# If we saw any failures, tar up the logfiles for extraction.
- name: On failure, pull logs out of the container(s)
id: serial-ubuntu-copy-from-container
if: ${{ success() && matrix.debug != 0}} # REVERT!
continue-on-error: true
run: |
docker exec spindlenode bash -c "tar cjvf /home/spindleuser/ubuntu_serial_logs.tar.bz2 /home/spindleuser/Spindle-build//testsuite/spindle_output*"
docker cp spindlenode:/home/spindleuser/ubuntu_serial_logs.tar.bz2 ${{ env.TARBALL }}
# This works
#docker cp spindlenode:/home/spindleuser/ubuntu_serial_logs.tar.bz2 ./ubuntu_serial_logs_${{ matrix.debug }}.tar.bz2
- name: Upload ubuntu-serial logs
id: serial-ubuntu-copy-to-artifact
if: ${{ success() }} # REVERT!
uses: actions/upload-artifact@v6
with:
name: ${{ env.UNIQNAME }}
path: ${{ env.TARBALL }}
# This works
#path: ./ubuntu_serial_logs_${{ matrix.debug }}.tar.bz2
- name: Bring spindle-serial-ubuntu down
id: serial-ubuntu-down
if: ${{ always() }}
continue-on-error: true
run: |
cd containers/spindle-serial-ubuntu
docker compose down
################################################################################
# spindle-flux-ubuntu
################################################################################
spindle-flux-ubuntu:
name: Testsuite (Flux, Ubuntu)
environment: Spindle CI
runs-on: ubuntu-latest
timeout-minutes: 20
env:
TARBALL1: ./flux_node1_dbg${{ matrix.debug }}_sha${{ github.sha }}_run${{ github.run_id }}_attempt${{ github.run_attempt }}.tar.bz2
TARBALL2: ./flux_node2_dbg${{ matrix.debug }}_sha${{ github.sha }}_run${{ github.run_id }}_attempt${{ github.run_attempt }}.tar.bz2
TARBALL3: ./flux_node3_dbg${{ matrix.debug }}_sha${{ github.sha }}_run${{ github.run_id }}_attempt${{ github.run_attempt }}.tar.bz2
TARBALL4: ./flux_node4_dbg${{ matrix.debug }}_sha${{ github.sha }}_run${{ github.run_id }}_attempt${{ github.run_attempt }}.tar.bz2
UNIQNAME: spindle_flux_ubutnu_${{ matrix.debug }}_sha${{ github.sha }}_run${{ github.run_id }}_attempt${{ github.run_attempt }}
strategy:
fail-fast: false
matrix:
debug: [0, 1, 2, 3]
steps:
- name: Check out Spindle (spindle-flux-ubuntu-debug3)
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Setup Docker Compose (spindle-flux-ubuntu-debug3)
uses: docker/setup-compose-action@364cc21a5de5b1ee4a7f5f9d3fa374ce0ccde746
with:
version: latest
- name: Build spindle-flux-ubuntu-debug3 image
id: flux-ubuntu-build
run: |
cd containers/spindle-flux-ubuntu
docker compose --progress=plain build
- name: Bring spindle-flux-ubuntu up
id: flux-ubuntu--up
run: |
cd containers/spindle-flux-ubuntu
docker compose up -d --wait --wait-timeout 60
- name: Verify munge works in spindle-flux-ubuntu-debug3
id: flux-ubuntu-debug3-munge
run: |
docker exec node-1 bash -c 'munge -n | unmunge'
# Observed time: 5m 12s
- name: Run spindle-flux-ubuntu testsuite
timeout-minutes: 7
id: flux-ubuntu-testsuite
run: |
if [ "${{ matrix.debug }}" = "0" ]; then
docker exec node-1 bash -c \
'cd /home/fluxuser/Spindle-build/testsuite && \
flux alloc --nodes=${workers} \
./runTests --nodes=${workers} --tasks-per-node=3'
else
docker exec node-1 bash -c \
'cd /home/fluxuser/Spindle-build/testsuite && \
SPINDLE_DEBUG=${{ matrix.debug }} \
flux alloc --nodes=${workers} \
./runTests --nodes=${workers} --tasks-per-node=3'
fi
# If we saw any failures, tar up the logfiles for extraction. Observed time: 7m 51s
- name: Extract logs from spindle-flux-ubuntu
timeout-minutes: 9
id: flux-ubuntu-tar
if: ${{ success() && matrix.debug != 0 }} # REVERT!
continue-on-error: true
run: |
docker exec node-1 bash -c "ls /home/fluxuser/Spindle-build/testsuite/spindle_output*"
docker exec node-1 bash -c "tar cjvf /home/fluxuser/node1.tar.bz2 /home/fluxuser/Spindle-build/testsuite/spindle_output*"
docker exec node-2 bash -c "tar cjvf /home/fluxuser/node2.tar.bz2 /home/fluxuser/Spindle-build/testsuite/spindle_output*"
docker exec node-3 bash -c "tar cjvf /home/fluxuser/node3.tar.bz2 /home/fluxuser/Spindle-build/testsuite/spindle_output*"
docker exec node-4 bash -c "tar cjvf /home/fluxuser/node4.tar.bz2 /home/fluxuser/Spindle-build/testsuite/spindle_output*"
docker cp node-1:/home/fluxuser/node1.tar.bz2 ${{ env.TARBALL1 }}
docker cp node-2:/home/fluxuser/node2.tar.bz2 ${{ env.TARBALL2 }}
docker cp node-3:/home/fluxuser/node3.tar.bz2 ${{ env.TARBALL3 }}
docker cp node-4:/home/fluxuser/node4.tar.bz2 ${{ env.TARBALL4 }}
- name: Upload logs to artifacts
id: flux-ubuntu-artifact
if: ${{ success() && matrix.debug != 0 }} # REVERT!
uses: actions/upload-artifact@v6
with:
name: ${{ env.UNIQNAME }}
# NOTE: This is the runner path, not the container path.
path: |
${{ env.TARBALL1 }}
${{ env.TARBALL2 }}
${{ env.TARBALL3 }}
${{ env.TARBALL4 }}
- name: spindle-flux-ubuntu teardown container
id: flux-ubuntu-down
if: ${{ always() }}
continue-on-error: true
run: |
cd containers/spindle-flux-ubuntu
docker compose down
#################################################################################
## spindle-slurm-ubuntu
#################################################################################
# spindle-slurm-ubuntu:
# name: Testsuite (Slurm, Ubuntu)
# environment: Spindle CI
# runs-on: ubuntu-latest
# timeout-minutes: 12
# env:
# TARBALL1: ./slurm_node1_dbg${{ matrix.debug }}_${{ github.run_id }}_${{ github.run_attempt }}.tar.bz2
# TARBALL2: ./slurm_node2_dbg${{ matrix.debug }}_${{ github.run_id }}_${{ github.run_attempt }}.tar.bz2
# TARBALL3: ./slurm_node3_dbg${{ matrix.debug }}_${{ github.run_id }}_${{ github.run_attempt }}.tar.bz2
# TARBALL4: ./slurm_node4_dbg${{ matrix.debug }}_${{ github.run_id }}_${{ github.run_attempt }}.tar.bz2
# TARBALL5: ./slurm_nodeH_dbg${{ matrix.debug }}_${{ github.run_id }}_${{ github.run_attempt }}.tar.bz2
# strategy:
# fail-fast: false
# matrix:
# debug: [3, 2, 1, 0]
# steps:
# - name: Check out Spindle
# uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
#
# - name: Setup Docker Compose
# uses: docker/setup-compose-action@364cc21a5de5b1ee4a7f5f9d3fa374ce0ccde746
# with:
# version: latest
#
# - name: Login to GitHub Container Registry
# if: ${{ !env.ACT }}
# uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9
# with:
# registry: ghcr.io
# username: ${{ github.actor }}
# password: ${{ secrets.GITHUB_TOKEN }}
#
# - name: Generate MariaDB configuration
# id: slurm-ubuntu-mariadb
# run: |
# cd containers/spindle-slurm-ubuntu/testing
# ./generate_config.sh
#
# - name: Build spindle-slurm-ubuntu image
# id: slurm-ubuntu-build
# run: |
# cd containers/spindle-slurm-ubuntu/testing
# docker compose --progress=plain build
#
# - name: Bring spindle-slurm-ubuntu up
# id: slurm-ubuntu-up
# run: |
# cd containers/spindle-slurm-ubuntu/testing
# docker compose up -d --wait --wait-timeout 120
#
# - name: Verify munge works in spindle-slurm-ubuntu
# id: slurm-ubuntu-munge
# run: |
# docker exec slurm-head bash -c 'munge -n | unmunge'
#
## Matrix across "debug"
# - name: Run spindle-slurm-ubuntu testsuite
# timeout-minutes: 4
# id: slurm-ubuntu-debug3-testsuite
# run: |
# if [ "${{ matrix.debug }}" = "0" ]; then
# docker exec slurm-head bash -c \
# 'cd Spindle-build/testsuite && \
# salloc -n${workers} -N${workers} ./runTests ${workers}'
# else
# docker exec slurm-head bash -c \
# 'cd Spindle-build/testsuite && SPINDLE_DEBUG=${{ matrix.debug }} \
# salloc -n${workers} -N${workers} ./runTests ${workers}'
# fi
#
## Extract logs on failure
# - name: Pull logs out of the container(s)
# id: slurm-ubuntu-copy-from-container
# if: ${{ failure() && matrix.debug != 0 }}
# continue-on-error: true
# run: |
# docker exec slurm-node-1 bash -c "ls /home/slurmuser/Spindle-build/testsuite/spindle_output*"
# docker exec slurm-node-1 bash -c "cd /home/slurmuser/Spindle-build && tar cjvf ./node1.tar.bz2 ./testsuite/spindle_output*"
# docker exec slurm-node-2 bash -c "cd /home/slurmuser/Spindle-build && tar cjvf ./node2.tar.bz2 ./testsuite/spindle_output*"
# docker exec slurm-node-3 bash -c "cd /home/slurmuser/Spindle-build && tar cjvf ./node3.tar.bz2 ./testsuite/spindle_output*"
# docker exec slurm-node-4 bash -c "cd /home/slurmuser/Spindle-build && tar cjvf ./node4.tar.bz2 ./testsuite/spindle_output*"
# docker exec slurm-head bash -c "cd /home/slurmuser/Spindle-build && tar cjvf ./head.tar.bz2 ./testsuite/spindle_output*"
# docker cp slurm-node-1:/home/slurmuser/Spindle-build/node1.tar.bz2 $TARBALL1
# docker cp slurm-node-2:/home/slurmuser/Spindle-build/node2.tar.bz2 $TARBALL2
# docker cp slurm-node-3:/home/slurmuser/Spindle-build/node3.tar.bz2 $TARBALL3
# docker cp slurm-node-4:/home/slurmuser/Spindle-build/node4.tar.bz2 $TARBALL4
# docker cp slurm-head:/home/slurmuser/Spindle-build/head.tar.bz2 $TARBALLH
#
# - name: Upload slurm ubuntu logs
# id: slurm-ubuntu-copy-to-artifact
# if: ${{ failure() && matrix.debug != 0 }}
# uses: actions/upload-artifact@v6
# with:
# name: Ubuntu slurm logs tarball
# # NOTE: This is the runner path, not the container path.
# path: |
# $TARBALL1
# $TARBALL2
# $TARBALL3
# $TARBALL4
# $TARBALLH
#
# - name: Bring spindle-slurm-ubuntu down
# id: slurm-ubuntu-down
# if: ${{ always() }}
# continue-on-error: true
# run: |
# cd containers/spindle-slurm-ubuntu/testing
# docker compose down
#
#################################################################################
## spindle-slurm-plugin-ubuntu
#################################################################################
# spindle-slurm-plugin-ubuntu:
# name: Testsuite (Slurm Plugin, Ubuntu)
# environment: Spindle CI
# runs-on: ubuntu-latest
# timeout-minutes: 12
# env:
# TARBALL1: ./plugin_node1_dbg${{ matrix.debug }}_${{ github.run_id }}_${{ github.run_attempt }}.tar.bz2
# TARBALL2: ./plugin_node2_dbg${{ matrix.debug }}_${{ github.run_id }}_${{ github.run_attempt }}.tar.bz2
# TARBALL3: ./plugin_node3_dbg${{ matrix.debug }}_${{ github.run_id }}_${{ github.run_attempt }}.tar.bz2
# TARBALL4: ./plugin_node4_dbg${{ matrix.debug }}_${{ github.run_id }}_${{ github.run_attempt }}.tar.bz2
# TARBALL5: ./plugin_nodeH_dbg${{ matrix.debug }}_${{ github.run_id }}_${{ github.run_attempt }}.tar.bz2
# strategy:
# fail-fast: false
# matrix:
# debug: [3, 2, 1, 0]
# steps:
# - name: Check out Spindle
# uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
#
# - name: Setup Docker Compose
# uses: docker/setup-compose-action@364cc21a5de5b1ee4a7f5f9d3fa374ce0ccde746
# with:
# version: latest
#
# - name: Login to GitHub Container Registry
# if: ${{ !env.ACT }}
# uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef
# with:
# registry: ghcr.io
# username: ${{ github.actor }}
# password: ${{ secrets.GITHUB_TOKEN }}
#
# - name: Generate MariaDB configuration
# id: slurm-ubuntu-mariadb
# run: |
# cd containers/spindle-slurm-ubuntu/testing-plugin
# ./generate_config.sh
#
# - name: Build spindle-slurm-plugin-ubuntu image
# id: slurm-ubuntu-build
# run: |
# cd containers/spindle-slurm-ubuntu/testing-plugin
# docker compose --progress=plain build
#
# - name: Bring spindle-slurm-plugin-ubuntu up
# id: slurm-ubuntu-up
# run: |
# cd containers/spindle-slurm-ubuntu/testing-plugin
# docker compose up -d --wait --wait-timeout 120
#
# - name: Verify munge works in spindle-slurm-plugin-ubuntu
# id: slurm-ubuntu-munge
# run: |
# docker exec slurm-plugin-head bash -c 'munge -n | unmunge'
#
## Matrix across "debug"
# - name: Run spindle-slurm-plugin-ubuntu testsuite
# timeout-minutes: 4
# id: slurm-ubuntu-testsuite
# run: |
# if [ "${{ matrix.debug }}" = "0" ]; then
# docker exec slurm-plugin-head bash -c \
# 'cd Spindle-build/testsuite && \
# salloc -n${workers} -N${workers} ./runTests ${workers}'
# else
# docker exec slurm-plugin-head bash -c \
# 'cd Spindle-build/testsuite && SPINDLE_DEBUG=${{ matrix.debug }} \
# salloc -n${workers} -N${workers} ./runTests ${workers}'
# fi
## Extract logs on failure
# - name: Pull logs out of the container(s)
# id: plugin-ubuntu-copy-from-container
# if: ${{ failure() && matrix.debug != 0 }}
# continue-on-error: true
# run: |
# docker exec slurm-plugin-node-1 bash -c "ls /home/slurmuser/Spindle-build/testsuite/spindle_output*"
# docker exec slurm-plugin-node-1 bash -c "cd /home/slurmuser/Spindle-build && tar cjvf node1.tar.bz2 ./testsuite/spindle_output*"
# docker exec slurm-plugin-node-2 bash -c "cd /home/slurmuser/Spindle-build && tar cjvf node2.tar.bz2 ./testsuite/spindle_output*"
# docker exec slurm-plugin-node-3 bash -c "cd /home/slurmuser/Spindle-build && tar cjvf node3.tar.bz2 ./testsuite/spindle_output*"
# docker exec slurm-plugin-node-4 bash -c "cd /home/slurmuser/Spindle-build && tar cjvf node4.tar.bz2 ./testsuite/spindle_output*"
# docker exec slurm-plugin-head bash -c "cd /home/slurmuser/Spindle-build && tar cjvf head.tar.bz2 ./testsuite/spindle_output*"
# docker cp slurm-plugin-node-1:/home/slurmuser/Spindle-build/node1.tar.bz2 $TARBALL1
# docker cp slurm-plugin-node-2:/home/slurmuser/Spindle-build/node2.tar.bz2 $TARBALL2
# docker cp slurm-plugin-node-3:/home/slurmuser/Spindle-build/node3.tar.bz2 $TARBALL3
# docker cp slurm-plugin-node-4:/home/slurmuser/Spindle-build/node4.tar.bz2 $TARBALL4
# docker cp slurm-plugin-head:/home/slurmuser/Spindle-build/head.tar.bz2 $TARBALLH
#
# - name: Upload slurm ubuntu logs
# id: slurm-ubuntu-copy-to-artifact
# if: ${{ failure() && matrix.debug != 0 }}
# uses: actions/upload-artifact@v6
# with:
# name: Ubuntu slurm logs tarball
# # NOTE: This is the runner path, not the container path.
# path: |
# $TARBALL1
# $TARBALL2
# $TARBALL3
# $TARBALL4
# $TARBALLH
#
# - name: Bring spindle-slurm-plugin-ubuntu down
# id: slurm-ubuntu-down
# if: ${{ always() }}
# continue-on-error: true
# run: |
# cd containers/spindle-slurm-ubuntu/testing-plugin
# docker compose down
#