Lightning-AI / ecosystem-ci

Automate issue discovery for your projects against Lightning nightly and releases.
https://devblog.pytorchlightning.ai/stay-ahead-of-breaking-changes-with-the-new-lightning-ecosystem-ci-b7e1cf78a6c7
Apache License 2.0
45 stars 15 forks source link
ci-cd compatibility-testing deep-learning integration-testing lightweight python

Logo

Automated Testing for Lightning EcoSystem Projects

Lightning CI internal codecov pre-commit.ci status


Automate issue discovery for your projects against Lightning nightly and releases.
You get CPUs, Multi-GPUs testing for free, and Slack notification alerts if issues arise!

How do I add my own Project?

Pre-requisites

Here are pre-requisites for your project before adding to the Lightning EcoSystem CI:

Adding your own project config

  1. First, fork this project (with CLI or in browser) to be able to create a new Pull Request, and work within a specific branch.
    gh repo fork Lightning-AI/ecosystem-ci
    cd ecosystem-ci/
  2. Copy the template file in configs folder and call it <my_project_name>.yaml.
    cp configs/template.yaml configs/<my_project_name>.yaml
  3. At the minimum, modify the HTTPS variable to point to your repository. See Configuring my project for more options.
    source_repository:
     HTTPS: https://github.com/MyUsername/MyProject.git
    ...

    If your project tests multiple configurations or you'd like to test against multiple Lightning versions such as master and release branches, create a config file for each one of them. As an example, have a look at metrics master and metrics release CI files.

  4. Define your runtimes (OS and Python version) in your config file to be executed on CPU and/or add the config filename in the Azure GPU CI file.
    • For CPU integration, specify the OS and Python version combinations inside your config file:
      runtimes:
      - {os: "ubuntu-20.04", python: "3.9"}
      - {os: "macOS-12", python: "3.7"}
      - {os: "windows-2019", python: "3.8"}
      ...
    • For GPU integration, add your config filename in the Azure GPU CI file file:
      ...
      jobs:
      - template: testing-template.yml
      parameters:
       configs:
       - "Lightning-AI/metrics_pl-develop.yaml"
       - "Lightning-AI/metrics_pl-release.yaml"
       - "MyUsername/my_project-master.yaml"
  5. Add the responsible person(s) to CODEOWNERS for your organization folder or just the project.
    # MyProject
    /configs/Myusername/MyProject*    @Myusername
  6. Finally, create a draft PR to the repo!

Additional suggestions and engagement rules

Configuring my project

The config include a few different sections:

All dependencies as well as the target repository is sharing the same template with the only required field HTTPS and all others are optional:

source_repository:
  HTTPS: https://github.com/Lightning-AI/metrics.git
  username: my-nick  # Optional, used when checking out private/protected repo
  password: dont-tell-anyone # Optional, used when checking out private/protected repo
  token: authentication-token # Optional, overrides the user/pass when checking out private/protected repo
  checkout: master # Optional, checkout a particular branch or a tag
  install_extras: all # Refers to standard pip option to install some additional dependencies defined with setuptools, typically used as `<my-package>[<install_extras>]`.

# Optional, if any installation/tests require some env variables
env:
   MY_ENV_VARIABLE: "VAR"

copy_tests:
    - integrations # copied folder from the original repo into the running test directory
    # this is copied as we use the helpers inside integrations as regular python package
    - tests/__init__.py
    - tests/helpers

# Optional, additional pytest arguments and control which directory to test on
testing:
  dirs:
    - integrations
  pytest_args: --strict

Note: If you define some files as done above, and they are using internal-cross imports, you need to copy the __init__.py files from each particular package level.

The testing section provides access to the pytest run args and command.

testing:
  # by default pytest is called on all copied items/tests
  dirs:
    - integrations
  # OPTIONAL, additional pytest arguments
  pytest_args: --strict