From a65394054b5b165ac73547943ad13ee7dfd19d34 Mon Sep 17 00:00:00 2001 From: Junhao Liao Date: Mon, 16 Jun 2025 16:09:38 -0400 Subject: [PATCH 1/3] feat(taskfiles): Add support for CHECKSUM_EXCLUDE_PATTERNS in remote tasks to exclude paths in checksum calculations. --- exports/taskfiles/utils/remote.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/exports/taskfiles/utils/remote.yaml b/exports/taskfiles/utils/remote.yaml index c7f1fa3..99962b5 100644 --- a/exports/taskfiles/utils/remote.yaml +++ b/exports/taskfiles/utils/remote.yaml @@ -58,6 +58,8 @@ tasks: # @param {string} FILE_SHA256 Content hash to verify the downloaded tar file against. # @param {string} [CHECKSUM_FILE={{.OUTPUT_DIR}}.md5] File path to store the checksum of the # downloaded tar file. + # @param {string[]} [CHECKSUM_EXCLUDE_PATTERNS] Path wildcard patterns, relative to `OUTPUT_DIR`, + # to exclude from the checksum. # @param {string[]} [EXCLUDE_PATTERNS] Path wildcard patterns that should not be extracted. # @param {string[]} [INCLUDE_PATTERNS] Path wildcard patterns to extract. # @param {int} [NUM_COMPONENTS_TO_STRIP=1] Number of leading path components to strip from the @@ -74,6 +76,8 @@ tasks: {{default (printf "%s.tar.gz" .OUTPUT_DIR) .TAR_FILE}} # Path patterns + CHECKSUM_EXCLUDE_PATTERNS: + ref: "default (list) .CHECKSUM_EXCLUDE_PATTERNS" EXCLUDE_PATTERNS: ref: "default (list) .EXCLUDE_PATTERNS" INCLUDE_PATTERNS: @@ -97,6 +101,8 @@ tasks: vars: CHECKSUM_FILE: "{{.CHECKSUM_FILE}}" INCLUDE_PATTERNS: ["{{.OUTPUT_DIR}}"] + EXCLUDE_PATTERNS: + ref: ".CHECKSUM_EXCLUDE_PATTERNS" cmds: - |- rm -rf "{{.OUTPUT_DIR}}" @@ -123,6 +129,8 @@ tasks: vars: CHECKSUM_FILE: "{{.CHECKSUM_FILE}}" INCLUDE_PATTERNS: ["{{.OUTPUT_DIR}}"] + EXCLUDE_PATTERNS: + ref: ".CHECKSUM_EXCLUDE_PATTERNS" # Uses curl to download a zip file from the given URL and extracts its contents. # @@ -131,6 +139,8 @@ tasks: # @param {string} FILE_SHA256 Content hash to verify the downloaded zip file against. # @param {string} [CHECKSUM_FILE={{.OUTPUT_DIR}}.md5] File path to store the checksum of the # downloaded zip file. + # @param {string[]} [CHECKSUM_EXCLUDE_PATTERNS] Path wildcard patterns, relative to `OUTPUT_DIR`, + # to exclude from the checksum. # @param {string[]} [EXCLUDE_PATTERNS] Path wildcard patterns that should not be extracted. # @param {string[]} [INCLUDE_PATTERNS] Path wildcard patterns to extract. # @param {string} [ZIP_FILE={{.OUTPUT_DIR}}.zip] Path where the zip file should be stored. @@ -145,6 +155,8 @@ tasks: {{default (printf "%s.zip" .OUTPUT_DIR) .ZIP_FILE}} # Path patterns + CHECKSUM_EXCLUDE_PATTERNS: + ref: "default (list) .CHECKSUM_EXCLUDE_PATTERNS" EXCLUDE_PATTERNS: ref: "default (list) .EXCLUDE_PATTERNS" INCLUDE_PATTERNS: @@ -164,6 +176,8 @@ tasks: vars: CHECKSUM_FILE: "{{.CHECKSUM_FILE}}" INCLUDE_PATTERNS: ["{{.OUTPUT_DIR}}"] + EXCLUDE_PATTERNS: + ref: ".CHECKSUM_EXCLUDE_PATTERNS" cmds: - |- rm -rf "{{.OUTPUT_DIR}}" @@ -185,3 +199,5 @@ tasks: vars: CHECKSUM_FILE: "{{.CHECKSUM_FILE}}" INCLUDE_PATTERNS: ["{{.OUTPUT_DIR}}"] + EXCLUDE_PATTERNS: + ref: ".CHECKSUM_EXCLUDE_PATTERNS" \ No newline at end of file From 591764449a0775dfa461b59be1183dd3afa50f82 Mon Sep 17 00:00:00 2001 From: Junhao Liao Date: Mon, 16 Jun 2025 16:12:38 -0400 Subject: [PATCH 2/3] add newline --- exports/taskfiles/utils/remote.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exports/taskfiles/utils/remote.yaml b/exports/taskfiles/utils/remote.yaml index 99962b5..c9084d3 100644 --- a/exports/taskfiles/utils/remote.yaml +++ b/exports/taskfiles/utils/remote.yaml @@ -200,4 +200,4 @@ tasks: CHECKSUM_FILE: "{{.CHECKSUM_FILE}}" INCLUDE_PATTERNS: ["{{.OUTPUT_DIR}}"] EXCLUDE_PATTERNS: - ref: ".CHECKSUM_EXCLUDE_PATTERNS" \ No newline at end of file + ref: ".CHECKSUM_EXCLUDE_PATTERNS" From 0c650e962a55c35586d9d5410aa5602e1184e142 Mon Sep 17 00:00:00 2001 From: Junhao Liao Date: Tue, 17 Jun 2025 00:18:51 -0400 Subject: [PATCH 3/3] test: Add checksum exclude patterns to download-and-extract-zip tests --- taskfiles/remote/tests.yaml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/taskfiles/remote/tests.yaml b/taskfiles/remote/tests.yaml index 59cffa7..2d99d4e 100644 --- a/taskfiles/remote/tests.yaml +++ b/taskfiles/remote/tests.yaml @@ -83,6 +83,42 @@ tasks: - "test -e '{{.OUTPUT_DIR}}/{{.G_EXTRACTED_ZIP_CODEOWNERS_PATH}}'" - "test -e '{{.OUTPUT_DIR}}/{{.G_EXTRACTED_ZIP_PULL_REQUEST_TEMPLATE_PATH}}'" + download-and-extract-zip-test-checksum-exclude: + vars: + OUTPUT_DIR: "{{.G_OUTPUT_DIR}}/{{.TASK | replace \":\" \"#\"}}" + CHECKSUM_FILE: "{{.OUTPUT_DIR}}.md5" + cmds: + - task: "download-and-extract-zip-test-cleaner" + vars: + OUTPUT_DIR: "{{.OUTPUT_DIR}}" + + # Download the zip file, extract all files, and compute the checksum with some exclude + # patterns. + - task: "remote:download-and-extract-zip" + vars: + CHECKSUM_EXCLUDE_PATTERNS: &checksum_exclude_patterns + - ".github/CODEOWNERS" + - ".github/PULL_REQUEST_TEMPLATE.md" + OUTPUT_DIR: "{{.OUTPUT_DIR}}" + URL: "{{.G_TEST_ZIP_FILE_URL}}" + FILE_SHA256: "{{.G_TEST_ZIP_FILE_SHA256}}" + - "mv '{{.CHECKSUM_FILE}}' '{{.CHECKSUM_FILE}}.ref'" + + # Download the zip file again, extract files excluding some files, and compute the checksum + # with the same exclude patterns. + - task: "remote:download-and-extract-zip" + vars: + CHECKSUM_EXCLUDE_PATTERNS: *checksum_exclude_patterns + EXCLUDE_PATTERNS: + - "*/CODEOWNERS" + - "{{.G_EXTRACTED_ZIP_PULL_REQUEST_TEMPLATE_PATH}}" + OUTPUT_DIR: "{{.OUTPUT_DIR}}" + URL: "{{.G_TEST_ZIP_FILE_URL}}" + FILE_SHA256: "{{.G_TEST_ZIP_FILE_SHA256}}" + + # Test that the checksum file was created and matches the reference checksum file. + - "diff -q '{{.CHECKSUM_FILE}}' '{{.CHECKSUM_FILE}}.ref'" + # Cleans up the files output by download-and-extract-zip (assuming their default paths weren't # changed). #