ubuntu-ci-container-x86_64-build #8
This file contains 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: ubuntu-ci-container-x86_64-build | |
on: | |
schedule: | |
- cron: '0 8 * * *' | |
workflow_dispatch: | |
inputs: | |
container: | |
description: 'Container template (input requred, no default value).' | |
required: true | |
specs: | |
description: 'Which specs to add to the template (input requred, no default value).' | |
required: true | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
ubuntu-ci-container-x86_64-build: | |
runs-on: [ubuntu-ci-x86_64] | |
steps: | |
- name: checkout | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
# Ensure that ubuntu can run docker | |
- name: ubuntu-docker | |
run: | | |
echo "Checking if user ubuntu can run docker" | |
if id -nG ubuntu | grep -qw docker; then | |
echo "User ubuntu already belongs to group docker" | |
else | |
echo "Adding user ubuntu to group docker" | |
sudo gpasswd -a ubuntu docker | |
newgrp docker | |
docker run hello-world | |
fi | |
- name: create-ctr | |
run: | | |
source ./setup.sh | |
# Get day of week to set default container for scheduled builds | |
DOW=$(date +%u) | |
# Monday is 1 ... Sunday is 7 | |
if [[ $DOW == 1 || $DOW == 4 ]]; then | |
export CONTAINER=${{ inputs.container || 'docker-ubuntu-clang-mpich' }} | |
export SPECS=${{ inputs.specs || 'jedi-ci' }} | |
elif [[ $DOW == 2 || $DOW == 5 ]]; then | |
export CONTAINER=${{ inputs.container || 'docker-ubuntu-gcc-openmpi' }} | |
export SPECS=${{ inputs.specs || 'jedi-ci' }} | |
elif [[ $DOW == 3 || $DOW == 6 ]]; then | |
export CONTAINER=${{ inputs.container || 'docker-ubuntu-intel-impi' }} | |
export SPECS=${{ inputs.specs || 'jedi-ci' }} | |
else | |
# Day 7: The Sabbath of rest (but do some house keeping later on) | |
exit 0 | |
fi | |
export ENVDIR=$PWD/envs/${CONTAINER} | |
spack stack create ctr --container ${CONTAINER} --specs ${SPECS} | |
cd ${ENVDIR} | |
# mapl@:2.41 doesn't build with mpich@4 - https://github.com/JCSDA/spack-stack/issues/608 | |
if [[ "${CONTAINER}" == *"mpich"* ]]; then | |
sed -i 's/- mapl@/#- mapl@/g' spack.yaml | |
fi | |
spack containerize > Dockerfile | |
docker build -t ${CONTAINER}-${SPECS} . | |
# Report status to JCSDA CI slack channel for nightly runs only | |
- name: Report Status | |
if: always() | |
uses: ravsamhq/notify-slack-action@v1 | |
env: | |
SLACK_WEBHOOK_URL: ${{ secrets.ACTION_MONITORING_SLACK }} | |
with: | |
# https://www.ravsam.in/blog/send-slack-notification-when-github-actions-fails/#getting-a-webhook-url | |
# https://www.ravsam.in/blog/collect-form-responses-using-google-apps-script | |
# https://github.com/marketplace/actions/notify-slack-action | |
status: ${{ job.status }} | |
notify_when: 'success,failure,warnings' | |
notification_title: '{workflow} has {status_message}' | |
message_format: '{emoji} *{workflow}* {status_message} for branch {branch} in <{repo_url}|{repo}>' | |
footer: ${{ github.event.pull_request.number || github.event_name || 'workflow dispatched manually' }} | |
# For testing: only notify user Dom | |
#mention_users: 'U02NLGXF5HV' | |
#mention_users_when: 'failure,warnings' | |
# Default: notify channel | |
mention_groups: '!channel' | |
mention_groups_when: 'failure,warnings' | |
# We can only clean the docker image registry *after* reporting | |
# the status to the CI slack channel, because the cleanup is | |
# deleting the docker image for ravsamhq/notify-slack-action@v1 | |
- name: clean-docker-registry | |
if: always() | |
run: | | |
# Get day of week (only run this on Sunday, which is 7) | |
DOW=$(date +%u) | |
if [[ $DOW == 7 ]]; then | |
echo "Pruning all docker images" | |
docker system prune -a -f | |
fi |