Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add GitHub webhook for auto-labeling of sponsor issues #299

Merged
merged 1 commit into from
Aug 14, 2024
Merged

Conversation

kzu
Copy link
Member

@kzu kzu commented Aug 14, 2024

Auto-labeling works by configuring a webhook (at repo or organization level). The optional GitHub:Secret configration can be used to secure the webhook callback, but it's not required (although recommended). The endpoint is github/webhooks and should be set to receive application/json content type.

Currently, the webhook callback only processes sponsorship changes (to refresh the cached list of sponsors), issues and issue comments. Issue actions result in auto-labeling.

Labels for sponsors of certain tiers can be configured via yaml metadata in the tier description, like:

☕ You want to buy me a Nespresso capsule, and everyone should be allowed to do that 🤗
<!--
tier: basic
label: sponsor 💜
color: #D4C5F9
-->

Tiers inherit metadata from lower tiers so you don't have to repeat them.

Also optionally introduce pushover-based notifications (for issue and issue comment actions), if the following secrets are configured:

  • PushOver:Token: the API key/token
  • PushOver:Key: the user or delivery group key

See https://pushover.net/api for more info on that.

@kzu kzu added the enhancement New feature or request label Aug 14, 2024
@devlooped-bot
Copy link
Member

devlooped-bot commented Aug 14, 2024

40 passed 40 passed 1 skipped
40 passed 40 passed 1 skipped
40 passed 40 passed 1 skipped

🧪 Details on macOS Unix 14.6.1

✅ Devlooped.Tests.SponsorLinkTests.TryRead
❔ Devlooped.Tests.SponsorLinkTests.ValidateCachedManifest => Non-CI test
✅ Devlooped.Tests.SponsorLinkTests.ValidateExpiredSponsor
✅ Devlooped.Tests.SponsorLinkTests.ValidateSponsorable
✅ Devlooped.Tests.SponsorLinkTests.ValidateUnknownFormat
✅ Devlooped.Tests.SponsorLinkTests.ValidateWrongKey
✅ Tests.AnalyzerTests.WhenAnalyzerNotDirectlyReferenced_ThenDoesNotReport
✅ Tests.AnalyzerTests.WhenMultipleAnalyzers_ThenReportsOnce
✅ Tests.AnalyzerTests.WhenNoAdditionalFiles_ThenReportsUnknown
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "contrib,team", status: Team)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "contrib", status: Contributor)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "org,contrib", status: Contributor)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "org", status: Organization)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "team", status: Team)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "user,contrib,team", status: Team)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "user,org,contrib", status: User)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "user", status: User)
✅ Tests.AnalyzerTests.WhenUnknownAndGrace_ThenDoesNotReport
✅ Tests.AnalyzerTests.WhenUnknownAndGraceExpired_ThenReportsUnknown
✅ Tests.AnalyzerTests.WhenUnknownAndNoGraceOption_ThenReportsUnknown
✅ Tests.Sample.RenderSponsorables
✅ Tests.Sample.Test(culture: "", kind: Contributor)
✅ Tests.Sample.Test(culture: "", kind: Expired)
✅ Tests.Sample.Test(culture: "", kind: Expiring)
✅ Tests.Sample.Test(culture: "", kind: Unknown)
✅ Tests.Sample.Test(culture: "", kind: User)
✅ Tests.Sample.Test(culture: "en", kind: Contributor)
✅ Tests.Sample.Test(culture: "en", kind: Expired)
✅ Tests.Sample.Test(culture: "en", kind: Expiring)
✅ Tests.Sample.Test(culture: "en", kind: Unknown)
✅ Tests.Sample.Test(culture: "en", kind: User)
✅ Tests.Sample.Test(culture: "es-AR", kind: Contributor)
✅ Tests.Sample.Test(culture: "es-AR", kind: Expired)
✅ Tests.Sample.Test(culture: "es-AR", kind: Expiring)
✅ Tests.Sample.Test(culture: "es-AR", kind: Unknown)
✅ Tests.Sample.Test(culture: "es-AR", kind: User)
✅ Tests.Sample.Test(culture: "es", kind: Contributor)
✅ Tests.Sample.Test(culture: "es", kind: Expired)
✅ Tests.Sample.Test(culture: "es", kind: Expiring)
✅ Tests.Sample.Test(culture: "es", kind: Unknown)
✅ Tests.Sample.Test(culture: "es", kind: User)

🧪 Details on Ubuntu 22.04.4 LTS

✅ Devlooped.Tests.SponsorLinkTests.TryRead
❔ Devlooped.Tests.SponsorLinkTests.ValidateCachedManifest => Non-CI test
✅ Devlooped.Tests.SponsorLinkTests.ValidateExpiredSponsor
✅ Devlooped.Tests.SponsorLinkTests.ValidateSponsorable
✅ Devlooped.Tests.SponsorLinkTests.ValidateUnknownFormat
✅ Devlooped.Tests.SponsorLinkTests.ValidateWrongKey
✅ Tests.AnalyzerTests.WhenAnalyzerNotDirectlyReferenced_ThenDoesNotReport
✅ Tests.AnalyzerTests.WhenMultipleAnalyzers_ThenReportsOnce
✅ Tests.AnalyzerTests.WhenNoAdditionalFiles_ThenReportsUnknown
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "contrib,team", status: Team)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "contrib", status: Contributor)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "org,contrib", status: Contributor)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "org", status: Organization)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "team", status: Team)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "user,contrib,team", status: Team)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "user,org,contrib", status: User)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "user", status: User)
✅ Tests.AnalyzerTests.WhenUnknownAndGrace_ThenDoesNotReport
✅ Tests.AnalyzerTests.WhenUnknownAndGraceExpired_ThenReportsUnknown
✅ Tests.AnalyzerTests.WhenUnknownAndNoGraceOption_ThenReportsUnknown
✅ Tests.Sample.RenderSponsorables
✅ Tests.Sample.Test(culture: "", kind: Contributor)
✅ Tests.Sample.Test(culture: "", kind: Expired)
✅ Tests.Sample.Test(culture: "", kind: Expiring)
✅ Tests.Sample.Test(culture: "", kind: Unknown)
✅ Tests.Sample.Test(culture: "", kind: User)
✅ Tests.Sample.Test(culture: "en", kind: Contributor)
✅ Tests.Sample.Test(culture: "en", kind: Expired)
✅ Tests.Sample.Test(culture: "en", kind: Expiring)
✅ Tests.Sample.Test(culture: "en", kind: Unknown)
✅ Tests.Sample.Test(culture: "en", kind: User)
✅ Tests.Sample.Test(culture: "es-AR", kind: Contributor)
✅ Tests.Sample.Test(culture: "es-AR", kind: Expired)
✅ Tests.Sample.Test(culture: "es-AR", kind: Expiring)
✅ Tests.Sample.Test(culture: "es-AR", kind: Unknown)
✅ Tests.Sample.Test(culture: "es-AR", kind: User)
✅ Tests.Sample.Test(culture: "es", kind: Contributor)
✅ Tests.Sample.Test(culture: "es", kind: Expired)
✅ Tests.Sample.Test(culture: "es", kind: Expiring)
✅ Tests.Sample.Test(culture: "es", kind: Unknown)
✅ Tests.Sample.Test(culture: "es", kind: User)

🧪 Details on Microsoft Windows 10.0.20348

✅ Devlooped.Tests.SponsorLinkTests.TryRead
❔ Devlooped.Tests.SponsorLinkTests.ValidateCachedManifest => Non-CI test
✅ Devlooped.Tests.SponsorLinkTests.ValidateExpiredSponsor
✅ Devlooped.Tests.SponsorLinkTests.ValidateSponsorable
✅ Devlooped.Tests.SponsorLinkTests.ValidateUnknownFormat
✅ Devlooped.Tests.SponsorLinkTests.ValidateWrongKey
✅ Tests.AnalyzerTests.WhenAnalyzerNotDirectlyReferenced_ThenDoesNotReport
✅ Tests.AnalyzerTests.WhenMultipleAnalyzers_ThenReportsOnce
✅ Tests.AnalyzerTests.WhenNoAdditionalFiles_ThenReportsUnknown
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "contrib,team", status: Team)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "contrib", status: Contributor)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "org,contrib", status: Contributor)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "org", status: Organization)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "team", status: Team)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "user,contrib,team", status: Team)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "user,org,contrib", status: User)
✅ Tests.AnalyzerTests.WhenSponsoringRole_ThenEnsureStatus(roles: "user", status: User)
✅ Tests.AnalyzerTests.WhenUnknownAndGrace_ThenDoesNotReport
✅ Tests.AnalyzerTests.WhenUnknownAndGraceExpired_ThenReportsUnknown
✅ Tests.AnalyzerTests.WhenUnknownAndNoGraceOption_ThenReportsUnknown
✅ Tests.Sample.RenderSponsorables
✅ Tests.Sample.Test(culture: "", kind: Contributor)
✅ Tests.Sample.Test(culture: "", kind: Expired)
✅ Tests.Sample.Test(culture: "", kind: Expiring)
✅ Tests.Sample.Test(culture: "", kind: Unknown)
✅ Tests.Sample.Test(culture: "", kind: User)
✅ Tests.Sample.Test(culture: "en", kind: Contributor)
✅ Tests.Sample.Test(culture: "en", kind: Expired)
✅ Tests.Sample.Test(culture: "en", kind: Expiring)
✅ Tests.Sample.Test(culture: "en", kind: Unknown)
✅ Tests.Sample.Test(culture: "en", kind: User)
✅ Tests.Sample.Test(culture: "es-AR", kind: Contributor)
✅ Tests.Sample.Test(culture: "es-AR", kind: Expired)
✅ Tests.Sample.Test(culture: "es-AR", kind: Expiring)
✅ Tests.Sample.Test(culture: "es-AR", kind: Unknown)
✅ Tests.Sample.Test(culture: "es-AR", kind: User)
✅ Tests.Sample.Test(culture: "es", kind: Contributor)
✅ Tests.Sample.Test(culture: "es", kind: Expired)
✅ Tests.Sample.Test(culture: "es", kind: Expiring)
✅ Tests.Sample.Test(culture: "es", kind: Unknown)
✅ Tests.Sample.Test(culture: "es", kind: User)

from dotnet-retest v0.6.1 on .NET 8.0.7 with 💜

Auto-labeling works by configuring a webhook (at repo or organization level). The optional `GitHub:Secret` configration can be used to secure the webhook callback, but it's not required (although recommended). The endpoint is `github/webhooks` and should be set to receive `application/json` content type.

Currently, the webhook callback only processes sponsorship changes (to refresh the cached list of sponsors), issues and issue comments. Issue actions result in auto-labeling.

Labels for sponsors of certain tiers can be configured via yaml metadata in the tier description, like:

```
☕ You want to buy me a Nespresso capsule, and everyone should be allowed to do that 🤗
<!--
tier: basic
label: sponsor 💜
color: #D4C5F9
-->
```

Tiers inherit metadata from lower tiers so you don't have to repeat them.

Also optionally introduce pushover-based notifications (for issue and issue comment actions), if the following secrets are configured:

- `PushOver:Token`: the API key/token
- `PushOver:Key`: the user or delivery group key

See https://pushover.net/api for more info on that.
@kzu kzu enabled auto-merge (rebase) August 14, 2024 22:15
@kzu kzu disabled auto-merge August 14, 2024 22:24
@kzu kzu merged commit 628c2ef into main Aug 14, 2024
15 checks passed
@kzu kzu deleted the dev/webhook branch August 14, 2024 22:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants