diff --git a/exports/taskfiles/utils/remote.yaml b/exports/taskfiles/utils/remote.yaml index c7f1fa3..c9084d3 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" 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). #