18 个版本 (7 个稳定版)
1.4.0 | 2024年7月10日 |
---|---|
1.2.0 | 2024年3月31日 |
1.1.1 | 2023年9月30日 |
1.0.1 | 2023年6月12日 |
0.2.4 | 2016年3月27日 |
#123 在 Unix API
每月下载量 135
71KB
1.5K SLoC
funzzy (fzz)
受 antr 和 entr 启发的轻量级监视器。另请参阅: funzzy.nvim
使用语义 YAML 和 Unix 壳风格模式匹配 或 stdin 配置不同命令的自动执行。
对于像这样简单的流程
find . -name '*.ts' | funzzy 'npx eslint .'
或者更复杂的流程
# .watch.yaml (or .watch.yml)
# list here all the events and the commands that it should execute
# TIP: include '.watch.yaml' in your .git/info/exclude to ignore it.
# TIP2: List the tasks/steps from quicker to slower for better workflows
#
# Run: `fzz --fail-fast --non-block` to start this workflow (min: v1.3.0)
- name: run my tests
run: make test
change: "tests/**"
ignore: "tests/integration/**"
run_on_init: true
- name: Starwars ascii art
run: telnet towel.blinkenlights.nl
change:
- "/tmp/starwars.txt"
- ".watch.yaml"
# Command templates for custom scripts
- name: run test & linter for a single file
run:
- "npm run lint -- {{filepath}}",
- "npm test -- $(echo '{{filepath}}' | sed -r s/.(j|t)sx?//)"
change: ["src/**", "libs/**"]
ignore: ["src/**/*.stories.*", "libs/**/*.log"]
- name: finally stage the changed files in git
run: 'git add $(echo "{{filepath}}" | sed "s#$PWD/##")'
change:
- "src/**"
- "tests/**"
ignore: "**/*.log"
需要更多示例吗?
动机
创建一个轻量级监视器,使我能够设置个人本地工作流程,具有特定的自动化检查和步骤,类似于 GitHub Actions。Funzzy 是用 Rust 编写的,这使得它非常快且轻量。
安装
macOS
brew tap cristianoliveira/tap
brew update
brew install funzzy
Linux
curl -s https://raw.githubusercontent.com/cristianoliveira/funzzy/master/linux-install.sh | sh
您可以指定版本
curl -s https://raw.githubusercontent.com/cristianoliveira/funzzy/master/linux-install.sh | bash - 1.0.0
Nix
nix-env -iA nixpkgs.funzzy
夜间版本
nix profile install 'github:cristianoliveira/funzzy#funzzy'
# or
nix profile install 'github:cristianoliveira/nixpkgs#funzzy'
或者,如果您使用 shell.nix
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
buildInputs = [
pkgs.funzzy
];
};
使用 Cargo
cargo install funzzy
*请确保您的PATH中包含$HOME/.cargo/bin
export PATH=$HOME/.cargo/bin:$PATH
- 从源码安装
确保您已安装以下依赖项
- Rust
- Cargo
执行
cargo install --git https://github.com/cristianoliveira/funzzy.git
或者,克隆此仓库并运行
make install
运行
使用模板初始化
funzzy init
根据您的需要更改配置文件 .watch.yaml
。然后运行
funzzy
# or use the short version
fzz
选项
使用fzz --help
检查所有选项
使用不同的配置文件
fzz -c ~/watch.yaml
快速失败,如果任何任务失败则终止执行。对于所有任务都需成功的工作流程非常有用。[查看我们在工作流程中的使用](https://github.com/cristianoliveira/funzzy/blob/master/.watch.yaml#L6)
fzz --fail-fast
按目标过滤任务
fzz -t "@quick"
# Assuming you have one or more tasks with `@quick` in the name, it will only load those tasks
使用任意命令和stdin运行
find . -name '*.rs' | fzz 'cargo build'
命令模板
find . -name '*.[jt]s' | fzz 'npx eslint {{filepath}}'
在"非阻塞"模式下运行,当有新的文件更改事件时取消当前运行的任务。对于包含长时间运行任务的工作流程非常有用。[查看长时间任务测试中的更多内容](https://github.com/cristianoliveira/funzzy/blob/master/tests/watching_with_non_block_flag.rs#L7)
fzz --non-block
故障排除
为什么监视器会多次运行相同的任务?
这可能是由于不同的原因造成的,当使用VIM时,最常见的问题是它的默认备份设置会在保存时更改多个文件。([查看Vim为什么使用~扩展名保存文件?](https))。对于此类情况,要么禁用备份,要么[在监视规则中忽略它们](https://github.com/cristianoliveira/funzzy/blob/master/examples/tasks-with-long-running-commands.yaml#L5)
对于其他情况,使用详细的fzz -V | grep 'Triggered by'
来了解什么触发了任务的执行。
自动化测试
运行单元测试
cargo test
或者简单的make tests
运行集成测试
make integration
代码风格
我们使用rustfmt
来格式化代码。要格式化代码,请运行
cargo fmt
贡献
- 将其分叉!
- 创建您的功能分支:
git checkout -b my-new-feature
- 提交您的更改:
git commit -am 'Add some feature'
- 推送到分支:
git push origin my-new-feature
- 提交拉取请求
想要帮忙?
- 打开拉取请求
- 创建问题
- 报告错误
- 建议新功能或改进
任何帮助都受欢迎!
拉取请求应包含单元测试
许可证
本项目是在MIT许可证下制作的。
依赖项
~6-15MB
~190K SLoC