diff --git a/crates/aqua-registry/aqua-registry/pkgs/facebook/ktfmt/registry.yaml b/crates/aqua-registry/aqua-registry/pkgs/facebook/ktfmt/registry.yaml new file mode 100644 index 0000000000..aa2c89c0c3 --- /dev/null +++ b/crates/aqua-registry/aqua-registry/pkgs/facebook/ktfmt/registry.yaml @@ -0,0 +1,9 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/aquaproj/aqua/main/json-schema/registry.json +packages: + - type: github_release + repo_owner: facebook + repo_name: ktfmt + description: A program that reformats Kotlin source code to comply with the common community standard for Kotlin code conventions + asset: ktfmt-{{trimV .Version}}-with-dependencies.jar + format: raw + complete_windows_ext: false diff --git a/registry/ktfmt.toml b/registry/ktfmt.toml new file mode 100644 index 0000000000..ad944e4e05 --- /dev/null +++ b/registry/ktfmt.toml @@ -0,0 +1,4 @@ +backends = ["aqua:facebook/ktfmt"] +depends = ["java"] +description = "A program that reformats Kotlin source code to comply with the common community standard for Kotlin code conventions" +test = { cmd = "ktfmt --version", expected = "ktfmt version {{version}}" } diff --git a/src/backend/aqua.rs b/src/backend/aqua.rs index 39aef80886..2b99862370 100644 --- a/src/backend/aqua.rs +++ b/src/backend/aqua.rs @@ -26,6 +26,7 @@ use crate::{env, file, github, minisign}; use async_trait::async_trait; use eyre::{ContextCompat, Result, bail, eyre}; use indexmap::IndexSet; +use indoc::formatdoc; use itertools::Itertools; use regex::Regex; use std::borrow::Cow; @@ -1605,7 +1606,23 @@ impl AquaBackend { make_executable = true; } else if format == "raw" { file::create_dir_all(&install_path)?; - file::copy(&tarball_path, first_bin_path)?; + if filename.ends_with(".jar") { + // JAR files cannot be executed directly; store the jar alongside + // the bin and create a small shell wrapper that invokes java -jar. + let jar_path = first_bin_path.with_extension("jar"); + file::copy(&tarball_path, &jar_path)?; + let wrapper = formatdoc! {r#" + #!/bin/sh + if [ -n "$JAVA_HOME" ]; then + exec "$JAVA_HOME/bin/java" -jar "{jar_path}" "$@" + else + exec java -jar "{jar_path}" "$@" + fi + "#, jar_path = jar_path.display()}; + file::write(first_bin_path, &wrapper)?; + } else { + file::copy(&tarball_path, first_bin_path)?; + } make_executable = true; } else if format.starts_with("tar") { file::untar(&tarball_path, &install_path, &tar_opts)?;