From 6d8fb52899102a7506bc9cbb8aedf0ba6c9e46d0 Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Tue, 23 Mar 2021 12:35:54 +1300 Subject: [PATCH 01/17] Create Github Action workflow for reporting DVC image diffs To make reviewing new baseline test images (*.png) easier. this workflow checks what images have been added or modified in a Pull Request. The changes are published in a table and as a series of images by a bot-generated GitHub comment. --- .github/workflows/dvc-diff.yml | 49 ++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 .github/workflows/dvc-diff.yml diff --git a/.github/workflows/dvc-diff.yml b/.github/workflows/dvc-diff.yml new file mode 100644 index 00000000000..f012d4dd2fb --- /dev/null +++ b/.github/workflows/dvc-diff.yml @@ -0,0 +1,49 @@ +# Checks for image diffs in a Pull Request and adds a GitHub comment showing the diff +name: DVC image diff + +on: + pull_request: + paths: + - 'pygmt/tests/baseline/*.png.dvc' + +jobs: + dvc-diff: + name: DVC image diff + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2.3.4 + + - name: Setup data version control (DVC) + uses: iterative/setup-dvc@v1 + + - name: Setup continuous machine learning (CML) + uses: iterative/setup-cml@v1 + + # Produce the markdown diff report, which should look like: + # | Status | Path | + # |----------|-------------------------------------| + # | added | pygmt/tests/baseline/test_image.png | + - name: Get list of images that were added or changed + run: | + dvc diff --show-md master HEAD >> report.md + cat report.md + + - name: Pull image data from cloud storage + run: dvc pull --remote upstream + + - name: Report image diff in a GitHub comment + env: + repo_token: ${{ secrets.GITHUB_TOKEN }} + run: | + # Get just the filename of the changed image from the report + tail --lines=+3 report.md | cut --delimiter='|' --fields=3 > diff_files.txt + + # Append each image to the markdown report + while IFS= read -r line; do + cml-publish "$line" >> report.md + done < diff_files.txt + + # Send diff report as GitHub comment + cml-send-comment report.md From 03d95d536bf67bd408ed016e9ae0aa49dea50a9e Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Tue, 23 Mar 2021 12:53:22 +1300 Subject: [PATCH 02/17] Refactor test_legend_entries to use mpl_image_compare --- pygmt/tests/baseline/test_legend_entries.png | Bin 76604 -> 0 bytes .../baseline/test_legend_entries.png.dvc | 4 +++ pygmt/tests/test_legend.py | 34 +++++------------- 3 files changed, 12 insertions(+), 26 deletions(-) delete mode 100644 pygmt/tests/baseline/test_legend_entries.png create mode 100644 pygmt/tests/baseline/test_legend_entries.png.dvc diff --git a/pygmt/tests/baseline/test_legend_entries.png b/pygmt/tests/baseline/test_legend_entries.png deleted file mode 100644 index 0ac7e1928c92aa12f0fdcc64c9e57fcf420db592..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76604 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 RF+zeIRYgsOSMuf${~xeH`+@)f diff --git a/pygmt/tests/baseline/test_legend_entries.png.dvc b/pygmt/tests/baseline/test_legend_entries.png.dvc new file mode 100644 index 00000000000..8d1ed261703 --- /dev/null +++ b/pygmt/tests/baseline/test_legend_entries.png.dvc @@ -0,0 +1,4 @@ +outs: +- md5: 4d1ed417fd2625d0b2fa5c17dafd32fd + size: 73728 + path: test_legend_entries.png diff --git a/pygmt/tests/test_legend.py b/pygmt/tests/test_legend.py index 60479814b0d..8e269b62382 100644 --- a/pygmt/tests/test_legend.py +++ b/pygmt/tests/test_legend.py @@ -5,7 +5,6 @@ from pygmt import Figure from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import GMTTempFile -from pygmt.helpers.testing import check_figures_equal @pytest.mark.mpl_image_compare @@ -44,42 +43,25 @@ def test_legend_default_position(): return fig -@check_figures_equal() +@pytest.mark.mpl_image_compare def test_legend_entries(): """ Test different marker types/shapes. """ - fig_ref, fig_test = Figure(), Figure() - - # Use single-character arguments for the reference image - fig_ref = Figure() - fig_ref.basemap(J="x1i", R="0/7/3/7", B="") - fig_ref.plot( - data="@Table_5_11.txt", - S="c0.15i", - G="lightgreen", - W="faint", - l="Apples", - ) - fig_ref.plot(data="@Table_5_11.txt", W="1.5p,gray", l='"My lines"') - fig_ref.plot(data="@Table_5_11.txt", S="t0.15i", G="orange", l="Oranges") - fig_ref.legend(D="JTR+jTR") - - fig_test.basemap(projection="x1i", region=[0, 7, 3, 7], frame=True) - fig_test.plot( + fig = Figure() + fig.basemap(projection="x1i", region=[0, 7, 3, 7], frame=True) + fig.plot( data="@Table_5_11.txt", style="c0.15i", color="lightgreen", pen="faint", label="Apples", ) - fig_test.plot(data="@Table_5_11.txt", pen="1.5p,gray", label='"My lines"') - fig_test.plot( - data="@Table_5_11.txt", style="t0.15i", color="orange", label="Oranges" - ) - fig_test.legend(position="JTR+jTR") + fig.plot(data="@Table_5_11.txt", pen="1.5p,gray", label='"My lines"') + fig.plot(data="@Table_5_11.txt", style="t0.15i", color="orange", label="Oranges") + fig.legend(position="JTR+jTR") - return fig_ref, fig_test + return fig @pytest.mark.mpl_image_compare From e14674a786eedf82a6fe6a0d9eb7cb69f9f26d0f Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Tue, 23 Mar 2021 13:44:56 +1300 Subject: [PATCH 03/17] Let actions/checkout fetch all history so that git diff works --- .github/workflows/dvc-diff.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/dvc-diff.yml b/.github/workflows/dvc-diff.yml index f012d4dd2fb..682fb9112d5 100644 --- a/.github/workflows/dvc-diff.yml +++ b/.github/workflows/dvc-diff.yml @@ -14,6 +14,9 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2.3.4 + with: + # fetch all history so that git diff works + fetch-depth: 0 - name: Setup data version control (DVC) uses: iterative/setup-dvc@v1 From a314617200e9fa9d15b8ada4955eecd837cfea8d Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Tue, 23 Mar 2021 14:00:08 +1300 Subject: [PATCH 04/17] Cut by using whitespace instead of pipe --- .github/workflows/dvc-diff.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dvc-diff.yml b/.github/workflows/dvc-diff.yml index 682fb9112d5..53f92fa5dc6 100644 --- a/.github/workflows/dvc-diff.yml +++ b/.github/workflows/dvc-diff.yml @@ -41,7 +41,7 @@ jobs: repo_token: ${{ secrets.GITHUB_TOKEN }} run: | # Get just the filename of the changed image from the report - tail --lines=+3 report.md | cut --delimiter='|' --fields=3 > diff_files.txt + tail --lines=+3 report.md | cut --delimiter=' ' --fields=7 > diff_files.txt # Append each image to the markdown report while IFS= read -r line; do From b4c1da58d0e64f95a5d3f619e6e66d86315b0e40 Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Tue, 23 Mar 2021 14:08:10 +1300 Subject: [PATCH 05/17] Ensure png image is viewable and add markdown header before image diff --- .github/workflows/dvc-diff.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dvc-diff.yml b/.github/workflows/dvc-diff.yml index 53f92fa5dc6..a4b142d2c75 100644 --- a/.github/workflows/dvc-diff.yml +++ b/.github/workflows/dvc-diff.yml @@ -44,8 +44,9 @@ jobs: tail --lines=+3 report.md | cut --delimiter=' ' --fields=7 > diff_files.txt # Append each image to the markdown report + echo -e "## Image diff(s)\n" >> report.md while IFS= read -r line; do - cml-publish "$line" >> report.md + cml-publish --md "$line" >> report.md done < diff_files.txt # Send diff report as GitHub comment From ee1010810bc4d53983beaf5586f65b2f1b7d867a Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Tue, 23 Mar 2021 16:26:51 +1300 Subject: [PATCH 06/17] Use specific versions of setup-dvc and setup-cml Co-authored-by: Dongdong Tian --- .github/workflows/dvc-diff.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dvc-diff.yml b/.github/workflows/dvc-diff.yml index a4b142d2c75..1c6181401b9 100644 --- a/.github/workflows/dvc-diff.yml +++ b/.github/workflows/dvc-diff.yml @@ -19,10 +19,10 @@ jobs: fetch-depth: 0 - name: Setup data version control (DVC) - uses: iterative/setup-dvc@v1 + uses: iterative/setup-dvc@v1.0.2 - name: Setup continuous machine learning (CML) - uses: iterative/setup-cml@v1 + uses: iterative/setup-cml@v1.0.0 # Produce the markdown diff report, which should look like: # | Status | Path | From 1db5328476c06c65bf0518a772cc0746e6d68c2b Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Fri, 26 Mar 2021 12:55:32 +1300 Subject: [PATCH 07/17] Use peter-evans/create-or-update-comment to publish image diff report Co-Authored-By: Dongdong Tian --- .github/workflows/dvc-diff.yml | 36 +++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/.github/workflows/dvc-diff.yml b/.github/workflows/dvc-diff.yml index 1c6181401b9..84179551755 100644 --- a/.github/workflows/dvc-diff.yml +++ b/.github/workflows/dvc-diff.yml @@ -28,7 +28,7 @@ jobs: # | Status | Path | # |----------|-------------------------------------| # | added | pygmt/tests/baseline/test_image.png | - - name: Get list of images that were added or changed + - name: Put list of images that were added or changed into report run: | dvc diff --show-md master HEAD >> report.md cat report.md @@ -36,9 +36,10 @@ jobs: - name: Pull image data from cloud storage run: dvc pull --remote upstream - - name: Report image diff in a GitHub comment + - name: Put image diff(s) into report env: repo_token: ${{ secrets.GITHUB_TOKEN }} + id: image-diff run: | # Get just the filename of the changed image from the report tail --lines=+3 report.md | cut --delimiter=' ' --fields=7 > diff_files.txt @@ -50,4 +51,33 @@ jobs: done < diff_files.txt # Send diff report as GitHub comment - cml-send-comment report.md + # cml-send-comment report.md + + # Format report to escape newlines before publishing as GitHub comment + report=$(cat report.md) + report="${report//'%'/'%25'}" + report="${report//$'\n'/'%0A'}" + report="${report//$'\r'/'%0D'}" + echo ::set-output name=report::$report + + - name: Find comment with image diff report + uses: peter-evans/find-comment@v1.2.0 + id: fc + with: + issue-number: ${{ github.event.pull_request.number }} + comment-author: 'github-actions[bot]' + body-includes: '## Image diff(s)' + + - name: Create comment with image diff report + if: steps.fc.outputs.comment-id == '' + uses: peter-evans/create-or-update-comment@v1.4.4 + with: + issue-number: ${{ github.event.pull_request.number }} + body: ${{ steps.image-diff.outputs.report }} + + - name: Update comment with new image diff report + if: steps.fc.outputs.comment-id != '' + uses: peter-evans/create-or-update-comment@v1.4.4 + with: + comment-id: ${{ steps.fc.outputs.comment-id }} + body: ${{ steps.image-diff.outputs.report }} From bb6d5ff6b5a39923f07be199e8930fdecb718307 Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Fri, 26 Mar 2021 13:19:10 +1300 Subject: [PATCH 08/17] Make GitHub comment more descriptive and easier to regex match --- .github/workflows/dvc-diff.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dvc-diff.yml b/.github/workflows/dvc-diff.yml index 84179551755..c79b112620b 100644 --- a/.github/workflows/dvc-diff.yml +++ b/.github/workflows/dvc-diff.yml @@ -30,6 +30,8 @@ jobs: # | added | pygmt/tests/baseline/test_image.png | - name: Put list of images that were added or changed into report run: | + echo -e "## Summary of changed images\n" > report.md + echo -e "This is an auto-generated report of images that have changed on the DVC remote\n" >> report.md dvc diff --show-md master HEAD >> report.md cat report.md @@ -42,7 +44,7 @@ jobs: id: image-diff run: | # Get just the filename of the changed image from the report - tail --lines=+3 report.md | cut --delimiter=' ' --fields=7 > diff_files.txt + tail --lines=+7 report.md | cut --delimiter=' ' --fields=7 > diff_files.txt # Append each image to the markdown report echo -e "## Image diff(s)\n" >> report.md @@ -66,7 +68,7 @@ jobs: with: issue-number: ${{ github.event.pull_request.number }} comment-author: 'github-actions[bot]' - body-includes: '## Image diff(s)' + body-includes: 'This is an auto-generated report of images that have changed on the DVC remote' - name: Create comment with image diff report if: steps.fc.outputs.comment-id == '' From 696361160b72a597320d4f6543fe31b818150fc0 Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Fri, 26 Mar 2021 13:23:21 +1300 Subject: [PATCH 09/17] Update inline comment on what the markdown diff report should look like --- .github/workflows/dvc-diff.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/dvc-diff.yml b/.github/workflows/dvc-diff.yml index c79b112620b..5a07ecc154e 100644 --- a/.github/workflows/dvc-diff.yml +++ b/.github/workflows/dvc-diff.yml @@ -25,6 +25,10 @@ jobs: uses: iterative/setup-cml@v1.0.0 # Produce the markdown diff report, which should look like: + # ## Summary of changed images + # + # This is an auto-generated report of images that have changed on the DVC remote + # # | Status | Path | # |----------|-------------------------------------| # | added | pygmt/tests/baseline/test_image.png | From 8fa0afe1c4a91485de2b705a85610b6cae9d8a93 Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Fri, 26 Mar 2021 13:27:39 +1300 Subject: [PATCH 10/17] Update GitHub comment report using 'replace' mode instead of 'append' --- .github/workflows/dvc-diff.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/dvc-diff.yml b/.github/workflows/dvc-diff.yml index 5a07ecc154e..b92ceffd488 100644 --- a/.github/workflows/dvc-diff.yml +++ b/.github/workflows/dvc-diff.yml @@ -87,3 +87,4 @@ jobs: with: comment-id: ${{ steps.fc.outputs.comment-id }} body: ${{ steps.image-diff.outputs.report }} + edit-mode: replace From de763c95619ad455662d485e40ced54a408b0f20 Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Fri, 26 Mar 2021 13:50:24 +1300 Subject: [PATCH 11/17] Add bullet points with names for each of the images that have changed --- .github/workflows/dvc-diff.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dvc-diff.yml b/.github/workflows/dvc-diff.yml index b92ceffd488..4e45ec223f9 100644 --- a/.github/workflows/dvc-diff.yml +++ b/.github/workflows/dvc-diff.yml @@ -53,7 +53,8 @@ jobs: # Append each image to the markdown report echo -e "## Image diff(s)\n" >> report.md while IFS= read -r line; do - cml-publish --md "$line" >> report.md + echo -e "- $line \n" >> report.md + cml-publish --title $line --md "$line" >> report.md done < diff_files.txt # Send diff report as GitHub comment From d482a972e2c4f08ab8a03f2269d257bed2cd9766 Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Fri, 26 Mar 2021 14:54:50 +1300 Subject: [PATCH 12/17] Remove cml-send-comment lines Co-authored-by: Dongdong Tian --- .github/workflows/dvc-diff.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/dvc-diff.yml b/.github/workflows/dvc-diff.yml index 4e45ec223f9..c0dd7a31e09 100644 --- a/.github/workflows/dvc-diff.yml +++ b/.github/workflows/dvc-diff.yml @@ -57,9 +57,6 @@ jobs: cml-publish --title $line --md "$line" >> report.md done < diff_files.txt - # Send diff report as GitHub comment - # cml-send-comment report.md - # Format report to escape newlines before publishing as GitHub comment report=$(cat report.md) report="${report//'%'/'%25'}" From 6fa103f19be1f9a53a0f1705ac76da92ce7a35a7 Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Fri, 26 Mar 2021 15:02:01 +1300 Subject: [PATCH 13/17] Mention GitHub SHA in the report --- .github/workflows/dvc-diff.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/dvc-diff.yml b/.github/workflows/dvc-diff.yml index c0dd7a31e09..4ebec233939 100644 --- a/.github/workflows/dvc-diff.yml +++ b/.github/workflows/dvc-diff.yml @@ -57,6 +57,9 @@ jobs: cml-publish --title $line --md "$line" >> report.md done < diff_files.txt + # Mention GitHub SHA in the report + echo -e "Report last updated at commit $GITHUB_SHA" >> report.md + # Format report to escape newlines before publishing as GitHub comment report=$(cat report.md) report="${report//'%'/'%25'}" From 554ba6df77871c21a5eedbf0d32d53cd4f38c3e1 Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Fri, 26 Mar 2021 15:28:26 +1300 Subject: [PATCH 14/17] Collapsible image diff section and use correct git SHA Co-Authored-By: Dongdong Tian --- .github/workflows/dvc-diff.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dvc-diff.yml b/.github/workflows/dvc-diff.yml index 4ebec233939..03309072f98 100644 --- a/.github/workflows/dvc-diff.yml +++ b/.github/workflows/dvc-diff.yml @@ -52,13 +52,17 @@ jobs: # Append each image to the markdown report echo -e "## Image diff(s)\n" >> report.md + echo -e "
\n" >> report.md + while IFS= read -r line; do echo -e "- $line \n" >> report.md cml-publish --title $line --md "$line" >> report.md done < diff_files.txt - # Mention GitHub SHA in the report - echo -e "Report last updated at commit $GITHUB_SHA" >> report.md + echo -e "
\n" >> report.md + + # Mention git commit SHA in the report + echo -e "Report last updated at commit ${{ github.event.pull_request.head.sha }}" >> report.md # Format report to escape newlines before publishing as GitHub comment report=$(cat report.md) From 3b890a8e1ab1d19305ef47cd24b752b821d769c7 Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Fri, 26 Mar 2021 20:50:20 +1300 Subject: [PATCH 15/17] Use awk instead of cut to handle multiple whitespace better Co-Authored-By: Dongdong Tian --- .github/workflows/dvc-diff.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dvc-diff.yml b/.github/workflows/dvc-diff.yml index 03309072f98..32babdf4631 100644 --- a/.github/workflows/dvc-diff.yml +++ b/.github/workflows/dvc-diff.yml @@ -15,7 +15,7 @@ jobs: - name: Checkout uses: actions/checkout@v2.3.4 with: - # fetch all history so that git diff works + # fetch all history so that dvc diff works fetch-depth: 0 - name: Setup data version control (DVC) @@ -48,7 +48,7 @@ jobs: id: image-diff run: | # Get just the filename of the changed image from the report - tail --lines=+7 report.md | cut --delimiter=' ' --fields=7 > diff_files.txt + tail --lines=+7 report.md | awk '{print $4}' > diff_files.txt # Append each image to the markdown report echo -e "## Image diff(s)\n" >> report.md From 6ea495e2f9505c3f957d553afe22db9ebf098e21 Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Fri, 26 Mar 2021 20:57:00 +1300 Subject: [PATCH 16/17] List dvc-diff.yml under MAINTENANCE.md --- MAINTENANCE.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/MAINTENANCE.md b/MAINTENANCE.md index d634044916f..630d1b39c4a 100644 --- a/MAINTENANCE.md +++ b/MAINTENANCE.md @@ -127,6 +127,12 @@ There are 9 configuration files located in `.github/workflows`: This workflow is triggered in a PR if the slash command `/format` is used. +10. `dvc-diff.yml` (Report changes to test images on dvc remote) + + This workflow is triggered in a PR when any *.png.dvc files have been added, + modified, or deleted. A GitHub comment will be published that contains a summary + table of the images that have changed along with a visual report. + ## Continuous Documentation We use the [Vercel for GitHub](https://github.com/apps/vercel) App to preview changes From 85df20a943a6420d65a8fbbea74b1e6be758bb0b Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Mon, 29 Mar 2021 14:41:37 +1300 Subject: [PATCH 17/17] Use awk 'NR>=7' instead of tail and add some whitespace indentation Co-authored-by: Dongdong Tian --- .github/workflows/dvc-diff.yml | 2 +- MAINTENANCE.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/dvc-diff.yml b/.github/workflows/dvc-diff.yml index 32babdf4631..5ea9d2a6978 100644 --- a/.github/workflows/dvc-diff.yml +++ b/.github/workflows/dvc-diff.yml @@ -48,7 +48,7 @@ jobs: id: image-diff run: | # Get just the filename of the changed image from the report - tail --lines=+7 report.md | awk '{print $4}' > diff_files.txt + awk 'NR>=7 {print $4}' report.md > diff_files.txt # Append each image to the markdown report echo -e "## Image diff(s)\n" >> report.md diff --git a/MAINTENANCE.md b/MAINTENANCE.md index 630d1b39c4a..f493eda2b39 100644 --- a/MAINTENANCE.md +++ b/MAINTENANCE.md @@ -129,9 +129,9 @@ There are 9 configuration files located in `.github/workflows`: 10. `dvc-diff.yml` (Report changes to test images on dvc remote) - This workflow is triggered in a PR when any *.png.dvc files have been added, - modified, or deleted. A GitHub comment will be published that contains a summary - table of the images that have changed along with a visual report. + This workflow is triggered in a PR when any *.png.dvc files have been added, + modified, or deleted. A GitHub comment will be published that contains a summary + table of the images that have changed along with a visual report. ## Continuous Documentation