From 1b788e70f80762b22ef0f0d7137c127d80620326 Mon Sep 17 00:00:00 2001 From: Amolith Date: Sat, 27 Sep 2025 13:12:01 -0600 Subject: [PATCH] chore: resolve exhauststruct errors Co-Authored-By: Crush --- cmd/willow.go | 16 ++++++++++++++-- db/migrations.go | 16 +++++++++++++--- git/git.go | 43 ++++++++++++++++++++++++++++++++++++------- project/project.go | 44 ++++++++++++++++++++++++-------------------- ws/ws.go | 28 ++++++++++++++++++---------- 5 files changed, 105 insertions(+), 42 deletions(-) diff --git a/cmd/willow.go b/cmd/willow.go index cf75e540f571dda6e65314db52614dd4f4c72ef0..01c432e81a1240381985c464baf2e906fb4238f0 100644 --- a/cmd/willow.go +++ b/cmd/willow.go @@ -122,8 +122,20 @@ func main() { mux.HandleFunc("/", wsHandler.RootHandler) httpServer := &http.Server{ - Addr: config.Server.Listen, - Handler: mux, + Addr: config.Server.Listen, + Handler: mux, + DisableGeneralOptionsHandler: false, + TLSConfig: nil, + ReadTimeout: 0, + ReadHeaderTimeout: 0, + WriteTimeout: 0, + IdleTimeout: 0, + MaxHeaderBytes: 0, + TLSNextProto: nil, + ConnState: nil, + ErrorLog: nil, + BaseContext: nil, + ConnContext: nil, } fmt.Println("Starting web server on", config.Server.Listen) diff --git a/db/migrations.go b/db/migrations.go index 243fa715b6662eb18bcb575657068f1bcd30575c..a51a94bf44f16b0a594d7370cb2b130210aee509 100644 --- a/db/migrations.go +++ b/db/migrations.go @@ -33,6 +33,7 @@ var migrations = [...]migration{ upQuery: `CREATE TABLE schema_migrations (version uint64, dirty bool); INSERT INTO schema_migrations (version, dirty) VALUES (0, 0);`, downQuery: `DROP TABLE schema_migrations;`, + postHook: nil, }, 1: { upQuery: migration1Up, @@ -42,9 +43,12 @@ var migrations = [...]migration{ 2: { upQuery: migration2Up, downQuery: migration2Down, + postHook: nil, }, 3: { - postHook: correctProjectIDs, + upQuery: "", + downQuery: "", + postHook: correctProjectIDs, }, } @@ -70,7 +74,10 @@ func Migrate(db *sql.DB) error { func runMigration(db *sql.DB, migrationIdx int) (err error) { current := migrations[migrationIdx] - tx, err := db.BeginTx(context.Background(), &sql.TxOptions{}) + tx, err := db.BeginTx(context.Background(), &sql.TxOptions{ + Isolation: 0, + ReadOnly: false, + }) if err != nil { return fmt.Errorf("failed opening transaction for migration %d: %w", migrationIdx, err) } @@ -110,7 +117,10 @@ func runMigration(db *sql.DB, migrationIdx int) (err error) { func undoMigration(db *sql.DB, migrationIdx int) (err error) { current := migrations[migrationIdx] - tx, err := db.BeginTx(context.Background(), &sql.TxOptions{}) + tx, err := db.BeginTx(context.Background(), &sql.TxOptions{ + Isolation: 0, + ReadOnly: false, + }) if err != nil { return fmt.Errorf("failed opening undo transaction for migration %d: %w", migrationIdx, err) } diff --git a/git/git.go b/git/git.go index 9c9ce5a1a54fdb6faa07957766fcdf427ff65fc7..5d56ae26731dd4e20f1e09dd8b2cfbfaeda34da9 100644 --- a/git/git.go +++ b/git/git.go @@ -84,6 +84,7 @@ func GetReleases(gitURI, forge string) ([]Release, error) { } var tagURL string + tagName := bmStrict.Sanitize(tagRef.Name().Short()) switch forge { @@ -121,9 +122,21 @@ func minimalClone(url string) (r *git.Repository, err error) { r, err = git.PlainOpen(path) if err == nil { err = r.Fetch(&git.FetchOptions{ - RemoteName: "origin", - Depth: 1, - Tags: git.AllTags, + RemoteName: "origin", + RemoteURL: "", + RefSpecs: nil, + Depth: 1, + Auth: nil, + Progress: nil, + Tags: git.AllTags, + Force: false, + InsecureSkipTLS: false, + CABundle: nil, + ProxyOptions: transport.ProxyOptions{ + URL: "", + Username: "", + Password: "", + }, }) if errors.Is(err, git.NoErrAlreadyUpToDate) { return r, nil @@ -135,10 +148,26 @@ func minimalClone(url string) (r *git.Repository, err error) { } r, err = git.PlainClone(path, false, &git.CloneOptions{ - URL: url, - SingleBranch: true, - NoCheckout: true, - Depth: 1, + URL: url, + Auth: nil, + RemoteName: "", + ReferenceName: "", + SingleBranch: true, + NoCheckout: true, + Depth: 1, + RecurseSubmodules: 0, + Progress: nil, + Tags: 0, + InsecureSkipTLS: false, + CABundle: nil, + ProxyOptions: transport.ProxyOptions{ + URL: "", + Username: "", + Password: "", + }, + Mirror: false, + ShallowSubmodules: false, + Shared: false, }) return r, err diff --git a/project/project.go b/project/project.go index 4aa2704eb134b2777010d50e47acf9b9bd8de6da..f8b21c7deb8d1417d4fb4c26c841340264ecb383 100644 --- a/project/project.go +++ b/project/project.go @@ -82,11 +82,12 @@ func fetchReleases(dbConn *sql.DB, mu *sync.Mutex, p Project) (Project, error) { for _, release := range rssReleases { p.Releases = append(p.Releases, Release{ - ID: GenReleaseID(p.URL, release.URL, release.Tag), - Tag: release.Tag, - Content: release.Content, - URL: release.URL, - Date: release.Date, + ID: GenReleaseID(p.URL, release.URL, release.Tag), + ProjectID: p.ID, + Tag: release.Tag, + Content: release.Content, + URL: release.URL, + Date: release.Date, }) err = upsertReleases(dbConn, mu, p.ID, p.Releases) @@ -103,11 +104,12 @@ func fetchReleases(dbConn *sql.DB, mu *sync.Mutex, p Project) (Project, error) { for _, release := range gitReleases { p.Releases = append(p.Releases, Release{ - ID: GenReleaseID(p.URL, release.URL, release.Tag), - Tag: release.Tag, - Content: release.Content, - URL: release.URL, - Date: release.Date, + ID: GenReleaseID(p.URL, release.URL, release.Tag), + ProjectID: p.ID, + Tag: release.Tag, + Content: release.Content, + URL: release.URL, + Date: release.Date, }) err = upsertReleases(dbConn, mu, p.ID, p.Releases) @@ -259,11 +261,12 @@ func GetProject(dbConn *sql.DB, proj Project) (Project, error) { } p := Project{ - ID: proj.ID, - URL: proj.URL, - Name: proj.Name, - Forge: proj.Forge, - Running: projectDB["version"], + ID: proj.ID, + URL: proj.URL, + Name: proj.Name, + Forge: proj.Forge, + Running: projectDB["version"], + Releases: nil, } return p, err @@ -289,11 +292,12 @@ func GetProjects(dbConn *sql.DB) ([]Project, error) { projects := make([]Project, len(projectsDB)) for i, p := range projectsDB { projects[i] = Project{ - ID: p["id"], - URL: p["url"], - Name: p["name"], - Forge: p["forge"], - Running: p["version"], + ID: p["id"], + URL: p["url"], + Name: p["name"], + Forge: p["forge"], + Running: p["version"], + Releases: nil, } } diff --git a/ws/ws.go b/ws/ws.go index 22e695ce37c2cfc000afc31ff24be832d34c58ef..bf793e44a5fafc8b6d28d2874b5ca508d54ad98b 100644 --- a/ws/ws.go +++ b/ws/ws.go @@ -127,10 +127,12 @@ func (h Handler) NewHandler(w http.ResponseWriter, r *http.Request) { } proj := project.Project{ - ID: project.GenProjectID(submittedURL, name, forge), - URL: submittedURL, - Name: name, - Forge: forge, + ID: project.GenProjectID(submittedURL, name, forge), + URL: submittedURL, + Name: name, + Forge: forge, + Running: "", + Releases: nil, } proj, err := project.GetProject(h.DbConn, proj) @@ -299,12 +301,18 @@ func (h Handler) LoginHandler(w http.ResponseWriter, r *http.Request) { maxAge := int(time.Until(expiry)) cookie := http.Cookie{ - Name: "id", - Value: session, - MaxAge: maxAge, - HttpOnly: true, - SameSite: http.SameSiteStrictMode, - Secure: true, + Name: "id", + Value: session, + Path: "", + Domain: "", + Expires: time.Time{}, + RawExpires: "", + MaxAge: maxAge, + Secure: true, + HttpOnly: true, + SameSite: http.SameSiteStrictMode, + Raw: "", + Unparsed: nil, } http.SetCookie(w, &cookie)