Skip to content

Fix issue 55

Fix issue 55 #671

Workflow file for this run

name: CI
on:
push:
pull_request:
branches: [ main ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Runs the workflow once per day at 3:15am
schedule:
- cron: '3 16 * * *'
env:
CACHE_NUMBER: 1 # increase to reset cache manually
SNAKEMAKE_RESULT_FILE: metadata4ing_provenance
PROVENANACE_FILE_NAME: element_size_vs_max_mises_stress.pdf
jobs:
run-simulation:
runs-on: ubuntu-latest
steps:
- name: checkout repo content
uses: actions/checkout@v2
- name: Setup Mambaforge
uses: conda-incubator/setup-miniconda@v3
with:
miniforge-version: latest
activate-environment: model-validation
use-mamba: true
- name: Set strict channel priority
run: conda config --set channel_priority strict
- name: Update environment
run: mamba env update -n model-validation -f environment_benchmarks.yml
- name: generate-config-files
shell: bash -l {0}
run: |
cd $GITHUB_WORKSPACE/benchmarks/linear-elastic-plate-with-hole/
python generate_config.py
- name: run_linear-elastic-plate-with-hole-benchmarks_snakemake
shell: bash -l {0}
run: |
cd $GITHUB_WORKSPACE/benchmarks/linear-elastic-plate-with-hole/
snakemake --use-conda --force --cores 'all'
snakemake --use-conda --force --cores all \
--reporter metadata4ing \
--report-metadata4ing-paramscript ../common/parameter_extractor.py \
--report-metadata4ing-config metadata4ing.config \
--report-metadata4ing-filename $SNAKEMAKE_RESULT_FILE
- name: run_linear-elastic-plate-with-hole-benchmarks_nextflow
shell: bash -l {0}
run: |
cd $GITHUB_WORKSPACE/benchmarks/linear-elastic-plate-with-hole/
nextflow run main.nf -params-file workflow_config.json -c ../common/nextflow.config -plugins nf-prov@1.4.0
- name: Archive Linear Elastic plate with a hole benchmark data for snakemake
uses: actions/upload-artifact@v4
with:
name: snakemake_results_linear-elastic-plate-with-hole
path: |
benchmarks/linear-elastic-plate-with-hole/${{ env.SNAKEMAKE_RESULT_FILE }}.zip
- name: Archive Linear Elastic plate with a hole benchmark data for nextflow
uses: actions/upload-artifact@v4
with:
name: nextflow_results_linear-elastic-plate-with-hole
path: |
benchmarks/linear-elastic-plate-with-hole/nextflow_results/
process-artifacts:
runs-on: ubuntu-latest
needs: run-simulation
steps:
- name: Checkout repo content
uses: actions/checkout@v2
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: snakemake_results_linear-elastic-plate-with-hole
path: ./artifact_files
- name: Unzip Snakemake Result File
run: |
mkdir -p ./$SNAKEMAKE_RESULT_FILE
unzip -o ./artifact_files/$SNAKEMAKE_RESULT_FILE.zip -d ./$SNAKEMAKE_RESULT_FILE
- name: Setup Mambaforge with postprocessing env
uses: conda-incubator/setup-miniconda@v3
with:
miniforge-version: latest
activate-environment: postprocessing
use-mamba: true
environment-file: benchmarks/linear-elastic-plate-with-hole/environment_postprocessing.yml
- name: Validate Snakemake Result File
shell: bash -l {0}
run: |
python benchmarks/common/validate_provenance.py \
--provenance_folderpath "./$SNAKEMAKE_RESULT_FILE"
- name: Run plotting script
shell: bash -l {0}
run: |
python benchmarks/linear-elastic-plate-with-hole/plot_metrics.py \
--provenance_folderpath "./$SNAKEMAKE_RESULT_FILE" \
--output_file $PROVENANACE_FILE_NAME
- name: Upload snakemake results file as artifact
uses: actions/upload-artifact@v4
with:
name: element-size-vs-stress-plot
path: ${{ env.PROVENANACE_FILE_NAME }}
- name: Re-zip snakemake result folder
run: |
cd "./${SNAKEMAKE_RESULT_FILE}"
zip -r "../${SNAKEMAKE_RESULT_FILE}.zip" .
- name: Upload RoCrate Zip file onto RoHub
id: rohub_upload
shell: bash -l {0}
continue-on-error: true
run: |
LOG_FILE="${GITHUB_WORKSPACE}/rohub_upload_error.log"
# Run Python and capture stdout+stderr
OUTPUT="$(
python benchmarks/common/upload_provenance.py \
--provenance_folderpath "./${SNAKEMAKE_RESULT_FILE}.zip" \
--benchmark_name "linear-elastic-plate-with-hole" \
--username "${{ secrets.ROHUB_USERNAME }}" \
--password "${{ secrets.ROHUB_PASSWORD }}" \
2>&1
)"
PYTHON_EXIT_CODE=$?
# Standard convention: 0 = success, non-zero = failure
if [ "$PYTHON_EXIT_CODE" -eq 0 ]; then
echo "RoHub upload succeeded"
rm -f "$LOG_FILE" || true
else
echo "=== RoHub upload failed — writing log to $LOG_FILE ==="
printf '%s\n' "$OUTPUT" | tee "$LOG_FILE"
fi
- name: Upload RoHub error log
if: always()
uses: actions/upload-artifact@v4
with:
name: rohub-upload-error-log
path: ${{ github.workspace }}/rohub_upload_error.log
if-no-files-found: ignore