Skip to content
This repository has been archived by the owner on Dec 12, 2024. It is now read-only.

Automating adding Hacktoberfest labels #136

Merged
merged 2 commits into from
Oct 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
<!--
For Work In Progress Pull Requests, please use the Draft PR feature,
see https://github.blog/2019-02-14-introducing-draft-pull-requests/ for further details.

For a timely review/response, please avoid force-pushing additional
commits if your PR already received reviews or comments.

Before submitting a Pull Request, please ensure you've done the following:
- 📖 Read the TBD Developer Website Contributing Guide: https://github.com/TBD54566975/developer.tbd.website/blob/main/CONTRIBUTING.md.
- 📖 Read the TBD Developer Website Code of Conduct: https://github.com/TBD54566975/developer.tbd.website/blob/main/CODE_OF_CONDUCT.md.
- 👷‍♀️ Create small PRs. In most cases, this will be possible.
- ✅ Provide tests for your changes.
- 📝 Use descriptive commit messages.
- 📗 Update any related documentation and include any relevant screenshots.
-->

## What type of PR is this? (check all applicable)

- [ ] ♻️ Refactor
- [ ] ✨ New Feature
- [ ] 🐛 Bug Fix
- [ ] 📝 Documentation Update
- [ ] 👷 Example Application
- [ ] 🧑‍💻 Code Snippet
- [ ] 🎨 Design
- [ ] 📖 Content
- [ ] 🧪 Tests
- [ ] 🔖 Release
- [ ] 🚩 Other

## Description

<!-- Please do not leave this blank -->

This PR [adds/removes/fixes/replaces] this [feature/bug/etc].

## Related Tickets & Documents
<!--
Please use this format link issue numbers: Resolves #123
https://docs.github.com/en/free-pro-team@latest/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword
-->
Resolves #

## Mobile & Desktop Screenshots/Recordings

<!-- Visual changes require screenshots -->

## Added code snippets?
- [ ] 👍 yes
- [ ] 🙅 no, because they aren't needed

## Added tests?

- [ ] 👍 yes
- [ ] 🙅 no, because they aren't needed
- [ ] 🙋 no, because I need help

### No tests? Add a note
<!--
If you didn't provide tests with this PR, please explain here why they aren't needed.
-->

## Added to documentation?

- [ ] 📜 readme
- [ ] 📜 contributing.md
- [ ] 📓 general documentation
- [ ] 🙅 no documentation needed

### No docs? Add a note
<!--
If you didn't provide documentation with this PR, please explain here why it's not needed.
-->

## [optional] Are there any post-deployment tasks we need to perform?



## [optional] What gif best describes this PR or how it makes you feel?



<!-- note: PRs with deletes sections will be marked invalid -->

79 changes: 79 additions & 0 deletions .github/workflows/add-hacktoberfest-labels.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: Propagate Issue Labels to PR
on:
pull_request:
types: [opened, synchronize]
jobs:
copy_labels:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get issue number from PR body
id: issue_number
uses: actions/github-script@v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const prBody = context.payload.pull_request.body || '';
// Remove HTML comments
const bodyWithoutComments = prBody.replace(/<!--[\s\S]*?-->/g, '');
// Find issue number
const match = bodyWithoutComments.match(/(?:Resolves|Closes) #(\d+)/);
const issueNumber = match ? match[1] : null;
if (issueNumber) {
console.log(`Issue number found: ${issueNumber}`);
core.setOutput('has_issue', 'true');
core.setOutput('issue_number', issueNumber);
} else {
console.log('No issue number found in PR body');
core.setOutput('has_issue', 'false');
}
- name: Get labels from linked issue
if: steps.issue_number.outputs.has_issue == 'true'
uses: actions/github-script@v6
id: issue_labels
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const issue_number = ${{ steps.issue_number.outputs.issue_number }};
try {
const issue = await github.rest.issues.get({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: parseInt(issue_number)
});
return issue.data.labels.map(label => label.name);
} catch (error) {
console.log(`Error fetching issue labels: ${error}`);
return [];
}
- name: Check for required labels
if: steps.issue_number.outputs.has_issue == 'true' && steps.issue_labels.outputs.result != '[]'
id: check_labels
uses: actions/github-script@v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const labels = ${{ steps.issue_labels.outputs.result }};
const hacktoberfestLabel = labels.some(label => label.toLowerCase().includes('hacktoberfest'));
const sizeLabelPresent = labels.some(label => ['small', 'medium', 'large'].includes(label.toLowerCase()));
return hacktoberfestLabel || sizeLabelPresent;
- name: Add labels to PR
if: steps.issue_number.outputs.has_issue == 'true' && steps.check_labels.outputs.result == 'true'
uses: actions/github-script@v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const pr_number = context.issue.number;
const labels = ${{ steps.issue_labels.outputs.result }};
try {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr_number,
labels: labels
});
console.log('Labels added successfully');
} catch (error) {
console.log(`Error adding labels: ${error}`);
}
Loading