Skip to content

Bump actions/download-artifact from 5 to 6 #779

Bump actions/download-artifact from 5 to 6

Bump actions/download-artifact from 5 to 6 #779

Workflow file for this run

name: Build Test
# Builds and tests stormpy with different versions of Storm
# also deploys images to Dockerhub
on:
push:
branches:
- master
schedule:
# run weekly
- cron: '0 10 * * 3'
# needed to trigger the workflow manually
workflow_dispatch:
pull_request:
env:
# GitHub runners currently have 4 cores
NR_JOBS: "4"
jobs:
indepthTests:
name: Indepth Tests (${{ matrix.build_type.name }}, ${{ matrix.config.name }})
runs-on: ubuntu-latest
strategy:
matrix:
build_type:
- {name: "Debug",
storm_base: "ci-debug",
build_args: "Debug",
}
- {name: "Release",
storm_base: "ci",
build_args: "Release",
}
config:
- {name: "all libraries",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_FETCH=OFF",
optional_libs: "[numpy,plot,test]",
test_opt: ""
}
- {name: "no libraries",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_FETCH=OFF --config-settings=cmake.define=USE_STORM_DFT=OFF --config-settings=cmake.define.USE_STORM_GSPN=OFF --config-settings=cmake.define.USE_STORM_PARS=OFF --config-settings=cmake.define.USE_STORM_POMDP=OFF --config-settings=cmake.define.USE_PARSER=OFF",
optional_libs: "[test]",
test_opt: "tests"
}
steps:
- name: Git clone
uses: actions/checkout@v5
- name: Build stormpy from Dockerfile
run: |
docker build -t movesrwth/stormpy:ci . \
--build-arg STORM_BASE=movesrwth/storm:${{ matrix.build_type.storm_base }} \
--build-arg build_type=${{ matrix.build_type.name }} \
--build-arg setup_args="${{ matrix.config.setup_args }}" \
--build-arg options=${{ matrix.config.optional_libs }} \
--build-arg no_threads=${NR_JOBS}
- name: Run Docker
run: docker run -d -it --name ci movesrwth/stormpy:ci
- name: Run tests
run: docker exec ci bash -c "cd /opt/stormpy; pytest ${{ matrix.config.test_opt }}"
stableTests:
name: Test on stable (${{ matrix.build_type.name }})
runs-on: ubuntu-latest
strategy:
matrix:
build_type:
- {name: "Debug",
storm_base: "stable-debug",
build_type: "Debug",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_FETCH=OFF",
optional_libs: "[test,plot]"
}
- {name: "Release",
storm_base: "stable",
build_type: "Release",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_FETCH=OFF",
optional_libs: "[test,plot]"
}
# Allow failures of stable versions as new features might have been added
steps:
- name: Git clone
uses: actions/checkout@v5
- name: Replace Dockerfile
run: cp .github/workflows/Dockerfile.stable Dockerfile
- name: Build dependencies
run: |
docker build -t movesrwth/stormpy:ci . \
--build-arg STORM_BASE=movesrwth/storm:${{ matrix.build_type.storm_base }} \
--build-arg build_type=${{ matrix.build_type.build_type }} \
--build-arg no_threads=${NR_JOBS}
- name: Run Docker
run: docker run -d -it --name ci movesrwth/stormpy:ci
- name: Build stormpy
# Build stormpy explicitly to catch exit code
id: build_stormpy
shell: bash {0} // Deactivate fast-fail to handle exit code for incompatibility
run: |
docker exec ci bash -c "cd /opt/stormpy; pip install -v --config-settings=cmake.define.CMAKE_BUILD_PARALLEL_LEVEL=${NR_JOBS} --config-settings=cmake.build-type=${{ matrix.build_type.build_type }} --config-settings=cmake.define.CARLPARSER_DIR_HINT=/opt/carl-parser/build/ ${{ matrix.build_type.setup_args }} .${{ matrix.build_type.optional_libs }}"
status=$?
if [ $status -eq 1 ]; then
# Warn about possible incompatibility but do not handle as failure
echo "::warning file=CMakeLists.txt,line=52::Stormpy might be incompatible with stable version of Storm"
# Deactivate tests
echo "run_tests=false" >> $GITHUB_OUTPUT
else
echo "run_tests=true" >> $GITHUB_OUTPUT
exit $status
fi
- name: Run tests
if: steps.build_stormpy.outputs.run_tests == 'true'
run: docker exec ci bash -c "cd /opt/stormpy; pytest"
linuxTests:
name: Linux Test (Fetch, ${{ matrix.config.name }})
runs-on: ubuntu-latest
strategy:
matrix:
config:
- {name: "Debian 12, Debug",
base_image: "movesrwth/storm-basesystem:debian-12",
build_type: "Debug",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_SYSTEM=OFF --config-settings=cmake.define.STORM_GIT_TAG=master",
optional_libs: "[test,plot]",
test_opt: ""
}
- {name: "Ubuntu 24.04, Debug",
base_image: "movesrwth/storm-basesystem:ubuntu-24.04",
build_type: "Debug",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_SYSTEM=OFF --config-settings=cmake.define.STORM_GIT_TAG=master",
optional_libs: "[test,plot]",
test_opt: ""
}
- {name: "Ubuntu 24.04, Debug, only Storm core",
base_image: "movesrwth/storm-basesystem:ubuntu-24.04",
build_type: "Debug",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_SYSTEM=OFF --config-settings=cmake.define.STORM_GIT_TAG=master --config-settings=cmake.define.USE_STORM_DFT=OFF --config-settings=cmake.define.USE_STORM_GSPN=OFF --config-settings=cmake.define.USE_STORM_PARS=OFF --config-settings=cmake.define.USE_STORM_POMDP=OFF --config-settings=cmake.define.USE_PARSER=OFF",
optional_libs: "[test]",
test_opt: "tests"
}
- {name: "Ubuntu 24.04, Release",
base_image: "movesrwth/storm-basesystem:ubuntu-24.04",
build_type: "Release",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_SYSTEM=OFF --config-settings=cmake.define.STORM_GIT_TAG=master",
optional_libs: "[test,plot]",
test_opt: ""
}
steps:
- name: Git clone
uses: actions/checkout@v5
- name: Replace Dockerfile
run: cp .github/workflows/Dockerfile.fetch Dockerfile
- name: Build stormpy
run: |
docker build -t movesrwth/stormpy:ci . \
--build-arg BASE_IMAGE=${{ matrix.config.base_image }} \
--build-arg build_type=${{ matrix.config.build_type }} \
--build-arg setup_args="${{ matrix.config.setup_args }}" \
--build-arg options=${{ matrix.config.optional_libs }} \
--build-arg no_threads=${NR_JOBS}
- name: Run Docker
run: docker run -d -it --name ci movesrwth/stormpy:ci
- name: Run tests
run: docker exec ci bash -c "cd /opt/stormpy; pytest ${{ matrix.config.test_opt }}"
macFetchTests:
name: Mac Tests (Fetch, ${{ matrix.config.name }})
strategy:
matrix:
config:
- {name: "XCode 15.4, ARM, Debug",
distro: "macos-14",
xcode: "15.4",
build_type: "Debug",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_SYSTEM=OFF --config-settings=cmake.define.STORM_GIT_TAG=master",
optional_libs: "[test,plot]"
}
- {name: "XCode Latest, ARM, Debug",
distro: "macos-15",
xcode: "latest-stable",
build_type: "Debug",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_SYSTEM=OFF --config-settings=cmake.define.STORM_GIT_TAG=master",
optional_libs: "[test,plot]"
}
- {name: "XCode Latest, ARM, Release",
distro: "macos-15",
xcode: "latest-stable",
build_type: "Release",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_SYSTEM=OFF --config-settings=cmake.define.STORM_GIT_TAG=master",
optional_libs: "[test,plot]"
}
- {name: "XCode Latest, Intel, Debug",
distro: "macos-15-intel",
xcode: "latest-stable",
build_type: "Debug",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_SYSTEM=OFF --config-settings=cmake.define.STORM_GIT_TAG=master",
optional_libs: "[test,plot]"
}
runs-on: ${{ matrix.config.distro }}
steps:
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ matrix.config.xcode }}
- name: Git clone
uses: actions/checkout@v5
- name: Install dependencies
# cmake and gmp and python3 are already installed
run: |
brew update
brew install automake boost cln ginac glpk hwloc xerces-c z3
- name: Build stormpy
run: |
pip install -v \
--config-settings=cmake.build-type=${{ matrix.config.build_type }} \
--config-settings=cmake.define.CMAKE_BUILD_PARALLEL_LEVEL=${NR_JOBS} \
${{ matrix.config.setup_args }} .${{ matrix.config.optional_libs }}
- name: Run tests
run: pytest
macInstallTests:
name: Mac Tests (Install, ${{ matrix.config.name }})
strategy:
matrix:
config:
- {name: "XCode 16.3, ARM, Debug",
distro: "macos-15",
xcode: "16.3",
build_type: "Debug",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_FETCH=OFF",
optional_libs: "[test,plot]"
}
- {name: "XCode 16.3, ARM, Release",
distro: "macos-15",
xcode: "16.3",
build_type: "Release",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_FETCH=OFF",
optional_libs: "[test,plot]"
}
runs-on: ${{ matrix.config.distro }}
steps:
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ matrix.config.xcode }}
- name: Git clone
uses: actions/checkout@v5
- name: Install dependencies
# cmake and gmp and python3 are already installed
run: |
brew update
brew install automake boost cln ginac glpk hwloc xerces-c z3
- name: Checkout Storm
uses: actions/checkout@v5
with:
repository: moves-rwth/storm
ref: master
path: storm
- name: Build and install Storm
working-directory: storm
run: |
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE="${{ matrix.config.build_type }}" -DSTORM_BUILD_TESTS=OFF -DSTORM_BUILD_EXECUTABLES=OFF
make -j ${NR_JOBS}
sudo make install
cd ..
rm -rf build
- name: Build stormpy
run: |
pip install -v \
--config-settings=cmake.build-type=${{ matrix.config.build_type }} \
--config-settings=cmake.define.CMAKE_BUILD_PARALLEL_LEVEL=${NR_JOBS} \
${{ matrix.config.setup_args }} .${{ matrix.config.optional_libs }}
- name: Run tests
run: pytest
deploy:
name: Test and Deploy on latest (${{ matrix.build_type.name }})
runs-on: ubuntu-latest
strategy:
matrix:
build_type:
- {name: "Debug",
docker_tag: "ci-debug",
storm_base: "ci-debug",
build_type: "Debug",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_FETCH=OFF",
optional_libs: "[test,plot]"
}
- {name: "Release",
docker_tag: "ci",
storm_base: "ci",
build_type: "Release",
setup_args: "--config-settings=cmake.define.ALLOW_STORM_FETCH=OFF",
optional_libs: "[test,plot,doc]"
}
steps:
- name: Git clone
uses: actions/checkout@v5
- name: Build stormpy from Dockerfile
run: |
docker build -t movesrwth/stormpy:${{ matrix.build_type.docker_tag }} . \
--build-arg STORM_BASE=movesrwth/storm:${{ matrix.build_type.storm_base }} \
--build-arg build_type=${{ matrix.build_type.build_type }} \
--build-arg setup_args="${{ matrix.build_type.setup_args }}" \
--build-arg options=${{ matrix.build_type.optional_libs }} \
--build-arg no_threads=${NR_JOBS}
- name: Run Docker
run: docker run -d -it --name ci movesrwth/stormpy:${{ matrix.build_type.docker_tag }}
- name: Run tests
run: docker exec ci bash -c "cd /opt/stormpy; pytest"
- name: Login into docker
# Only login if using master on original repo (and not for pull requests or forks)
if: github.repository_owner == 'moves-rwth' && github.ref == 'refs/heads/master'
run: echo "${{ secrets.STORM_CI_DOCKER_PASSWORD }}" | docker login -u "${{ secrets.STORM_CI_DOCKER_USERNAME }}" --password-stdin
- name: Deploy stormpy
# Only deploy if using master on original repo (and not for pull requests or forks)
if: github.repository_owner == 'moves-rwth' && github.ref == 'refs/heads/master'
run: |
docker commit ci movesrwth/stormpy:${{ matrix.build_type.docker_tag }}
docker push movesrwth/stormpy:${{ matrix.build_type.docker_tag }}
- name: Install documentation dependencies
if: matrix.build_type.name == 'Release'
run: |
docker exec ci apt-get install -qq -y pandoc
- name: Build documentation
if: matrix.build_type.name == 'Release'
run: |
docker exec ci bash -c "cd /opt/stormpy/doc; make html"
docker exec ci rm -r /opt/stormpy/doc/build/html/_sources
docker cp ci:/opt/stormpy/doc/build/html .
- name: Deploy documentation
# Only deploy for release version and using master on original repo (and not for pull requests or forks)
if: matrix.build_type.name == 'Release' && github.repository_owner == 'moves-rwth' && github.ref == 'refs/heads/master'
uses: peaceiris/actions-gh-pages@v4
with:
personal_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./html
notify:
name: Email notification
runs-on: ubuntu-latest
needs: [indepthTests, stableTests, linuxTests, macFetchTests, macInstallTests, deploy]
# Only run in main repo and even if previous step failed
if: github.repository_owner == 'moves-rwth' && always()
steps:
- uses: technote-space/workflow-conclusion-action@v3
- uses: dawidd6/action-send-mail@v6
with:
server_address: ${{ secrets.STORM_CI_MAIL_SERVER }}
server_port: 587
username: ${{ secrets.STORM_CI_MAIL_USERNAME }}
password: ${{ secrets.STORM_CI_MAIL_PASSWORD }}
subject: "[You broke it] CI run failed for ${{ github.repository }}"
body:
"CI job of ${{ github.repository }} has failed for commit ${{ github.sha }}.\n\
The error type is: ${{ env.WORKFLOW_CONCLUSION }}.\n\n\
For more information, see https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
to: ${{ secrets.STORM_CI_MAIL_RECIPIENTS }}
from: Github Actions <[email protected]>
if: env.WORKFLOW_CONCLUSION != 'success' # notify only if failure