#workflow #monorepo #yaml #package-json #ease #dead #management

bin+lib hawk-cli

Dead simple cli to ease github workflows management in monorepos

1 unstable release

0.1.4 Mar 12, 2023

#1778 in Development tools

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–12MB
~136K SLoC