+++ /dev/null
-name: diff-shades
-
-on:
- push:
- branches: [main]
- paths: ["src/**", "pyproject.toml", ".github/workflows/*"]
-
- pull_request:
- paths: ["src/**", "pyproject.toml", ".github/workflows/*"]
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
- cancel-in-progress: true
-
-jobs:
- configure:
- runs-on: ubuntu-latest
- outputs:
- matrix: ${{ steps.set-config.outputs.matrix }}
-
- steps:
- - uses: actions/checkout@v4
- - uses: actions/setup-python@v4
- with:
- python-version: "*"
-
- - name: Install diff-shades and support dependencies
- run: |
- python -m pip install 'click==8.1.3' packaging urllib3
- python -m pip install https://github.com/ichard26/diff-shades/archive/stable.zip
-
- - name: Calculate run configuration & metadata
- id: set-config
- env:
- GITHUB_TOKEN: ${{ github.token }}
- run: >
- python scripts/diff_shades_gha_helper.py config ${{ github.event_name }} ${{ matrix.mode }}
-
- analysis:
- name: analysis / ${{ matrix.mode }}
- needs: configure
- runs-on: ubuntu-latest
- env:
- HATCH_BUILD_HOOKS_ENABLE: "1"
- # Clang is less picky with the C code it's given than gcc (and may
- # generate faster binaries too).
- CC: clang-14
- strategy:
- fail-fast: false
- matrix:
- include: ${{ fromJson(needs.configure.outputs.matrix )}}
-
- steps:
- - name: Checkout this repository (full clone)
- uses: actions/checkout@v4
- with:
- # The baseline revision could be rather old so a full clone is ideal.
- fetch-depth: 0
-
- - uses: actions/setup-python@v4
- with:
- python-version: "*"
-
- - name: Install diff-shades and support dependencies
- run: |
- python -m pip install https://github.com/ichard26/diff-shades/archive/stable.zip
- python -m pip install 'click==8.1.3' packaging urllib3
- # After checking out old revisions, this might not exist so we'll use a copy.
- cat scripts/diff_shades_gha_helper.py > helper.py
- git config user.name "diff-shades-gha"
- git config user.email "diff-shades-gha@example.com"
-
- - name: Attempt to use cached baseline analysis
- id: baseline-cache
- uses: actions/cache@v3
- with:
- path: ${{ matrix.baseline-analysis }}
- key: ${{ matrix.baseline-cache-key }}
-
- - name: Build and install baseline revision
- if: steps.baseline-cache.outputs.cache-hit != 'true'
- env:
- GITHUB_TOKEN: ${{ github.token }}
- run: >
- ${{ matrix.baseline-setup-cmd }}
- && python -m pip install .
-
- - name: Analyze baseline revision
- if: steps.baseline-cache.outputs.cache-hit != 'true'
- run: >
- diff-shades analyze -v --work-dir projects-cache/
- ${{ matrix.baseline-analysis }} ${{ matrix.force-flag }}
-
- - name: Build and install target revision
- env:
- GITHUB_TOKEN: ${{ github.token }}
- run: >
- ${{ matrix.target-setup-cmd }}
- && python -m pip install .
-
- - name: Analyze target revision
- run: >
- diff-shades analyze -v --work-dir projects-cache/
- ${{ matrix.target-analysis }} --repeat-projects-from
- ${{ matrix.baseline-analysis }} ${{ matrix.force-flag }}
-
- - name: Generate HTML diff report
- run: >
- diff-shades --dump-html diff.html compare --diff
- ${{ matrix.baseline-analysis }} ${{ matrix.target-analysis }}
-
- - name: Upload diff report
- uses: actions/upload-artifact@v3
- with:
- name: ${{ matrix.mode }}-diff.html
- path: diff.html
-
- - name: Upload baseline analysis
- uses: actions/upload-artifact@v3
- with:
- name: ${{ matrix.baseline-analysis }}
- path: ${{ matrix.baseline-analysis }}
-
- - name: Upload target analysis
- uses: actions/upload-artifact@v3
- with:
- name: ${{ matrix.target-analysis }}
- path: ${{ matrix.target-analysis }}
-
- - name: Generate summary file (PR only)
- if: github.event_name == 'pull_request' && matrix.mode == 'preview-changes'
- run: >
- python helper.py comment-body
- ${{ matrix.baseline-analysis }} ${{ matrix.target-analysis }}
- ${{ matrix.baseline-sha }} ${{ matrix.target-sha }}
- ${{ github.event.pull_request.number }}
-
- - name: Upload summary file (PR only)
- if: github.event_name == 'pull_request' && matrix.mode == 'preview-changes'
- uses: actions/upload-artifact@v3
- with:
- name: .pr-comment.json
- path: .pr-comment.json
-
- - name: Verify zero changes (PR only)
- if: matrix.mode == 'assert-no-changes'
- run: >
- diff-shades compare --check ${{ matrix.baseline-analysis }} ${{ matrix.target-analysis }}
- || (echo "Please verify you didn't change the stable code style unintentionally!" && exit 1)
-
- - name: Check for failed files for target revision
- # Even if the previous step failed, we should still check for failed files.
- if: always()
- run: >
- diff-shades show-failed --check --show-log ${{ matrix.target-analysis }}