GitHub Action
Sponsor Gated Support
A GitHub Action designed to help project owners and contributors manage support requests (often referred to as "support tickets") in a way that it will encourage sponsorship and recognize valuable work.
In simple terms, this helps limit users who have sponsored the project author, appears as a contributor, or listed via an "exempt file" to be able to open issues.
Originally, this workflow was not designed in mind to include bug reports and feature requests (in my opinion, those requests should be freely accessible), however, this action is configurable to the specific issue labels that you would like.
To use this action, here are three simple steps you need to follow:
- Add the action to your repository.
- Configure secrets and environment variables.
- Let the workflow automate issues!
To create a workflow, simply copy and paste the block of text below to a file named sponsor-gated-support.yml
and place it under the /.github/workflows
directory.
Once you have done so, configure the variables by following the Workflow Variables section.
name: "Sponsor Gated Support"
run-name: "Running a task to analyze support issues"
on:
issue_comment:
types:
- "created"
- "edited"
issues:
types:
- "opened"
- "closed"
permissions:
issues: "write"
jobs:
check-issues:
runs-on: "ubuntu-latest"
steps:
- name: "Checkout repository"
uses: "actions/checkout@v4"
- name: "Show current workflow directory"
run: "ls -la"
- name: "Check support issues"
uses: "mrjackyliang/[email protected]"
with:
GITHUB_PERSONAL_ACCESS_TOKEN: "${{ secrets.PERSONAL_ACCESS_TOKEN }}"
GITHUB_WORKFLOW_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
ISSUE_LABELS: "${{ vars.ISSUE_LABELS }}"
ISSUE_LIMIT_COMMENTER: "${{ vars.ISSUE_LIMIT_COMMENTER }}"
ISSUE_LOCK_ON_CLOSE: "${{ vars.ISSUE_LOCK_ON_CLOSE }}"
ISSUE_MESSAGE_NOT_SPONSOR: "${{ vars.ISSUE_MESSAGE_NOT_SPONSOR }}"
ISSUE_MESSAGE_WELCOME: "${{ vars.ISSUE_MESSAGE_WELCOME }}"
IS_ORGANIZATION: "${{ vars.IS_ORGANIZATION }}"
SPONSOR_ACTIVE_ONLY: "${{ vars.SPONSOR_ACTIVE_ONLY }}"
SPONSOR_EXEMPT_FILE_LOCATION: "${{ vars.SPONSOR_EXEMPT_FILE_LOCATION }}"
SPONSOR_MINIMUM: "${{ vars.SPONSOR_MINIMUM }}"
Here is a list of all the variables used in the action. It is highly recommended that you set all available variables and not resort to the default values. Personalization is key!
You may add variables to your repository via Settings tab > Security section > Secrets and variables dropdown > Actions item.
Inputs | Workflow Variable | Description | Required | Accepts | Default |
---|---|---|---|---|---|
GITHUB_PERSONAL_ACCESS_TOKEN |
secrets.PERSONAL_ACCESS_TOKEN |
Personal access token from GitHub used to fetch your sponsors | true |
Token manually generated via the the Personal Access Tokens (Classic) page | |
GITHUB_WORKFLOW_TOKEN |
secrets.GITHUB_TOKEN |
Workflow token from GitHub used to perform issue and issue comment moderation | true |
Token automatically generated on each workflow run | |
ISSUE_LABELS |
vars.ISSUE_LABELS |
Only set limits on issues with these labels (comma de-limited list) | false |
Comma-delimited list of issue label names. For example, support or support,amazing support |
support |
ISSUE_LIMIT_COMMENTER |
vars.ISSUE_LIMIT_COMMENTER |
Allow only the sponsoring user (that opened the issue) and contributor to comment on issues | false |
true or false |
true |
ISSUE_LOCK_ON_CLOSE |
vars.ISSUE_LOCK_ON_CLOSE |
Lock issues as soon as they become closed | false |
true or false |
true |
ISSUE_MESSAGE_NOT_SPONSOR |
vars.ISSUE_MESSAGE_NOT_SPONSOR |
Message to send when a non-sponsoring user opens an issue | false |
A message for non-sponsors to sponsor you. | Apologies! Only sponsoring users are allowed to open issues. Please sponsor the owner of this repository, then try again. |
ISSUE_MESSAGE_WELCOME |
vars.ISSUE_MESSAGE_WELCOME |
Message to send when a sponsoring user opens an issue | false |
A message for sponsors to thank them for sponsoring you. | Thank you for your support! We appreciate your sponsorship and are here to help. We will review your issue and get back to you as soon as possible. |
IS_ORGANIZATION |
vars.IS_ORGANIZATION |
If this workflow is being used on an organization-owned repository | false |
true or false |
false |
SPONSOR_ACTIVE_ONLY |
vars.SPONSOR_ACTIVE_ONLY |
Allow only active sponsoring users to open issues | false |
true or false |
true |
SPONSOR_EXEMPT_FILE_LOCATION |
vars.SPONSOR_EXEMPT_FILE_LOCATION |
A list of users that are exempt from sponsorship requirement | false |
File path based on root (not workflow) project directory. For example, ./SPONSOR_EXEMPT |
./SPONSOR_EXEMPT |
SPONSOR_MINIMUM |
vars.SPONSOR_MINIMUM |
Allow only sponsoring users that reach this minimum amount (in cents) to open issues | false |
A number displayed in cents. For example, $0.50 would be 50 and $10.00 would be 1000 |
0 |
Note: When you set your variables, please make sure to set the tokens under the Secrets tab and all other related settings in the Variables tab to ensure your secrets will not be accidentally exposed.
Unlike the automated token (secrets.GITHUB_TOKEN
) that is randomly generated when a workflow is launched, a Personal Access Token (PAT) allows the action to retrieve active GitHub sponsors from your account.
- Login to GitHub, and visit the Personal Access Tokens (Classic) page.
- Click on the "Generate new token" dropdown, and select "Generate new token (classic)".
- On the "Note" field, type in "GitHub Action - Sponsor Gated Support".
- On the "Expiration" field, set it to "No expiration".
- On the "Select scopes" section, select "read:org" and "read:user" permissions.
- Select the "Generate token" button.
- Copy the token (starts with
ghp_
) and save it somewhere secure. - Use this token in the
GITHUB_PERSONAL_ACCESS_TOKEN
workflow variable.
Note: This token should ONLY be assigned read-only permissions since making changes (e.g. adding or deleting comments) using this token will make it appear like you, and not the "github-actions" bot.
Note 2: If you are planning to use this action on an organization-owned repository, please make sure to set the "Allow access via personal access tokens (classic)" setting in the organization Settings tab > Third-party access section > Personal access tokens dropdown > Settings item.
If you find value in the ongoing development of this GitHub action and wish to express your appreciation, you can become my supporter on GitHub Sponsors!