diff --git a/backend/.goreleaser.yaml b/backend/.goreleaser.yaml index d2780e6c..02c80bcb 100644 --- a/backend/.goreleaser.yaml +++ b/backend/.goreleaser.yaml @@ -14,6 +14,7 @@ builds: - linux - windows - darwin + - freebsd goarch: - amd64 - "386" @@ -25,11 +26,16 @@ builds: goarch: arm - goos: windows goarch: "386" + - goos: freebsd + goarch: arm + - goos: freebsd + goarch: "386" tags: - >- {{- if eq .Arch "riscv64" }}nodynamic {{- else if eq .Arch "arm" }}nodynamic {{- else if eq .Arch "386" }}nodynamic + {{- else if eq .Os "freebsd" }}nodynamic {{ end }} signs: diff --git a/backend/app/api/main.go b/backend/app/api/main.go index e52941e7..2a553723 100644 --- a/backend/app/api/main.go +++ b/backend/app/api/main.go @@ -3,17 +3,11 @@ package main import ( "context" "fmt" - "github.com/google/uuid" - "github.com/pressly/goose/v3" - "github.co - "net/http" - "strings" - "time" - - "github.com/pressly/goose/v3" - "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" + "github.com/pressly/goose/v3" + "net/http" + "strings" "github.com/hay-kot/httpkit/errchain" "github.com/hay-kot/httpkit/graceful" @@ -26,7 +20,6 @@ import ( "github.com/sysadminsmedia/homebox/backend/internal/data/ent" "github.com/sysadminsmedia/homebox/backend/internal/data/migrations" "github.com/sysadminsmedia/homebox/backend/internal/data/repo" - "github.com/sysadminsmedia/homebox/backend/internal/sys/analytics" "github.com/sysadminsmedia/homebox/backend/internal/sys/config" "github.com/sysadminsmedia/homebox/backend/internal/web/mid" @@ -35,7 +28,6 @@ import ( _ "github.com/sysadminsmedia/homebox/backend/internal/data/migrations/sqlite3" _ "github.com/sysadminsmedia/homebox/backend/pkgs/cgofreesqlite" - "gocloud.dev/pubsub" _ "gocloud.dev/pubsub/awssnssqs" _ "gocloud.dev/pubsub/azuresb" _ "gocloud.dev/pubsub/gcppubsub" diff --git a/backend/app/api/recurring.go b/backend/app/api/recurring.go index 986618f0..d6df8511 100644 --- a/backend/app/api/recurring.go +++ b/backend/app/api/recurring.go @@ -53,68 +53,68 @@ func registerRecurringTasks(app *app, cfg *config.Config, runner *graceful.Runne } })) - runner.AddFunc("create-thumbnails-subscription", func(ctx context.Context) error { - pubsubString, err := utils.GenerateSubPubConn(cfg.Database.PubSubConnString, "thumbnails") - if err != nil { - log.Error().Err(err).Msg("failed to generate pubsub connection string") - return err - } - topic, err := pubsub.OpenTopic(ctx, pubsubString) - if err != nil { - return err - } - defer func(topic *pubsub.Topic, ctx context.Context) { - err := topic.Shutdown(ctx) + if cfg.Thumbnail.Enabled { + runner.AddFunc("create-thumbnails-subscription", func(ctx context.Context) error { + pubsubString, err := utils.GenerateSubPubConn(cfg.Database.PubSubConnString, "thumbnails") if err != nil { - log.Err(err).Msg("fail to shutdown pubsub topic") + log.Error().Err(err).Msg("failed to generate pubsub connection string") + return err } - }(topic, ctx) - - subscription, err := pubsub.OpenSubscription(ctx, pubsubString) - if err != nil { - log.Err(err).Msg("failed to open pubsub topic") - return err - } - defer func(topic *pubsub.Subscription, ctx context.Context) { - err := topic.Shutdown(ctx) + topic, err := pubsub.OpenTopic(ctx, pubsubString) if err != nil { - log.Err(err).Msg("fail to shutdown pubsub topic") + return err } - }(subscription, ctx) + defer func(topic *pubsub.Topic, ctx context.Context) { + err := topic.Shutdown(ctx) + if err != nil { + log.Err(err).Msg("fail to shutdown pubsub topic") + } + }(topic, ctx) - for { - select { - case <-ctx.Done(): - return ctx.Err() - default: - msg, err := subscription.Receive(ctx) - log.Debug().Msg("received thumbnail generation request from pubsub topic") - if err != nil { - log.Err(err).Msg("failed to receive message from pubsub topic") - msg.Ack() - continue - } - if msg == nil { - log.Warn().Msg("received nil message from pubsub topic") - msg.Ack() - continue - } - groupId, err := uuid.Parse(msg.Metadata["group_id"]) - if err != nil { - log.Error().Err(err).Str("group_id", msg.Metadata["group_id"]).Msg("failed to parse group ID from message metadata") - } - attachmentId, err := uuid.Parse(msg.Metadata["attachment_id"]) - if err != nil { - log.Error().Err(err).Str("attachment_id", msg.Metadata["attachment_id"]).Msg("failed to parse attachment ID from message metadata") - } - err = app.repos.Attachments.CreateThumbnail(ctx, groupId, attachmentId, msg.Metadata["title"], msg.Metadata["path"]) - if err != nil { - log.Err(err).Msg("failed to create thumbnail") - } - msg.Ack() + subscription, err := pubsub.OpenSubscription(ctx, pubsubString) + if err != nil { + log.Err(err).Msg("failed to open pubsub topic") + return err } - } - }) + defer func(topic *pubsub.Subscription, ctx context.Context) { + err := topic.Shutdown(ctx) + if err != nil { + log.Err(err).Msg("fail to shutdown pubsub topic") + } + }(subscription, ctx) + + for { + select { + case <-ctx.Done(): + return ctx.Err() + default: + msg, err := subscription.Receive(ctx) + log.Debug().Msg("received thumbnail generation request from pubsub topic") + if err != nil { + log.Err(err).Msg("failed to receive message from pubsub topic") + continue + } + if msg == nil { + log.Warn().Msg("received nil message from pubsub topic") + continue + } + groupId, err := uuid.Parse(msg.Metadata["group_id"]) + if err != nil { + log.Error().Err(err).Str("group_id", msg.Metadata["group_id"]).Msg("failed to parse group ID from message metadata") + } + attachmentId, err := uuid.Parse(msg.Metadata["attachment_id"]) + if err != nil { + log.Error().Err(err).Str("attachment_id", msg.Metadata["attachment_id"]).Msg("failed to parse attachment ID from message metadata") + } + err = app.repos.Attachments.CreateThumbnail(ctx, groupId, attachmentId, msg.Metadata["title"], msg.Metadata["path"]) + if err != nil { + log.Err(err).Msg("failed to create thumbnail") + } + msg.Ack() + } + } + }) + } if cfg.Options.GithubReleaseCheck { runner.AddPlugin(NewTask("get-latest-github-release", time.Hour, func(ctx context.Context) { diff --git a/backend/go.sum b/backend/go.sum index 366dda50..cf1a531c 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -352,6 +352,8 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-sqlite3 v1.14.28 h1:ThEiQrnbtumT+QMknw63Befp/ce/nUPgBPMlRFEum7A= github.com/mattn/go-sqlite3 v1.14.28/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY= @@ -375,6 +377,8 @@ github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJm github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/olahol/melody v1.2.1 h1:xdwRkzHxf+B0w4TKbGpUSSkV516ZucQZJIWLztOWICQ= github.com/olahol/melody v1.2.1/go.mod h1:GgkTl6Y7yWj/HtfD48Q5vLKPVoZOH+Qqgfa7CvJgJM4= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU= github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts= github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= @@ -417,6 +421,10 @@ github.com/shirou/gopsutil/v4 v4.25.5 h1:rtd9piuSMGeU8g1RMXjZs9y9luK5BwtnG7dZaQU github.com/shirou/gopsutil/v4 v4.25.5/go.mod h1:PfybzyydfZcN+JMMjkF6Zb8Mq1A/VcogFFg7hj50W9c= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=