numpy 2 #2515
This file contains hidden or 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: | |
workflow_dispatch: | |
release: {types: [published]} | |
push: | |
branches: [master] | |
tags: ['**'] | |
paths-ignore: | |
- 'CHANGELOG.md' | |
- 'CITATION.cff' | |
- 'LICENSE' | |
- 'scripts/**' | |
- 'NOTICE.txt' | |
- 'README.md' | |
pull_request: | |
branches: [master] | |
paths-ignore: | |
- 'CHANGELOG.md' | |
- 'CITATION.cff' | |
- 'LICENSE' | |
- 'scripts/**' | |
- 'NOTICE.txt' | |
- 'README.md' | |
jobs: | |
test-cuda: | |
defaults: {run: {shell: 'bash -el {0}'}} | |
runs-on: [self-hosted, python, cuda] | |
strategy: | |
matrix: | |
python-version: [3.12] | |
numpy-version: [1.26] | |
steps: | |
- uses: actions/checkout@v4 | |
with: {fetch-depth: 0, submodules: recursive} | |
- id: reqs | |
name: set requirements | |
run: | | |
envname="${GITHUB_REPOSITORY##*/}-${GITHUB_RUN_ID}.${GITHUB_RUN_NUMBER}" | |
echo "envname=$envname" >> $GITHUB_OUTPUT | |
sed -ri -e 's/^(name: ).*/\1$envname/' -e '/ python /d' -e 's/(.* numpy) .*/\1=${{ matrix.numpy-version }}/' scripts/requirements-test.yml | |
- uses: conda-incubator/setup-miniconda@v3 | |
with: | |
python-version: ${{ matrix.python-version }} | |
environment-file: scripts/requirements-test.yml | |
activate-environment: ${{ steps.reqs.outputs.envname }} | |
run-post: false | |
- id: build | |
name: build | |
run: | | |
conda activate "${{ steps.reqs.outputs.envname }}" | |
pip install . | |
- name: test | |
run: | | |
conda activate "${{ steps.reqs.outputs.envname }}" | |
TESTS_FORCE_GPU=1 CIL_DATA_DIR=/opt/runner/hostedtoolcache/cil python -m unittest discover -v -k tigre -k TIGRE -k astra -k ASTRA -k Astra -k gpu -k GPU ./Wrappers/Python/test | |
- if: always() | |
name: Post Run conda-incubator/setup-miniconda@v3 | |
shell: bash | |
run: | | |
sed -i '/${{ steps.reqs.outputs.envname }}/d' ~/.profile | |
source ~/.profile | |
conda env remove -n "${{ steps.reqs.outputs.envname }}" | |
test: | |
defaults: {run: {shell: 'bash -el {0}'}} | |
runs-on: ubuntu-22.04 | |
strategy: | |
matrix: | |
include: | |
- {python-version: '3.10', numpy-version: 1.23} | |
- {python-version: 3.13, numpy-version: 2} | |
steps: | |
- uses: actions/checkout@v4 | |
with: {fetch-depth: 0, submodules: recursive} | |
- name: set requirements | |
run: sed -ri -e '/ python /d' -e 's/(.* numpy) .*/\1=${{ matrix.numpy-version }}/' -e 's/=cuda*//' -e '/tigre/d' scripts/requirements-test.yml | |
- uses: conda-incubator/setup-miniconda@v3 | |
with: | |
python-version: ${{ matrix.python-version }} | |
environment-file: scripts/requirements-test.yml | |
activate-environment: cil_dev | |
- run: pip install . | |
- name: test | |
run: python -m unittest discover -v ./Wrappers/Python/test | |
conda-matrix: | |
runs-on: ubuntu-22.04 | |
outputs: | |
python-version: ${{ steps.matrix.outputs.python-version }} | |
numpy-version: ${{ steps.matrix.outputs.numpy-version }} | |
os: ${{ steps.matrix.outputs.os }} | |
include: ${{ steps.matrix.outputs.include }} | |
include-numpy: ${{ steps.matrix.outputs.include-numpy }} | |
steps: | |
- id: matrix | |
run: | | |
if ${{ startsWith(github.ref, 'refs/tags') || github.event_name == 'workflow_dispatch' }}; then | |
echo "python-version=['3.10', 3.11]" >> $GITHUB_OUTPUT | |
echo "numpy-version=[1.23, 1.24, 1.25, 1.26]" >> $GITHUB_OUTPUT | |
echo "os=['ubuntu', 'windows']" >> $GITHUB_OUTPUT | |
include_max=true | |
else | |
echo "python-version=['3.10']" >> $GITHUB_OUTPUT | |
echo "numpy-version=[1.23]" >> $GITHUB_OUTPUT | |
if ${{ github.ref == 'refs/heads/master' }}; then | |
echo "os=['ubuntu', 'windows']" >> $GITHUB_OUTPUT | |
include_max=true | |
else | |
echo "os=['ubuntu']" >> $GITHUB_OUTPUT | |
include_max=false | |
fi | |
fi | |
if $include_max; then | |
echo "include=[{'python-version': 3.13, 'os': 'ubuntu'}, {'python-version': 3.13, 'os': 'windows'}]" >> $GITHUB_OUTPUT | |
echo "include-numpy=[{'python-version': 3.13, 'numpy-version': 2, 'os': 'ubuntu'}, {'python-version': 3.13, 'numpy-version': 2, 'os': 'windows'}]" >> $GITHUB_OUTPUT | |
else | |
echo "include=[]" >> $GITHUB_OUTPUT | |
echo "include-numpy=[]" >> $GITHUB_OUTPUT | |
fi | |
conda-build: | |
defaults: {run: {shell: 'bash -el {0}'}} | |
runs-on: ${{ matrix.os }}-${{ matrix.os == 'ubuntu' && '22.04' || 'latest' }} | |
needs: conda-matrix | |
strategy: | |
matrix: | |
python-version: ${{ fromJson(needs.conda-matrix.outputs.python-version) }} | |
os: ${{ fromJson(needs.conda-matrix.outputs.os) }} | |
include: ${{ fromJson(needs.conda-matrix.outputs.include) }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
submodules: recursive | |
ref: ${{ github.event.pull_request.head.sha || github.ref }} # fix SHA | |
- if: matrix.os == 'windows' | |
uses: ilammy/msvc-dev-cmd@v1 | |
- uses: conda-incubator/setup-miniconda@v3 | |
with: | |
python-version: ${{ matrix.python-version }} | |
mamba-version: "*" | |
channels: conda-forge | |
conda-remove-defaults: "true" | |
- run: conda install boa conda-verify | |
- name: conda build | |
run: > | |
conda mambabuild -c conda-forge -c https://tomography.stfc.ac.uk/conda --override-channels --python=${{ matrix.python-version }} | |
--no-test --output-folder dist recipe | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: cil-py${{ matrix.python-version }}-${{ matrix.os }} | |
path: dist/*/cil-*.tar.bz2 | |
conda-test: | |
defaults: {run: {shell: 'bash -el {0}'}} | |
runs-on: ${{ matrix.os }}-${{ matrix.os == 'ubuntu' && '22.04' || 'latest' }} | |
needs: [conda-matrix, conda-build] | |
strategy: | |
matrix: | |
python-version: ${{ fromJson(needs.conda-matrix.outputs.python-version) }} | |
numpy-version: ${{ fromJson(needs.conda-matrix.outputs.numpy-version) }} | |
os: ${{ fromJson(needs.conda-matrix.outputs.os) }} | |
include: ${{ fromJson(needs.conda-matrix.outputs.include-numpy) }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: conda-incubator/setup-miniconda@v3 | |
with: | |
python-version: ${{ matrix.python-version }} | |
mamba-version: "*" | |
channels: conda-forge | |
conda-remove-defaults: "true" | |
- run: conda install boa | |
- uses: actions/download-artifact@v4 | |
with: | |
name: cil-py${{ matrix.python-version }}-${{ matrix.os }} | |
path: dist | |
- name: conda test | |
run: > | |
conda mambabuild -c conda-forge -c https://tomography.stfc.ac.uk/conda --override-channels --python=${{ matrix.python-version }} | |
--test dist/*/cil-*.tar.bz2 --extra-deps numpy=${{ matrix.numpy-version }} | |
conda-upload: | |
if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags') | |
defaults: {run: {shell: 'bash -el {0}', working-directory: dist}} | |
runs-on: ubuntu-22.04 | |
needs: conda-test | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: conda-incubator/setup-miniconda@v3 | |
with: | |
mamba-version: "*" | |
channels: conda-forge | |
conda-remove-defaults: "true" | |
- uses: actions/download-artifact@v4 | |
with: {pattern: cil-py*-*, path: dist, merge-multiple: true} | |
- run: conda install anaconda-client | |
- name: anaconda upload -c ccpi | |
run: > | |
anaconda -v -t ${{ secrets.CCPI_CONDA_TOKEN }} upload --force | |
--label ${{ startsWith(github.ref, 'refs/tags') && 'main' || 'dev' }} */cil-*.tar.bz2 | |
- if: startsWith(github.ref, 'refs/tags') | |
name: conda upload -c tomography.stfc.ac.uk/conda | |
run: | | |
echo '${{ secrets.STFC_SSH_KEY }}' > ./key | |
chmod 600 ./key | |
rsync -e 'ssh -o StrictHostKeyChecking=no -i ./key' -R */cil-*.tar.bz2 '${{ secrets.STFC_SSH_HOST }}:${{ secrets.STFC_SSH_CONDA_DIR }}' | |
ssh -o StrictHostKeyChecking=no -i ./key ${{ secrets.STFC_SSH_HOST }} \ | |
'bash -lic "conda index --bz2 --zst --run-exports --channeldata --rss -n ccpi ${{ secrets.STFC_SSH_CONDA_DIR }}"' | |
docs: | |
defaults: {run: {shell: 'bash -el {0}', working-directory: docs}} | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
submodules: recursive | |
ref: ${{ github.event.pull_request.head.sha || github.ref }} # fix SHA | |
- uses: conda-incubator/setup-miniconda@v3 | |
with: {python-version: 3.11} | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: '3.2' | |
bundler-cache: true | |
cache-version: 0 | |
- name: install dependencies | |
run: | | |
conda install -c conda-forge -yq conda-merge | |
conda-merge ../scripts/requirements-test.yml docs_environment.yml > environment.yml | |
conda env update -n test | |
conda list | |
- run: pip install .. | |
- name: checkout docs | |
uses: actions/checkout@v4 | |
with: | |
path: docs/build | |
ref: gh-pages | |
- id: pages | |
uses: actions/configure-pages@v5 | |
- name: update web pages (jekyll) | |
run: make JEKYLLOPTS="--baseurl ${{ steps.pages.outputs.base_path }}" web-deps web | |
env: {JEKYLL_ENV: production} | |
- name: update docs pages (sphinx) | |
run: | | |
docs_dir="${{ github.ref_name }}" | |
docs_dir="${docs_dir//\//_}" | |
if test "$docs_dir" = master; then docs_dir=nightly; fi | |
make BUILDSUBDIR="$docs_dir" dirhtml | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: DocumentationHTML | |
path: docs/build | |
- name: Push changes | |
if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags') | |
uses: casperdcl/push-dir@v1 | |
with: | |
message: Update documentation | |
branch: gh-pages | |
dir: docs/build | |
nojekyll: true | |
docker: | |
runs-on: ubuntu-22.04 | |
permissions: | |
contents: read | |
packages: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
submodules: recursive | |
ref: ${{ github.event.pull_request.head.sha || github.ref }} # fix SHA | |
- uses: jlumbroso/[email protected] | |
with: | |
docker-images: false | |
large-packages: false | |
- uses: docker/setup-buildx-action@v3 | |
- uses: docker/metadata-action@v5 | |
id: meta | |
with: | |
images: ghcr.io/${{ github.repository }} | |
tags: | | |
type=ref,event=branch | |
type=semver,pattern={{version}} | |
type=semver,pattern={{major}}.{{minor}} | |
labels: | | |
org.opencontainers.image.licenses=Apache-2.0 AND BSD-3-Clause AND GPL-3.0 | |
- uses: docker/login-action@v3 | |
if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags') | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- uses: docker/build-push-action@v6 | |
with: | |
cache-from: type=gha | |
cache-to: type=gha,mode=max | |
context: . | |
load: true | |
tags: tomographicimaging/cil:test | |
- name: test | |
run: > | |
docker run --rm -v .:/CIL tomographicimaging/cil:test /bin/bash -c | |
'python -m unittest discover -v /CIL/Wrappers/Python/test' | |
- uses: docker/build-push-action@v6 | |
with: | |
cache-from: type=gha | |
cache-to: type=gha,mode=max | |
context: . | |
push: ${{ github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags') }} | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
pass: | |
needs: [test-cuda, test, conda-test, docs, docker] | |
runs-on: ubuntu-22.04 | |
steps: [{run: echo success}] |