hawk
hawk copied to clipboard
Dead simple rust CLI to ease workflows management inside monorepos.
Hawk
Dead simple rust CLI to ease workflows management inside monorepos.

Installation
You can install hawk via cargo (homebrew coming soon) or by downloading the latest binary
cargo install hawk-cli
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 -rormake build - Copy
target/release/hawkto your path or usesudo 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.
Run in the CI
- uses: rawnly/hawk@main
with:
config: hawk-config.yaml
Features
- [x] File watching
- [x] Cleanup
workflowsfolder from generated files. - [x] Custom configuration
- [x] Generate config from
pnpm-workspace.yamland yarnspackage.json:workspaces - [x] Create an action to automate this process. (so the user can update a workflow, push and get the generated one updated automatically)