From aec90c3e515afeee1ba1901bab2c39d3ba663605 Mon Sep 17 00:00:00 2001 From: Mo Tarbin Date: Mon, 20 Jan 2025 22:15:04 -0500 Subject: [PATCH 1/4] Update GitHub Actions workflow to include testing step before build --- .github/workflows/go-build.yml | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/.github/workflows/go-build.yml b/.github/workflows/go-build.yml index 0f3ab79..421e1c2 100644 --- a/.github/workflows/go-build.yml +++ b/.github/workflows/go-build.yml @@ -1,13 +1,11 @@ -name: Build +name: Test and Build on: - push: - branches: [ "main", "develop" ] pull_request: - branches: [ "main", "develop" ] + branches: [ "main" ] jobs: - build: + test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -15,7 +13,21 @@ jobs: - name: Set up Go uses: actions/setup-go@v4 with: - go-version: '1.23' + go-version: '1.22' + + - name: Run tests + run: go test ./... + + build: + runs-on: ubuntu-latest + needs: test + steps: + - uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: '1.22' - name: Build - run: go build -v ./... + run: go build -v ./... \ No newline at end of file From 009954857cb78b8223effd9322a96bc63c4a3cba Mon Sep 17 00:00:00 2001 From: Mo Tarbin Date: Mon, 20 Jan 2025 22:15:14 -0500 Subject: [PATCH 2/4] Add GolangCI configuration for linting and testing --- .golangci.yaml | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 .golangci.yaml diff --git a/.golangci.yaml b/.golangci.yaml new file mode 100644 index 0000000..4e1b3c7 --- /dev/null +++ b/.golangci.yaml @@ -0,0 +1,48 @@ +run: + timeout: 5m + tests: true + +linters: + enable: + - govet + - errcheck + - staticcheck + - gosimple + - unused + - ineffassign + - unused + - typecheck + - gofmt + - goimports + - gocyclo + - dupl + - misspell + - unconvert + - nakedret + - goconst + - gocritic + +linters-settings: + gofmt: + simplify: true + + gocyclo: + min-complexity: 15 + + dupl: + threshold: 100 + + misspell: + locale: US + +issues: + exclude-use-default: false + max-issues-per-linter: 0 + max-same-issues: 0 + exclude-rules: + - linters: + - errcheck + text: ".*error return value not checked.*" + - linters: + - dupl + text: ".*duplicate of.*" \ No newline at end of file From d648458de19d6232edf1af07c24d58220d443170 Mon Sep 17 00:00:00 2001 From: Mo Tarbin Date: Mon, 20 Jan 2025 22:17:14 -0500 Subject: [PATCH 3/4] Add push trigger to GitHub Actions workflow for main branch --- .github/workflows/go-build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/go-build.yml b/.github/workflows/go-build.yml index 421e1c2..d97cace 100644 --- a/.github/workflows/go-build.yml +++ b/.github/workflows/go-build.yml @@ -3,7 +3,8 @@ name: Test and Build on: pull_request: branches: [ "main" ] - + push: + branches: [ "main" ] jobs: test: runs-on: ubuntu-latest From 922b26818586d409ac63b39df7fd58ca691f8f60 Mon Sep 17 00:00:00 2001 From: mschwerz Date: Thu, 30 Jan 2025 18:40:53 -0500 Subject: [PATCH 4/4] Fixing an issue that prevented notifications from being made due to the wrong ID being used. --- internal/notifier/service/planner.go | 37 +++++++--------------------- 1 file changed, 9 insertions(+), 28 deletions(-) diff --git a/internal/notifier/service/planner.go b/internal/notifier/service/planner.go index a8f8ef6..427862b 100644 --- a/internal/notifier/service/planner.go +++ b/internal/notifier/service/planner.go @@ -30,7 +30,7 @@ func (n *NotificationPlanner) GenerateNotifications(c context.Context, chore *ch circleMembers, err := n.cRepo.GetCircleUsers(c, chore.CircleID) assignees := make([]*cModel.UserCircleDetail, 0) for _, member := range circleMembers { - if member.ID == chore.AssignedTo { + if member.UserID == chore.AssignedTo { assignees = append(assignees, member) } } @@ -71,14 +71,7 @@ func (n *NotificationPlanner) GenerateNotifications(c context.Context, chore *ch } func generateDueNotifications(chore *chModel.Chore, users []*cModel.UserCircleDetail) []*nModel.Notification { - var assignee *cModel.UserCircleDetail notifications := make([]*nModel.Notification, 0) - for _, user := range users { - if user.ID == chore.AssignedTo { - assignee = user - break - } - } for _, user := range users { notification := &nModel.Notification{ ChoreID: chore.ID, @@ -86,9 +79,9 @@ func generateDueNotifications(chore *chModel.Chore, users []*cModel.UserCircleDe ScheduledFor: *chore.NextDueDate, CreatedAt: time.Now().UTC(), TypeID: user.NotificationType, - UserID: user.ID, + UserID: user.UserID, TargetID: user.TargetID, - Text: fmt.Sprintf("📅 Reminder: *%s* is due today and assigned to %s.", chore.Name, assignee.DisplayName), + Text: fmt.Sprintf("📅 Reminder: *%s* is due today and assigned to %s.", chore.Name, user.DisplayName), } if notification.IsValid() { notifications = append(notifications, notification) @@ -99,13 +92,7 @@ func generateDueNotifications(chore *chModel.Chore, users []*cModel.UserCircleDe } func generatePreDueNotifications(chore *chModel.Chore, users []*cModel.UserCircleDetail) []*nModel.Notification { - var assignee *cModel.UserCircleDetail - for _, user := range users { - if user.ID == chore.AssignedTo { - assignee = user - break - } - } + notifications := make([]*nModel.Notification, 0) for _, user := range users { notification := &nModel.Notification{ @@ -114,9 +101,9 @@ func generatePreDueNotifications(chore *chModel.Chore, users []*cModel.UserCircl ScheduledFor: *chore.NextDueDate, CreatedAt: time.Now().UTC().Add(-time.Hour * 3), TypeID: user.NotificationType, - UserID: user.ID, + UserID: user.UserID, TargetID: user.TargetID, - Text: fmt.Sprintf("📢 Heads up! *%s* is due soon (on %s) and assigned to %s.", chore.Name, chore.NextDueDate.Format("January 2nd"), assignee.DisplayName), + Text: fmt.Sprintf("📢 Heads up! *%s* is due soon (on %s) and assigned to %s.", chore.Name, chore.NextDueDate.Format("January 2nd"), user.DisplayName), } if notification.IsValid() { notifications = append(notifications, notification) @@ -128,13 +115,7 @@ func generatePreDueNotifications(chore *chModel.Chore, users []*cModel.UserCircl } func generateOverdueNotifications(chore *chModel.Chore, users []*cModel.UserCircleDetail) []*nModel.Notification { - var assignee *cModel.UserCircleDetail - for _, user := range users { - if user.ID == chore.AssignedTo { - assignee = user - break - } - } + notifications := make([]*nModel.Notification, 0) for _, hours := range []int{24, 48, 72} { scheduleTime := chore.NextDueDate.Add(time.Hour * time.Duration(hours)) @@ -145,9 +126,9 @@ func generateOverdueNotifications(chore *chModel.Chore, users []*cModel.UserCirc ScheduledFor: scheduleTime, CreatedAt: time.Now().UTC(), TypeID: user.NotificationType, - UserID: user.ID, + UserID: user.UserID, TargetID: fmt.Sprint(user.TargetID), - Text: fmt.Sprintf("🚨 *%s* is now %d hours overdue. Please complete it as soon as possible. (Assigned to %s)", chore.Name, hours, assignee.DisplayName), + Text: fmt.Sprintf("🚨 *%s* is now %d hours overdue. Please complete it as soon as possible. (Assigned to %s)", chore.Name, hours, user.DisplayName), } if notification.IsValid() { notifications = append(notifications, notification)