LegacyBuild
=title class Zef::Service::Shell::LegacyBuild
=subtitle A raku based implementation of the Builder interface
Synopsis
use Zef;
use Zef::Service::Shell::LegacyBuild;
my $builder = Zef::Service::Shell::LegacyBuild.new;
# Add logging if we want to see output
my $stdout = Supplier.new;
my $stderr = Supplier.new;
$stdout.Supply.tap: { say $_ };
$stderr.Supply.tap: { note $_ };
# Assuming our current directory is a raku distribution with a
# Build.rakumod and has no dependencies (or all dependencies
# already installed)...
my $dist-to-build = Zef::Distribution::Local.new($*CWD);
my Str @includes = $*CWD.absolute;
my $built-ok = so $builder.build($dist-to-build, :@includes, :$stdout, :$stderr);
say $built-ok ?? "OK" !! "Something went wrong";
Description
Builder
class for handling local distributions that include a .rakumod / .pm6 / .pm alongside their META6.json
.
Launches an e.g. 'Build.rakumod' file of the provided distribution with the raku executable.
Note: These type of build files will be deprecated one day in the (possibly far) future. Prefer build tools like
Distribution::Builder::MakeFromJSON
(which uses Zef::Service::Shell::DistributionBuilder
) if possible.
Methods
method probe
method probe(--> Bool:D)
Returns True
if this module can successfully launch the raku
command (i.e. always returns True
).
method build-matcher
method build-matcher(Zef::Distribution::Local $dist --> Bool:D)
Returns True
if this module knows how to test $uri
, which it decides based on if the files extracted from
$dist
contains any of Build.rakumod
Build.pm6
or Build.pm
(must be extracted as these do not get declared
in a META6.json file).
method build
method build(Zef::Distribution::Local $dist, Str :@includes, Supplier :$stdout, Supplier :$stderr --> Bool:D)
Launch the e.g. Build.rakumod
module in the root directory of an extracted $dist
using the provided @includes
(e.g. /foo/bar
or inst#/foo/bar
) via the raku
command (essentially doing ::(Build).new.build($dist-dir)
).
A Supplier
can be supplied as :$stdout
and :$stderr
to receive any output.
Returns True
if the raku
process spawned to run the build module exits 0.