Skip to content
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
34 changes: 34 additions & 0 deletions .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Bug report
description: Report behavior that did not work as expected.
title: ""
labels:
- bug
body:
- type: textarea
id: reproduction
attributes:
label: Steps to reproduce
description: What is the shortest sequence that demonstrates the problem?
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
description: What should have happened?
validations:
required: true
- type: textarea
id: actual
attributes:
label: Actual behavior
description: What happened instead?
validations:
required: true
- type: textarea
id: context
attributes:
label: Additional context
description: Add screenshots, logs, links, or other useful context if available.
validations:
required: false
2 changes: 2 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
blank_issues_enabled: false
contact_links: []
27 changes: 27 additions & 0 deletions .github/ISSUE_TEMPLATE/feature.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Feature request
description: Suggest an improvement or new capability.
title: ""
labels:
- enhancement
body:
- type: textarea
id: problem
attributes:
label: Problem
description: What need or limitation should this address?
validations:
required: true
- type: textarea
id: proposed-change
attributes:
label: Proposed change
description: What outcome or behavior would address the problem?
validations:
required: true
- type: textarea
id: context
attributes:
label: Additional context
description: Add examples, links, or other useful context if available.
validations:
required: false
11 changes: 11 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# TL;DR

# Overview of Changes

## [subheading if needed]

## [more subheadings if needed]

# Follow-ups

- [ ] Future issue title if needed
31 changes: 31 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: CI

on:
pull_request:
branches: [main]
push:
branches-ignore: [main]

permissions:
contents: read

concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

jobs:
validate:
name: Validate
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: 24

- name: Validate published community files
run: npm run check
9 changes: 9 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Working in the organization community-health repository

The files under `.github/` are published copies from the pinned
`LasVegasForTransit/repository-tooling` release. Do not edit them independently.
Update the source repository, publish a release, then update the files and
checksums here together.

Run `npm run check` before opening a pull request. Use the organization
`github-contribution` skill for GitHub creation.
3 changes: 3 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Organization community-health files

Follow [`AGENTS.md`](AGENTS.md).
11 changes: 9 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,9 @@
# .github
Organization-wide GitHub contribution templates and community health files.
# Las Vegans for Better Transit

This special repository publishes the native GitHub issue forms and pull
request template inherited by LVBT repositories.

The canonical files live in
[`LasVegasForTransit/repository-tooling`](https://github.com/LasVegasForTransit/repository-tooling).
[`SOURCE.json`](SOURCE.json) pins the release and checksums published here.
Individual repositories should not copy or override these templates.
11 changes: 11 additions & 0 deletions SOURCE.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"repository": "LasVegasForTransit/repository-tooling",
"ref": "v1.0.0",
"commit": "53ef865ad7bc38239837bfe53900103b1ecf8854",
"files": {
".github/ISSUE_TEMPLATE/bug.yml": "04ad19b1762d23f0e07aa08b0929752663ae158c44f952489f17ea01420f800f",
".github/ISSUE_TEMPLATE/feature.yml": "6e1a717193eaf7a24a7e90caa4d31b9173dc18fc101401d53af45bb2a9fff0dd",
".github/ISSUE_TEMPLATE/config.yml": "8b09e7df09fc7534371988062769ee427af2954a02c04c763e8a8005be0f2be4",
".github/pull_request_template.md": "38ee62db634c37469a06d37bfac8c63a8c1592a7fa4c612b8c8206b68ef8b953"
}
}
12 changes: 12 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"name": "lvbt-community-health",
"private": true,
"version": "1.0.0",
"type": "module",
"engines": {
"node": ">=24"
},
"scripts": {
"check": "node --test"
}
}
39 changes: 39 additions & 0 deletions tests/community-health.test.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import assert from 'node:assert/strict';
import { createHash } from 'node:crypto';
import { readFile } from 'node:fs/promises';
import path from 'node:path';
import test from 'node:test';

const root = path.resolve(import.meta.dirname, '..');
const read = (file) => readFile(path.join(root, file));

test('published community files match the pinned tooling release', async () => {
const source = JSON.parse(await read('SOURCE.json'));
assert.equal(source.repository, 'LasVegasForTransit/repository-tooling');
assert.equal(source.ref, 'v1.0.0');

for (const [file, expected] of Object.entries(source.files)) {
const digest = createHash('sha256').update(await read(file)).digest('hex');
assert.equal(digest, expected, file);
}
});

test('the pull request template contains only the readable organization outline', async () => {
const template = (await read('.github/pull_request_template.md')).toString();
assert.equal(
template,
`# TL;DR

# Overview of Changes

## [subheading if needed]

## [more subheadings if needed]

# Follow-ups

- [ ] Future issue title if needed
`,
);
assert.doesNotMatch(template, /<!--|metadata/i);
});