diff --git a/pkgs/by-name/cb/cbtemulator/package.nix b/pkgs/by-name/cb/cbtemulator/package.nix new file mode 100644 index 000000000000..d3b3e02cfe74 --- /dev/null +++ b/pkgs/by-name/cb/cbtemulator/package.nix @@ -0,0 +1,67 @@ +{ lib +, stdenv +, buildGoModule +, fetchFromGitHub +, runCommand +, cbtemulator +, google-cloud-bigtable-tool +}: + +buildGoModule rec { + pname = "cbtemulator"; + version = "1.22.0"; + + # There's a go.{mod,sum} in the root and in the "bigtable" subdir. + # We only ever use things in that subdir. + src = (fetchFromGitHub { + owner = "googleapis"; + repo = "google-cloud-go"; + rev = "bigtable/v${version}"; + hash = "sha256-eOi4QFthnmZb5ry/5L7wzr4Fy1pF/H07BzxOnXtmSu4="; + }) + "/bigtable"; + + vendorHash = "sha256-7M7YZfl0usjN9hLGozqJV2bGh+M1ec4PZRGYUhEckpY="; + subPackages = [ "cmd/emulator" ]; + + postInstall = '' + mv $out/bin/emulator $out/bin/cbtemulator + ''; + + passthru = { + # Sets up a table and family, then inserts, and ensures it gets back the value. + tests.smoketest = runCommand "cbtemulator-smoketest" + { + nativeBuildInputs = [ google-cloud-bigtable-tool ]; + } '' + # Start the emulator + ${lib.getExe cbtemulator} & + EMULATOR_PID=$! + + cleanup() { + kill $EMULATOR_PID + } + + trap cleanup EXIT + + export BIGTABLE_EMULATOR_HOST=localhost:9000 + + cbt -instance instance-1 -project project-1 createtable table-1 + cbt -instance instance-1 -project project-1 createfamily table-1 cf1 + cbt -instance instance-1 -project project-1 ls table-1 + cbt -instance instance-1 -project project-1 set table-1 key1 cf1:c1=value1 + + cbt -instance instance-1 -project project-1 read table-1 | grep -q value1 + + touch $out; + ''; + }; + + meta = with lib; { + description = "In-memory Google Cloud Bigtable server"; + homepage = "https://github.com/googleapis/google-cloud-go/blob/bigtable/v1.22.0/bigtable/cmd/emulator/cbtemulator.go"; + license = licenses.asl20; + maintainers = [ maintainers.flokli ]; + mainProgram = "cbtemulator"; + platforms = platforms.all; + }; +}