Skip to content

rawnly/hawk

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

75 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Hawk

Dead simple rust CLI to ease workflows management inside monorepos.

gif

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 -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.

Run in the CI

- uses: rawnly/hawk@main
  with:
    config: hawk-config.yaml

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)