Skip to content

Commit 767d2e4

Browse files
dougaitkenclaude
andauthored
feat: expand tech tag vocabulary + DRY validator enums (v4.13.3) (#2199)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent d7a62b5 commit 767d2e4

4 files changed

Lines changed: 36 additions & 41 deletions

File tree

.github/scripts/validate-companies.js

Lines changed: 9 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -10,46 +10,15 @@
1010

1111
import { readFileSync } from "node:fs";
1212
import { basename } from "node:path";
13-
14-
// Canonical enum values (from src/_data/companyHelpers.js)
15-
const VALID_REGIONS = [
16-
"worldwide",
17-
"americas",
18-
"europe",
19-
"americas-europe",
20-
"asia-pacific",
21-
"other",
22-
];
23-
24-
const VALID_REMOTE_POLICIES = [
25-
"fully-remote",
26-
"remote-first",
27-
"hybrid",
28-
"remote-friendly",
29-
];
30-
31-
const VALID_COMPANY_SIZES = ["tiny", "small", "medium", "large", "enterprise"];
32-
33-
const VALID_TECHNOLOGIES = [
34-
"javascript",
35-
"python",
36-
"ruby",
37-
"go",
38-
"java",
39-
"php",
40-
"rust",
41-
"dotnet",
42-
"elixir",
43-
"scala",
44-
"cloud",
45-
"devops",
46-
"mobile",
47-
"data",
48-
"ml",
49-
"sql",
50-
"nosql",
51-
"search",
52-
];
13+
import labels from "../../src/_data/labels.js";
14+
15+
// Canonical enum values — keys come from the same labels.js the site renders
16+
// from, so adding a tag/region/etc. in one place updates validation too.
17+
const l = labels();
18+
const VALID_REGIONS = Object.keys(l.region);
19+
const VALID_REMOTE_POLICIES = Object.keys(l.remotePolicy);
20+
const VALID_COMPANY_SIZES = Object.keys(l.companySize);
21+
const VALID_TECHNOLOGIES = Object.keys(l.tech);
5322

5423
const REQUIRED_FIELDS = [
5524
"title",

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "remote-in-tech",
3-
"version": "4.13.2",
3+
"version": "4.13.3",
44
"description": "A list of semi to fully remote-friendly companies in or around tech",
55
"author": "Doug Aitken",
66
"license": "ISC",

src/_data/changelog.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,23 @@
11
[
2+
{
3+
"version": "4.13.3",
4+
"date": "2026-05-30",
5+
"summary": "Expanded the tech tag vocabulary and fixed the validation workflow for multi-file PRs",
6+
"changes": [
7+
{
8+
"type": "added",
9+
"description": "Added seven tech tags that contributors commonly want: <code>typescript</code>, <code>react</code>, <code>nodejs</code>, <code>swift</code>, <code>docker</code>, <code>kubernetes</code>, and <code>postgres</code> (PostgreSQL). Tags only appear on the <a href=\"/tags/\">browse pages</a> once a company uses them — adding the labels is a no-op until profiles opt in."
10+
},
11+
{
12+
"type": "changed",
13+
"description": "Consolidated the validator's enum lists (regions / remote policies / company sizes / technologies) to import from <code>src/_data/labels.js</code>, so future tag changes only need to happen in one place."
14+
},
15+
{
16+
"type": "fixed",
17+
"description": "Fixed the <code>Validate Company Profiles</code> workflow to handle multi-file PRs. Previously the changed-files list was substituted directly into a bash <code>for</code> loop, which crashed with a syntax error whenever a PR touched more than one company file."
18+
}
19+
]
20+
},
221
{
322
"version": "4.13.2",
423
"date": "2026-05-30",

src/_data/labels.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ export default function () {
2828
},
2929
tech: {
3030
'javascript': 'JavaScript',
31+
'typescript': 'TypeScript',
32+
'react': 'React',
33+
'nodejs': 'Node.js',
3134
'python': 'Python',
3235
'ruby': 'Ruby',
3336
'go': 'Go',
@@ -37,12 +40,16 @@ export default function () {
3740
'dotnet': '.NET',
3841
'elixir': 'Elixir',
3942
'scala': 'Scala',
43+
'swift': 'Swift',
4044
'cloud': 'Cloud',
4145
'devops': 'DevOps',
46+
'docker': 'Docker',
47+
'kubernetes': 'Kubernetes',
4248
'mobile': 'Mobile',
4349
'data': 'Data',
4450
'ml': 'ML/AI',
4551
'sql': 'SQL',
52+
'postgres': 'PostgreSQL',
4653
'nosql': 'NoSQL',
4754
'search': 'Search'
4855
}

0 commit comments

Comments
 (0)