Fuzz: Exclude seed corpus from release tarball

Exclude fuzz/fuzz_seeds from git archive release tarballs via
.gitattributes export-ignore. Add assertions in create-tarball.sh,
verify-release-candidate.sh, and the license CI workflow to verify
the seed corpus is not packaged into source release archives.
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..53b258e
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Exclude fuzz seed corpus from release tarball
+fuzz/fuzz_seeds export-ignore
diff --git a/.github/workflows/license.yml b/.github/workflows/license.yml
index f4524f6..031e214 100644
--- a/.github/workflows/license.yml
+++ b/.github/workflows/license.yml
@@ -38,3 +38,9 @@
           python-version: 3.8
       - name: Audit licenses
         run: ./dev/release/run-rat.sh .
+      - name: Verify release tarball excludes fuzz seeds
+        run: |
+          if git archive HEAD | tar -tf - | grep -q 'fuzz/fuzz_seeds'; then
+            echo "Error: fuzz/fuzz_seeds found in git archive release tarball"
+            exit 1
+          fi
diff --git a/dev/release/create-tarball.sh b/dev/release/create-tarball.sh
index 5196501..862a268 100755
--- a/dev/release/create-tarball.sh
+++ b/dev/release/create-tarball.sh
@@ -117,6 +117,11 @@
 mkdir -p ${distdir}
 (cd "${SOURCE_TOP_DIR}" && git archive ${release_hash} --prefix ${release}/ | gzip > ${tarball})
 
+if tar -tf ${tarball} | grep -q 'fuzz/fuzz_seeds'; then
+    echo "Error: fuzz/fuzz_seeds found in release tarball ${tarball}"
+    exit 1
+fi
+
 echo "Running rat license checker on ${tarball}"
 ${SOURCE_DIR}/run-rat.sh ${tarball}
 
diff --git a/dev/release/verify-release-candidate.sh b/dev/release/verify-release-candidate.sh
index 4e97c6e..ffec088 100755
--- a/dev/release/verify-release-candidate.sh
+++ b/dev/release/verify-release-candidate.sh
@@ -124,6 +124,12 @@
   cargo build
   cargo test --all-features
 
+  # Ensure fuzz seed corpus is not packaged into the release tarball
+  if [ -d "fuzz/fuzz_seeds" ]; then
+    echo "fuzz/fuzz_seeds should not be included in the release tarball"
+    exit 1
+  fi
+
   if ( find . -iname 'Cargo.toml' | xargs grep SNAPSHOT ); then
     echo "Cargo.toml version should not contain SNAPSHOT for releases"
     exit 1