Edit on GitHub

Get Started with CML on GitHub

Here, we'll walk through a tutorial to start using CML. For simplicity, we'll show the demo in GitHub Actions, but instructions are pretty similar for all the supported CI systems.

  1. Fork our example project repository.

    The following steps can all be done in the GitHub browser interface. However, to follow along the commands, we recommend cloning your fork to your local workstation:

    git clone https://github.com/<your-username>/example_cml
  2. To create a CML workflow, copy the following into a new file, .github/workflows/cml.yaml:

    name: train-my-model
    on: [push]
         runs-on: [ubuntu-latest]
         container: docker://ghcr.io/iterative/cml:0-dvc2-base1
            - uses: actions/checkout@v2
            - name: cml_run
                  REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
               run: |
                  pip install -r requirements.txt
                  python train.py
                  cat metrics.txt >> report.md
                  cml-publish confusion_matrix.png --md >> report.md
                  cml-send-comment report.md
  3. In your text editor of choice, edit line 16 of train.py to depth = 5.
  4. Commit and push the changes:

    git checkout -b experiment
    git add . && git commit -m "modify forest depth"
    git push origin experiment
  5. In GitHub, open up a Pull Request to compare the experiment branch to master.

    Shortly, you should see a comment from github-actions appear in the Pull Request with your CML report. This is a result of the function cml-send-comment in your workflow.

This is the gist of the CML workflow: when you push changes to your GitHub repository, the workflow in your .github/workflows/cml.yaml file gets run and a report generated.

CML functions let you display relevant results from the workflow, like model performance metrics and vizualizations, in GitHub checks and comments. What kind of workflow you want to run, and want to put in your CML report, is up to you.

The CML GitHub Action

In the above example, we got the CML functions thanks to our Docker container. But there's another way for GitHub Actions users to get CML: the setup-cml Action!

The iterative/setup-cml action is a JavaScript workflow that provides CML functions in your GitHub Actions workflow. The action allows users to install CML without using the CML Docker container.

This action gives you:

  • Functions like cml-publish and cml-send-comment for publishing data visualization and metrics from your CI workflow as comments in a pull request.
  • cml-runner, a function that enables workflows to provision cloud and on-premise computing resources for training models
  • The freedom 🦅 to mix and match CML with your favorite data science tools and environments

Note that CML does not include DVC and its dependencies- for that, you want the Setup DVC Action.


This action has been tested on ubuntu-latest and macos-latest.

Basic usage:

  - uses: actions/checkout@v2
  - uses: iterative/setup-cml@v1

A specific version can be pinned to your workflow.

  - uses: actions/checkout@v2
  - uses: iterative/setup-cml@v1
      version: '1.0.1'


The following inputs are supported.

  • version - (optional) The version of CML to install. A value of latest will install the latest version of CML functions. Defaults to latest.


Setup CML has no outputs.

A complete workflow

Assume that we have a machine learning script, train.py, that outputs an image plot.png. A potential workflow will look like this:

  - uses: actions/checkout@v2
  - uses: iterative/setup-cml@v1
  - env:
      REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    run: |
      # train will generate plot.png
      python train.py

      echo 'My first CML report' > report.md
      cml-publish plot.png --md > report.md
      cml-send-comment report.md

🐛 Found an issue? Let us know! Or fix it:

Edit on GitHub

Have a question? Join our chat, we will help you:

Discord Chat


  • Install
  • Use cases
  • Blog
  • Github

By iterative.ai - An open platform to operationalize AI