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
1 change: 0 additions & 1 deletion .agents/instructions/repo.instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ This repository contains 7 devcontainer features installed via `install.sh` or `
| **githooks** | Dev environment setup: commitlint, prettier, lint-staged |
| **gitversion** | Semantic versioning via GitVersion |
| **act** | Local GitHub Actions via nektos/act |
| **pecl** | PHP Extensions installer |
| **larasets** | Laravel-specific development utilities |
| **common-utils** | Shared scripts used by other features |
| **gateway** | SSL certificate management for local development |
Expand Down
42 changes: 11 additions & 31 deletions .github/workflows/release-main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ name: 'Release Main'

on:
workflow_dispatch:
inputs:
dry_run:
description: 'Run through beta/prod without pushing to main (verification only)'
type: boolean
default: false

permissions:
contents: write
Expand All @@ -13,38 +18,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v7
uses: actions/checkout@v6
with:
fetch-depth: 0
ref: develop

- name: Set up Node.js
uses: tomgrv/actions/setup-node@v2

- name: Install GitUtils
# zz_use/install-feature link git-beta/git-prod/etc. onto a bin dir
# that only lasts for *this* step's own shell unless it's also
# appended to $GITHUB_PATH - a later step (Run git beta then git
# prod) otherwise can't find them even though this step's install
# succeeded. Pinning INSTALL_BIN_DIR here keeps both in sync.
env:
INSTALL_BIN_DIR: ${{ runner.temp }}/gitutils-bin
run: |
mkdir -p "$INSTALL_BIN_DIR"
echo "$INSTALL_BIN_DIR" >> "$GITHUB_PATH"
npm exec --yes --legacy-peer-deps --package github:tomgrv/devcontainer-features -- devcontainer-features -- add gitutils

- name: Verify GitUtils aliases
run: |
git config --global --get alias.beta >/dev/null || { echo 'Missing git beta alias after GitUtils install; check the "Install GitUtils" step logs.'; false; }
git config --global --get alias.prod >/dev/null || { echo 'Missing git prod alias after GitUtils install; check the "Install GitUtils" step logs.'; false; }

- name: Configure git identity
run: |
git config user.name 'github-actions[bot]'
git config user.email '41898282+github-actions[bot]@users.noreply.github.com'

- name: Run git beta then git prod
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: git beta && git prod
- name: Release promote
uses: tomgrv/actions/release-promote@v2.22.0
with:
scripts-ref: v0.3.0
dry-run: ${{ inputs.dry_run == true }}
12 changes: 0 additions & 12 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,24 +29,12 @@
"command": "git pf",
"problemMatcher": []
},
{
"label": "🎈 Beta",
"type": "shell",
"command": "git release beta",
"problemMatcher": []
},
{
"label": "🚑 Hotfix",
"type": "shell",
"command": "git release hotfix",
"problemMatcher": []
},
{
"label": "🚀 Prod",
"type": "shell",
"command": "git release prod",
"problemMatcher": []
},
{
"label": "⏬ Upd. DevEnv",
"type": "shell",
Expand Down
4 changes: 2 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Every tool-specific path is a symlink into `.agents/` (the single source of trut

## Feature Pattern

Each feature follows this structure (use `src/pecl/` as the minimal reference — just the standard entrypoints plus `stubs/`; `src/githooks/` or `src/larasets/` for a fuller example with all four optional subdirectories):
Each feature follows this structure (use `src/scripting/` as the minimal reference — just the standard entrypoints plus `stubs/`; `src/githooks/` or `src/larasets/` for a fuller example with all four optional subdirectories):

```
src/<feature>/
Expand Down Expand Up @@ -73,7 +73,7 @@ If no branch is specified in a request, start from `develop`.

**PR titles must follow Conventional Commits format with scope matching the affected workspace/feature.** Format: `<type>(devcontainer-features-<workspace>): <emoji> <description>`.

Valid scopes (deduced from npm workspace names): `devcontainer-features-act`, `devcontainer-features-ai-coding`, `devcontainer-features-common-utils`, `devcontainer-features-gateway`, `devcontainer-features-githooks`, `devcontainer-features-gitutils`, `devcontainer-features-gitversion`, `devcontainer-features-larasets`, `devcontainer-features-minikube`, `devcontainer-features-pecl`, `devcontainer-features-scripting`.
Valid scopes (deduced from npm workspace names): `devcontainer-features-act`, `devcontainer-features-ai-coding`, `devcontainer-features-common-utils`, `devcontainer-features-gateway`, `devcontainer-features-githooks`, `devcontainer-features-gitutils`, `devcontainer-features-gitversion`, `devcontainer-features-larasets`, `devcontainer-features-minikube`, `devcontainer-features-scripting`.

Example: `fix(devcontainer-features-githooks): 🔧 Add conditional skip when GITLEAKS_LICENSE not set`.

Expand Down
51 changes: 9 additions & 42 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ curl -fsSL https://raw.githubusercontent.com/tomgrv/devcontainer-features/develo
| [GitHooks](#githooks) | Commit hooks: commitlint, prettier, lint-staged |
| [GitVersion](#gitversion) | Semantic versioning via GitVersion |
| [Act](#act) | Run GitHub Actions locally via nektos/act |
| [PECL](#pecl) | PHP extension installer via PECL |
| [Larasets](#larasets) | Laravel-specific development utilities |
| [Common Utils](#common-utils) | Shared utilities used by other features |
| [Gateway](#gateway) | SSL certificate management for corporate networks |
Expand All @@ -74,7 +73,7 @@ A collection of Git aliases, git-flow shortcuts, and interactive utilities for a

```json
"features": {
"ghcr.io/tomgrv/devcontainer-features/gitutils:5": {}
"ghcr.io/tomgrv/devcontainer-features/gitutils:8": {}
}
```

Expand Down Expand Up @@ -104,7 +103,7 @@ Configures Git hooks in one step using commitlint, commitizen, lint-staged, pret

```json
"features": {
"ghcr.io/tomgrv/devcontainer-features/githooks:5": {}
"ghcr.io/tomgrv/devcontainer-features/githooks:8": {}
}
```

Expand Down Expand Up @@ -134,7 +133,7 @@ Installs [GitVersion](https://gitversion.net/) to calculate semantic version num

```json
"features": {
"ghcr.io/tomgrv/devcontainer-features/gitversion:6": {}
"ghcr.io/tomgrv/devcontainer-features/gitversion:8": {}
}
```

Expand Down Expand Up @@ -164,7 +163,7 @@ Installs [nektos/act](https://github.com/nektos/act) to run GitHub Actions local

```json
"features": {
"ghcr.io/tomgrv/devcontainer-features/act:6": {}
"ghcr.io/tomgrv/devcontainer-features/act:8": {}
}
```

Expand All @@ -184,38 +183,6 @@ npm install --save-dev @tomgrv/devcontainer-features-act

---

### PECL

Installs PHP extensions from the [PHP Extension Community Library (PECL)](https://pecl.php.net/).

📖 [Full documentation](./src/pecl/README.md)

#### Quick Start — devcontainer.json

```json
"features": {
"ghcr.io/tomgrv/devcontainer-features/pecl:5": {
"extension": "zip"
}
}
```

#### Quick Install — console

```sh
npx tomgrv/devcontainer-features -- add pecl
# or, without node/npm:
curl -fsSL https://raw.githubusercontent.com/tomgrv/devcontainer-features/develop/setup.sh | sh -s -- add pecl
```

#### Quick Install — npm

```sh
npm install --save-dev @tomgrv/devcontainer-features-pecl
```

---

### Larasets

Laravel-specific settings, shell utilities, Composer scripts, and VS Code extensions for Laravel development.
Expand All @@ -226,7 +193,7 @@ Laravel-specific settings, shell utilities, Composer scripts, and VS Code extens

```json
"features": {
"ghcr.io/tomgrv/devcontainer-features/larasets:6": {}
"ghcr.io/tomgrv/devcontainer-features/larasets:8": {}
}
```

Expand Down Expand Up @@ -256,7 +223,7 @@ Shared utilities (`jq`, `dos2unix`, JSON helpers, logging) used by other feature

```json
"features": {
"ghcr.io/tomgrv/devcontainer-features/common-utils:5": {
"ghcr.io/tomgrv/devcontainer-features/common-utils:8": {
"utils": "jq dos2unix"
}
}
Expand Down Expand Up @@ -288,7 +255,7 @@ Handles SSL inspection certificates for corporate network environments (e.g. Zsc

```json
"features": {
"ghcr.io/tomgrv/devcontainer-features/gateway:7": {}
"ghcr.io/tomgrv/devcontainer-features/gateway:8": {}
}
```

Expand Down Expand Up @@ -318,7 +285,7 @@ Installs [Minikube](https://minikube.sigs.k8s.io/) to run a single-node Kubernet

```json
"features": {
"ghcr.io/tomgrv/devcontainer-features/minikube:6": {}
"ghcr.io/tomgrv/devcontainer-features/minikube:8": {}
}
```

Expand Down Expand Up @@ -348,7 +315,7 @@ Agent-agnostic AI coding skills (`.github/skills/`) plus the [Claude Code GitHub

```json
"features": {
"ghcr.io/tomgrv/devcontainer-features/ai-coding:7": {}
"ghcr.io/tomgrv/devcontainer-features/ai-coding:8": {}
}
```

Expand Down
6 changes: 6 additions & 0 deletions docs/reviews/2026-08-repo-review.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ Scope: whole repository — CI/workflows, `src/*` feature source, and the `.agen
This is a findings-only report. No code changes are included in this pass; each item below
is written so a follow-up PR can act on it independently.

> **2026-09 update:** `pecl` (the subject of §2.5 and several other findings below) has been
> removed from this repository rather than brought into conformance — the findings that
> reference it are kept as-is for the historical record, but no longer describe anything
> present in `src/`. `CLAUDE.md`'s "minimal reference" feature pointer was moved to
> `src/scripting/`.

## Executive Summary

Six items stand out by impact-to-effort:
Expand Down
2 changes: 1 addition & 1 deletion src/act/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ More information about Act can be found on the [Act GitHub page](https://github.

```json
"features": {
"ghcr.io/tomgrv/devcontainer-features/act:6": {}
"ghcr.io/tomgrv/devcontainer-features/act:8": {}
}
```

Expand Down
2 changes: 1 addition & 1 deletion src/act/devcontainer-feature.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"ghcr.io/devcontainers/features/docker-in-docker:3": {
"moby": false
},
"ghcr.io/tomgrv/devcontainer-features/common-utils:7": {}
"ghcr.io/tomgrv/devcontainer-features/common-utils:8": {}
},
"name": "Nektos Act",
"options": {
Expand Down
2 changes: 1 addition & 1 deletion src/ai-coding/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Other features can opt into skills too: `dependsOn` this feature, ship a `stubs/

```json
"features": {
"ghcr.io/tomgrv/devcontainer-features/ai-coding:7": {}
"ghcr.io/tomgrv/devcontainer-features/ai-coding:8": {}
}
```

Expand Down
10 changes: 3 additions & 7 deletions src/ai-coding/devcontainer-feature.json
Original file line number Diff line number Diff line change
@@ -1,19 +1,15 @@
{
"customizations": {
"vscode": {
"extensions": [
"Anthropic.claude-code"
],
"extensions": ["Anthropic.claude-code"],
"settings": {}
}
},
"description": "Agent-agnostic AI coding skills (.github/skills) plus the Claude Code GitHub Action for @claude mentions.",
"id": "ai-coding",
"installsAfter": [
"ghcr.io/tomgrv/devcontainer-features/common-utils"
],
"installsAfter": ["ghcr.io/tomgrv/devcontainer-features/common-utils"],
"dependsOn": {
"ghcr.io/tomgrv/devcontainer-features/common-utils:7": {}
"ghcr.io/tomgrv/devcontainer-features/common-utils:8": {}
},
"name": "AI Coding",
"version": "8.1.0",
Expand Down
2 changes: 1 addition & 1 deletion src/common-utils/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ This feature provides common utilities for the devcontainer features.

```json
"features": {
"ghcr.io/tomgrv/devcontainer-features/common-utils:5": {
"ghcr.io/tomgrv/devcontainer-features/common-utils:8": {
"utils": "jq dos2unix"
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/gateway/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ SSL inspection tools act as a man-in-the-middle TLS proxy and replace server cer

```json
"features": {
"ghcr.io/tomgrv/devcontainer-features/gateway:7": {}
"ghcr.io/tomgrv/devcontainer-features/gateway:8": {}
}
```

Expand Down
6 changes: 2 additions & 4 deletions src/gateway/devcontainer-feature.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,9 @@
},
"description": "Handling SSL Inspection Gateway while building & using devcontainers",
"id": "gateway",
"installsAfter": [
"ghcr.io/tomgrv/devcontainer-features/common-utils"
],
"installsAfter": ["ghcr.io/tomgrv/devcontainer-features/common-utils"],
"dependsOn": {
"ghcr.io/tomgrv/devcontainer-features/common-utils:7": {
"ghcr.io/tomgrv/devcontainer-features/common-utils:8": {
"utils": "bash ca-certificates curl"
}
},
Expand Down
2 changes: 1 addition & 1 deletion src/githooks/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ This feature provides a set of hooks for working with Git repositories.

```json
"features": {
"ghcr.io/tomgrv/devcontainer-features/githooks:5": {}
"ghcr.io/tomgrv/devcontainer-features/githooks:8": {}
}
```

Expand Down
2 changes: 1 addition & 1 deletion src/githooks/devcontainer-feature.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
"ghcr.io/devcontainers/features/node:1": {
"version": "lts"
},
"ghcr.io/tomgrv/devcontainer-features/gitutils:7": {}
"ghcr.io/tomgrv/devcontainer-features/gitutils:8": {}
},
"name": "Git Hooks",
"version": "8.0.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,5 +59,5 @@ perf(common-utils): reduce script startup time
refactor(gitversion): extract bump logic into shared function
docs(gateway): document SSL setup
chore(githooks): bump @commitlint/cli to latest
feat!(pecl): remove legacy extension installer — breaking change
feat!(gateway): remove legacy certificate installer — breaking change
```
8 changes: 7 additions & 1 deletion src/gitutils/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ This feature provides a set of utilities for working with Git repositories.

```json
"features": {
"ghcr.io/tomgrv/devcontainer-features/gitutils:7": {}
"ghcr.io/tomgrv/devcontainer-features/gitutils:8": {}
}
```

Expand All @@ -32,6 +32,12 @@ Installs a collection of Git utilities.
Installs the git-flow extension and sets up Git configuration to use it.
Adds shortcuts to the git command for easier use of git-flow commands.

The utilities themselves live in [`tomgrv/scripts`](https://github.com/tomgrv/scripts#git-utilities)
(one source of truth, shared with every other `tomgrv`/`perspikapps` repo)
and are pulled in via `zz_use` at install time — this feature owns the
alias/config wiring and the git-flow install/configure lifecycle, not the
script implementations.

## GitFlow

Additionally, the feature installs the [git-flow](https://github.com/nvie/gitflow) extension and sets up the Git configuration to use it.
Expand Down
Loading
Loading