diff --git a/TOOLS.md b/TOOLS.md
index c40d5e3d1..8003f44ed 100644
--- a/TOOLS.md
+++ b/TOOLS.md
@@ -4,14 +4,13 @@ This is a list of tools that are installed from manifests managed in this action
If a tool not included in the list below is specified, this action uses [cargo-binstall] as a fallback.
-See the [Supported tools section in README.md](README.md#supported-tools) for how to ensure that fallback is not used.
-
> If `$CARGO_HOME/bin` is not available, Rust-related binaries will be installed to `$HOME/.cargo/bin`.
> If `$HOME/.cargo/bin` is not available, Rust-related binaries will be installed to `$HOME/.install-action/bin`.
| Name | Where binaries will be installed | Where will it be installed from | Supported platform | License |
| ---- | -------------------------------- | ------------------------------- | ------------------ | ------- |
| [**biome**](https://biomejs.dev) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/biomejs/biome/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/biomejs/biome/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/biomejs/biome/blob/main/LICENSE-MIT) |
+| [**cargo-acl**](https://github.com/cackle-rs/cackle) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/cackle-rs/cackle/releases) | Linux | [Apache-2.0 OR MIT](https://github.com/cackle-rs/cackle/blob/main/LICENSE) |
| [**cargo-audit**](https://github.com/rustsec/rustsec/tree/HEAD/cargo-audit) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/rustsec/rustsec/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/rustsec/rustsec/blob/HEAD/cargo-audit/LICENSE-APACHE) OR [MIT](https://github.com/rustsec/rustsec/blob/HEAD/cargo-audit/LICENSE-MIT) |
| [**cargo-binstall**](https://github.com/cargo-bins/cargo-binstall) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/cargo-bins/cargo-binstall/releases) | Linux, macOS, Windows | [GPL-3.0](https://github.com/cargo-bins/cargo-binstall/blob/HEAD/crates/bin/LICENSE) |
| [**cargo-careful**](https://github.com/RalfJung/cargo-careful) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/RalfJung/cargo-careful/releases) | Linux, macOS, Windows | [MIT](https://github.com/RalfJung/cargo-careful/blob/master/LICENSE-MIT) OR [Apache-2.0](https://github.com/RalfJung/cargo-careful/blob/master/LICENSE-APACHE) |
@@ -45,6 +44,7 @@ See the [Supported tools section in README.md](README.md#supported-tools) for ho
| [**hyperfine**](https://github.com/sharkdp/hyperfine) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/sharkdp/hyperfine/releases) | Linux, macOS, Windows | [MIT](https://github.com/sharkdp/hyperfine/blob/master/LICENSE-MIT) OR [Apache-2.0](https://github.com/sharkdp/hyperfine/blob/master/LICENSE-APACHE) |
| [**jaq**](https://github.com/01mf02/jaq) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/01mf02/jaq/releases) | Linux, macOS, Windows | [MIT](https://github.com/01mf02/jaq/blob/main/LICENSE-MIT) |
| [**just**](https://github.com/casey/just) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/casey/just/releases) | Linux, macOS, Windows | [CC0-1.0](https://github.com/casey/just/blob/master/LICENSE) |
+| [**knope**](https://github.com/knope-dev/knope) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/knope-dev/knope/releases) | Linux, macOS, Windows | [MIT](https://github.com/knope-dev/knope/blob/main/LICENSE) |
| [**mdbook**](https://github.com/rust-lang/mdBook) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/rust-lang/mdBook/releases) | Linux, macOS, Windows | [MPL-2.0](https://github.com/rust-lang/mdBook/blob/master/LICENSE) |
| [**mdbook-linkcheck**](https://github.com/Michael-F-Bryan/mdbook-linkcheck) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/Michael-F-Bryan/mdbook-linkcheck/releases) | Linux, macOS, Windows | [MIT](https://github.com/Michael-F-Bryan/mdbook-linkcheck/blob/master/LICENSE) |
| [**osv-scanner**](https://github.com/google/osv-scanner) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/google/osv-scanner/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/google/osv-scanner/blob/main/LICENSE) |
diff --git a/main.sh b/main.sh
index 085ce8a1c..0734c2a8c 100755
--- a/main.sh
+++ b/main.sh
@@ -76,6 +76,8 @@ download_and_extract() {
case "${tool}" in
# xbuild's binary name is "x", as opposed to the usual crate name
xbuild) installed_bin=("${bin_dir}/x${exe}") ;;
+ # cargo-acl's binary includes ${version} & ${rust_target}
+ cargo-acl) installed_bin=("${bin_dir}/${bin_dir}") ;;
# editorconfig-checker's binary name is renamed below
editorconfig-checker) installed_bin=("${bin_dir}/${tool}${exe}") ;;
*)
diff --git a/manifests/cargo-acl.json b/manifests/cargo-acl.json
new file mode 100644
index 000000000..cbd76d09f
--- /dev/null
+++ b/manifests/cargo-acl.json
@@ -0,0 +1,21 @@
+{
+ "rust_crate": "cargo-acl",
+ "template": {
+ "x86_64_linux_musl": {
+ "url": "https://github.com/cackle-rs/cackle/releases/download/v${version}/cackle-v${version}-x86_64-unknown-linux-musl.tar.gz"
+ }
+ },
+ "license_markdown": "[Apache-2.0 OR MIT](https://github.com/cackle-rs/cackle/blob/main/LICENSE)",
+ "latest": {
+ "version": "0.8.0"
+ },
+ "0.8": {
+ "version": "0.8.0"
+ },
+ "0.8.0": {
+ "x86_64_linux_musl": {
+ "etag": "0x8DC715A0F356A32",
+ "checksum": "88a08a2f75ca3aa218822c0bae5c581fc3fe5e60469840be42ed00cc6fe42969"
+ }
+ }
+}
diff --git a/tools/codegen/base/cargo-acl.json b/tools/codegen/base/cargo-acl.json
new file mode 100644
index 000000000..01304d9af
--- /dev/null
+++ b/tools/codegen/base/cargo-acl.json
@@ -0,0 +1,13 @@
+{
+ "repository": "https://github.com/cackle-rs/cackle",
+ "license_markdown": "[Apache-2.0 OR MIT](https://github.com/cackle-rs/cackle/blob/main/LICENSE)",
+ "tag_prefix": "v",
+ "rust_crate": "${package}",
+ "version_range": ">= 0.8.0",
+ "platform": {
+ "x86_64_linux_musl": {
+ "asset_name": "cackle-v${version}-${rust_target}.tar.gz",
+ "bin": "cackle-v${version}-${rust_target}"
+ }
+ }
+}
diff --git a/tools/codegen/src/lib.rs b/tools/codegen/src/lib.rs
index aac046034..4d6fec81f 100644
--- a/tools/codegen/src/lib.rs
+++ b/tools/codegen/src/lib.rs
@@ -251,7 +251,7 @@ impl BaseManifest {
assert!(!bin.as_slice().is_empty());
for bin in bin.as_slice() {
let file_name = Path::new(bin).file_name().unwrap().to_str().unwrap();
- if !self.repository.ends_with("/xbuild") {
+ if !self.repository.ends_with("/xbuild") && !self.repository.ends_with("/cackle") {
assert!(
!(file_name.contains("${version") || file_name.contains("${rust")),
"{bin}"