Skip to content

Add Windows CI - #494

Merged
JeromeMartinez merged 6 commits into
MediaArea:mainfrom
JeromeMartinez:CI_Windows
Oct 13, 2026
Merged

JeromeMartinez merged 6 commits into
MediaArea:mainfrom
JeromeMartinez:CI_Windows

Conversation

@JeromeMartinez

Copy link
Copy Markdown
Member

No description provided.

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
JeromeMartinez merged commit 97c91ed into MediaArea:main Oct 13, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant