aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2023-10-02 15:07:26 -0400
committerXe Iaso <me@xeiaso.net>2023-10-02 15:07:26 -0400
commit21a3c8b3d0f500f5d2ff2d97e74897975ff9a39e (patch)
tree78bbc5d692622740c2a1a3167b9940645e425920
parent6f8f5c8d7169c31bb379124bf488b89556469745 (diff)
downloadxesite-21a3c8b3d0f500f5d2ff2d97e74897975ff9a39e.tar.xz
xesite-21a3c8b3d0f500f5d2ff2d97e74897975ff9a39e.zip
cmd/xesite: add mi poking when builds are done
Signed-off-by: Xe Iaso <me@xeiaso.net>
-rw-r--r--cmd/xesite/main.go2
-rw-r--r--internal/lume/lume.go25
-rw-r--r--internal/mi/mi.go53
3 files changed, 80 insertions, 0 deletions
diff --git a/cmd/xesite/main.go b/cmd/xesite/main.go
index 566678b..3316f3f 100644
--- a/cmd/xesite/main.go
+++ b/cmd/xesite/main.go
@@ -29,6 +29,7 @@ var (
gitBranch = flag.String("git-branch", "main", "Git branch to clone")
gitRepo = flag.String("git-repo", "https://github.com/Xe/site", "Git repository to clone")
githubSecret = flag.String("github-secret", "", "GitHub secret to use for webhooks")
+ miToken = flag.String("mi-token", "", "Token to use for the mi API")
patreonSaasProxyURL = flag.String("patreon-saasproxy-url", "http://patreon-saasproxy/give-token", "URL to use for the patreon saasproxy")
siteURL = flag.String("site-url", "https://xeiaso.net/", "URL to use for the site")
tsnetHostname = flag.String("tailscale-hostname", "xesite", "Tailscale hostname to use")
@@ -80,6 +81,7 @@ func main() {
Development: *devel,
PatreonClient: pc,
DataDir: *dataDir,
+ MiToken: *miToken,
})
if err != nil {
log.Fatal(err)
diff --git a/internal/lume/lume.go b/internal/lume/lume.go
index b22e7d6..294f42c 100644
--- a/internal/lume/lume.go
+++ b/internal/lume/lume.go
@@ -19,6 +19,7 @@ import (
"gopkg.in/mxpv/patreon-go.v1"
"tailscale.com/metrics"
"xeiaso.net/v4/internal/config"
+ "xeiaso.net/v4/internal/mi"
)
var (
@@ -67,6 +68,8 @@ type FS struct {
opt *Options
conf *config.Config
+ miClient *mi.Client
+
fs fs.FS
lock sync.RWMutex
}
@@ -119,6 +122,7 @@ type Options struct {
URL string
PatreonClient *patreon.Client
DataDir string
+ MiToken string
}
func New(ctx context.Context, o *Options) (*FS, error) {
@@ -154,6 +158,11 @@ func New(ctx context.Context, o *Options) (*FS, error) {
}
}
+ if o.MiToken != "" {
+ fs.miClient = mi.New(o.MiToken, "xeiaso.net/v4/internal/lume "+os.Args[0])
+ slog.Info("mi integration enabled")
+ }
+
conf, err := config.Load(filepath.Join(fs.repoDir, "config.dhall"))
if err != nil {
log.Fatal(err)
@@ -165,6 +174,14 @@ func New(ctx context.Context, o *Options) (*FS, error) {
return nil, err
}
+ if fs.miClient != nil {
+ go func() {
+ if err := fs.miClient.Refresh(); err != nil {
+ slog.Error("failed to refresh mi", "err", err)
+ }
+ }()
+ }
+
return fs, nil
}
@@ -217,6 +234,14 @@ func (f *FS) Update(ctx context.Context) error {
return err
}
+ if f.miClient != nil {
+ go func() {
+ if err := f.miClient.Refresh(); err != nil {
+ slog.Error("failed to refresh mi", "err", err)
+ }
+ }()
+ }
+
return nil
}
diff --git a/internal/mi/mi.go b/internal/mi/mi.go
new file mode 100644
index 0000000..67134fd
--- /dev/null
+++ b/internal/mi/mi.go
@@ -0,0 +1,53 @@
+package mi
+
+import (
+ "errors"
+ "net/http"
+)
+
+type Client struct {
+ cli *http.Client
+ baseURL string
+ headers http.Header
+}
+
+func New(token string, userAgent string) *Client {
+ headers := http.Header{}
+ headers.Set("Authorization", token)
+ headers.Set("User-Agent", userAgent)
+
+ cli := &http.Client{}
+
+ return &Client{
+ cli: cli,
+ baseURL: "https://mi.within.website",
+ headers: headers,
+ }
+}
+
+func (c *Client) Refresh() error {
+ if c == nil {
+ return nil
+ }
+
+ req, err := http.NewRequest("POST", c.baseURL+"/api/blog/refresh", nil)
+ if err != nil {
+ return err
+ }
+
+ for k, v := range c.headers {
+ req.Header[k] = v
+ }
+
+ resp, err := c.cli.Do(req)
+ if err != nil {
+ return err
+ }
+ defer resp.Body.Close()
+
+ if resp.StatusCode != http.StatusOK {
+ return errors.New("non-200 status code")
+ }
+
+ return nil
+}