chore: resolve exhauststruct errors

Amolith and Crush created

Co-Authored-By: Crush <crush@charm.land>

Change summary

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(-)

Detailed changes

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)

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)
 	}

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

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,
 		}
 	}
 

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)