name: diff-shades on: push: branches: [main] paths-ignore: ["docs/**", "tests/**", "*.md"] pull_request: paths-ignore: ["docs/**", "tests/**", "*.md"] workflow_dispatch: inputs: baseline: description: > The baseline revision. Pro-tip, use `.pypi` to use the latest version on PyPI or `.XXX` to use a PR. required: true default: main baseline-args: description: "Custom Black arguments (eg. -l 79)" required: false target: description: > The target revision to compare against the baseline. Same tip applies here. required: true target-args: description: "Custom Black arguments (eg. -S)" required: false jobs: analysis: name: analysis / linux runs-on: ubuntu-latest steps: - name: Checkout this repository (full clone) uses: actions/checkout@v2 with: fetch-depth: 0 - uses: actions/setup-python@v2 - name: Install diff-shades and support dependencies run: | python -m pip install pip --upgrade python -m pip install https://github.com/ichard26/diff-shades/archive/stable.zip python -m pip install click 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: Calculate run configuration & metadata id: config env: GITHUB_TOKEN: ${{ github.token }} run: > python helper.py config ${{ github.event_name }} ${{ github.event.inputs.baseline }} ${{ github.event.inputs.target }} --baseline-args "${{ github.event.inputs.baseline-args }}" - name: Attempt to use cached baseline analysis id: baseline-cache uses: actions/cache@v2.1.7 with: path: ${{ steps.config.outputs.baseline-analysis }} key: ${{ steps.config.outputs.baseline-cache-key }} - name: Install baseline revision if: steps.baseline-cache.outputs.cache-hit != 'true' env: GITHUB_TOKEN: ${{ github.token }} run: ${{ steps.config.outputs.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/ ${{ steps.config.outputs.baseline-analysis }} -- ${{ github.event.inputs.baseline-args }} - name: Install target revision env: GITHUB_TOKEN: ${{ github.token }} run: ${{ steps.config.outputs.target-setup-cmd }} && python -m pip install . - name: Analyze target revision run: > diff-shades analyze -v --work-dir projects-cache/ ${{ steps.config.outputs.target-analysis }} --repeat-projects-from ${{ steps.config.outputs.baseline-analysis }} -- ${{ github.event.inputs.target-args }} - name: Generate HTML diff report run: > diff-shades --dump-html diff.html compare --diff --quiet ${{ steps.config.outputs.baseline-analysis }} ${{ steps.config.outputs.target-analysis }} - name: Upload diff report uses: actions/upload-artifact@v2 with: name: diff.html path: diff.html - name: Upload baseline analysis uses: actions/upload-artifact@v2 with: name: ${{ steps.config.outputs.baseline-analysis }} path: ${{ steps.config.outputs.baseline-analysis }} - name: Upload target analysis uses: actions/upload-artifact@v2 with: name: ${{ steps.config.outputs.target-analysis }} path: ${{ steps.config.outputs.target-analysis }} - name: Generate summary file (PR only) if: github.event_name == 'pull_request' run: > python helper.py comment-body ${{ steps.config.outputs.baseline-analysis }} ${{ steps.config.outputs.target-analysis }} ${{ steps.config.outputs.baseline-sha }} ${{ steps.config.outputs.target-sha }} - name: Upload summary file (PR only) if: github.event_name == 'pull_request' uses: actions/upload-artifact@v2 with: name: .pr-comment-body.md path: .pr-comment-body.md # This is last so the diff-shades-comment workflow can still work even if we # end up detecting failed files and failing the run. - name: Check for failed files in both analyses run: > diff-shades show-failed --check --show-log ${{ steps.config.outputs.baseline-analysis }}; diff-shades show-failed --check --show-log ${{ steps.config.outputs.target-analysis }}