Using Wily in a CI/CD pipeline

Wily can be used in a CI/CD workflow to compare the complexity of the current files against a particular revision.

By default wily will compare against the previous revision (for a git-pre-commit hook) but you can also give a Git ref, for example HEAD^1 is the commit before the HEAD reference.

$ wily build src/
$ wily diff src/ -r HEAD^1

Or, to compare against

$ wily build src/
$ wily diff src/ -r master
_images/diff_ref.png

The wily diff command takes additional arguments, such as a list of metrics, if you want to see a specific metric.

Examples

Tox

Wily can be run as a separate test environment:

[testenv:wily]
deps =
    wily
commands =
    wily build src/
    wily diff src/ -r HEAD^1

Azure Pipelines

Wily can be called as two separate tasks within a job:

- script: |
  pip install wily
  wily build src/
  displayName: Install Wily and compile cache

- script: "wily diff src/ -r HEAD^1"
  displayName: Compare previous commit

Travis CI

Wily can be called after your tests have completed.

after_success:
  - pip install wily
  - wily build src/
  - wily diff src/ -r HEAD^1

GitHub Workflows

When using Wily in a Github Workflows, you need to specify to the checkout step to check out the head of the branch and not the merge commit

name: Example Wily Pipeline on PR

on:
  pull_request:


jobs:

  evaluate-complexity:
    name: Evaluate Code complexity
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
          ref: ${{ github.event.pull_request.head.ref }}
      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: 3.10.0
      - name: Install Wily
        run: pip install wily==1.20.0
      - name: Build cache and diff
        id: wily
        run: |
          wily build my_package/ tests/
          DIFF=$(wily diff my_package/ tests/ --no-detail -r origin/${{ github.event.pull_request.base.ref }})
          echo "$DIFF"

          # Build multine output
          DIFF="${DIFF//'%'/'%25'}"
          DIFF="${DIFF//$'\n'/'%0A'}"
          DIFF="${DIFF//$'\r'/'%0D'}"
          echo "::set-output name=diff::$DIFF"
      - name: Find current PR
        uses: jwalton/gh-find-current-pr@v1
        id: findPr
      - name: Add Wily PR Comment
        uses: marocchino/sticky-pull-request-comment@v2
        if: steps.findPr.outputs.number && steps.wily.outputs.diff != ''
        with:
          recreate: true
          number: ${{ steps.findPr.outputs.number }}
          message: |
            ```
            ${{ steps.wily.outputs.diff }}
            ```
      - name: Add Wily PR Comment
        uses: marocchino/sticky-pull-request-comment@v2
        if: steps.findPr.outputs.number && steps.wily.outputs.diff == ''
        with:
          recreate: true
          number: ${{ steps.findPr.outputs.number }}
          message: |
            ```
            Wily: No changes in complexity detected.
            ```