Compare commits

..

3 Commits

Author SHA1 Message Date
Daniel Kennedy
113849fd10 Fix the expected type 2026-03-10 20:52:49 -04:00
Daniel Kennedy
afb5733147 Specify that we want v4 in a comment 2026-03-10 20:50:20 -04:00
Daniel Kennedy
88b0a35773 Add a regression test for artifact name + content-type mismatches 2026-03-10 20:47:39 -04:00

View File

@@ -155,135 +155,35 @@ jobs:
Write-Host "Successfully downloaded artifact without decompressing: $rawFile (size: $($fileInfo.Length) bytes)" Write-Host "Successfully downloaded artifact without decompressing: $rawFile (size: $($fileInfo.Length) bytes)"
shell: pwsh shell: pwsh
# Test uploading and downloading artifacts with CJK (Chinese, Japanese, Korean) characters # Regression test for artifact filename vs content-type mismatch
# Regression test: certain non-ASCII chars (e.g. U+571F 土) caused 400 errors from # When an archived artifact has a name with a file extension that doesn't
# Azure Blob Storage due to encoding issues in the Content-Disposition / rscd parameter # match the blob type (e.g. "report.txt" but blob is zip), the server
- name: Create artifacts with CJK names # should append .zip to the content-disposition filename.
- name: Create and upload archived artifact with misleading extension
shell: bash shell: bash
run: | run: |
mkdir -p path/to/cjk-artifacts mkdir -p path/to/extension-test
# Chinese - 土 (U+571F) known to fail, 日 (U+65E5) known to work echo '{"key": "value"}' > path/to/extension-test/data.json
echo "Content for 土" > "path/to/cjk-artifacts/file-土-${{ matrix.runs-on }}.txt" - uses: actions/upload-artifact@v4 # V4 is important here to ensure we're supporting older versions correctly
echo "Content for 中文测试" > "path/to/cjk-artifacts/file-中文测试-${{ matrix.runs-on }}.txt"
# Japanese - katakana and kanji
echo "Content for テスト" > "path/to/cjk-artifacts/file-テスト-${{ matrix.runs-on }}.txt"
echo "Content for 東京タワー" > "path/to/cjk-artifacts/file-東京タワー-${{ matrix.runs-on }}.txt"
# Korean - Hangul
echo "Content for 테스트" > "path/to/cjk-artifacts/file-테스트-${{ matrix.runs-on }}.txt"
echo "Content for 서울시" > "path/to/cjk-artifacts/file-서울시-${{ matrix.runs-on }}.txt"
- name: Upload CJK artifact - Chinese 土
uses: actions/upload-artifact@v7
with: with:
path: path/to/cjk-artifacts/file-土-${{ matrix.runs-on }}.txt name: report.txt-${{ matrix.runs-on }}.json
archive: false path: path/to/extension-test/data.json
- name: Upload CJK artifact - Chinese 中文测试 - name: Download misleading-extension artifact without decompressing
uses: actions/upload-artifact@v7
with:
path: path/to/cjk-artifacts/file-中文测试-${{ matrix.runs-on }}.txt
archive: false
- name: Upload CJK artifact - Japanese テスト
uses: actions/upload-artifact@v7
with:
path: path/to/cjk-artifacts/file-テスト-${{ matrix.runs-on }}.txt
archive: false
- name: Upload CJK artifact - Japanese 東京タワー
uses: actions/upload-artifact@v7
with:
path: path/to/cjk-artifacts/file-東京タワー-${{ matrix.runs-on }}.txt
archive: false
- name: Upload CJK artifact - Korean 테스트
uses: actions/upload-artifact@v7
with:
path: path/to/cjk-artifacts/file-테스트-${{ matrix.runs-on }}.txt
archive: false
- name: Upload CJK artifact - Korean 서울시
uses: actions/upload-artifact@v7
with:
path: path/to/cjk-artifacts/file-서울시-${{ matrix.runs-on }}.txt
archive: false
- name: Download CJK artifact - Chinese 土
uses: ./ uses: ./
with: with:
name: file-土-${{ matrix.runs-on }}.txt name: report.txt-${{ matrix.runs-on }}.json
path: cjk-download/土 path: ext-test/raw
skip-decompress: true
- name: Download CJK artifact - Chinese 中文测试 - name: Verify downloaded file has .zip extension appended
uses: ./
with:
name: file-中文测试-${{ matrix.runs-on }}.txt
path: cjk-download/中文测试
- name: Download CJK artifact - Japanese テスト
uses: ./
with:
name: file-テスト-${{ matrix.runs-on }}.txt
path: cjk-download/テスト
- name: Download CJK artifact - Japanese 東京タワー
uses: ./
with:
name: file-東京タワー-${{ matrix.runs-on }}.txt
path: cjk-download/東京タワー
- name: Download CJK artifact - Korean 테스트
uses: ./
with:
name: file-테스트-${{ matrix.runs-on }}.txt
path: cjk-download/테스트
- name: Download CJK artifact - Korean 서울시
uses: ./
with:
name: file-서울시-${{ matrix.runs-on }}.txt
path: cjk-download/서울시
- name: Verify CJK artifact downloads
shell: bash shell: bash
run: | run: |
set -e expected="ext-test/raw/report.txt-${{ matrix.runs-on }}.json.zip"
fail=0 if [ -f "$expected" ]; then
echo "PASS: Downloaded file has .zip appended: $expected"
check_file() { else
local file="$1" echo "FAIL: Expected $expected but got:"
local expected="$2" ls -al ext-test/raw/
if [ ! -f "$file" ]; then
echo "FAIL: Missing file: $file"
fail=1
return
fi
actual=$(cat "$file")
if [ "$actual" != "$expected" ]; then
echo "FAIL: Content mismatch in $file"
echo " Expected: '$expected'"
echo " Got: '$actual'"
fail=1
return
fi
echo "PASS: $file"
}
echo "=== Chinese ==="
check_file "cjk-download/土/file-土-${{ matrix.runs-on }}.txt" "Content for 土"
check_file "cjk-download/中文测试/file-中文测试-${{ matrix.runs-on }}.txt" "Content for 中文测试"
echo "=== Japanese ==="
check_file "cjk-download/テスト/file-テスト-${{ matrix.runs-on }}.txt" "Content for テスト"
check_file "cjk-download/東京タワー/file-東京タワー-${{ matrix.runs-on }}.txt" "Content for 東京タワー"
echo "=== Korean ==="
check_file "cjk-download/테스트/file-테스트-${{ matrix.runs-on }}.txt" "Content for 테스트"
check_file "cjk-download/서울시/file-서울시-${{ matrix.runs-on }}.txt" "Content for 서울시"
if [ "$fail" -ne 0 ]; then
echo "Some CJK artifact checks failed"
ls -alR cjk-download/ || true
exit 1 exit 1
fi fi
echo "All CJK artifact downloads verified successfully"