# This script is an edited version of the example found at # https://git.ligo.org/lscsoft/example-ci-project/blob/python/.gitlab-ci.yml # Each 0th-indentation level is a job that will be run within GitLab CI # The only exception are a short list of reserved keywords # # https://docs.gitlab.com/ee/ci/yaml/#gitlab-ci-yml # stages is a reserved keyword that defines job dependencies and # parallelization. each stage runs in parallel but must complete # before the next stage begins stages: - initial - test - docs - deploy # ------------------- Initial stage ------------------------------------------- .list-env: &list-env - PREFIX="$(dirname $(which python))/.." - if [ -d "${PREFIX}/conda-meta" ]; then conda list --prefix "${PREFIX}" --show-channel-urls; else python -m pip list installed; fi # Check author list is up to date authors: stage: initial image: containers.ligo.org/lscsoft/bilby/v2-bilby-python310 script: - python test/check_author_list.py # Test containers scripts are up to date containers: stage: initial image: containers.ligo.org/lscsoft/bilby/v2-bilby-python311 script: - cd containers - python write_dockerfiles.py #HACK # Fail if differences exist. If this fails, you may need to run # write_dockerfiles.py and commit the changes. - git diff --exit-code - cp env-template.yml env.yml - echo " - python=3.11" >> env.yml - mamba env create -f env.yml -n test --dry-run .test-python: &test-python stage: initial image: python script: - python -m pip install . - *list-env - python -c "import bilby" - python -c "import bilby.bilby_mcmc" - python -c "import bilby.core" - python -c "import bilby.core.prior" - python -c "import bilby.core.sampler" - python -c "import bilby.core.utils" - python -c "import bilby.gw" - python -c "import bilby.gw.detector" - python -c "import bilby.gw.eos" - python -c "import bilby.gw.likelihood" - python -c "import bilby.gw.sampler" - python -c "import bilby.hyper" - python -c "import cli_bilby" - python test/import_test.py - for script in $(pip show -f bilby | grep "bin\/" | xargs -I {} basename {}); do ${script} --help; done basic-3.10: <<: *test-python image: python:3.10 basic-3.11: <<: *test-python image: python:3.11 basic-3.12: <<: *test-python image: python:3.12 .test-samplers-import: &test-samplers-import stage: initial script: - python -m pip install . - *list-env - pytest test/test_samplers_import.py -v import-samplers-3.10: <<: *test-samplers-import image: containers.ligo.org/lscsoft/bilby/v2-bilby-python310 import-samplers-3.11: <<: *test-samplers-import image: containers.ligo.org/lscsoft/bilby/v2-bilby-python311 import-samplers-3.12: <<: *test-samplers-import image: containers.ligo.org/lscsoft/bilby/v2-bilby-python312 .precommits: &precommits stage: initial script: - source activate $PYVERSION - mkdir -p $CACHE_DIR - pip install --upgrade pip - pip --cache-dir=$CACHE_DIR install --upgrade bilby - pip --cache-dir=$CACHE_DIR install . # Run precommits (flake8, spellcheck, isort, no merge conflicts, etc) - pre-commit run --all-files --verbose --show-diff-on-failure precommits-py3.11: <<: *precommits image: containers.ligo.org/lscsoft/bilby/v2-bilby-python311 variables: CACHE_DIR: ".pip311" PYVERSION: "python311" install: stage: initial parallel: matrix: - EXTRA: [gw, mcmc, all] image: containers.ligo.org/lscsoft/bilby/v2-bilby-python311 script: - pip install .[$EXTRA] # ------------------- Test stage ------------------------------------------- .unit-tests: &unit-test stage: test script: - python -m pip install . - *list-env - pytest --cov=bilby --durations 10 python-3.10: <<: *unit-test needs: ["basic-3.10"] image: containers.ligo.org/lscsoft/bilby/v2-bilby-python310 python-3.11: <<: *unit-test needs: ["basic-3.11", "precommits-py3.11"] image: containers.ligo.org/lscsoft/bilby/v2-bilby-python311 after_script: - coverage html - coverage xml coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/' artifacts: reports: coverage_report: coverage_format: cobertura path: coverage.xml paths: - htmlcov/ expire_in: 30 days python-3.12: <<: *unit-test needs: ["basic-3.12"] image: containers.ligo.org/lscsoft/bilby/v2-bilby-python312 .test-sampler: &test-sampler stage: test script: - python -m pip install .[all] - *list-env - pytest test/integration/sampler_run_test.py --durations 10 -v python-3.10-samplers: <<: *test-sampler needs: ["basic-3.10"] image: containers.ligo.org/lscsoft/bilby/v2-bilby-python310 python-3.11-samplers: <<: *test-sampler needs: ["basic-3.11", "precommits-py3.11"] image: containers.ligo.org/lscsoft/bilby/v2-bilby-python311 python-3.12-samplers: <<: *test-sampler needs: ["basic-3.12"] image: containers.ligo.org/lscsoft/bilby/v2-bilby-python312 integration-tests-python-3.11: stage: test image: containers.ligo.org/lscsoft/bilby/v2-bilby-python311 needs: ["basic-3.11", "precommits-py3.11"] only: - schedules script: - python -m pip install . - *list-env # Run tests which are only done on schedule - pytest test/integration/example_test.py .plotting: &plotting stage: test only: - schedules script: - python -m pip install . - *list-env - pytest test/gw/plot_test.py plotting-python-3.10: <<: *plotting image: containers.ligo.org/lscsoft/bilby/v2-bilby-python310 needs: ["basic-3.10"] plotting-python-3.11: <<: *plotting image: containers.ligo.org/lscsoft/bilby/v2-bilby-python311 needs: ["basic-3.11", "precommits-py3.11"] plotting-python-3.12: <<: *plotting image: containers.ligo.org/lscsoft/bilby/v2-bilby-python312 needs: ["basic-3.12"] # ------------------- Docs stage ------------------------------------------- docs: stage: docs image: containers.ligo.org/lscsoft/bilby/v2-bilby-python311 before_script: - python -m ipykernel install script: # Make the documentation - python -m pip install . - python -m pip install myst_parser # only for testing purposes - remove once test image is generating correctly - cd examples/tutorials - jupyter nbconvert --to notebook --execute *.ipynb --output-dir ../../docs - cd ../../docs - make clean - make html artifacts: paths: - docs/_build/html/ # ------------------- Deploy stage ------------------------------------------- pages: stage: deploy needs: ["docs", "python-3.11"] script: - mkdir public/ - mv htmlcov/ public/ - mv docs/_build/html/* public/ artifacts: paths: - public expire_in: 30 days only: - master .build-container: &build-container stage: deploy image: docker:20.10.23 needs: ["containers"] rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" changes: compare_to: 'refs/heads/main' paths: - containers/* when: manual - if: $CI_PIPELINE_SOURCE == "schedule" script: - cd containers - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - cp v3-dockerfile-test-suite-$PYVERSION Dockerfile - docker build --tag v3-bilby-$PYVERSION . - docker image tag v3-bilby-$PYVERSION containers.ligo.org/lscsoft/bilby/v2-bilby-$PYVERSION:latest - docker image push containers.ligo.org/lscsoft/bilby/v2-bilby-$PYVERSION:latest build-python310-container: <<: *build-container variables: PYVERSION: "python310" build-python311-container: <<: *build-container variables: PYVERSION: "python311" build-python312-container: <<: *build-container variables: PYVERSION: "python312" pypi-release: stage: deploy image: containers.ligo.org/lscsoft/bilby/v2-bilby-python310 variables: TWINE_USERNAME: $PYPI_USERNAME TWINE_PASSWORD: $PYPI_PASSWORD before_script: - python -m build --sdist --wheel --outdir dist/ . script: - twine upload dist/* only: - tags