github.com/mentimeter/morty@v1.2.2-0.20221012065510-5596adecd154/main.go (about)

     1  package main
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"log"
     7  	"os"
     8  
     9  	"github.com/mentimeter/morty/mortems"
    10  	"github.com/sethvargo/go-githubactions"
    11  )
    12  
    13  var ErrMissingInput = errors.New("missing required input")
    14  
    15  func main() {
    16  	if len(os.Args) <= 1 {
    17  		exitHelp()
    18  	}
    19  	if os.Args[1] == "check" {
    20  		if err := runCheck(); err != nil {
    21  			log.Fatalf("Oh jeez: %s\n", err)
    22  		}
    23  	} else if os.Args[1] == "local" {
    24  		if err := runLocal(); err != nil {
    25  			log.Fatalf("Oh jeez: %s\n", err)
    26  		}
    27  	} else if len(os.Args) == 3 && os.Args[1] == "git" && os.Args[2] == "check" {
    28  		if err := runGitCheck(); err != nil {
    29  			log.Fatalf("Oh jeez: %s\n", err)
    30  		}
    31  	} else if len(os.Args) == 2 && os.Args[1] == "git" {
    32  		if err := runGitCollect(); err != nil {
    33  			log.Fatalf("Oh jeez: %s\n", err)
    34  		}
    35  	} else {
    36  		exitHelp()
    37  	}
    38  
    39  	fmt.Println("Post-mortems successfully parsed and organized")
    40  }
    41  
    42  func exitHelp() {
    43  	fmt.Println("What do you want me to do? Options are: ")
    44  	fmt.Println("    `check` - for local parsing")
    45  	fmt.Println("    `git` - to parse and commit stats")
    46  	fmt.Println("    `git check` - to check parsing in your github action")
    47  	log.Fatalln("Please give me an argument!")
    48  }
    49  
    50  func runGitCollect() error {
    51  	token := githubactions.GetInput("token")
    52  	if token == "" {
    53  		fmt.Println("Want to check that your post-mortem is correctly formatted? Use `./morty check`")
    54  		return fmt.Errorf("no github action token supplied: %w", ErrMissingInput)
    55  	}
    56  
    57  	repository := os.Getenv("GITHUB_REPOSITORY")
    58  	if repository == "" {
    59  		return fmt.Errorf("no repository name set as env variable: %w", ErrMissingInput)
    60  	}
    61  
    62  	ref := os.Getenv("GITHUB_REF")
    63  	if ref == "" {
    64  		return fmt.Errorf("no ref: %w", ErrMissingInput)
    65  	}
    66  
    67  	gitService := mortems.NewGitHubService(token, repository, ref)
    68  
    69  	var mortemCollector mortems.MortemCollector
    70  
    71  	_, ddApiExists := os.LookupEnv("DD_API_KEY")
    72  	_, ddAppExists := os.LookupEnv("DD_APP_KEY")
    73  	if ddApiExists && ddAppExists {
    74  		ddService := mortems.NewDatadogReporter()
    75  		mortemCollector = mortems.NewMortemReportingCollector(gitService, ddService)
    76  	} else {
    77  		mortemCollector = mortems.NewMortemCollector(gitService)
    78  
    79  	}
    80  
    81  	return mortemCollector.Collect()
    82  }
    83  
    84  func runGitCheck() error {
    85  	token := githubactions.GetInput("token")
    86  	if token == "" {
    87  		fmt.Println("Want to check that your post-mortem is correctly formatted? Use `./morty check`")
    88  		return fmt.Errorf("no github action token supplied: %w", ErrMissingInput)
    89  	}
    90  
    91  	repository := os.Getenv("GITHUB_REPOSITORY")
    92  	if repository == "" {
    93  		return fmt.Errorf("no repository name set as env variable: %w", ErrMissingInput)
    94  	}
    95  
    96  	ref := os.Getenv("GITHUB_REF")
    97  	if ref == "" {
    98  		return fmt.Errorf("no ref: %w", ErrMissingInput)
    99  	}
   100  
   101  	gitService := mortems.NewGitHubService(token, repository, ref)
   102  	mortemCollector := mortems.NewMortemCollector(gitService)
   103  	_, err := mortemCollector.Check()
   104  	return err
   105  }
   106  
   107  func runLocal() error {
   108  	repoPath, err := os.Getwd()
   109  	if err != nil {
   110  		return fmt.Errorf("could not get wd: %w", err)
   111  	}
   112  
   113  	fileService := mortems.NewLocalFileService(repoPath)
   114  
   115  	var mortemCollector mortems.MortemCollector
   116  
   117  	_, ddApiExists := os.LookupEnv("DD_API_KEY")
   118  	_, ddAppExists := os.LookupEnv("DD_APP_KEY")
   119  	if ddApiExists && ddAppExists {
   120  		ddService := mortems.NewDatadogReporter()
   121  		mortemCollector = mortems.NewMortemReportingCollector(fileService, ddService)
   122  	} else {
   123  		mortemCollector = mortems.NewMortemCollector(fileService)
   124  
   125  	}
   126  	return mortemCollector.Collect()
   127  }
   128  
   129  func runCheck() error {
   130  	repoPath, err := os.Getwd()
   131  	if err != nil {
   132  		return fmt.Errorf("could not get wd: %w", err)
   133  	}
   134  
   135  	fileService := mortems.NewLocalFileService(repoPath)
   136  	mortemCollector := mortems.NewMortemCollector(fileService)
   137  	_, err = mortemCollector.Check()
   138  	return err
   139  }