Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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.
- Host: GitHub
- URL: https://github.com/kurtbuilds/checkexec
- Owner: kurtbuilds
- License: mit
- Created: 2021-11-19T02:04:30.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2022-12-24T03:19:57.000Z (almost 2 years ago)
- Last Synced: 2024-10-13T19:08:37.656Z (24 days ago)
- Language: Rust
- Homepage:
- Size: 48.8 KB
- Stars: 98
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# 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!