aboutsummaryrefslogtreecommitdiff
path: root/cmd/xesite/github.go
diff options
context:
space:
mode:
authorXe Iaso <me@christine.website>2023-09-30 10:36:37 -0400
committerGitHub <noreply@github.com>2023-09-30 10:36:37 -0400
commitac6a3df0d18cc73524c0096d954a57d24cad5669 (patch)
tree81474177d730440657f490ae29892d62392251ea /cmd/xesite/github.go
parentcbdea8ba3fca9a663778af71f8df5965aeb6c090 (diff)
downloadxesite-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.go67
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)
+ }
+ }()
+}