upload full testdata archive

PiperOrigin-RevId: 564700547
diff --git a/.gitattributes b/.gitattributes
index ba871fb..a0853c2 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -35,6 +35,7 @@
 
 # Add more build files.
 scripts !export-ignore
+scripts/download_testdata.sh !export-ignore
 scripts/libbrotli*.pc.in !export-ignore
 
 # Add testdata
diff --git a/.github/workflows/build_test.yml b/.github/workflows/build_test.yml
index 91668d3..c21a144 100644
--- a/.github/workflows/build_test.yml
+++ b/.github/workflows/build_test.yml
@@ -357,39 +357,3 @@
         python -VV
         python -c "import sys; sys.exit('Invalid python version') if '.'.join(map(str,sys.version_info[0:2])) != '${{ matrix.python_version }}' else True"
         python setup.py ${{ matrix.py_setuptools_cmd || 'test'}}
-
-  archive_build:
-    name: Build and test from archive
-    runs-on: 'ubuntu-latest'
-    defaults:
-      run:
-        shell: bash
-    steps:
-
-    - name: Checkout the source
-      uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
-      with:
-        submodules: false
-        fetch-depth: 1
-
-    - name: Archive
-      run: |
-        git archive HEAD -o archive.tgz
-
-    - name: Extract
-      run: |
-        mkdir archive
-        cd archive
-        tar xvzf ../archive.tgz
-
-    - name: Configure and Build
-      run: |
-        cd archive
-        cmake -B out .
-        cmake --build out
-
-    - name: Test
-      run: |
-        cd archive
-        cd out
-        ctest
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index 00b2b33..4c0bc6f 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -119,4 +119,73 @@
       uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 # v0.1.15
       with:
         files: brotli-${{matrix.triplet}}.zip
-        tag_name: dev/null
+
+  testdata_upload:
+    name: Upload testdata
+    runs-on: 'ubuntu-latest'
+    defaults:
+      run:
+        shell: bash
+    steps:
+
+    - name: Checkout the source
+      uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
+      with:
+        submodules: false
+        fetch-depth: 1
+
+    - name: Compress testdata
+      run: |
+        tar cvfJ testdata.txz tests/testdata
+
+    - name: Upload archive to release
+      if: github.event_name == 'release'
+      uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 # v0.1.15
+      with:
+        files: testdata.txz
+
+  archive_build:
+    needs: testdata_upload
+    name: Build and test from archive
+    runs-on: 'ubuntu-latest'
+    defaults:
+      run:
+        shell: bash
+    steps:
+
+    - name: Checkout the source
+      uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
+      with:
+        submodules: false
+        fetch-depth: 1
+
+    - name: Archive
+      run: |
+        git archive HEAD -o archive.tgz
+
+    - name: Pick tag
+      run: |
+        echo "BROTLI_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
+
+    - name: Extract
+      run: |
+        mkdir archive
+        cd archive
+        tar xvzf ../archive.tgz
+
+    - name: Download testdata
+      run: |
+        cd archive
+        scripts/download_testdata.sh
+
+    - name: Configure and Build
+      run: |
+        cd archive
+        cmake -B out .
+        cmake --build out
+
+    - name: Test
+      run: |
+        cd archive
+        cd out
+        ctest
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2400230..64b979a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -261,7 +261,7 @@
             -P ${CMAKE_CURRENT_SOURCE_DIR}/tests/run-roundtrip-test.cmake)
       endforeach()
     else()
-      message(NOTICE "Test file ${INPUT} does not exist; OK on tarball builds")
+      message(NOTICE "Test file ${INPUT} does not exist; OK on tarball builds; consider running scripts/download_testdata.sh before configuring.")
     endif()
   endforeach()
 
diff --git a/scripts/download_testdata.sh b/scripts/download_testdata.sh
new file mode 100755
index 0000000..b93028d
--- /dev/null
+++ b/scripts/download_testdata.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+set -x
+BROTLI_TAG=${BROTLI_TAG:-dev/null}
+BROTLI_TAG="${BROTLI_TAG//'/'/%2F}" # Escaping for tag names with slash (e.g. "dev/null")
+ARCHIVE=testdata.txz
+curl -L https://github.com/google/brotli/releases/download/${BROTLI_TAG}/${ARCHIVE} -o ${ARCHIVE}
+tar xvfJ ${ARCHIVE}