in go/pkg/tool/tool.go [470:540]
func (c *Client) ShowAction(ctx context.Context, actionDigest string) (string, error) {
var showActionRes bytes.Buffer
resPb, err := c.getActionResult(ctx, actionDigest)
if err != nil {
return "", err
}
acDg, err := digest.NewFromString(actionDigest)
if err != nil {
return "", err
}
actionProto := &repb.Action{}
if _, err := c.GrpcClient.ReadProto(ctx, acDg, actionProto); err != nil {
return "", err
}
if actionProto.Timeout != nil {
timeout, err := ptypes.Duration(actionProto.Timeout)
if err != nil {
return "", err
}
showActionRes.WriteString(fmt.Sprintf("Timeout: %s\n", timeout.String()))
}
commandProto := &repb.Command{}
cmdDg, err := digest.NewFromProto(actionProto.GetCommandDigest())
if err != nil {
return "", err
}
showActionRes.WriteString("Command\n=======\n")
showActionRes.WriteString(fmt.Sprintf("Command Digest: %v\n", cmdDg))
log.Infof("Reading command from action digest..")
if _, err := c.GrpcClient.ReadProto(ctx, cmdDg, commandProto); err != nil {
return "", err
}
for _, ev := range commandProto.GetEnvironmentVariables() {
showActionRes.WriteString(fmt.Sprintf("\t%s=%s\n", ev.Name, ev.Value))
}
cmdStr := strings.Join(commandProto.GetArguments(), " ")
showActionRes.WriteString(fmt.Sprintf("\t%v\n", cmdStr))
showActionRes.WriteString("\nPlatform\n========\n")
for _, property := range commandProto.GetPlatform().GetProperties() {
showActionRes.WriteString(fmt.Sprintf("\t%s=%s\n", property.Name, property.Value))
}
showActionRes.WriteString("\nInputs\n======\n")
log.Infof("Fetching input tree from input root digest..")
inpTree, _, err := c.getInputTree(ctx, actionProto.GetInputRootDigest())
if err != nil {
showActionRes.WriteString("Failed to fetch input tree:\n")
showActionRes.WriteString(err.Error())
showActionRes.WriteString("\n")
} else {
showActionRes.WriteString(inpTree)
}
if resPb == nil {
showActionRes.WriteString("\nNo action result in cache.\n")
} else {
log.Infof("Fetching output tree from action result..")
outs, err := c.getOutputs(ctx, resPb)
if err != nil {
return "", err
}
showActionRes.WriteString("\n")
showActionRes.WriteString(outs)
}
return showActionRes.String(), nil
}