wombatu-kun opened a new issue, #19266:
URL: https://github.com/apache/hudi/issues/19266

   `scripts/release/validate_source_binary_files.sh` is meant to keep binary 
files out of the Apache source release. It has never fired on Linux, which is 
every CI runner and most release managers' machines.
   
   ### The flag
   
   The check pipes every file through `file -I`:
   
       numBinaryFiles=`find . -iname '*' | xargs -I {} file -I {} | grep -va 
directory | ... | wc -l`
   
   `-I` is the BSD/macOS spelling of the MIME option. GNU `file` rejects it:
   
       $ file -I pom.xml
       file: invalid option -- 'I'
       Usage: file [-bcCdEhikLlNnprsSvzZ0] [--apple] [--extension] 
[--mime-encoding] ...
       $ echo $?
       1
   
   It prints usage to stderr and nothing to stdout, so `wc -l` counts zero and 
`numBinaryFiles` is always `0`. `set -o errexit` does not catch it: the 
pipeline sits inside a command substitution in an assignment, and without 
`pipefail` the assignment takes the exit status of the last stage (`sed`), 
which is 0.
   
   Confirmed by running the current script, unmodified, against a clean 
checkout of master, whose tree contains 105 image files outside `src/test/`: it 
exits 0 and reports `No Binary Files in the source files? - [OK]`.
   
   ### The directory
   
   Fixing only the flag turns CI red, because the check is also invoked in the 
wrong place. Its contract is "run me from the root of a source release tree" - 
that is how `validate_staged_release.sh` calls it, after `cd`-ing into the 
extracted tarball. But the `validate-source` job in `bot.yml` runs it against 
the raw git checkout, which still contains `rfc/`, `docker/images/`, 
`hudi-notebooks/notebooks/common/images/` and `.idea/` - all of them 
deliberately excluded from the source release by `create_source_directory.sh`.
   
   A working check reports:
   
   | Where it runs | Files flagged on current master |
   | --- | --- |
   | Raw git checkout (what `bot.yml` does today) | 105 |
   | Source release directory (what the script is written for) | 0 |
   
   ### Consequence
   
   Nothing has stopped a binary from entering the source release. #19265 adds 
`hudi-agent-gateway/src/hudi_agent_gateway/ui/hudi-logo.png`, which 
`create_source_directory.sh` does not exclude, and no check went red. Found 
while reviewing that PR: 
https://github.com/apache/hudi/pull/19265#discussion_r3567769689
   
   ### Fix
   
   Ask libmagic for the charset rather than the MIME type (`file --mime`, the 
long option that both GNU and BSD accept; `charset=binary` is a direct answer 
that does not depend on libmagic's growing type vocabulary), run the check 
inside the source release directory in `bot.yml`, and add `set -o pipefail` so 
a broken `file` invocation can never again read as "no binary files found".
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to