diff options
| author | Xe Iaso <me@christine.website> | 2023-09-30 10:36:37 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-30 10:36:37 -0400 |
| commit | ac6a3df0d18cc73524c0096d954a57d24cad5669 (patch) | |
| tree | 81474177d730440657f490ae29892d62392251ea /cmd/xesite/github.go | |
| parent | cbdea8ba3fca9a663778af71f8df5965aeb6c090 (diff) | |
| download | xesite-ac6a3df0d18cc73524c0096d954a57d24cad5669.tar.xz xesite-ac6a3df0d18cc73524c0096d954a57d24cad5669.zip | |
Xesite V4 (#723)
* scripts/ditherify: fix quoting
Signed-off-by: Xe Iaso <me@xeiaso.net>
* clean up some old files
Signed-off-by: Xe Iaso <me@xeiaso.net>
* import site into lume
Signed-off-by: Xe Iaso <me@xeiaso.net>
* initial go code
Signed-off-by: Xe Iaso <me@xeiaso.net>
* move vods index to top level
Signed-off-by: Xe Iaso <me@xeiaso.net>
* remove the ads
Signed-off-by: Xe Iaso <me@xeiaso.net>
* internal/lume: metrics
Signed-off-by: Xe Iaso <me@xeiaso.net>
* delete old code
Signed-off-by: Xe Iaso <me@xeiaso.net>
* load config into memory
Signed-off-by: Xe Iaso <me@xeiaso.net>
* autogenerate data from dhall config
Signed-off-by: Xe Iaso <me@xeiaso.net>
* various cleanups, import clackset logic
Signed-off-by: Xe Iaso <me@xeiaso.net>
* Update signalboost.dhall (#722)
Added myself, and also fixed someone’s typo
* Add Connor Edwards to signal boost (#721)
* add cache headers
Signed-off-by: Xe Iaso <me@xeiaso.net>
* move command to xesite folder
Signed-off-by: Xe Iaso <me@xeiaso.net>
* xesite: listen for GitHub webhook push events
Signed-off-by: Xe Iaso <me@xeiaso.net>
* xesite: 5 minute timeout for rebuilding the site
Signed-off-by: Xe Iaso <me@xeiaso.net>
* xesite: add rebuild metrics
Signed-off-by: Xe Iaso <me@xeiaso.net>
* xesite: update default variables
Signed-off-by: Xe Iaso <me@xeiaso.net>
* don't commit binaries oops lol
Signed-off-by: Xe Iaso <me@xeiaso.net>
* lume: make search have a light background
Signed-off-by: Xe Iaso <me@xeiaso.net>
* add a notfound page
Signed-off-by: Xe Iaso <me@xeiaso.net>
* fetch info from patreon API
Signed-off-by: Xe Iaso <me@xeiaso.net>
* create contact page
Signed-off-by: Xe Iaso <me@xeiaso.net>
* Toot embedding
Signed-off-by: Xe Iaso <me@xeiaso.net>
* attempt a docker image
Signed-off-by: Xe Iaso <me@xeiaso.net>
* lume: fix deno lock
Signed-off-by: Xe Iaso <me@xeiaso.net>
* add gokrazy post
Signed-off-by: Xe Iaso <me@xeiaso.net>
* cmd/xesite: go up before trying to connect to the saas proxy
Signed-off-by: Xe Iaso <me@xeiaso.net>
* blog: add Sine post/demo
Signed-off-by: Xe Iaso <me@xeiaso.net>
---------
Signed-off-by: Xe Iaso <me@xeiaso.net>
Co-authored-by: bri <284789+b-@users.noreply.github.com>
Co-authored-by: Connor Edwards <38229097+cedws@users.noreply.github.com>
Diffstat (limited to 'cmd/xesite/github.go')
| -rw-r--r-- | cmd/xesite/github.go | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/cmd/xesite/github.go b/cmd/xesite/github.go new file mode 100644 index 0000000..bde7c9d --- /dev/null +++ b/cmd/xesite/github.go @@ -0,0 +1,67 @@ +package main + +import ( + "context" + "encoding/json" + "expvar" + "fmt" + "log/slog" + "net/http" + "time" + + "github.com/go-git/go-git/v5" + "tailscale.com/metrics" + "xeiaso.net/v4/internal/github" + "xeiaso.net/v4/internal/lume" +) + +var ( + webhookCount = metrics.LabelMap{Label: "source"} + buildErrors = metrics.LabelMap{Label: "err"} +) + +func init() { + expvar.Publish("gauge_xesite_webhook_count", &webhookCount) + expvar.Publish("gauge_xesite_build_errors", &buildErrors) +} + +type GitHubWebhook struct { + fs *lume.FS +} + +func (gh *GitHubWebhook) ServeHTTP(w http.ResponseWriter, r *http.Request) { + webhookCount.Add("github", 1) + + if r.Header.Get("X-GitHub-Event") != "push" { + slog.Info("not a push event", "event", r.Header.Get("X-GitHub-Event")) + } + + var event github.PushEvent + if err := json.NewDecoder(r.Body).Decode(&event); err != nil { + slog.Error("error decoding event", "error", err) + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + slog.Info("push!", "ref", event.Ref, "author", event.Pusher.Login) + + if event.Ref != "refs/heads/"+*gitBranch { + slog.Error("not the right branch", "branch", event.Ref) + fmt.Fprintln(w, "OK") + return + } + + go func() { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute) + defer cancel() + if err := gh.fs.Update(ctx); err != nil { + buildErrors.Add(err.Error(), 1) + if err == git.NoErrAlreadyUpToDate { + slog.Info("already up to date") + return + } + + slog.Error("error updating", "error", err) + } + }() +} |
