aboutsummaryrefslogtreecommitdiff
path: root/internal
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 /internal
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>
Diffstat (limited to 'internal')
-rw-r--r--internal/lume/lume.go25
-rw-r--r--internal/mi/mi.go53
2 files changed, 78 insertions, 0 deletions
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
+}