//go:build mage package main import ( "io/fs" "os" "path/filepath" "strconv" "strings" "golang.org/x/exp/slices" "golang.org/x/exp/slog" ) var ( WorkingDir string GoSourceFiles []string GeneratedMockFiles []string IsReleaseBuild bool IsPRBuild bool repoOwner = "prskr" repoName = "nitter" prIndex int64 = 1 dirsToIgnore = []string{ ".git", "build", ".run", ".task", } ) func init() { slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr))) IsReleaseBuild = strings.EqualFold(os.Getenv("DRONE_BUILD_EVENT"), "tag") IsPRBuild = strings.EqualFold(os.Getenv("DRONE_BUILD_EVENT"), "pull_request") if wd, err := os.Getwd(); err != nil { slog.Error("Failed to get working directory", err) os.Exit(1) } else { WorkingDir = wd } if owner := os.Getenv("DRONE_REPO_NAMESPACE"); owner != "" { repoOwner = owner } if name := os.Getenv("DRONE_REPO_NAME"); name != "" { repoName = name } if prIdxRaw := os.Getenv("DRONE_PULL_REQUEST"); prIdxRaw != "" { if parsed, err := strconv.ParseInt(prIdxRaw, 10, 64); err != nil { slog.Error("Failed to parse PR index", err) os.Exit(1) } else { prIndex = parsed } } if err := initSourceFiles(); err != nil { slog.Error("Failed to init source files", err) os.Exit(1) } slog.Info("Completed initialization") } func initSourceFiles() error { return filepath.WalkDir(WorkingDir, func(path string, d fs.DirEntry, err error) error { if err != nil { return err } if d.IsDir() { if slices.Contains(dirsToIgnore, filepath.Base(path)) { return fs.SkipDir } return nil } _, ext, found := strings.Cut(filepath.Base(path), ".") if !found { return nil } switch ext { case "mock.go": GeneratedMockFiles = append(GeneratedMockFiles, path) case "go": GoSourceFiles = append(GoSourceFiles, path) } return nil }) }