190 Commits (164df04618976f386dccb9e7a761d66cd6b97627)

Author SHA1 Message Date
Manlio Perillo 164df04618 build: remove the special eowyn build mode
The special eowyn mode was added in order to improve the performance of
the Eowyn Github workflow.

Remove it, since it adds unnecessary complexity to the `build.zig` file.

Closes #297
1 year ago
Chris Boesch 7efdff36a8 Execution of test exercises added. 1 year ago
Chris Boesch cee64c13e0 Merge branch 'ratfactor:main' into testing 1 year ago
Manlio Perillo 7aa0737929 Restore unit tests
Commit dbd42bb (Cleaning up zig build output) broke the unit test.

Always use exit code 2, instead of 0.  This is the exit code used by the
build runner to notify the compiler to not report any further
diagnostics.

Move the Ziglings logo from the `build` function scope to the global
scope, and make it public so that tests.zig can use it to find the
number of lines to skip, instead of using an hard coded value.

Fixes #295
1 year ago
Manlio Perillo e4e096c680 build: make literal paths portable
Use fs.path.sep_str instead of a slash, in literal paths.
1 year ago
Manlio Perillo 14545778b2 build: improve code formatting
Avoid too long lines or too many line breaks.
1 year ago
Manlio Perillo ea4144a416 build: add the dumpArgs function
Use it in Zigling.compile, in order to reduce code duplication.
1 year ago
Manlio Perillo 9de89f6d60 build: fix doc-comments
Some functions and custom build steps incorrectly used a normal comment.
Use a doc-comment instead.

Additionally, use a present tense verb to describe the action of a
function or custom build step.
1 year ago
Manlio Perillo dd5df9f7cc build: use the blank identifier in the parameter list
Instead of marking a parameter as unused inside the function body.
1 year ago
Manlio Perillo bb42451b0f build: use self when using @fieldParentPtr
Update PrintStep and SkipStep to use the `self` variable when getting
the parent pointer from Step.

This convention is used in `std.Build`.
1 year ago
Manlio Perillo 4ae67ebf1b build: don't install skipped exercises
Update the code in `zig build install` and `zig build -Dn=n install`, so
that exercises that must be skipped are not installed, since it will
cause an error.  Ensure that a skip message is printed.
1 year ago
Manlio Perillo 185a40eb75 build: fix `zig build -Dhealed install`
The command fails because the path to the exercises directory was
incorrectly set to "exercises" instead of `work_path`.

The bug was introduced in commit b56bb7b
(build: enable full parallelism when -Dhealed is set).

Remove the comment about not using multi-object loop, since it is
confusing.
1 year ago
Chris Boesch 1d7452bf96 Merge branch 'ratfactor:main' into testing 1 year ago
Dave Gauer c4f2c62534 Cleaning up zig build output
* Only show actual Zig compiler errors, not build internals to
  confused and dismay.

* Remove advanced usage instructions not needed in normal
  operation.
1 year ago
Chris Boesch ea93abf4d4 Merge branch 'ratfactor:main' into testing 1 year ago
Chris Boesch b6b78c628c Merge branch 'main' into improve_instruction 1 year ago
Chris Boesch a5485bb8a2 Improve instructions. 1 year ago
Chris Boesch b963f2659e Merge branch 'ratfactor:main' into testing 1 year ago
Manlio Perillo 3f81cdf3ac build: improve Exercise.addExecutable
Replace the file_path variable with path.
1 year ago
Manlio Perillo 1dd5852bec build: use multiline string literals when necessary
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
1 year ago
Chris Boesch f1368f4f81 Merge branch 'ratfactor:main' into testing 1 year ago
Manlio Perillo 397c6671c0 build: remove assertion in `Exercise.key`
Use `orelse unreachable` instead, in order to simplify the code.

Fix doc-comments in the Exercise type.
1 year ago
Manlio Perillo be43e2d010 build: make `Exercise.hint` optional
Use an optional type, instead of an empty string, since it is more
idiomatic.
1 year ago
Manlio Perillo 0cd86d2f9b build: add the healed-path option
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.
1 year ago
Chris Boesch 2027c6a403 Merge branch 'ratfactor:main' into testing 1 year ago
Chris Boesch 193bee7d2d Added new flag 'run_test' to support test steps for test exercises.
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.
1 year ago
Manlio Perillo a5d93c0b20 build: improve coding style in ZiglingStep
- 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.
1 year ago
Manlio Perillo 771b499cbc build: use @panic("OOM") instead of unreachable
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.
1 year ago
Manlio Perillo c6c6a32270 build: improve the exercise output check
Make the error message consistent with the one in std.Build.RunStep,
using the "=" character instead of "-" and correctly aligning the text.
1 year ago
Manlio Perillo feeba51940 build: don't use @This() in ZiglingStep
Use ZiglingStep, instead.

This is consistent with the coding style in std.Build.
1 year ago
Manlio Perillo 3ec978d73f build: remove ZiglingStep.builder field
It is not necessary, since the builder is available in self.step.owner.
1 year ago
Manlio Perillo 11d8468539 build: use Child.exec in ZiglingStep.run
Update the run method to use Child.exec, instead of Child.spawn followed
by Child.wait.
This simplifies the code.
1 year ago
Manlio Perillo 40cbee8fa2 build: fix incorrect error handling in ZiglingStep.compile
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.
1 year ago
Manlio Perillo 27b941fdaf build: remove the ZiglingStep.makeInternal method
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.
1 year ago
Chris Boesch 72a6287a5f Merge pull request #275 from perillo/heal-only-in-test
Heal only in test
1 year ago
Dave Gauer e2f3a5e519 Added Ex 101 "for loops part 5" (Closes #271)
Also gave a shot at explaining data-oriented design, a Zig "hot
topic" ever since the red Hawaiian shirt talk(s).
1 year ago
Manlio Perillo 7a40c4584e Restore unit tests 1 year ago
Chris Boesch f02389e925 comment for the issue added 1 year ago
Chris Boesch 44d51eb9ed cli tests removed to solve 272 1 year ago
Manlio Perillo a86d4c2795 build: don't override the top level steps
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.
1 year ago
Manlio Perillo 5c20e2b553 build: rename Exercise.baseName to name
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.
1 year ago
Manlio Perillo 69103a3b82 build: add the Exercise.addExecutable method
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.
1 year ago
Manlio Perillo 123fd4b105 build: rename the Exercise.C field to link_libc
The name "C" does not follow the naming conventions for container
fields.
1 year ago
Manlio Perillo ec1976e9ab build: reduce code duplication when setting the work path
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.
1 year ago
Manlio Perillo 070734a520 build: remove the Exercise.async field
The stage1 C++ compiler is gone forever.

Remove the custom support and documentation for the old stage1 compiler
in build.zig and README.md.
1 year ago
Manlio Perillo 6f482a1f7a build: move exercises at the end of the file
The exercises slice takes about 460 lines, making it hard to read the
source code of build.zig.

Closes #225
1 year ago
Dave Gauer 2e2924abdb Added Ex. 100 fourth for (as foretold in #261) 1 year ago
Dave Gauer bef099fee6 Renamed 095 to "for3" to match feature sequence
So 100 will be the next in line.
1 year ago
Manlio Perillo 3dd7cdcb3b build: make exercise output more reliable
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.
1 year ago
Chris Boesch 4435cebe7a Merge pull request #247 from chrboesch/formatting
added first formatting exercise
1 year ago