Repository navigation
Add Windows CI - #494
Merged
Merged
Add Windows CI#494
Conversation
The tests can run in Git Bash with the Windows build of RAWcooked (OSTYPE is msys or cygwin depending on the version of Git for Windows): GNU stat as on Linux, and rawcooked is run with timeout instead of a watcher process (pkill is not available), with the CR of the CR LF line endings of its output removed. On Windows, chmod sets only the read-only attribute, so the files without access rights of test/overwrite.sh (now enabled on Windows) and test/reversibilityfile.sh get an ACL denying reading and writing to everyone (rawcooked is denied, Git Bash tools of an administrator still access the files for the clean-up with the backup privilege). test/valgrind.sh is skipped on Windows (no valgrind).
With decoding or --check, the end of a file unique per track (e.g. WAV) is written with the raw frame created at the first cluster, so it was a null pointer if the Matroska file has no cluster (e.g. truncated file). Seen with the "missing audio frames" case of test/check.sh, where the test passed despite the crash.
RAWcooked is built with MSVC, and the tests of make check (TESTS of Makefile.am, make is not available) are run in Git Bash with the static FFmpeg build of MediaArea (9.0.1 on CPUs without AVX-512, as on Linux). test/vulkan.sh uses the Vulkan loader of the LunarG runtime and lavapipe (Mesa build of mesa-dist-win). lavapipe is registered in the system because the Vulkan loader ignores VK_DRIVER_FILES in an elevated process (the runner).
Process creation is slow in Git Bash on Windows (about 25 ms per process, about 50 ms for a command substitution with a pipe), and most of the test time was spent in the 20 to 30 processes created by the scripts for each file, not in rawcooked and ffmpeg. Shell features replace the external commands called for each file: fields of the lines of the test lists with read and parameter expansions instead of cut, basename and dirname, lines with warnings and the ffmpeg command without grep, output of rawcooked without tr, one directory for the temporary files of a test instead of one per command, one md5 command for the compared files (for all files of a directory in check_directories), the check that the testing files are a git repository done once. test/test1.sh is 3 times faster on Windows.
Byte by byte operations are slow in Git Bash on Windows: test/overwrite.sh and test/check.sh truncate and duplicate files with head and cat instead of dd with a block size of 1 byte (1.4 s for 300 KB on Windows), and test/overwrite.sh inverts several bytes with one read and one write instead of 3 processes per byte, and counts the files with the patterns expanded by the shell instead of ls and wc. test/overwrite.sh is 3 times faster on Windows.
A crash of rawcooked was accepted by the tests expecting a failure (non zero exit code and a message, e.g. the license notice), and was silent on Linux and macOS (rawcooked is a background job). The exit codes of the signals of a crash (illegal instruction, abort, bus error, floating point exception, segmentation fault, also used by Git Bash for the equivalent exceptions of Windows programs) are now reported as an issue, whatever the expected result. Not all exit codes from 128 because rawcooked passes on the exit code of ffmpeg.
JeromeMartinez
force-pushed
the
CI_Windows
branch
from
October 12, 2026 23:01
618e514 to
5ee762f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.