#yaml #watcher #command #script #file-watcher #unix-shell #watch

bin+lib funzzy

由 entr 启发的另一个花哨的监视器

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日

#123Unix API

Download history 3/week @ 2024-04-25 1/week @ 2024-05-16 4/week @ 2024-05-30 6/week @ 2024-06-06 2/week @ 2024-06-13 68/week @ 2024-06-27 147/week @ 2024-07-04 83/week @ 2024-07-11 30/week @ 2024-07-18 102/week @ 2024-07-25 3/week @ 2024-08-01

每月下载量 135

MIT 许可证

71KB
1.5K SLoC

funzzy (fzz) Crate 版本 使用 nix 构建包 CI 集成测试 CI 检查

antrentr 启发的轻量级监视器。另请参阅: 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