Browse Source

Merge pull request 'Add build parameter to start at a specific exercise' (#140) from mythmon/ziglings-exercises:build-start-from into main

Reviewed-on: https://codeberg.org/ziglings/exercises/pulls/140
Chris Boesch 1 year ago
parent
commit
e2f356d95c
2 changed files with 28 additions and 1 deletions
  1. 7 1
      README.md
  2. 21 0
      build.zig

+ 7 - 1
README.md

@@ -69,7 +69,7 @@ reading these.
 ## A Note About Versions
 ## A Note About Versions
 
 
 **Hint:** To check out Ziglings for a stable release of Zig, you can use
 **Hint:** To check out Ziglings for a stable release of Zig, you can use
-the appropriate tag. 
+the appropriate tag.
 
 
 The Zig language is under very active development. In order to be
 The Zig language is under very active development. In order to be
 current, Ziglings tracks **development** builds of the Zig
 current, Ziglings tracks **development** builds of the Zig
@@ -128,6 +128,12 @@ It can be handy to check just a single exercise:
 zig build -Dn=19
 zig build -Dn=19
 ```
 ```
 
 
+Or run all exercises, starting from a specific one:
+
+```
+zig build -Ds=27
+```
+
 Or let Ziglings pick an exercise for you:
 Or let Ziglings pick an exercise for you:
 
 
 ```
 ```

+ 21 - 0
build.zig

@@ -161,6 +161,7 @@ pub fn build(b: *Build) !void {
     const override_healed_path = b.option([]const u8, "healed-path", "Override healed path");
     const override_healed_path = b.option([]const u8, "healed-path", "Override healed path");
     const exno: ?usize = b.option(usize, "n", "Select exercise");
     const exno: ?usize = b.option(usize, "n", "Select exercise");
     const rand: ?bool = b.option(bool, "random", "Select random exercise");
     const rand: ?bool = b.option(bool, "random", "Select random exercise");
+    const start: ?usize = b.option(usize, "s", "Start at exercise");
 
 
     const sep = std.fs.path.sep_str;
     const sep = std.fs.path.sep_str;
     const healed_path = if (override_healed_path) |path|
     const healed_path = if (override_healed_path) |path|
@@ -221,6 +222,26 @@ pub fn build(b: *Build) !void {
         return;
         return;
     }
     }
 
 
+    if (start) |s| {
+        if (s == 0 or s > exercises.len - 1) {
+            print("unknown exercise number: {}\n", .{s});
+            std.process.exit(2);
+        }
+        const first = exercises[s - 1];
+        const ziglings_step = b.step("ziglings", b.fmt("Check ziglings starting with {s}", .{first.main_file}));
+        b.default_step = ziglings_step;
+
+        var prev_step = &header_step.step;
+        for (exercises[(s - 1)..]) |ex| {
+            const verify_stepn = ZiglingStep.create(b, ex, work_path, .normal);
+            verify_stepn.step.dependOn(prev_step);
+
+            prev_step = &verify_stepn.step;
+        }
+        ziglings_step.dependOn(prev_step);
+        return;
+    }
+
     // Normal build mode: verifies all exercises according to the recommended
     // Normal build mode: verifies all exercises according to the recommended
     // order.
     // order.
     const ziglings_step = b.step("ziglings", "Check all ziglings");
     const ziglings_step = b.step("ziglings", "Check all ziglings");