Skip to content

Lint And Test MacOS #95

Lint And Test MacOS

Lint And Test MacOS #95

name: Lint And Test MacOS
# NOTE: Due to 10X minute multiplier, do NOT run on macos-latest on every push!
# https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions#minute-multipliers
# Run on macos on a separate weekly schedule.
on:
# push: # Do NOT run on MacOS on every push!
# pull_request: (either on origin or on upstream pull request)
schedule:
# Instead, run it every Tuesday at midnight.
- cron: '0 0 * * 2'
workflow_dispatch:
defaults:
run:
shell: bash -l {0} # Invoke bash in login mode, NOT interactive mode.
# This will cause bash to look for the startup file ~/.bash_profile, NOT ~/.bashrc
# This is important since conda init writes to ~/.bashrc
permissions:
actions: read
contents: read
pull-requests: read
jobs:
lint_and_test:
# See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#concurrency
# This will prevent DOS attacks from people blasting the CI with rapid fire commits.
concurrency:
group: ${{ github.workflow }}-macos-latest-${{ github.ref }}
cancel-in-progress: true
strategy:
fail-fast: false
runs-on: macos-latest
steps:
- name: Checkout sophios
if: always()
uses: actions/checkout@v3
with:
repository: ${{ github.repository_owner }}/sophios
ref: master
path: sophios
- name: Checkout biobb_adapters
if: always()
uses: actions/checkout@v3
with:
repository: vjaganat90/biobb_adapters
ref: master
path: biobb_adapters
- name: Checkout mm-workflows
if: always()
uses: actions/checkout@v3
with:
repository: ${{ github.repository_owner }}/mm-workflows
ref: main
path: mm-workflows
- name: Checkout image-workflows
if: always()
uses: actions/checkout@v3
with:
repository: ${{ github.repository_owner }}/image-workflows
ref: main
path: image-workflows
- name: Setup miniforge (linux, macos)
if: runner.os != 'Windows'
uses: conda-incubator/[email protected]
with:
miniforge-variant: Miniforge3
miniforge-version: 24.7.1-2
environment-file: sophios/install/system_deps.yml
activate-environment: wic
use-mamba: true
channels: conda-forge
python-version: "3.11.*"
- name: ShellCheck Script Quality
if: always()
# "SC1017 (error): Literal carriage return. Run script through tr -d '\r' ."
run: shellcheck -e SC1017 $(find sophios/ -name "*.sh" -and -not -path "./3/*")
- name: Install Sophios
if: always()
run: cd sophios/ && pip install ".[all_except_runner_src]"
- name: Update Sophios Config
if: always()
run: cd sophios/ && python .github/update_sophios_config.py
- name: Install Molecular Modeling Workflows
if: always()
# Also run mm-workflows command to generate
# mm-workflows/autogenerated/schemas/config_schemas.json
# NOTE: Use ".[test]" instead of ".[all_except_runner_src]"
# We do not want or need to install the workflow_deps extra.
# (Many of the packages conflict with pypy.)
run: cd mm-workflows/ && pip install ".[test]" && mm-workflows --generate_schemas
- name: Generate Sophios Python API Workflows (*.py -> *.wic)
if: always()
run: cd sophios/ && pytest -k test_compile_python_workflows
- name: Generate Sophios Validation Jsonschema
if: always()
run: cd sophios/ && sophios --generate_schemas
# Please read docs/validation.md#Property-Based-Testing
# This is essentially an integration test for all of the
# Sophios Python API workflows as well as the Sophios Python API itself.
- name: Validate Sophios Python API Workflows (*.py -> *.wic)
if: always()
run: cd sophios/ && pytest -k test_compile_python_workflows
- name: Build Documentation
if: always()
run: cd sophios/docs && make html
- name: MyPy Check Type Annotations
if: always()
run: cd sophios/ && mypy src/ examples/ tests/
# NOTE: Do not use `mypy .` because then mypy will check both src/ and build/ causing:
# src/sophios/__init__.py: error: Duplicate module named "wic"
# (also at "./build/lib/sophios/__init__.py")
- name: PyLint Check Code Quality
if: always()
run: cd sophios/ && pylint src/ examples/**/*.py tests/
# NOTE: See fail-under threshold in .pylintrc
- name: PEP8 Code Formatting
if: always()
id: autopep8
run: cd sophios/ && autopep8 --exit-code --recursive --diff --max-line-length 120 examples/ src/ tests/
- name: Fail if autopep8 made changes
if: steps.autopep8.outputs.exit-code == 2
run: exit 1
# NOTE: Do NOT add coverage to PYPY CI runs https://github.com/tox-dev/tox/issues/2252
- name: PyTest CWL Embedding Independence
if: always()
run: cd sophios/ && pytest -k test_cwl_embedding_independence # --cov --cov-config=.coveragerc_serial
# NOTE: This test MUST be run in serial! See is_isomorphic_with_timeout()
timeout-minutes: 20 # backup timeout for windows
- name: PyTest Inline Subworkflows
if: always()
run: cd sophios/ && pytest -k test_inline_subworkflows # --cov --cov-config=.coveragerc_serial
# NOTE: This test MUST be run in serial! See is_isomorphic_with_timeout()
timeout-minutes: 20 # backup timeout for windows