radio tde #1837
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: build | |
on: | |
push: | |
branches: [ master ] | |
paths-ignore: | |
- 'docs/**' | |
- 'README.md' | |
pull_request: | |
branches: [ master ] | |
paths-ignore: | |
- 'docs/**' | |
- 'README.md' | |
# schedule: | |
# - cron: "0 0 * * *" | |
env: | |
OMP_STACKSIZE: 512M | |
SPLASH_DIR: ${{ github.workspace }}/splash | |
PHANTOM_DIR: ${{ github.workspace }} | |
WEB_USER: github | |
WEB_SERVER: data.phantom.cloud.edu.au | |
WEB_HTML_DIR: /var/www/html | |
BUILD_LOG_DIR: /ci/build/logs | |
RSYNC_RSH: ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" | |
NPARALLEL: 32 | |
jobs: | |
matrix_prep: | |
# Skip scheduled runs on forks | |
if: ${{ github.event_name != 'schedule' || github.repository == 'danieljprice/phantom' }} | |
runs-on: ubuntu-latest | |
outputs: | |
batch: ${{ steps.set-sequence.outputs.batch }} | |
nbatch: ${{ steps.set-sequence.outputs.nbatch }} | |
steps: | |
- name: Check out repo | |
uses: actions/checkout@v3 | |
- name: Generate sequence of batch numbers for normal tests, or run sequentially for scheduled tests | |
id: set-sequence | |
run: | | |
if [[ ${{ github.event_name == 'schedule' }} ]]; then | |
range=$(jq -ncR "[range(1;${NPARALLEL}+1)]") | |
echo "::set-output name=batch::${range}" | |
echo "::set-output name=nbatch::${NPARALLEL}" | |
else | |
echo "::set-output name=batch::[1]" | |
echo "::set-output name=nbatch::1" | |
fi | |
build: | |
needs: matrix_prep | |
strategy: | |
fail-fast: false | |
matrix: | |
system: | |
- gfortran | |
- ifort | |
batch: ${{ fromJson(needs.matrix_prep.outputs.batch) }} | |
name: build (batch ${{ matrix.batch }}/${{ needs.matrix_prep.outputs.nbatch }}, SYSTEM=${{ matrix.system }}) | |
runs-on: ubuntu-latest | |
steps: | |
- name: "Nuke the github workspace before doing anything" | |
run: rm -r ${{ github.workspace }} && mkdir ${{ github.workspace }} | |
- name: Update package list | |
run: sudo apt-get update | |
- name: Setup Intel repo | |
if: matrix.system == 'ifort' | |
id: intel-repo | |
run: | | |
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
sudo echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list | |
sudo apt-get update | |
INTELVERSION=$(apt-cache show intel-oneapi-compiler-fortran | grep Version | head -1) | |
echo "::set-output name=intelversion::$INTELVERSION" | |
- name: Cache intel installation | |
if: matrix.system == 'ifort' | |
id: cache-intel | |
uses: actions/cache@v3 | |
with: | |
path: | | |
/opt/intel | |
key: ${{ steps.intel-repo.outputs.intelversion }} | |
- name: Install Intel compilers | |
if: ${{ steps.cache-intel.outputs.cache-hit != 'true' && matrix.system == 'ifort' }} | |
run: | | |
sudo apt-get install -y intel-oneapi-common-vars | |
sudo apt-get install -y intel-oneapi-compiler-fortran | |
sudo apt-get install -y intel-oneapi-mpi | |
sudo apt-get install -y intel-oneapi-mpi-devel | |
- name: Setup Intel oneAPI environment | |
if: matrix.system == 'ifort' | |
run: | | |
source /opt/intel/oneapi/setvars.sh | |
printenv >> $GITHUB_ENV | |
- name: Install numpy and matplotlib for analysis unit tests | |
run: | | |
sudo apt-get install -y python3-numpy | |
sudo apt-get install -y python3-matplotlib | |
- name: "Clone phantom" | |
uses: actions/checkout@v3 | |
- name: "Grab a copy of splash source code" | |
uses: actions/checkout@v3 | |
with: | |
repository: danieljprice/splash | |
path: splash | |
- name: "Create logs directory" | |
if: github.event_name == 'schedule' | |
run: mkdir logs | |
# - name: "Grab previous build logs from web server" | |
# if: github.event_name == 'schedule' | |
# env: | |
# WGET: wget --recursive --no-parent --reject "index.html*" --cut-dirs=2 --no-host-directories | |
# run: ${WGET} -A '*${{ matrix.system[1] }}.txt' http://${WEB_SERVER}${BUILD_LOG_DIR}/ || true | |
- name: "Run buildbot.sh" | |
run: ./buildbot.sh --maxdim 17000000 --url http://${WEB_SERVER}/${BUILD_LOG_DIR} --parallel ${{ matrix.batch }} ${{ env.NPARALLEL }} | |
working-directory: scripts | |
env: | |
SYSTEM: ${{ matrix.system }} | |
RETURN_ERR: yes | |
# - name: "Install SSH Key" | |
# if: github.event_name == 'schedule' | |
# uses: webfactory/[email protected] | |
# with: | |
# ssh-private-key: ${{ secrets.RUNNER_PRIVATE_KEY }} | |
# - name: "Copy new build logs to web server" | |
# if: ${{ (success() || failure()) && github.event_name == 'schedule' }} | |
# run: rsync -vau logs/*.txt ${WEB_USER}@${WEB_SERVER}:${WEB_HTML_DIR}/${BUILD_LOG_DIR} | |
# - name: "Copy HTML files to web server" | |
# if: ${{ (success() || failure()) && github.event_name == 'schedule' }} | |
# run: | | |
# export WEB_BUILD_DIR=${WEB_HTML_DIR}/nightly/build/$(date "+%Y%m%d") | |
# ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" ${WEB_USER}@${WEB_SERVER} -- mkdir -p ${WEB_BUILD_DIR} | |
# rsync -vau logs/*.html ${WEB_USER}@${WEB_SERVER}:${WEB_BUILD_DIR}/ | |
- name: logs/build-failures-${{ matrix.system }}.txt | |
if: always() | |
run: cat logs/build-failures-${{ matrix.system }}.txt || true | |
- name: logs/setup-failures-${{ matrix.system }}.txt | |
if: always() | |
run: cat logs/setup-failures-${{ matrix.system }}.txt || true | |
- name: logs/analysis-failures-${{ matrix.system }}.txt | |
if: always() | |
run: cat logs/analysis-failures-${{ matrix.system }}.txt || true | |
- name: logs/make-*-${{ matrix.system }}.txt | |
if: always() | |
run: | | |
echo | |
for item in $(ls logs/make-*-${{ matrix.system }}.txt); do | |
echo ::group::"${item}" | |
cat $item | |
echo ::endgroup:: | |
done | |
# Gather results into a dummy job that will fail if the previous job fails | |
gather_results: | |
if: ${{ always() && github.event_name != 'schedule' }} | |
needs: | |
- build | |
# This name matches the branch protection requirement | |
name: build | |
# Always run on github runner; no need to use custom runner for the check | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check all builds succeeded | |
run: | | |
if [[ "${{ needs.build.result }}" == "success" ]]; then | |
echo "All build succeeded" | |
else | |
echo "At least one build failed" | |
exit 1 | |
fi |