This adds the proto messages and service definition used for communicating with our evaluator. Please refer to the `Tvix - Component interaction` document for a detailed description of the interactions that this service is used for. Change-Id: If44cdbff66c6cfe88c22a748fe29c0bbd8510b0d Co-Authored-By: Florian Klink <flokli@flokli.de> Co-Authored-By: Adam Höse <adisbladis@gmail.com> Reviewed-on: https://cl.tvl.fyi/c/depot/+/2685 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de> Reviewed-by: grfn <grfn@gws.fyi>
		
			
				
	
	
		
			144 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
	
	
// SPDX-License-Identifier: MIT
 | 
						|
// Copyright © 2021 The Tvix Authors
 | 
						|
syntax = "proto3";
 | 
						|
 | 
						|
package tvix.proto.evaluator.v1;
 | 
						|
 | 
						|
service EvaluatorService {
 | 
						|
  rpc Evaluate(stream EvaluateRequest) returns (stream EvaluateResponse) {}
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// Message types for EvaluateRequest
 | 
						|
//
 | 
						|
 | 
						|
message EvaluateFile {
 | 
						|
  // Absolute path at which the evaluator can find the file to be
 | 
						|
  // evaluated.
 | 
						|
  string file_path = 1;
 | 
						|
 | 
						|
  // Optional attribute that should be evaluated within the file,
 | 
						|
  // assuming that the value it evaluates to is an attribute set.
 | 
						|
  optional string attribute = 2;
 | 
						|
 | 
						|
  // Additional arguments to pass into the evaluation, with which the
 | 
						|
  // file's top-level function will be auto-called.
 | 
						|
  map<string, NixValue> arguments = 3;
 | 
						|
}
 | 
						|
 | 
						|
message EvaluateExpression {
 | 
						|
  // Literal Nix expression to evaluate.
 | 
						|
  string expression = 1;
 | 
						|
 | 
						|
  // Working directory in which the expression should be evaluated.
 | 
						|
  string working_directory = 2;
 | 
						|
}
 | 
						|
 | 
						|
message BuildResultChunk {
 | 
						|
  string drv_hash = 1;
 | 
						|
  string output = 2;
 | 
						|
  bytes data = 3;
 | 
						|
 | 
						|
  // This field may be set on the first build result chunk returned
 | 
						|
  // to the evaluator, indicating the total size of the output that
 | 
						|
  // is going to be streamed in bytes.
 | 
						|
  //
 | 
						|
  // If set, the evaluator can use this to appropriately allocate a
 | 
						|
  // buffer for the output.
 | 
						|
  optional int64 output_size = 4;
 | 
						|
}
 | 
						|
 | 
						|
// Indicates that a single build has completed successfully. In case
 | 
						|
// that the build outputs were required by the evaluator this also
 | 
						|
// indicates that the output has been returned completely.
 | 
						|
message BuildSuccess {
 | 
						|
  string drv_hash = 1;
 | 
						|
  string output = 2;
 | 
						|
}
 | 
						|
 | 
						|
// Describes an error that occured during a single build.
 | 
						|
//
 | 
						|
// TODO: We might want a more sophisticated error type.
 | 
						|
message BuildError {
 | 
						|
  string drv_hash = 1;
 | 
						|
  string output = 2;
 | 
						|
  string error = 3;
 | 
						|
}
 | 
						|
 | 
						|
message BuildResult {
 | 
						|
  oneof build_result {
 | 
						|
    BuildSuccess build_success = 1;
 | 
						|
    BuildError build_error = 2;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/// Messages sent to the evaluator by the build coordinator.
 | 
						|
message EvaluateRequest {
 | 
						|
  oneof message {
 | 
						|
    // Ask the evaluator to evaluate the specified file, and
 | 
						|
    // optionally attribute within that file. Must be the first
 | 
						|
    // message.
 | 
						|
    EvaluateFile evaluate_file = 1;
 | 
						|
 | 
						|
    // Ask the evaluator to evaluate the specified Nix expression.
 | 
						|
    // Must be the first message.
 | 
						|
    EvaluateExpression evaluate_expression = 2;
 | 
						|
 | 
						|
    // Send the chunks of a build result, in response to a
 | 
						|
    // BuildRequest.
 | 
						|
    //
 | 
						|
    // Note: This message might change as the store protocol is
 | 
						|
    // designed, as it is possible that mechanisms for transferring
 | 
						|
    // files might be reused between the protocols.
 | 
						|
    BuildResultChunk build_result_chunk = 3;
 | 
						|
 | 
						|
    // Indicate the result of a single build. See the documentation
 | 
						|
    // for the message types defined above for semantic details.
 | 
						|
    BuildResult build_result = 4;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// Message types for EvaluateResponse
 | 
						|
//
 | 
						|
 | 
						|
// TODO: Placeholder type.
 | 
						|
message Derivation {
 | 
						|
  string drv = 1;
 | 
						|
}
 | 
						|
 | 
						|
// TODO: Placeholder type.
 | 
						|
message NixValue {
 | 
						|
  string value = 1;
 | 
						|
}
 | 
						|
 | 
						|
// TODO: Placeholder type.
 | 
						|
message NixError {
 | 
						|
  string value = 1;
 | 
						|
}
 | 
						|
 | 
						|
message BuildRequest {
 | 
						|
  Derivation drv = 1;
 | 
						|
  string output = 2;
 | 
						|
}
 | 
						|
 | 
						|
// Messages returned to the coordinator by the evaluator.
 | 
						|
message EvaluateResponse {
 | 
						|
  oneof message {
 | 
						|
    // A derivation that was instantiated while reducing the graph,
 | 
						|
    // and whose output is not required by the evaluator.
 | 
						|
    Derivation derivation = 1;
 | 
						|
 | 
						|
    // A derivation that was instantiated while reducing the graph,
 | 
						|
    // and whose output is required by the evaluator (IFD).
 | 
						|
    BuildRequest build_request = 2;
 | 
						|
 | 
						|
    // The final value yielded by the evaluation. Stream is closed
 | 
						|
    // after this.
 | 
						|
    NixValue done = 3;
 | 
						|
 | 
						|
    // Evaluation error. Stream is closed after this.
 | 
						|
    NixError error = 4;
 | 
						|
  }
 | 
						|
}
 |