From 9939e20f7025596b26e1df9999050b65308872ce Mon Sep 17 00:00:00 2001 From: 2160039878-cyber <285580214+2160039878-cyber@users.noreply.github.com> Date: Wed, 9 Sep 2026 11:59:04 +0800 Subject: [PATCH] fix(contributing): route questions and security reports from issue chooser (#682) --- .github/ISSUE_TEMPLATE/config.yml | 8 +++++++ tests/unit/issue-template-config.test.ts | 29 ++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 tests/unit/issue-template-config.test.ts diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..e059600f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: true +contact_links: + - name: Questions and support + url: https://github.com/libredb/libredb-studio/discussions + about: Ask configuration and usage questions in GitHub Discussions. + - name: Report a security vulnerability privately + url: https://github.com/libredb/libredb-studio/blob/main/SECURITY.md#reporting-a-vulnerability + about: Follow the security policy for private reporting. Do not open a public issue. diff --git a/tests/unit/issue-template-config.test.ts b/tests/unit/issue-template-config.test.ts new file mode 100644 index 00000000..2df26e3a --- /dev/null +++ b/tests/unit/issue-template-config.test.ts @@ -0,0 +1,29 @@ +import { describe, expect, test } from "bun:test"; +import { readFileSync } from "node:fs"; +import path from "node:path"; +import { parse } from "yaml"; + +const ROOT = path.resolve(import.meta.dir, "../.."); +const readConfig = () => parse(readFileSync(path.join(ROOT, ".github/ISSUE_TEMPLATE/config.yml"), "utf8")); + +describe("issue template contacts", () => { + test("keeps blank issues available explicitly", () => { + expect(readConfig().blank_issues_enabled).toBe(true); + }); + + test("routes questions to Discussions and vulnerabilities to the private reporting policy", () => { + const links = readConfig().contact_links; + expect(links).toHaveLength(2); + expect(links.map((link: { url: string }) => link.url)).toEqual([ + "https://github.com/libredb/libredb-studio/discussions", + "https://github.com/libredb/libredb-studio/blob/main/SECURITY.md#reporting-a-vulnerability", + ]); + for (const link of links) { + expect(link.name.trim().length).toBeGreaterThan(0); + expect(link.about.trim().length).toBeGreaterThan(0); + } + const securityPolicy = readFileSync(path.join(ROOT, "SECURITY.md"), "utf8"); + expect(securityPolicy).toContain("## Reporting a Vulnerability"); + expect(securityPolicy).toContain("Please do not report security vulnerabilities through public GitHub issues."); + }); +});