Update the output and hint fields in the `exercises` slice to use a
multiline string literal when the string have multiple lines or use the
`"` character. This will greatly improve readability.
Additionally, remove the trailing whitespace on each line and check it
in the validate_exercises function.
Update the output comparison logic in ZiglingStep, since the current
code assumes that the string has only one line.
Update test/tests.zig to use the new `CheckNamedStep` in test case 1,
since RunStep.StdIo.Check is no longer able to correctly check the
output.
Fixes#283
This is necessary in the unit tests, to ensure each test case use a
different exercises directory.
Update test/tests.zig to use the new healed-path option, ensuring that
each temp directory is removed.
In test case 3, 4 and 5, move case_step as the first step in the
dependency chain. This will improve the build summary tree.
In test case 5, remove the dependency to heal_step, since it is not
necessary.
Also created a simple exercise '102_testing' to test the new flag.
After the new build system is ready, we skip the exercise in the flow to finish the actual testing exercise.
- Use an anonymous struct when initializing std.Build.Step.
- Rename the builder parameter in the create method to b
- Avoid lines too long
Additionally:
- In the run method, rename output to raw_output in order to make the
next variable names shorter.
- In the compile method, rename zig_file to path.
The code in ZiglingStep copied the error handling used in std.Build in
the past.
Use @panic("OOM") when the error is caused by the allocator failing to
allocate memory.
When handling the error from the eval method, some possible errors are
ignored. The make method will only print the exercise hint and the
help message.
Print the unexpected error message, in the else prong.
Note that FileNotFound can also be considered unexpected.
Rename the doCompile method to compile and add the run method.
The two methods are now called from the make method.
Add the help method, since the error handling of compile and run methods
are now separate.
Remove the obsolete comment for the compile method.
When running `zig build -Dn=n`, the install and uninstall steps where
overridden in order to improve the description.
In recent version of Zig this is no longer allowed.
The name "baseName" is confusing, since it refers to the UNIX basename
command, and not to the basename function in some programming languages
including Zig.
Use the std.fs.path.stem function to remove the file extension, instead
of slicing.
Remove the use of the assertion, since it is no longer necessary.
Instead, add a check to ensure that the exercise must be a Zig source
file in the validate_exercises function.
Update the validate_exercises function to check the last exercise, too.
Currently addExecutable is called 3 times, unnecessarily making the code
more complex.
The method takes as argument the path to the exercises directory.
Additionally, use the new std.Build.ExecutableOptions.link_libc field.
The new field was added in ziglang/zig@adc9b77d5f on 2023-04-13.
Update the required Zig compiler version.
Note that I added the **current** zig version to the changelog, since
the reason for the change is known only to the person updating the
version.
Currently, the code for defining the path to the exercises directory is
duplicate 4 times.
Add the constants `healed_path` and `work_path`, and use work_path
instead of the duplicated if expression. Update ZiglingStep to take
`work_path` instead of `use_healed` as argument.
Reduce code length by using `join` instead of `std.fs.path.join` and
replace the use of a slice with a tuple.
Additionally, in case of an error from the `join` function, use @panic
instead of unreachable.
Document why the special branch, when the exercises are healed by the
eowyn script, has been disabled.
Currently, ZiglingStep prints the raw exercise output. This is not a
problem when executing `zig build` from the shell, but in a unit test it
is necessary to know when the exercise output ends.
Document that Exercise.output should not have trailing whitespace.
Ensure this is true by adding a check in the validate_exercises
function.
Remove trailing whitespace in exercises 68 and 99.
Simplify the output validation in ZiglingStep.makeInternal.
Checking that the length of the actual and expected output is the same
is not necessary, since trailing whitespace has been removed. Simply do
an exact comparison.
Print the trimmed exercise output, instead of the raw output.
This will ensure that the exercise output always ends with only one LF
character.
Fix some small coding style issues.
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