== CI (Continuous Integration)

CI is an important part of development and it helps to keep the project maintainable.
Fedora infra is using https://fedora.softwarefactory-project.io/zuul/status[Fedora CI].
This CI is hosted by Fedora and open to any Fedora project.

Fedora Infra also maintains their own https://pagure.io/fedora-infra/zuul[zuul jobs repository].
This repository is open to contributions and every project in Fedora can use these jobs.

=== Setting up CI for new project

==== Pagure

There is an https://fedoraproject.org/wiki/Zuul-based-ci#How_to_attach_a_Pagure_repository_on_Zuul[official
guide] for new repositories that want to be added
https://fedora.softwarefactory-project.io/zuul/status[Fedora CI].

==== Github

https://github.com/fedora-infra[Fedora Infra organization] on Github already has the corresponding
application installed. To have it enabled for the project you need to
https://fedoraproject.org/wiki/Zuul-based-ci#Add_the_repository_into_the_Zuul_configuration[add the repository to Zuul configuration] and create a `.zuul.yaml` file
Following is the basic `zuul.yaml` file that could be used:

....
---
# The root of the configuration is project
- project:
    check:
      # Jobs to run on the project
      # This example runs various tox environments
      # More info about these jobs can be found on
      # https://fedora.softwarefactory-project.io/zuul/jobs
      jobs:
        - fi-tox-mypy
        - fi-tox-lint
        - fi-tox-format
        - fi-tox-python38
        - fi-tox-python39
        - fi-tox-python310
        - fi-tox-docs:
            vars:
              dependencies:
                - graphviz
                - python3-sphinxcontrib-httpdomain
                - python3-sqlalchemy_schemadisplay
        - fi-tox-bandit
        - fi-tox-diff-cover
....
