#hawk #workflow #watch #package #config #monorepo #github-actions #watching #hawk-cli #github-workflows

bin+lib hawk-cli

Dead simple cli to ease github workflows management in monorepos

1 unstable release

0.1.4 Mar 12, 2023

#6 in #watching

MIT license

235KB
739 lines

Hawk

Dead simple rust CLI to ease workflows management inside monorepos.

gif

Usage

Run hawk init to initialize an empty config file. With the --read-from-env flag hawk will try to retrive your workspaces from pnpm-workspace.yaml or pacakge.json workspaces key. You can also pass --json if you want to save the config file as json.

hawk 0.1.4

USAGE:
    hawk [OPTIONS] [SUBCOMMAND]

OPTIONS:
    -c, --config <CONFIG>    Specify the config file path
    -h, --help               Print help information
        --scope <SCOPE>      Specify which workspaces files copy / watch Usage: --scope
                             <workspace-name>
    -V, --version            Print version information

SUBCOMMANDS:
    clean    Delete generated files
    copy     Copy files to the `target` directory
    help     Print this message or the help of the given subcommand(s)
    init     Initialize a repository
    list     List workflows in the `target` directory

Example

Check out the example folder.

Below an example monorepo situation:

example
├── hawk-config.yaml
├── .github
   └── workflows
       ├── my-second-app--deploy.yml # name generated by folder
│       └── the-app--deploy.yml # name is read from package.json
└── packages
    ├── my-app
    │   ├── .DS_Store
    │   ├── package.json // reads workspace name from package.json (the-app)
    │   └── .github/workflows
    │       └── deploy.yml
    └── my-second-app
        └── .github/workflows
            └── deploy.yml
    $ cd example
    $ hawk --watch
    ... let the magic happen

Why

Github actions don't yet support workflows inside subfolders, neither in your .github/workflows/ folder or project custom folders. So I made hawk to solve this problem without using custom commands. It lets you copy workflows from custom paths and paste them with a prefix, handling most of the pain. With 10 lines config you have a working monorepo setup.

Installation

Download the latest release and move in your $PATH

From source

make sure to have your rust environment ready, then:

  • Clone the repo
  • Run cargo build -r or make build
  • Copy target/release/hawk to your path or use sudo make install (it will copy the bin into /usr/local/bin)
  • Enjoy

Setup

To setup a new project just run hawk init. If you're in a node environment you can pass the --read-from-env flag to generate config based on the monorepo configuration.

Features

  • File watching
  • Cleanup workflows folder from generated files.
  • Custom configuration
  • Generate config from pnpm-workspace.yaml and yarns package.json:workspaces
  • Create an action to automate this process. (so the user can update a workflow, push and get the generated one updated automatically)

Dependencies

~4–11MB
~127K SLoC