The current cleanup code is incorrect, since it may delete the healed
directory while one test case is running.
The solution is to make each test case isolate, with its own setup and
teardown. Unfortunately it is currently not possible, since each test
case modify the same directory.
Disable the cleanup step, until a better solution is found.
Currently, if there is an error when creating the patches/healed
directory, the error message will be printed on stderr, but the build
runner will report the test as being successful.
Add the fail function and the FailStep, so that the error will be
correctly handled by the build runner.
Remove the PatchStep, and instead add the heal function so that all the
exercises are healed before starting the tests.
The heal function executes at the configuration phase, but the possible
error is handled by the build runner.
Add the check-exercises.py tool in the new tools directory. It is used
to check that the exercises are correctly formatted, printing on stderr
the invalid ones and the diff in the unified format.
Update the exercises that don't use the canonical zig fmt format.
Update some patches that cause the generated zig file to be incorrectly
formatted.
Add a new github workflow named CI.
Add a job named compat, checking that and old Zig compiler will not fail
with a compiler error, but instead will print an useful error message.
In same cases, the progress messages from the compiler are intermixed
with the messages printed by ZiglingStep.
This intermixing appears in two cases:
- when printing, e.g., the message "Checking 0_arrays2.zig..."
- when printing the compiler errors
Closes#230
Move the code for printing compiler errors and messages to the new
ZiglingStep.printErrors method.
Call printErrors in the Zigling.doCompile method, both in the normal and
error flow.
When handling an error from the Zig IPC, add the case when the compiler
was unable to return the executable path.
Before using the IPC, the error was
"The following command exited with error code 1"
now it is
"The following command failed to communicate the compilation result"
Commit e214c44 (build: update ZiglingStep to the new API) broke again
the compatibility support for old compilers, due to the use of the
multi-object for loop syntax.
Move the Zig IPC support code to src/ipc.zig.
Use the while statement, instead of the for statement.
Update the code to the breaking change in ziglang
commit c96cb98ad (CLI: remove --enable-cache option).
Replace the --enable-cache option with the --listen=- option and use the
Zig IPC to get the path to the executable.
Closes#236
The special case was added because it was used by the Eowyn github
workflow.
As a side effect, however, it prevents testing the normal case used by
users.
Disable it, until a better solution is found.
Update the code to the breaking change in ziglang commit
60eabc0ec (std.Build.CompileStep: remove run() and install())
Update the zig version in the README.md file.
Update PrintStep to always printing to stderr, using std.debug.print, so
that the message is written atomically.
Note that currently it is not an issue, since PrintStep prints the
message before everything else.
Initialize the first step in the chain to the header_step, instead of
making the code more complex handling the first step as a special case
in the for loop.
Commit 0d56ba3 (build: restore the exercise chain) broke the
compatibility support for old compilers, due to the use of the
multi-object for loop syntax.
Use the normal for loop syntax; the change still keep the code readable.
Use the variable `n`, instead of `i`, when referring to the exercise
number; this will improve the readability.
Closes#227
Simplify the code finding the exercise number from the exercise index,
when the -Dn option is set. This is now possible since the exercise
numbers have no holes.
Add the validate_exercises function to check that exercise number are in
the correct order, and call it at the start of the build function.
Add tests, with 2 test cases.
Currently, exercises not working with the current Zig compiler are
commented. This is problematic, since the exercise key and exercise
index are no longer consistent.
Add the skip field to the Excercise struct. Update ZiglingStep to
support it and add a new SkipStep step to support it when using the
standard build step.
When running, as an example, `zig build -Dhealed -Dn=93 test`, the build
fails, because the `test` step use the standard CompileStep, instead of
ZiglingStep.
Ensure that exercises using libc are correctly built.
Closes#229
The eowyn.sh script is used in a github workflow, but after
commit 0d56ba3 (build: restore the exercise chain), the github action
will take more time to complete.
Enable full build parallelism, when -Dhealed is true and -Dn is null.
Use the standard CompileStep and RunStep, instead of ZiglingStep.
On my PC, this change reduces the build time by about 30%.