diff --git a/script/reviewer.go b/script/reviewer.go index 5f088154..a47a1ebc 100644 --- a/script/reviewer.go +++ b/script/reviewer.go @@ -8,8 +8,7 @@ import ( type Status int const ( - Closed Status = iota - Approved + Approved Status = iota Reviewing Invalid New @@ -31,14 +30,14 @@ func (r *Reviewer) Review() { r.application.Parse(r.gitHub.Issue) status := r.getStatus() - r.updateLabels(status) - r.createComment(status) + isClosed := *r.gitHub.Issue.State == "closed" + + r.updateLabels(status, isClosed) + r.createComment(status, isClosed) } func (r *Reviewer) getStatus() Status { - if *r.gitHub.Issue.State == "closed" { - return Closed - } else if r.gitHub.IssueHasLabel(LabelStatusApproved) { + if r.gitHub.IssueHasLabel(LabelStatusApproved) { return Approved } else if r.gitHub.IssueHasLabel(LabelStatusReviewing) { return Reviewing @@ -49,35 +48,46 @@ func (r *Reviewer) getStatus() Status { } } -func (r *Reviewer) createComment(status Status) { +func (r *Reviewer) createComment(status Status, isClosed bool) { title := "" body := "" - details := fmt.Sprintf("
\nApplication data...\n\n```json\n%s\n```\n
", r.application.GetData()) - // TODO: replace FILE_NAME with Application.FileName once available - dataPath := fmt.Sprintf("https://github.com/1Password/1password-teams-open-source/blob/main/data/%s", "FILE_NAME") - if status == Closed { - body = "This application is closed and changes will not be reviewed. If you have any questions, contact us at [opensource@1password.com](mailto:opensource@1password.com)." + applicationData := fmt.Sprintf("
\nApplication data...\n\n```json\n%s\n```\n
", r.application.GetData()) + applicationFilePath := fmt.Sprintf("https://github.com/1Password/1password-teams-open-source/blob/main/data/%s", r.application.FileName()) + approvedBody := fmt.Sprintf("This application has already been approved and changes will not be reviewed. If you would like to modify the details of your application, submit a pull request against the stored [application data](%s). If you have any questions, contact us at [opensource@1password.com](mailto:opensource@1password.com).", applicationFilePath) + closedBody := "This application is closed and changes will not be reviewed. If you have any questions, contact us at [opensource@1password.com](mailto:opensource@1password.com)." + + // If the issue is closed, let the user know that they can't make changes. + // If the issue was closed because it got approved, let them know how they can + // modify their application details after the fact. + if isClosed { + if status == Approved { + body = approvedBody + } else { + body = closedBody + } + // This scanerio should never occur, as an approved issue should + // immediately be closed, but let's cover all bases. } else if status == Approved { - body = fmt.Sprintf("This application has already been approved and changes will not be reviewed. If you would like to modify the details of your application, submit a pull request against the stored [application data](%s). If you have any questions, contact us at [opensource@1password.com](mailto:opensource@1password.com).", dataPath) + body = approvedBody } else if r.application.IsValid() { if status == Reviewing { title = "### 👍 Application still valid" - body = fmt.Sprintf("\n\n%s\n\nWe’ve run our automated pre-checks and your updated application is still valid.", details) + body = fmt.Sprintf("\n\n%s\n\nWe’ve run our automated pre-checks and your updated application is still valid.", applicationData) } else { title = "### ✅ Your application is valid" - body = fmt.Sprintf("\n\n%s\n\nThanks for applying! Our automated pre-checks have determined your application is valid. Next step: our team will review your application and may have follow-up questions. You can still make changes to your application and it’ll be re-evaluated.", details) + body = fmt.Sprintf("\n\n%s\n\nThanks for applying! Our automated pre-checks have determined your application is valid. Next step: our team will review your application and may have follow-up questions. You can still make changes to your application and it’ll be re-evaluated.", applicationData) } } else { title = "### ❌ Your application is invalid" - body = fmt.Sprintf("\n\n%s\n\nOur automated pre-checks have detected the following problems:\n\n%s\n\nUpdate this issue to correct these problems and we’ll automatically re-evaluate your application.", details, r.application.RenderProblems()) + body = fmt.Sprintf("\n\n%s\n\nOur automated pre-checks have detected the following problems:\n\n%s\n\nUpdate this issue to correct these problems and we’ll automatically re-evaluate your application.", applicationData, r.application.RenderProblems()) } r.gitHub.CreateIssueComment(fmt.Sprintf("%s%s", title, body)) } -func (r *Reviewer) updateLabels(status Status) { - if status == Approved || status == Closed { +func (r *Reviewer) updateLabels(status Status, isClosed bool) { + if status == Approved || isClosed { return } diff --git a/script/test-issues/valid-project-approved-closed.json b/script/test-issues/valid-project-approved-closed.json new file mode 100644 index 00000000..e8af7923 --- /dev/null +++ b/script/test-issues/valid-project-approved-closed.json @@ -0,0 +1,60 @@ +{ + "id": 1801650328, + "number": 6, + "state": "closed", + "locked": false, + "title": "Application for TestDB", + "body": "### Account URL\n\ntestdb.1password.com\n\n### Non-commercial confirmation\n\n- [X] No, this account won't be used for commercial activity\n\n### Team application\n\n- [ ] Yes, this application is for a team\n\n### Event application\n\n- [ ] Yes, this application is for an event\n\n### Project name\n\nTestDB\n\n### Short description\n\nTestDB is a free and open source, community-based forum software project.\n\n### Number of team members/core contributors\n\n1\n\n### Homepage URL\n\nhttps://github.com/wendyappleed/test-db\n\n### Repository URL\n\nhttps://github.com/wendyappleed/test-db\n\n### License type\n\nMIT\n\n### License URL\n\nhttps://github.com/wendyappleed/test-db/blob/main/LICENSE.md\n\n### Age confirmation\n\n- [X] Yes, this project is at least 30 days old\n\n### Name\n\nWendy Appleseed\n\n### Email\n\nwendyappleseed@example.com\n\n### Project role\n\nCore Maintainer\n\n### Profile or website\n\nhttps://github.com/wendyappleseed/\n\n### Can we contact you?\n\n- [X] Yes, you may contact me\n\n### Additional comments\n\nThank you!", + "user": { + "login": "wendyappleseed", + "id": 38230737, + "node_id": "MDQ6VXNlcjYzOTIwNDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/38230737?v=4", + "html_url": "https://github.com/wendyappleseed", + "gravatar_id": "", + "type": "User", + "site_admin": false, + "url": "https://api.github.com/users/wendyappleseed", + "events_url": "https://api.github.com/users/wendyappleseed/events{/privacy}", + "following_url": "https://api.github.com/users/wendyappleseed/following{/other_user}", + "followers_url": "https://api.github.com/users/wendyappleseed/followers", + "gists_url": "https://api.github.com/users/wendyappleseed/gists{/gist_id}", + "organizations_url": "https://api.github.com/users/wendyappleseed/orgs", + "received_events_url": "https://api.github.com/users/wendyappleseed/received_events", + "repos_url": "https://api.github.com/users/wendyappleseed/repos", + "starred_url": "https://api.github.com/users/wendyappleseed/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wendyappleseed/subscriptions" + }, + "labels": [ + { + "id": 5728067083, + "url": "https://api.github.com/repos/1Password/1password-teams-open-source/labels/status:%20approved", + "name": "status: approved", + "color": "0052CC", + "description": "The application has been approved", + "default": false, + "node_id": "LA_kwDOJ6JE6M8AAAABVWteCw" + } + ], + "comments": 11, + "closed_at": "2023-07-13T05:03:51Z", + "created_at": "2023-07-12T19:49:35Z", + "updated_at": "2023-07-13T05:03:51Z", + "url": "https://api.github.com/repos/1Password/1password-teams-open-source/issues/6", + "html_url": "https://github.com/wendyappleseed/1password-teams-open-source/issues/6", + "comments_url": "https://api.github.com/repos/1Password/1password-teams-open-source/issues/6/comments", + "events_url": "https://api.github.com/repos/1Password/1password-teams-open-source/issues/6/events", + "labels_url": "https://api.github.com/repos/1Password/1password-teams-open-source/issues/6/labels{/name}", + "repository_url": "https://api.github.com/repos/1Password/1password-teams-open-source", + "reactions": { + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "confused": 0, + "heart": 0, + "hooray": 0, + "url": "https://api.github.com/repos/1Password/1password-teams-open-source/issues/6/reactions" + }, + "node_id": "I_kwDOJ6JE6M5rYwCY" +}