Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/kurtbuilds/checkexec

CLI tool to conditionally execute commands only when files in a dependency list have been updated. Like `make`, but standalone.
https://github.com/kurtbuilds/checkexec

Last synced: 11 days ago
JSON representation

CLI tool to conditionally execute commands only when files in a dependency list have been updated. Like `make`, but standalone.

Awesome Lists containing this project

README

        



GitHub Contributors


Stars


Build Status


Downloads


Crates.io

# Checkexec

`checkexec` is a tool to conditionally execute commands only when files in a dependency list have been updated.

This tool provides the behavior of `make` as a standalone executable, where a command is only run if any of its
dependencies have been updated. Like `make`, `checkexec` runs a command only if the modified time of any dependency
is newer than the modified time of the target.

# Usage

The arguments are: ` -- `. The `--` is a required separator.

checkexec build/my-bin src/my-program.c -- cc -o build/my-bin src/my-program.c

`checkexec` executes the command directly, so shell constructs like '&&' and '||' are not supported.
You can use `/bin/bash -c` as the command, but escaping is tricky. You're likely better off using two invocations of
`checkexec`.

You can infer the dependency list with `--infer`, where checkexec will inspect the arguments of `` for
accessible paths. `--infer` will fail if no files are found.

checkexec build/my-bin --infer -- cc -o build/my-bin src/my-program.c

# Installation

cargo install checkexec

# Usage Notes

`checkexec` is great for when you build files from other files. Instead of relying on
ecosystem-specific tools, you can use `checkexec` as part of any build tool. Here are some examples:

- You build, resize, or sample images as part of your build command, but don't want to rebuild them unless needed.
- You build C libaries as part of your Python, Rust, Node (or any other) build process.
- You build Sass/Less/SCSS files and don't want to re-build them unnecessarily.

`checkexec` pairs well with these tools:

- [`just`](https://github.com/casey/just) fixes numerous problems with `make`, and `checkexec` adds back the
conditional rebuild functionality of `make`. Together, they create a modular and modern build process and
command runner.
- [`watchexec`](https://github.com/watchexec/watchexec) provides live reloading/rebuilding, while `checkexec`
has callable behavior, useful as a build step or on CI. The naming similarity is intentional.
- [`fd`](https://github.com/sharkdp/fd) makes it easy to specify a dependency file list. Example here:

```bash
# Only run your command if a rust file has changed. Note cargo does approximately the
# same thing natively, but you can easily tailor this structure to a custom case.
checkexec target/debug/hello $(fd -e rs . src) -- cargo build
```

### Exit codes

`checkexec` exit codes behave as you would expect, specifically:

- 0 (success) if the command is not run (i.e. target is up to date)
- 1 if a provided dependency or the command is not found
- Otherwise, when the command is run, checkexec will pass through the command's exit code.

# Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create.
Any contributions you make are **greatly appreciated**.

If you have a suggestion that would make this better, please fork the repo and create a pull request.
You can also simply open an issue with the tag "enhancement".
Don't forget to give the project a star!

(back to top)