Home

gitpecker @551ed52edc36612da8a63e65cf776afd2d730f53 - refs - log -
-
https://git.jolheiser.com/gitpecker.git
Woodpecker addon for generic git forge and OIDC
gitpecker / cmd / gitpeckerhook / woodpecker.go
- raw -
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
}