nixpkgs/pkgs/servers/search/quickwit/default.nix

150 lines
4.4 KiB
Nix

{ stdenv
, lib
, fetchFromGitHub
, rustPlatform
, nixosTests
, nix-update-script
, protobuf
, rust-jemalloc-sys
, Security
, nodejs
, yarn
, fetchYarnDeps
, fixup-yarn-lock
}:
let
pname = "quickwit";
version = "0.8.2";
yarnOfflineCache = fetchYarnDeps {
yarnLock = "${src}/quickwit/quickwit-ui/yarn.lock";
hash = "sha256-HppK9ycUxCOIagvzCmE+VfcmfMQfPIC8WeWM6WbA6fQ=";
};
src = fetchFromGitHub {
owner = "quickwit-oss";
repo = pname;
rev = "v${version}";
hash = "sha256-OrCO0mCFmhYBdpr4Gps56KJJ37uuJpV6ZJHWspOScyw=";
};
quickwit-ui = stdenv.mkDerivation {
name = "quickwit-ui";
src = "${src}/quickwit/quickwit-ui";
nativeBuildInputs = [
nodejs
yarn
fixup-yarn-lock
];
configurePhase = ''
export HOME=$(mktemp -d)
'';
buildPhase = ''
yarn config --offline set yarn-offline-mirror ${yarnOfflineCache}
fixup-yarn-lock yarn.lock
yarn install --offline \
--frozen-lockfile --no-progress \
--ignore-engines --ignore-scripts
patchShebangs .
yarn build
'';
installPhase = ''
mkdir $out
mv build/* $out
'';
};
in
rustPlatform.buildRustPackage rec {
inherit pname version src;
postPatch = ''
substituteInPlace ./quickwit-ingest/build.rs \
--replace-fail '.with_protos' '.with_includes(&["."]).with_protos'
substituteInPlace ./quickwit-codegen/example/build.rs \
--replace-fail '.with_protos' '.with_includes(&["."]).with_protos'
substituteInPlace ./quickwit-proto/build.rs \
--replace-fail '.with_protos' '.with_includes(&["."]).with_protos'
cp /build/cargo-vendor-dir/Cargo.lock /build/source/quickwit/Cargo.lock
'';
sourceRoot = "${src.name}/quickwit";
preBuild = ''
mkdir -p quickwit-ui/build
cp -r ${quickwit-ui}/* quickwit-ui/build
'';
buildInputs = [
rust-jemalloc-sys
] ++ lib.optionals stdenv.hostPlatform.isDarwin [ Security ];
cargoLock = {
lockFile = ./Cargo.lock;
outputHashes = {
"chitchat-0.8.0" = "sha256-6K2noPoFaDnOxQIEV1WbmVPfRGwlI/WS1OWSBH2qb1Q=";
"mrecordlog-0.4.0" = "sha256-9LIVs+BqK9FLSfHL3vm9LL+/FXIXJ6v617QLv4luQik=";
"ownedbytes-0.6.0" = "sha256-in18/NYYIgUiZ9sm8NgJlebWidRp34DR7AhOD1Nh0aw=";
"pulsar-5.0.2" = "sha256-j7wpsAro6x4fk3pvSL4fxLkddJFq8duZ7jDj0Edf3YQ=";
"sasl2-sys-0.1.20+2.1.28" = "sha256-u4BsfmTDFxuY3i1amLCsr7MDv356YPThMHclura0Sxs=";
"whichlang-0.1.0" = "sha256-7AvLGjtWHjG0TnZdg9p5D+O0H19uo2sqPxJMn6mOU0k=";
};
};
CARGO_PROFILE_RELEASE_LTO = "fat";
CARGO_PROFILE_RELEASE_CODEGEN_UNITS = "1";
# needed for internal protobuf c wrapper library
PROTOC = "${protobuf}/bin/protoc";
PROTOC_INCLUDE = "${protobuf}/include";
passthru = {
tests = {
inherit (nixosTests) quickwit;
inherit (nixosTests.vector) syslog-quickwit;
};
updateScript = nix-update-script { };
};
checkFlags = [
# tries to make a network access
"--skip=test_all_local_index"
"--skip=test_cmd_create"
"--skip=test_cmd_create_no_index_uri"
"--skip=test_cmd_search_aggregation"
"--skip=test_cmd_search_with_snippets"
"--skip=test_delete_index_cli"
"--skip=test_delete_index_cli_dry_run"
"--skip=test_ingest_docs_cli"
"--skip=test_ingest_docs_cli_keep_cache"
"--skip=test_search_index_cli"
"--skip=test_garbage_collect_cli_no_grace"
"--skip=actors::indexing_service::tests::test_indexing_service_spawn_observe_detach"
"--skip=object_storage::s3_compatible_storage::tests::test_s3_compatible_storage_relative_path"
# flaky test
"--skip=actors::indexer::tests::test_indexer_triggers_commit_on_drained_mailbox"
"--skip=actors::indexer::tests::test_indexer_triggers_commit_on_timeout"
"--skip=actors::indexer::tests::test_indexer_partitioning"
"--skip=actors::indexing_pipeline::tests::test_merge_pipeline_does_not_stop_on_indexing_pipeline_failure"
"--skip=actors::indexer::tests::test_indexer_triggers_commit_on_target_num_docs"
"--skip=actors::packager::tests::test_packager_simple"
# fail on darwin for some reason
"--skip=io::tests::test_controlled_writer_limited_async"
"--skip=io::tests::test_controlled_writer_limited_sync"
];
meta = with lib; {
description = "Sub-second search & analytics engine on cloud storage";
homepage = "https://quickwit.io/";
license = licenses.agpl3Only;
maintainers = with maintainers; [ happysalada ];
platforms = platforms.all;
};
}