Remote orchestrator for software build and test tool
A remote build orchestrator for building and testing a software program is described. The remote build orchestrator includes a generator service for generating a build graph from a definition of the software program input to the remote build orchestrator. The build graph includes a plurality of actions, wherein the actions are defined by inputs, outputs, and commands, and wherein outputs of actions that are dependent on other actions for inputs are represented in the build graph by placeholders. The remote build orchestrator also includes an unwinder service for receiving the build graph from the generator service and processing the build graph into a series of requests for execution of the actions. The remote build orchestrator further includes a remote build execution service for executing the actions in response to the received requests and returning results of the executing to the unwinder service.
1 . A remote build orchestrator system for building and
testing a software program, the remote build orchestrator system comprising:
a generator service configured to generate, from a definition of the software program input to the remote build orchestrator system, a Merkle-based build graph comprising a plurality of actions, wherein the actions are defined by inputs, outputs, and commands, and
wherein outputs of actions that are dependent on other actions for inputs are represented in the Merkle-based build graph by placeholders,
wherein each placeholder comprises a computationally unique signature based on all of the inputs that would create a file represented by the placeholder;
an unwinder service configured to:
receive the Merkle-based build graph from the generator service; and
process the Merkle-based build graph in topological order into a series of remote execution application programming interface (API) requests for execution of the actions by a remote build execution service; and
the remote build execution service configured to:
execute the actions in response to the remote execution API requests; and
return results of the executing to the unwinder service,
wherein the unwinder service is further configured to use the returned results to replace the placeholders with actual output data resulting from the executing, and rewrite subsequent actions for execution.
2 . The remote build orchestrator system of claim 1 , wherein the unwinder service comprises a plurality of unwinder pods.
3 . The remote build orchestrator system of claim 2 , wherein the unwinder service comprises a ring hash load balancer for load balancing the unwinder pods.
4 . The remote build orchestrator system of claim 1 , wherein the signatures uniquely and deterministically represent dependent actions.
5 . The remote build orchestrator system of claim 1 , wherein each of the generator service, the unwinder service, and the remote build execution service are executed on separate machines.
6 . The remote build orchestrator system of claim 1 , wherein the Merkle-based build graph is provided to the unwinder service via a network connection.
7 . The remote build orchestrator system of claim 1 , wherein subsequent to completion of execution of all of the actions by the remote build execution service, the remote build orchestrator generates an aggregate pass-fail result based on the execution of all of the actions.
8 . A computer-implemented method for building and testing a software program, the computer-implemented method comprising:
generating, from a definition of the software program input to a remote build orchestrator system, a Merkle-based build graph comprising a plurality of actions,
wherein the actions are defined by inputs, outputs, and commands, and wherein outputs of actions that are dependent on other actions for inputs are represented in the Merkle-based build graph by placeholders,
wherein each placeholder comprises a computationally unique signature based on all of the inputs that would create a file represented by the placeholder;
processing the Merkle-based build graph in topological order into a series of remote execution application programming interface (API) requests for execution of the actions;
executing the actions in response to the remote execution API requests to produce results; and
using the results to replace the placeholders with actual output data of the executing, and rewrite subsequent actions for execution,
wherein the generating, the processing, and the executing are each performed by a different machine entity.
9 . The computer-implemented method of claim 8 , further comprising performing ring hash load balancing in connection with the processing.
10 . The computer-implemented method of claim 8 , wherein the signatures uniquely and deterministically represent dependent actions.
11 . The computer-implemented method of claim 8 , further comprising, subsequent to completion of execution of all of the actions, returning an aggregate pass-fail result based on the execution of all of the actions.
12 . One or more non-transitory computer-readable storage media comprising instructions for execution that, when executed by a processor, cause the processor to perform operations, the operations comprising:
generating, from a definition of a software program input to a remote build orchestrator system, a Merkle-based build graph comprising a plurality of actions,
wherein the actions are defined by inputs, outputs, and commands, and wherein outputs of actions that are dependent on other actions for inputs are represented in the Merkle-based build graph by placeholders,
wherein each placeholder comprises a computationally unique signature based on all of the inputs that would create a file represented by the placeholder;
processing the Merkle-based build graph in topological order into a series of remote execution application programming interface (API) requests for execution of the actions;
executing the actions in response to the remote execution API requests to produce results;
subsequent to completion of execution of all of the actions, returning an aggregate pass-fail result based on the execution of all of the actions;
using the results to replace the placeholders with actual data of executing; and
re-executing the actions comprising the placeholders subsequent to the replacing.
13 . The one or more non-transitory computer-readable storage media of claim 12 , wherein the signatures uniquely and deterministically represent dependent actions.