diff --git a/.gitignore b/.gitignore index 9bd517c63978452ae58a849aefa3d71e731db0fc..b5a13702634a0c7364585ec8ceb3245862cc2bb4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ -/gitpecker* +gitpecker* .env nixos.qcow2 diff --git a/cmd/gitpeckerhook/main.go b/cmd/gitpeckerhook/main.go deleted file mode 100644 index f13effc123a49a8d3281b84a7d481e0616a6255d..0000000000000000000000000000000000000000 --- a/cmd/gitpeckerhook/main.go +++ /dev/null @@ -1,97 +0,0 @@ -package main - -import ( - "encoding/json" - "flag" - "os" - "path/filepath" - "strings" -) - -func maine() error { - fs := flag.NewFlagSet("gitpeckerhook", flag.ExitOnError) - domainFlag := fs.String("domain", "", "Woodpecker domain (e.g. https://ci.example.com)") - fs.StringVar(domainFlag, "d", *domainFlag, "--domain") - cacheFlag := fs.String("cache", ".cache.json", "Path to JSON cache file") - fs.StringVar(cacheFlag, "c", *cacheFlag, "--cache") - tokenFlag := fs.String("token", "", "Woodpecker API token") - fs.StringVar(tokenFlag, "t", *tokenFlag, "--token") - tokenFileFlag := fs.String("token-file", "", "Path to a file containing a Woodpecker API token") - fs.StringVar(tokenFileFlag, "T", *tokenFileFlag, "--token-file") - if err := fs.Parse(os.Args[1:]); err != nil { - return err - } - - token := *tokenFlag - if *tokenFileFlag != "" { - data, err := os.ReadFile(*tokenFileFlag) - if err != nil { - return err - } - token = strings.TrimSpace(string(data)) - } - - pwd, err := os.Getwd() - if err != nil { - return err - } - - repo := filepath.Base(pwd) - repo = strings.TrimSuffix(repo, ".git") - - cache, err := ensureCache(*cacheFlag) - if err != nil { - return err - } - - client := client{domain: *domainFlag, token: token} - - if _, ok := cache[repo]; !ok { - id, err := client.lookupRepo(repo) - if err != nil { - return err - } - cache[repo] = id - fi, err := os.Open(*cacheFlag) - if err != nil { - return err - } - defer fi.Close() - if err := json.NewEncoder(fi).Encode(cache); err != nil { - return err - } - } - - return client.triggerPipeline(cache[repo]) -} - -func ensureCache(cachePath string) (map[string]int, error) { - var c map[string]int - - _, err := os.Stat(cachePath) - if err != nil { - if err := os.MkdirAll(filepath.Dir(cachePath), os.ModePerm); err != nil { - return c, err - } - fi, err := os.Create(cachePath) - if err != nil { - return c, err - } - fi.WriteString("{}") - fi.Close() - } - - fi, err := os.Open(cachePath) - if err != nil { - return c, err - } - defer fi.Close() - - return c, json.NewDecoder(fi).Decode(&c) -} - -func main() { - if err := maine(); err != nil { - panic(err) - } -} diff --git a/cmd/gitpeckerhook/woodpecker.go b/cmd/gitpeckerhook/woodpecker.go deleted file mode 100644 index b0889aacec0d99016a3840c8d1372d04571d8eef..0000000000000000000000000000000000000000 --- a/cmd/gitpeckerhook/woodpecker.go +++ /dev/null @@ -1,65 +0,0 @@ -package main - -import ( - "encoding/json" - "errors" - "fmt" - "net/http" - "strings" - "time" -) - -var httpClient = http.Client{Timeout: time.Second * 10} - -type client struct { - domain string - token string -} - -type lookupResp struct { - ID int `json:"id"` -} - -func (c client) lookupRepo(repoName string) (int, error) { - u := strings.TrimSuffix(c.domain, "/") + "/api/repos/lookup/" + repoName - - req, err := http.NewRequest(http.MethodGet, u, nil) - if err != nil { - return -1, err - } - req.Header.Add("Authorization", "Bearer "+c.token) - - resp, err := httpClient.Do(req) - if err != nil { - return -1, err - } - defer resp.Body.Close() - - var l lookupResp - if err := json.NewDecoder(resp.Body).Decode(&l); err != nil { - return -1, err - } - - return l.ID, nil -} - -func (c client) triggerPipeline(repoID int) error { - u := strings.TrimSuffix(c.domain, "/") + fmt.Sprintf("/api/repos/%d/pipelines", repoID) - - req, err := http.NewRequest(http.MethodPost, u, nil) - if err != nil { - return err - } - req.Header.Add("Authorization", "Bearer "+c.token) - - resp, err := httpClient.Do(req) - if err != nil { - return err - } - - if resp.StatusCode != http.StatusOK { - return errors.New("could not trigger pipeline") - } - - return nil -}