mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-08-24 23:32:19 +10:00
chore(github): organize issue triage (#3325)
This commit is contained in:
@@ -1,68 +1,124 @@
|
|||||||
name: 🐞 Bug Report
|
name: 🐞 Bug Report
|
||||||
|
|
||||||
description: Create a bug report to help improve Reactive Resume
|
description: Report a reproducible problem with Reactive Resume
|
||||||
|
|
||||||
title: "[Bug] <title>"
|
labels: ["bug", "status: needs triage"]
|
||||||
labels: [bug, v5, needs triage]
|
assignees: []
|
||||||
assignees: "AmruthPillai"
|
|
||||||
|
|
||||||
body:
|
body:
|
||||||
- type: checkboxes
|
- type: checkboxes
|
||||||
attributes:
|
attributes:
|
||||||
label: Is there an existing issue for this?
|
label: Existing issue
|
||||||
description: Please search to see if an issue already exists for the bug you encountered.
|
description: Search open and closed issues before submitting a new report.
|
||||||
options:
|
options:
|
||||||
- label: Yes, I have searched the existing issues and none of them match my problem.
|
- label: I searched the existing issues and could not find a matching report.
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
id: variant
|
id: variant
|
||||||
attributes:
|
attributes:
|
||||||
label: Product Variant
|
label: Product variant
|
||||||
description: What variant of Reactive Resume are you using?
|
description: Where does the problem occur?
|
||||||
options:
|
options:
|
||||||
- Cloud (https://rxresu.me)
|
- Cloud
|
||||||
- Self-Hosted
|
- Self-hosted
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
id: version
|
||||||
|
attributes:
|
||||||
|
label: Reactive Resume version
|
||||||
|
description: Find this in Settings or provide the container image tag or commit SHA.
|
||||||
|
placeholder: 5.2.6
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: area
|
||||||
|
attributes:
|
||||||
|
label: Area
|
||||||
|
description: Choose the part of Reactive Resume most closely related to the problem.
|
||||||
|
options:
|
||||||
|
- Resume builder & data
|
||||||
|
- Templates, preview & export
|
||||||
|
- Accounts & sharing
|
||||||
|
- AI & Agent
|
||||||
|
- Language & localization
|
||||||
|
- Self-hosting
|
||||||
|
- API & integrations
|
||||||
|
- Applications & cover letters
|
||||||
|
- Other / unsure
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
id: environment
|
||||||
|
attributes:
|
||||||
|
label: Environment
|
||||||
|
description: Include your operating system and browser. For self-hosted installations, also include the deployment method.
|
||||||
|
placeholder: Firefox 143 on Ubuntu 26.04, deployed with Docker Compose
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
|
id: summary
|
||||||
attributes:
|
attributes:
|
||||||
label: Describe the bug you're experiencing
|
label: Summary
|
||||||
description: A detailed description of what you're experiencing. Please provide as much detail as possible as it will help me diagnose and fix the issue faster.
|
description: Briefly describe the problem and its impact.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: reproduction
|
||||||
|
attributes:
|
||||||
|
label: Steps to reproduce
|
||||||
|
description: Provide the smallest reliable sequence that demonstrates the problem.
|
||||||
|
placeholder: |
|
||||||
|
1. Open ...
|
||||||
|
2. Select ...
|
||||||
|
3. Observe ...
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: expected
|
||||||
|
attributes:
|
||||||
|
label: Expected behavior
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: actual
|
||||||
|
attributes:
|
||||||
|
label: Actual behavior
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
id: template
|
id: template
|
||||||
attributes:
|
attributes:
|
||||||
label: What template are you using?
|
label: Template
|
||||||
description: Leave blank if the issue applies to all templates, or is not template-specific.
|
description: Leave blank when the problem is not template-specific.
|
||||||
multiple: false
|
|
||||||
options:
|
options:
|
||||||
- Azurill
|
- Azurill
|
||||||
- Bronzor
|
- Bronzor
|
||||||
- Chikorita
|
- Chikorita
|
||||||
- Ditto
|
|
||||||
- Ditgar
|
- Ditgar
|
||||||
|
- Ditto
|
||||||
- Gengar
|
- Gengar
|
||||||
- Glalie
|
- Glalie
|
||||||
- Kakuna
|
- Kakuna
|
||||||
- Lapras
|
- Lapras
|
||||||
- Leafish
|
- Leafish
|
||||||
|
- Meowth
|
||||||
- Onyx
|
- Onyx
|
||||||
- Pikachu
|
- Pikachu
|
||||||
- Rhyhorn
|
- Rhyhorn
|
||||||
- Scizor
|
- Scizor
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
|
id: logs
|
||||||
attributes:
|
attributes:
|
||||||
label: Anything else?
|
label: Logs and screenshots
|
||||||
description: |
|
description: Add relevant logs, screenshots, or a minimal reproduction. Remove secrets and personal resume data first.
|
||||||
Links? References? Anything that will give us more context about the issue you are encountering!
|
|
||||||
|
|
||||||
Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
|
|||||||
@@ -1,23 +1,82 @@
|
|||||||
name: ✨ Feature Request
|
name: ✨ Feature Request
|
||||||
|
|
||||||
description: Suggest an feature or idea that you would like to see in Reactive Resume
|
description: Propose an actionable improvement to Reactive Resume
|
||||||
|
|
||||||
title: "[Feature] <title>"
|
labels: ["enhancement", "status: needs triage"]
|
||||||
labels: [enhancement, v5, needs triage]
|
assignees: []
|
||||||
assignees: "AmruthPillai"
|
|
||||||
|
|
||||||
body:
|
body:
|
||||||
- type: checkboxes
|
- type: checkboxes
|
||||||
attributes:
|
attributes:
|
||||||
label: Is there an existing issue for this feature?
|
label: Existing issue
|
||||||
description: Please search to see if an issue already exists for the feature you requested.
|
description: Search open and closed issues before submitting a new proposal.
|
||||||
options:
|
options:
|
||||||
- label: Yes, I have searched the existing issues and it doesn't exist.
|
- label: I searched the existing issues and could not find a matching proposal.
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
- type: textarea
|
- type: dropdown
|
||||||
|
id: variant
|
||||||
attributes:
|
attributes:
|
||||||
label: Feature Description
|
label: Product variant
|
||||||
description: A detailed description of the feature you would like to see in Reactive Resume. Please provide as much detail as possible as it will help me implement the feature faster.
|
description: Choose the primary environment for this proposal.
|
||||||
|
options:
|
||||||
|
- Cloud
|
||||||
|
- Self-hosted
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: area
|
||||||
|
attributes:
|
||||||
|
label: Area
|
||||||
|
description: Choose the part of Reactive Resume most closely related to the proposal.
|
||||||
|
options:
|
||||||
|
- Resume builder & data
|
||||||
|
- Templates, preview & export
|
||||||
|
- Accounts & sharing
|
||||||
|
- AI & Agent
|
||||||
|
- Language & localization
|
||||||
|
- Self-hosting
|
||||||
|
- API & integrations
|
||||||
|
- Applications & cover letters
|
||||||
|
- Other / unsure
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: problem
|
||||||
|
attributes:
|
||||||
|
label: Problem
|
||||||
|
description: What user problem or limitation should Reactive Resume solve?
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: outcome
|
||||||
|
attributes:
|
||||||
|
label: Desired outcome
|
||||||
|
description: Describe the behavior you want without prescribing an implementation.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: alternatives
|
||||||
|
attributes:
|
||||||
|
label: Alternatives considered
|
||||||
|
description: Describe current workarounds or alternatives. Write "None" if there are none.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: scope
|
||||||
|
attributes:
|
||||||
|
label: Proposed scope
|
||||||
|
description: Explain what should be included and what can remain out of scope.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: context
|
||||||
|
attributes:
|
||||||
|
label: Additional context
|
||||||
|
description: Add examples, mockups, or related issues when useful. Remove personal resume data first.
|
||||||
|
|||||||
@@ -1 +1,8 @@
|
|||||||
blank_issues_enabled: false
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: Questions and support
|
||||||
|
url: https://github.com/amruthpillai/reactive-resume/discussions/categories/q-a
|
||||||
|
about: Get help with setup, configuration, and using Reactive Resume.
|
||||||
|
- name: Security vulnerability
|
||||||
|
url: https://github.com/amruthpillai/reactive-resume/security/advisories/new
|
||||||
|
about: Report security vulnerabilities privately.
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
name: Label New Issues
|
||||||
|
|
||||||
|
on:
|
||||||
|
issues:
|
||||||
|
types: [opened]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
label:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repository
|
||||||
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Apply Form Labels
|
||||||
|
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const { getIssueLabels } = await import(`${process.env.GITHUB_WORKSPACE}/tooling/issue-labels.mjs`);
|
||||||
|
const labels = getIssueLabels(context.payload.issue.body ?? "");
|
||||||
|
|
||||||
|
if (labels.length > 0) {
|
||||||
|
await github.rest.issues.addLabels({ ...context.issue, labels });
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
name: Close Issues Awaiting Information
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "23 4 * * *"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
stale:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Close Inactive Issues Awaiting Information
|
||||||
|
uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 # v11
|
||||||
|
with:
|
||||||
|
only-issue-labels: "status: needs info"
|
||||||
|
days-before-issue-stale: 14
|
||||||
|
days-before-issue-close: 7
|
||||||
|
days-before-pr-stale: -1
|
||||||
|
days-before-pr-close: -1
|
||||||
|
stale-issue-label: stale
|
||||||
|
stale-issue-message: >-
|
||||||
|
This issue is waiting for information requested by a maintainer. It will close in 7 days if no new information is provided.
|
||||||
|
close-issue-message: >-
|
||||||
|
Closing because the requested information was not provided. Add the missing details in a comment and a maintainer can reopen the issue.
|
||||||
|
close-issue-reason: not_planned
|
||||||
|
remove-issue-stale-when-updated: true
|
||||||
@@ -234,7 +234,8 @@ Reactive Resume is and always will be free and open-source. If it has helped you
|
|||||||
Other ways to support:
|
Other ways to support:
|
||||||
|
|
||||||
- Star this repository
|
- Star this repository
|
||||||
- Report bugs and suggest features
|
- Report reproducible bugs and suggest actionable features
|
||||||
|
- Help other users in [GitHub Discussions](https://github.com/amruthpillai/reactive-resume/discussions/categories/q-a)
|
||||||
- Improve documentation
|
- Improve documentation
|
||||||
- Help with translations
|
- Help with translations
|
||||||
|
|
||||||
@@ -260,6 +261,10 @@ Contributions make open-source thrive. Whether fixing a typo or adding a feature
|
|||||||
|
|
||||||
See the [development setup guide](https://docs.rxresu.me/contributing/development) for detailed instructions on how to set up the project locally.
|
See the [development setup guide](https://docs.rxresu.me/contributing/development) for detailed instructions on how to set up the project locally.
|
||||||
|
|
||||||
|
Maintainers review the [`status: needs triage` queue](https://github.com/amruthpillai/reactive-resume/issues?q=is%3Aissue+is%3Aopen+label%3A%22status%3A+needs+triage%22)
|
||||||
|
weekly. Triaged bugs become `status: confirmed`; feature proposals become `status: accepted`; reports that need details become
|
||||||
|
`status: needs info`.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
[MIT](./LICENSE) — do whatever you want with it.
|
[MIT](./LICENSE) — do whatever you want with it.
|
||||||
|
|||||||
@@ -96,7 +96,10 @@ Reactive Resume is built with modern web technologies:
|
|||||||
|
|
||||||
<CardGroup cols={2}>
|
<CardGroup cols={2}>
|
||||||
<Card title="GitHub" icon="github" href="https://github.com/amruthpillai/reactive-resume">
|
<Card title="GitHub" icon="github" href="https://github.com/amruthpillai/reactive-resume">
|
||||||
Star the repo, report issues, and contribute to the project.
|
Star the repo, report reproducible bugs, propose features, and contribute to the project.
|
||||||
|
</Card>
|
||||||
|
<Card title="GitHub Discussions" icon="comments" href="https://github.com/amruthpillai/reactive-resume/discussions/categories/q-a">
|
||||||
|
Ask questions about setup, configuration, and using Reactive Resume.
|
||||||
</Card>
|
</Card>
|
||||||
<Card title="Reddit" icon="reddit" href="https://reddit.com/r/reactiveresume">
|
<Card title="Reddit" icon="reddit" href="https://reddit.com/r/reactiveresume">
|
||||||
Join our Reddit community to get help and connect with other users.
|
Join our Reddit community to get help and connect with other users.
|
||||||
@@ -110,5 +113,6 @@ Reactive Resume is built with modern web technologies:
|
|||||||
</CardGroup>
|
</CardGroup>
|
||||||
|
|
||||||
<Note>
|
<Note>
|
||||||
**Need help?** Feel free to reach out via [email](mailto:hello@amruthpillai.com) or open an issue on GitHub.
|
**Need help?** Start a [GitHub Discussion](https://github.com/amruthpillai/reactive-resume/discussions/categories/q-a).
|
||||||
|
GitHub Issues are reserved for reproducible bugs and actionable feature proposals.
|
||||||
</Note>
|
</Note>
|
||||||
|
|||||||
@@ -62,6 +62,9 @@
|
|||||||
"uuid"
|
"uuid"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"tooling": {
|
||||||
|
"entry": ["issue-labels.mjs"]
|
||||||
|
},
|
||||||
"packages/api": {
|
"packages/api": {
|
||||||
"ignoreDependencies": ["ioredis"]
|
"ignoreDependencies": ["ioredis"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
import assert from "node:assert/strict";
|
||||||
|
|
||||||
|
const fields = [
|
||||||
|
[
|
||||||
|
"Product variant",
|
||||||
|
{
|
||||||
|
Cloud: "deployment: cloud",
|
||||||
|
"Self-hosted": "deployment: self-hosted",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Area",
|
||||||
|
{
|
||||||
|
"Resume builder & data": "area: builder",
|
||||||
|
"Templates, preview & export": "area: rendering",
|
||||||
|
"Accounts & sharing": "area: account",
|
||||||
|
"AI & Agent": "area: ai",
|
||||||
|
"Language & localization": "area: localization",
|
||||||
|
"Self-hosting": "area: self-hosting",
|
||||||
|
"API & integrations": "area: integrations",
|
||||||
|
"Applications & cover letters": "area: applications",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
export function getIssueLabels(body) {
|
||||||
|
return fields.flatMap(([heading, labels]) => {
|
||||||
|
const answer = body.match(new RegExp(`^### ${heading}\\r?\\n\\r?\\n([^\\r\\n]+)$`, "m"))?.[1].trim();
|
||||||
|
return answer && labels[answer] ? [labels[answer]] : [];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (import.meta.main) {
|
||||||
|
const issueBody = `### Product variant
|
||||||
|
|
||||||
|
Self-hosted
|
||||||
|
|
||||||
|
### Area
|
||||||
|
|
||||||
|
Templates, preview & export`;
|
||||||
|
|
||||||
|
assert.deepEqual(getIssueLabels(issueBody), ["deployment: self-hosted", "area: rendering"]);
|
||||||
|
assert.deepEqual(getIssueLabels("### Area\n\nOther / unsure"), []);
|
||||||
|
assert.deepEqual(getIssueLabels("#### Area\n\nAI & Agent"), []);
|
||||||
|
assert.deepEqual(getIssueLabels("prefix ### Area\n\nAI & Agent"), []);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user