diff --git a/pkgs/by-name/ma/magika-cli/package.nix b/pkgs/by-name/ma/magika-cli/package.nix new file mode 100644 index 000000000000..9184d58d9b9b --- /dev/null +++ b/pkgs/by-name/ma/magika-cli/package.nix @@ -0,0 +1,95 @@ +{ + lib, + stdenv, + fetchFromGitHub, + rustPlatform, + pkg-config, + openssl, + onnxruntime, + versionCheckHook, + runCommand, + writeText, + testers, + nix-update-script, + magika-cli, +}: + +rustPlatform.buildRustPackage (finalAttrs: { + pname = "magika-cli"; + version = "1.0.1"; + + src = fetchFromGitHub { + owner = "google"; + repo = "magika"; + tag = "cli/v${finalAttrs.version}"; + hash = "sha256-g/fnSdh2jpOHOLTuR4DUPB1kbC0eKADHLKcfB1q08XI="; + }; + + cargoHash = "sha256-uqnTyedry9nWyO2518r0D3hk6oWb4wQE/Ku0cOkSjBA="; + + cargoRoot = "rust/cli"; + buildAndTestSubdir = finalAttrs.cargoRoot; + + nativeBuildInputs = [ + pkg-config + ]; + + buildInputs = [ + openssl + onnxruntime + ]; + + env = { + OPENSSL_NO_VENDOR = "true"; + }; + + doInstallCheck = true; + nativeInstallCheckInputs = [ + versionCheckHook + ]; + versionCheckProgramArg = "--version"; + + passthru = { + tests = { + mime = testers.testEqualContents { + assertion = "magika detects the correct language from content even when the file extension is wrong"; + + # Magika does not support Nix files yet: https://github.com/google/magika/issues/1247 + expected = writeText "expected" '' + application/x-rust + ''; + actual = + runCommand "actual" + { + nativeBuildInputs = [ + magika-cli + ]; + } + '' + magika --format '%m' '${./test.md}' >>"$out" + ''; + }; + }; + + updateScript = nix-update-script { + extraArgs = [ "--version-regex=^cli/v([0-9.]+)$" ]; + }; + }; + + meta = { + description = "Determines file content types using AI"; + homepage = "https://securityresearch.google/magika/"; + downloadPage = "https://github.com/google/magika"; + changelog = "https://github.com/google/magika/releases/tag/cli/v${finalAttrs.version}"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ + kachick + ]; + mainProgram = "magika"; + platforms = with lib.platforms; unix ++ windows; + + # The package test fails on Darwin with this error, even though the build succeeds: + # libc++abi: terminating due to uncaught exception of type std::__1::system_error: mutex lock failed: Invalid argument + broken = stdenv.hostPlatform.isDarwin; + }; +}) diff --git a/pkgs/by-name/ma/magika-cli/test.md b/pkgs/by-name/ma/magika-cli/test.md new file mode 100644 index 000000000000..b41591e4c4a7 --- /dev/null +++ b/pkgs/by-name/ma/magika-cli/test.md @@ -0,0 +1,3 @@ +fn main() { + println!("This is a code example"); +}