felangel / mason

Tools which allow developers to create and consume reusable templates called bricks.
https://docs.brickhub.dev
979 stars 97 forks source link

feat: Builtin hooks for command line scripting #516

Open oravecz opened 2 years ago

oravecz commented 2 years ago

Description

In the original custom scripts (hooks) feature #149, the proposal to add scripts listed two really good use cases -- running dart fix --apply or flutter pub get after a block executes. I'm wondering if a hook could be baked in to the brick's config that executes command line statements before or after a brick executes.

For example, right now I believe I have to add hooks to my brick just to run dart fix --apply, which I do for most everything.

Future<void> run(HookContext context) async {
    final String path = context.vars['feature_name'];
    var result = await Process.run('dart', ['fix', '--apply', path], runInShell: true);
    context.logger.info(result.stdout.toString());
}

It might be convenient to be able to run these common scripts like this:

name: my_brick

vars:
  feature_name:
    type: string
    description: The feature name
    prompt: What is the feature name?

post-scripts:
  - dart fix --apply {{{feature_name}}}
  - flutter pub run build_runner build --delete-conflicting-outputs
  - echo "Be sure to ..."

Additional Context Perhaps the cross platform nature of blocks might make scripts difficult to run, but I still face that if I use a hook and Process.run(). Not sure if the lack of cross-platform scripting is a blocker or a potential footgun.

felangel commented 2 years ago

related to #311