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"
+}