Lint And Test MacOS #30
This file contains 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: 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 workflow-inference-compiler | |
if: always() | |
uses: actions/checkout@v3 | |
with: | |
repository: ${{ github.repository_owner }}/workflow-inference-compiler | |
ref: master | |
path: workflow-inference-compiler | |
- name: Checkout biobb_adapters | |
if: always() | |
uses: actions/checkout@v3 | |
with: | |
repository: jfennick/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 mamba (linux, macos) | |
if: runner.os != 'Windows' | |
uses: conda-incubator/setup-miniconda@v2.2.0 | |
with: | |
miniforge-variant: Mambaforge-pypy3 | |
miniforge-version: latest | |
environment-file: workflow-inference-compiler/install/system_deps.yml | |
activate-environment: wic | |
use-mamba: true | |
channels: conda-forge | |
python-version: "3.9.*" # pypy is not yet compatible with 3.10 and 3.11 | |
- name: ShellCheck Script Quality | |
if: always() | |
# "SC1017 (error): Literal carriage return. Run script through tr -d '\r' ." | |
run: shellcheck -e SC1017 $(find workflow-inference-compiler/ -name "*.sh" -and -not -path "./3/*") | |
- name: Install Workflow Inference Compiler | |
if: always() | |
run: cd workflow-inference-compiler/ && pip install ".[all_except_runner_src]" | |
- 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 WIC Python API Workflows (*.py -> *.wic) | |
if: always() | |
run: cd workflow-inference-compiler/ && python -c 'import wic; import wic.plugins; wic.plugins.blindly_execute_python_workflows()' | |
- name: Generate WIC Validation Jsonschema | |
if: always() | |
run: cd workflow-inference-compiler/ && wic --generate_schemas | |
# Please read docs/validation.md#Property-Based-Testing | |
# This is essentially an integration test for all of the | |
# WIC Python API workflows as well as the WIC Python API itself. | |
- name: Validate WIC Python API Workflows (*.py -> *.wic) | |
if: always() | |
run: cd workflow-inference-compiler/ && python -c 'import wic; import wic.plugins; wic.plugins.blindly_execute_python_workflows()' | |
- name: Build Documentation | |
if: always() | |
run: cd workflow-inference-compiler/docs && make html | |
- name: MyPy Check Type Annotations | |
if: always() | |
run: cd workflow-inference-compiler/ && mypy src/ examples/ tests/ | |
# NOTE: Do not use `mypy .` because then mypy will check both src/ and build/ causing: | |
# src/workflow-inference-compiler/__init__.py: error: Duplicate module named "wic" | |
# (also at "./build/lib/workflow-inference-compiler/__init__.py") | |
- name: PyLint Check Code Quality | |
if: always() | |
run: cd workflow-inference-compiler/ && pylint src/ examples/**/*.py tests/ | |
# NOTE: See fail-under threshold in .pylintrc | |
- name: PEP8 Code Formatting | |
if: always() | |
id: autopep8 | |
run: cd workflow-inference-compiler/ && 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 workflow-inference-compiler/ && 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: 5 # backup timeout for windows | |
- name: PyTest Inline Subworkflows | |
if: always() | |
run: cd workflow-inference-compiler/ && 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: 5 # backup timeout for windows |