dartle 0.14.0 copy "dartle: ^0.14.0" to clipboard
dartle: ^0.14.0 copied to clipboard

A simple build system written in Dart. Tasks are declared in a regular Dart file.

example/dartle.dart

import 'dart:convert';

import 'dart:io';
import 'package:dartle/dartle.dart';
import 'package:path/path.dart' as p;

/// Use Dartle's FileCollection factory methods (file, files, dir, dirs)
/// to manage task's inputs/outputs.
final outDir = 'out';

FileCollection base64Inputs =
    dir('.', fileExtensions: const {'txt'}, recurse: false);

FileCollection base64Outputs =
    dir(outDir, fileExtensions: const {'txt'}, recurse: false);

/// Task declarations.
final allTasks = [
  Task(hello, argsValidator: const ArgsCount.range(min: 0, max: 1)),
  Task(bye, dependsOn: const {'hello'}),
  Task(clean,
      phase: TaskPhase.setup,
      runCondition: RunToDelete(
        base64Outputs,
      )),
  Task(encodeBase64,
      description: 'Encodes input.txt in base64, writing to output.txt',
      runCondition: RunOnChanges(
        inputs: base64Inputs,
        outputs: base64Outputs,
      )),
];

/// main - always delegate to Dartle's `run` function to execute a build
void main(List<String> args) async =>
    run(args, tasks: allTasks.toSet(), defaultTasks: {allTasks[0]});

/////////////////////////////////////////////////////////////////////

// Task actions. On larger projects, it's a good idea to move these
// to their own files, under "dartle-src" by convention.

/////////////////////////////////////////////////////////////////////

/// To pass an argument to a task, use a ':' prefix, e.g.:
/// dartle hello :joe
void hello(List<String> args) =>
    print("Hello ${args.isEmpty ? 'World' : args[0]}!");

/// If no arguments are expected, use `_` as the function parameter.
void bye(_) => print('Bye!');

Future<void> encodeBase64(_) async {
  final inputs = base64Inputs.resolveFiles();
  await for (final input in inputs) {
    final encoded = base64.encode(await input.readAsBytes());
    await Directory(outDir).create(recursive: true);
    final output = p.join(outDir, p.setExtension(input.path, 'b64.txt'));
    await File(output).writeAsString(encoded);
  }
}

Future<void> clean(_) => deleteOutputs(allTasks);
7
likes
0
pub points
18%
popularity

Publisher

unverified uploader

A simple build system written in Dart. Tasks are declared in a regular Dart file.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

actors, args, clock, collection, convert, crypto, file, io, logging, meta, path, structured_async, test_report_parser

More

Packages that depend on dartle