Skip to content

Commit f9d7e57

Browse files
committed
Merge branch 'release/5.38.0'
2 parents 1b0c9a7 + ea58195 commit f9d7e57

33 files changed

Lines changed: 441 additions & 499 deletions

.devcontainer/certs/.gitkeep

Whitespace-only changes.

.github/copilot-instructions.md

Lines changed: 0 additions & 195 deletions
This file was deleted.

.github/copilot.yaml

Lines changed: 0 additions & 16 deletions
This file was deleted.
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
---
2+
description: 'Use when writing or reviewing git commit messages, changelogs, or version bumps. Covers Conventional Commits rules, scopes, and types.'
3+
---
4+
5+
<!-- @format -->
6+
7+
## Commit Message Format
8+
9+
Commit message titles must follow [Conventional Commits](https://www.conventionalcommits.org/) rules, enforced by commitlint (`package.json``commitlint`).
10+
11+
**Pattern:** `<type>(<scope>): <summary>`
12+
13+
- **Scope is required** — commitlint enforces `scope-enum: always`
14+
- **Summary**: imperative mood, lowercase start, no period at the end (e.g. `add`, not `Added` or `ADDS`)
15+
- **No emoji** in the title — added automatically by devmoji based on type
16+
17+
## Allowed Types
18+
19+
From `@commitlint/config-conventional`:
20+
21+
| Type | When to use | Semver impact |
22+
| ---------- | ------------------------------------------------------------ | ------------- |
23+
| `feat` | New feature or capability visible to users | minor bump |
24+
| `fix` | Bug fix that corrects incorrect behavior | patch bump |
25+
| `perf` | Performance improvement, no behavior change | patch bump |
26+
| `refactor` | Restructuring without adding features or fixing bugs | no bump |
27+
| `test` | Adding or updating tests only | no bump |
28+
| `docs` | Documentation only (README, comments, changelogs) | no bump |
29+
| `style` | Formatting, whitespace, missing semicolons — no logic change | no bump |
30+
| `chore` | Maintenance: tooling, config, dependency bumps | no bump |
31+
| `build` | Build system or script changes | no bump |
32+
| `ci` | CI configuration changes | no bump |
33+
| `revert` | Reverts a previous commit | patch bump |
34+
35+
> Append `!` to type or add `BREAKING CHANGE:` in the footer for breaking changes → major bump.
36+
37+
## Scopes
38+
39+
Scopes are automatically derived from npm workspace package names via `@commitlint/config-workspace-scopes`. Valid scopes are the unscoped part of each package `name` found in the workspace paths defined by `workspaces` in root `package.json` (e.g. `@tomgrv/gitutils``gitutils`).
40+
41+
To see valid scopes at any time, run:
42+
43+
```bash
44+
npm query .workspace | node -e "const d=require('fs').readFileSync(0,'utf8'); JSON.parse(d).forEach(p => console.log(p.name))"
45+
```
46+
47+
**Rules for choosing a scope:**
48+
49+
- Use the unscoped package name of the affected workspace (strip the `@org/` prefix)
50+
- Use the narrowest scope that accurately describes the change
51+
- When a change spans multiple workspaces equally, pick the primary one
52+
53+
**Examples:**
54+
55+
```
56+
feat(gitutils): add new git alias
57+
fix(githooks): prevent double-run on post-merge
58+
perf(common-utils): reduce script startup time
59+
refactor(gitversion): extract bump logic into shared function
60+
docs(gateway): document SSL setup
61+
chore(githooks): bump @commitlint/cli to latest
62+
feat!(pecl): remove legacy extension installer — breaking change
63+
```
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
applyTo: '**'
3+
---
4+
5+
<!-- @format -->
6+
7+
## Minimal Changes Discipline
8+
9+
Make the smallest possible change to address the specific request. Do not modify files unrelated to the task.
10+
11+
- **Package files** (`package.json`, `package-lock.json`): only modify if explicitly required for the task.
12+
- **Build artifacts and symlinks**: do not commit unless they are the direct target of the request.
13+
- **Repository setup** (symlinks, environment bootstrapping): use temporarily for development/testing only; do not commit.
14+
- **Infrastructure changes**: avoid unless specifically requested.
15+
16+
When working on any task:
17+
18+
1. Identify the **exact files** that need to change.
19+
2. Change **only** those files.
20+
3. Use temporary local setup for testing; revert any unrelated side effects before committing.
21+
4. Focus on the **specific feature or fix** requested, not general improvements.
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
---
2+
applyTo: '**'
3+
---
4+
5+
<!-- @format -->
6+
7+
# Devcontainer Features Repository
8+
9+
This repository contains 7 devcontainer features installed via `install.sh` or `npx tomgrv/devcontainer-features`.
10+
11+
## Repository Architecture
12+
13+
| Feature | Purpose |
14+
| ---------------- | -------------------------------------------------------- |
15+
| **gitutils** | Git aliases and workflow automation |
16+
| **githooks** | Dev environment setup: commitlint, prettier, lint-staged |
17+
| **gitversion** | Semantic versioning via GitVersion |
18+
| **act** | Local GitHub Actions via nektos/act |
19+
| **pecl** | PHP Extensions installer |
20+
| **larasets** | Laravel-specific development utilities |
21+
| **common-utils** | Shared scripts used by other features |
22+
| **gateway** | SSL certificate management for local development |
23+
24+
Key files: `package.json`, `install.sh`, `.github/workflows/validate.yml`, `.github/workflows/release.yaml`, `stubs/`
25+
26+
## Core Development Commands
27+
28+
| Command | Purpose | Duration |
29+
| ---------------------------------- | -------------------- | ------------------------------- |
30+
| `npm run lint` | Lint staged files | 1-2s (empty), up to 15s (files) |
31+
| `npm test` | Run tests | <1s (no tests exist yet) |
32+
| `./install.sh -s` | Install stubs only | 10-15s |
33+
| `./install.sh -a` | Install all features | 15-20s |
34+
| `./install.sh <feature>` | Install one feature | 5-10s |
35+
| `npx tomgrv/devcontainer-features` | NPX install (cached) | ~2s |
36+
37+
**Always set command timeouts to 5+ minutes** to prevent premature cancellation.
38+
39+
## Essential Setup (Development/Testing Only — Do Not Commit)
40+
41+
```bash
42+
npm install
43+
npm install prettier-plugin-sh
44+
find src/common-utils/ -type f -name "_*.sh" -exec chmod +x {} \;
45+
find src/common-utils/ -type f -name "_*.sh" | while read file; do
46+
ln -sf "$file" src/common-utils/$(basename "$file" | sed 's/^_//;s/.sh$//')
47+
done
48+
ln -sf src/common-utils/_zz_log.sh src/common-utils/_zz_logs.sh
49+
```
50+
51+
## Critical Issues & Workarounds
52+
53+
| Issue | Cause | Fix |
54+
| ------------------------------ | ------------------------------------------------- | ------------------------------------------------------------------- |
55+
| `_zz_logs.sh: No such file` | `install.sh` line 9 typo: `_zz_logs` vs `_zz_log` | `ln -sf src/common-utils/_zz_log.sh src/common-utils/_zz_logs.sh` |
56+
| `prettier-plugin-sh not found` | Plugin not installed | `npm install prettier-plugin-sh` |
57+
| `Permission denied` on scripts | Shell scripts not executable | `find src/common-utils/ -type f -name "_*.sh" -exec chmod +x {} \;` |
58+
| `No writeable directory found` | Local run outside container | Normal — features are designed for devcontainer environments |
59+
60+
## Testing Changes
61+
62+
```bash
63+
mkdir /tmp/feature-test && cd /tmp/feature-test
64+
git init
65+
/workspaces/devcontainer-features/install.sh -s
66+
ls -la .devcontainer/ .vscode/
67+
```
68+
69+
## Pre-commit Validation
70+
71+
```bash
72+
git add .
73+
npm run lint # fixes linting issues on staged files
74+
```

.vscode/tasks.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,24 @@
66
"type": "shell",
77
"command": "npm exec --yes -- tomgrv/devcontainer-features -s",
88
"problemMatcher": []
9+
},
10+
{
11+
"label": "🎈 Beta",
12+
"type": "shell",
13+
"command": "git release beta",
14+
"problemMatcher": []
15+
},
16+
{
17+
"label": "🚀 Prod",
18+
"type": "shell",
19+
"command": "git release prod",
20+
"problemMatcher": []
21+
},
22+
{
23+
"label": "🚑 Hotfix",
24+
"type": "shell",
25+
"command": "git release hotfix",
26+
"problemMatcher": []
927
}
1028
]
1129
}

0 commit comments

Comments
 (0)