func testBasic(t *testing.T, apiClient pps.ApiClient) { _ = os.RemoveAll("/tmp/pachyderm-test") startPipelineRunResponse, err := ppsutil.StartPipelineRunGithub( apiClient, "src/pps/server/testdata/basic", "pachyderm", "pachyderm", "master", "", ) require.NoError(t, err) pipelineRunID := startPipelineRunResponse.PipelineRunId pipelineRunStatus, err := getFinalPipelineRunStatus(apiClient, pipelineRunID) require.NoError(t, err) require.Equal(t, pps.PipelineRunStatusType_PIPELINE_RUN_STATUS_TYPE_SUCCESS, pipelineRunStatus.PipelineRunStatusType) matches, err := filepath.Glob("/tmp/pachyderm-test/1-out/*") require.NoError(t, err) require.Equal( t, []string{ "/tmp/pachyderm-test/1-out/1.txt", "/tmp/pachyderm-test/1-out/10.txt", "/tmp/pachyderm-test/1-out/2.txt", "/tmp/pachyderm-test/1-out/20.txt", "/tmp/pachyderm-test/1-out/3.txt", "/tmp/pachyderm-test/1-out/30.txt", "/tmp/pachyderm-test/1-out/4.txt", "/tmp/pachyderm-test/1-out/40.txt", "/tmp/pachyderm-test/1-out/5.txt", "/tmp/pachyderm-test/1-out/50.txt", }, matches, ) matches, err = filepath.Glob("/tmp/pachyderm-test/2-out/*") require.NoError(t, err) require.Equal( t, []string{ "/tmp/pachyderm-test/2-out/1.txt.copy", "/tmp/pachyderm-test/2-out/10.txt.copy", "/tmp/pachyderm-test/2-out/2.txt.copy", "/tmp/pachyderm-test/2-out/20.txt.copy", "/tmp/pachyderm-test/2-out/3.txt.copy", "/tmp/pachyderm-test/2-out/30.txt.copy", "/tmp/pachyderm-test/2-out/4.txt.copy", "/tmp/pachyderm-test/2-out/40.txt.copy", "/tmp/pachyderm-test/2-out/5.txt.copy", "/tmp/pachyderm-test/2-out/50.txt.copy", }, matches, ) matches, err = filepath.Glob("/tmp/pachyderm-test/3-out/*") require.NoError(t, err) require.Equal( t, []string{ "/tmp/pachyderm-test/3-out/1.txt.copy3", "/tmp/pachyderm-test/3-out/10.txt.copy3", "/tmp/pachyderm-test/3-out/2.txt.copy3", "/tmp/pachyderm-test/3-out/20.txt.copy3", "/tmp/pachyderm-test/3-out/3.txt.copy3", "/tmp/pachyderm-test/3-out/30.txt.copy3", "/tmp/pachyderm-test/3-out/4.txt.copy3", "/tmp/pachyderm-test/3-out/40.txt.copy3", "/tmp/pachyderm-test/3-out/5.txt.copy3", "/tmp/pachyderm-test/3-out/50.txt.copy3", }, matches, ) matches, err = filepath.Glob("/tmp/pachyderm-test/4-out/*") require.NoError(t, err) require.Equal( t, []string{ "/tmp/pachyderm-test/4-out/1.txt.copy4", "/tmp/pachyderm-test/4-out/10.txt.copy4", "/tmp/pachyderm-test/4-out/2.txt.copy4", "/tmp/pachyderm-test/4-out/20.txt.copy4", "/tmp/pachyderm-test/4-out/3.txt.copy4", "/tmp/pachyderm-test/4-out/30.txt.copy4", "/tmp/pachyderm-test/4-out/4.txt.copy4", "/tmp/pachyderm-test/4-out/40.txt.copy4", "/tmp/pachyderm-test/4-out/5.txt.copy4", "/tmp/pachyderm-test/4-out/50.txt.copy4", }, matches, ) matches, err = filepath.Glob("/tmp/pachyderm-test/5-out/*") require.NoError(t, err) require.Equal( t, []string{ "/tmp/pachyderm-test/5-out/1.txt.copy3", "/tmp/pachyderm-test/5-out/1.txt.copy4", "/tmp/pachyderm-test/5-out/10.txt.copy3", "/tmp/pachyderm-test/5-out/10.txt.copy4", "/tmp/pachyderm-test/5-out/2.txt.copy3", "/tmp/pachyderm-test/5-out/2.txt.copy4", "/tmp/pachyderm-test/5-out/20.txt.copy3", "/tmp/pachyderm-test/5-out/20.txt.copy4", "/tmp/pachyderm-test/5-out/3.txt.copy3", "/tmp/pachyderm-test/5-out/3.txt.copy4", "/tmp/pachyderm-test/5-out/30.txt.copy3", "/tmp/pachyderm-test/5-out/30.txt.copy4", "/tmp/pachyderm-test/5-out/4.txt.copy3", "/tmp/pachyderm-test/5-out/4.txt.copy4", "/tmp/pachyderm-test/5-out/40.txt.copy3", "/tmp/pachyderm-test/5-out/40.txt.copy4", "/tmp/pachyderm-test/5-out/5.txt.copy3", "/tmp/pachyderm-test/5-out/5.txt.copy4", "/tmp/pachyderm-test/5-out/50.txt.copy3", "/tmp/pachyderm-test/5-out/50.txt.copy4", }, matches, ) }
func do(appEnvObj interface{}) error { appEnv := appEnvObj.(*appEnv) clientConn, err := grpc.Dial(appEnv.Address) if err != nil { return err } apiClient := pps.NewApiClient(clientConn) var protoFlag bool inspectCmd := cobramainutil.Command{ Use: "inspect github.com/user/repository [path/to/specDir]", Long: "Inspect a pipeline specification.", MinNumArgs: 1, MaxNumArgs: 2, Run: func(cmd *cobra.Command, args []string) error { pipelineArgs, err := getPipelineArgs(args) if err != nil { return err } getPipelineResponse, err := ppsutil.GetPipelineGithub( apiClient, pipelineArgs.contextDir, pipelineArgs.user, pipelineArgs.repository, pipelineArgs.branch, pipelineArgs.accessToken, ) if err != nil { return err } if protoFlag { fmt.Printf("%v\n", getPipelineResponse.Pipeline) } else { data, err := json.MarshalIndent(getPipelineResponse.Pipeline, "", "\t ") if err != nil { return err } fmt.Println(string(data)) } return nil }, }.ToCobraCommand() inspectCmd.Flags().BoolVar(&protoFlag, "proto", false, "Print in proto format instead of JSON.") startCmd := cobramainutil.Command{ Use: "start github.com/user/repository [path/to/specDir]", Long: "Start a pipeline specification run.", MinNumArgs: 1, MaxNumArgs: 2, Run: func(cmd *cobra.Command, args []string) error { pipelineArgs, err := getPipelineArgs(args) if err != nil { return err } startPipelineRunResponse, err := ppsutil.StartPipelineRunGithub( apiClient, pipelineArgs.contextDir, pipelineArgs.user, pipelineArgs.repository, pipelineArgs.branch, pipelineArgs.accessToken, ) if err != nil { return err } fmt.Println(startPipelineRunResponse.PipelineRunId) return nil }, }.ToCobraCommand() statusCmd := cobramainutil.Command{ Use: "status pipelineRunID", Long: "Get the status of a pipeline run.", NumArgs: 1, Run: func(cmd *cobra.Command, args []string) error { getPipelineRunStatusResponse, err := ppsutil.GetPipelineRunStatus( apiClient, args[0], ) if err != nil { return err } name, ok := pps.PipelineRunStatusType_name[int32(getPipelineRunStatusResponse.PipelineRunStatus.PipelineRunStatusType)] if !ok { return fmt.Errorf("unknown run status") } fmt.Printf("%s %s\n", args[0], strings.Replace(name, "PIPELINE_RUN_STATUS_TYPE_", "", -1)) return nil }, }.ToCobraCommand() logsCmd := cobramainutil.Command{ Use: "logs pipelineRunID [node]", Long: "Get the logs from a pipeline run.", MinNumArgs: 1, MaxNumArgs: 2, Run: func(cmd *cobra.Command, args []string) error { node := "" if len(args) == 2 { node = args[1] } getPipelineRunLogsResponse, err := ppsutil.GetPipelineRunLogs( apiClient, args[0], node, ) if err != nil { return err } for _, pipelineRunLog := range getPipelineRunLogsResponse.PipelineRunLog { name, ok := pps.OutputStream_name[int32(pipelineRunLog.OutputStream)] if !ok { return fmt.Errorf("unknown pps.OutputStream") } name = strings.Replace(name, "OUTPUT_STREAM_", "", -1) containerID := pipelineRunLog.ContainerId if len(containerID) > 8 { containerID = containerID[:8] } logInfo := &logInfo{ Node: pipelineRunLog.Node, ContainerID: containerID, OutputStream: name, Time: protoutil.TimestampToTime(pipelineRunLog.Timestamp), } logInfoData, err := json.Marshal(logInfo) if err != nil { return err } s := fmt.Sprintf("%s %s", string(logInfoData), string(pipelineRunLog.Data)) fmt.Println(strings.TrimSpace(s)) } return nil }, }.ToCobraCommand() rootCmd := &cobra.Command{ Use: "pps", Long: `Access the PPS API. Note that this CLI is experimental and does not even check for common errors. The environment variable PPS_ADDRESS controls what server the CLI connects to, the default is 0.0.0.0:651.`, } rootCmd.AddCommand(cobramainutil.NewVersionCommand(clientConn, pachyderm.Version)) rootCmd.AddCommand(inspectCmd) rootCmd.AddCommand(startCmd) rootCmd.AddCommand(statusCmd) rootCmd.AddCommand(logsCmd) return rootCmd.Execute() }