-
-
Notifications
You must be signed in to change notification settings - Fork 207
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
126 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
name: Feature Request Sponsor Check | ||
|
||
on: | ||
issues: | ||
types: [opened] | ||
workflow_dispatch: | ||
inputs: | ||
test_username: | ||
description: "Test username to check sponsorship for" | ||
required: true | ||
default: "octocat" | ||
test_title: | ||
description: "Test issue title" | ||
required: true | ||
default: "[FEAT] Test Feature Request" | ||
test_sponsor_platform: | ||
description: "Selected sponsor platform" | ||
required: true | ||
type: choice | ||
options: | ||
- "GitHub Sponsors" | ||
- "Ko-fi" | ||
- "Discord" | ||
- "YouTube" | ||
|
||
jobs: | ||
check-sponsor: | ||
runs-on: ubuntu-latest | ||
if: | | ||
(github.event_name == 'workflow_dispatch') || (github.event_name == 'issues' && | ||
startsWith(github.event.issue.title, '[FEAT]') && | ||
github.event.issue.user.login != 'LGUG2Z' && | ||
fromJSON(github.event.issue.body).Sponsors == 'GitHub Sponsors') | ||
steps: | ||
- name: Get Issue Details | ||
id: issue-details | ||
run: | | ||
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then | ||
echo "username=${{ github.event.inputs.test_username }}" >> $GITHUB_OUTPUT | ||
echo "title=${{ github.event.inputs.test_title }}" >> $GITHUB_OUTPUT | ||
echo "sponsor_platform=${{ github.event.inputs.test_sponsor_platform }}" >> $GITHUB_OUTPUT | ||
else | ||
echo "username=${{ github.event.issue.user.login }}" >> $GITHUB_OUTPUT | ||
echo "title=${{ github.event.issue.title }}" >> $GITHUB_OUTPUT | ||
echo "sponsor_platform=$(jq -r '.Sponsors' <<< '${{ github.event.issue.body }}')" >> $GITHUB_OUTPUT | ||
fi | ||
- name: Get Sponsorship Status | ||
id: sponsorship | ||
uses: actions/github-script@v7 | ||
with: | ||
github-token: ${{ secrets.PAT }} | ||
script: | | ||
const username = '${{ steps.issue-details.outputs.username }}'; | ||
const sponsorPlatform = '${{ steps.issue-details.outputs.sponsor_platform }}'; | ||
if (sponsorPlatform !== 'GitHub Sponsors') { | ||
console.log('Sponsor platform is not GitHub Sponsors, skipping check'); | ||
return true; | ||
} | ||
const sponsorshipQuery = `query($user: String!) { | ||
user(login: $user) { | ||
... on Sponsorable { | ||
sponsorshipForViewerAsSponsorable { | ||
tier { | ||
name | ||
monthlyPriceInDollars | ||
} | ||
} | ||
} | ||
} | ||
}`; | ||
try { | ||
const result = await github.graphql(sponsorshipQuery, { | ||
user: username | ||
}); | ||
console.log(result); | ||
const sponsorship = result.user.sponsorshipForViewerAsSponsorable; | ||
console.log(sponsorship); | ||
const amount = sponsorship?.tier?.monthlyPriceInDollars || 0; | ||
console.log(`Sponsorship amount for ${username}: $${amount}/month`); | ||
return amount >= 5; | ||
} catch (error) { | ||
console.log(`Error checking sponsorship: ${error.message}`); | ||
return false; | ||
} | ||
- name: Print Test Results | ||
if: github.event_name == 'workflow_dispatch' | ||
run: | | ||
echo "Test Results for ${{ steps.issue-details.outputs.username }}:" | ||
echo "Title: ${{ steps.issue-details.outputs.title }}" | ||
echo "Platform: ${{ steps.issue-details.outputs.sponsor_platform }}" | ||
echo "Would close issue: ${{ steps.sponsorship.outputs.result == 'false' }}" | ||
- name: Close Issue If Not Sponsor | ||
if: | | ||
github.event_name == 'issues' && | ||
steps.sponsorship.outputs.result == 'false' | ||
uses: actions/github-script@v7 | ||
with: | ||
github-token: ${{ secrets.GITHUB_TOKEN }} | ||
script: | | ||
const issueNumber = context.issue.number; | ||
const owner = context.repo.owner; | ||
const repo = context.repo.repo; | ||
await github.rest.issues.createComment({ | ||
owner, | ||
repo, | ||
issue_number: issueNumber, | ||
body: 'Thank you for your feature request! This repository requires a GitHub sponsorship of at least $5/month to submit feature requests. Please consider becoming a sponsor at https://github.com/sponsors/LGUG2Z' | ||
}); | ||
await github.rest.issues.update({ | ||
owner, | ||
repo, | ||
issue_number: issueNumber, | ||
state: 'closed' | ||
}); |