@codfish/actions 2.0.1 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/README.md +135 -64
  2. package/bin/generate-docs.js +10 -10
  3. package/comment/README.md +9 -9
  4. package/comment/action.yml +3 -3
  5. package/npm-publish-pr/README.md +319 -40
  6. package/npm-publish-pr/action.yml +271 -87
  7. package/package.json +19 -14
  8. package/setup-node-and-install/README.md +77 -34
  9. package/setup-node-and-install/action.yml +36 -3
  10. package/.github/codeql-config.yml +0 -21
  11. package/.github/dependabot.yml +0 -35
  12. package/.github/workflows/claude-code-review.yml +0 -43
  13. package/.github/workflows/claude.yml +0 -38
  14. package/.github/workflows/release.yml +0 -48
  15. package/.github/workflows/security.yml +0 -103
  16. package/.github/workflows/update-docs.yml +0 -38
  17. package/.github/workflows/validate.yml +0 -210
  18. package/.husky/pre-commit +0 -1
  19. package/.nvmrc +0 -1
  20. package/AGENT.md +0 -149
  21. package/CLAUDE.md +0 -3
  22. package/CONTRIBUTING.md +0 -316
  23. package/SECURITY.md +0 -208
  24. package/eslint.config.js +0 -8
  25. package/tests/fixtures/.node-version +0 -1
  26. package/tests/fixtures/.nvmrc +0 -1
  27. package/tests/fixtures/lockfiles/package-lock.json +0 -12
  28. package/tests/fixtures/lockfiles/pnpm-lock.yaml +0 -9
  29. package/tests/fixtures/lockfiles/yarn.lock +0 -7
  30. package/tests/fixtures/package-json/minimal.json +0 -4
  31. package/tests/fixtures/package-json/scoped.json +0 -6
  32. package/tests/fixtures/package-json/valid.json +0 -13
  33. package/tests/integration/comment/basic.bats +0 -95
  34. package/tests/integration/npm-pr-version/basic.bats +0 -438
  35. package/tests/integration/setup-node-and-install/basic.bats +0 -638
  36. package/tests/scripts/test-helpers.sh +0 -113
  37. package/tests/scripts/test-runner.sh +0 -115
@@ -1,16 +1,19 @@
1
1
  name: npm-pr-version
2
2
 
3
3
  description:
4
- Publishes package with PR-specific version (0.0.0-PR-123--abc1234) using detected package manager (npm/yarn/pnpm) and
5
- automatically comments on PR
4
+ Publishes package with PR-specific version (0.0.0-PR-123--abc1234) using detected package manager (npm/yarn/pnpm) or
5
+ OIDC trusted publishing, and automatically comments on PR
6
6
 
7
7
  inputs:
8
8
  npm-token:
9
- required: true
10
- description: Registry authentication token with publish permissions (works with npm/yarn/pnpm)
11
- github-token:
12
- required: true
13
- description: GitHub token with pull request comment permissions (typically secrets.GITHUB_TOKEN)
9
+ required: false
10
+ description:
11
+ Registry authentication token with publish permissions. If not provided, OIDC trusted publishing will be used.
12
+ tarball:
13
+ required: false
14
+ description:
15
+ Path to pre-built tarball to publish (e.g., '*.tgz'). When provided, publishes the tarball with --ignore-scripts
16
+ for security. Recommended for pull_request_target workflows to prevent execution of malicious lifecycle scripts.
14
17
  comment:
15
18
  required: false
16
19
  default: 'true'
@@ -19,6 +22,10 @@ inputs:
19
22
  required: false
20
23
  default: npm-publish-pr
21
24
  description: Tag to use for PR comments (for comment identification and updates)
25
+ dev:
26
+ required: false
27
+ default: 'false'
28
+ description: If true, use dev dependency install syntax in the PR comment (e.g. npm install -D, pnpm add -D).
22
29
 
23
30
  outputs:
24
31
  version:
@@ -35,7 +42,7 @@ runs:
35
42
  using: composite
36
43
 
37
44
  steps:
38
- - uses: codfish/actions/comment@v2
45
+ - uses: codfish/actions/comment@v3
39
46
  if: inputs.comment == 'true'
40
47
  with:
41
48
  message: ⏳ Publishing PR version...
@@ -46,116 +53,286 @@ runs:
46
53
  id: publish
47
54
  shell: bash
48
55
  run: |
49
- set +e # Don't exit on error so we can handle failures
56
+ set +e # Don't exit on error so we can handle failures
50
57
 
51
58
  # Initialize outputs for error handling
52
59
  error_message=""
53
60
  package_name=""
54
61
  version=""
62
+ package_manager="npm"
63
+ tarball_mode=false
64
+ NPMRC_AUTH_FILE=""
65
+ REPACK_DIR=""
55
66
 
56
- # Function to sanitize error messages for GitHub output
57
- sanitize_error() {
58
- local message="$1"
59
- # Replace newlines with spaces, remove extra whitespace, truncate if too long
60
- echo "$message" | tr '\n' ' ' | tr -s ' ' | cut -c1-500
67
+ # Clean up on exit: remove temp auth file (never touch project .npmrc), temp files, repack dir
68
+ cleanup() {
69
+ local exit_code=$?
70
+ [ -n "$NPMRC_AUTH_FILE" ] && rm -f "$NPMRC_AUTH_FILE" 2>/dev/null || true
71
+ [ -n "$temp_pkg_json" ] && rm -f "$temp_pkg_json" 2>/dev/null || true
72
+ [ -n "$REPACK_DIR" ] && rm -rf "$REPACK_DIR" 2>/dev/null || true
73
+ return $exit_code
61
74
  }
75
+ trap cleanup EXIT
62
76
 
63
- # Validate package.json exists
64
- if [ ! -f "package.json" ]; then
65
- error_message="❌ ERROR: package.json not found in current directory. Make sure you're running this action in a directory with a package.json file"
66
- echo "$error_message"
67
- echo "error-message=$(sanitize_error "$error_message")" >> $GITHUB_OUTPUT
68
- exit 1
77
+ # Detect if tarball mode is being used
78
+ if [ -n "$INPUT_TARBALL" ]; then
79
+ tarball_mode=true
80
+ echo "🔒 SECURE MODE: Using pre-built tarball (lifecycle scripts will NOT execute)"
81
+
82
+ # Expand glob patterns (e.g., *.tgz) to actual filename
83
+ shopt -s nullglob
84
+ tarball_files=($INPUT_TARBALL)
85
+ shopt -u nullglob
86
+
87
+ if [ ${#tarball_files[@]} -eq 0 ]; then
88
+ error_message="❌ ERROR: No tarball files found matching pattern: $INPUT_TARBALL"
89
+ echo "$error_message"
90
+ echo "error-message=$error_message" >> $GITHUB_OUTPUT
91
+ exit 1
92
+ elif [ ${#tarball_files[@]} -gt 1 ]; then
93
+ error_message="❌ ERROR: Multiple tarball files found matching pattern: $INPUT_TARBALL (found: ${tarball_files[*]}). Please specify a single tarball file."
94
+ echo "$error_message"
95
+ echo "error-message=$error_message" >> $GITHUB_OUTPUT
96
+ exit 1
97
+ fi
98
+
99
+ # Use the resolved tarball path
100
+ INPUT_TARBALL="${tarball_files[0]}"
101
+ echo "📦 Resolved tarball: $INPUT_TARBALL"
69
102
  fi
70
103
 
71
- # Validate package.json is valid JSON
72
- if ! jq empty package.json 2>/dev/null; then
73
- error_message="❌ ERROR: package.json is not valid JSON"
74
- echo "$error_message"
75
- echo "error-message=$(sanitize_error "$error_message")" >> $GITHUB_OUTPUT
104
+ # Function to extract relevant error message from npm output
105
+ extract_error() {
106
+ local output="$1"
107
+
108
+ # Extract npm error lines (lines starting with "npm error")
109
+ local error_lines=$(echo "$output" | grep "^npm error" | head -5)
110
+
111
+ # If we found error lines, use those
112
+ if [ -n "$error_lines" ]; then
113
+ echo "$error_lines" | tr '\n' ' ' | tr -s ' '
114
+ else
115
+ # Otherwise, take the last few lines (likely contains the error)
116
+ echo "$output" | tail -10 | tr '\n' ' ' | tr -s ' ' | cut -c1-500
117
+ fi
118
+ }
119
+
120
+ # Standardized publish error handler
121
+ handle_publish_error() {
122
+ local manager_name="$1"
123
+ local publish_output="$2"
124
+ local extracted_error=""
125
+
126
+ extracted_error=$(extract_error "$publish_output")
127
+ error_message="❌ Failed to publish with ${manager_name}: ${extracted_error}"
128
+ echo "Full output: $publish_output"
129
+ echo "Error message: $error_message"
130
+ echo "error-message=$error_message" >> $GITHUB_OUTPUT
76
131
  exit 1
132
+ }
133
+
134
+ # In tarball mode: unpack, inject PR version, repack (so we publish a unique version)
135
+ # In normal mode, validate package.json
136
+ if [ "$tarball_mode" = true ]; then
137
+ # Validate tarball exists
138
+ if [ ! -f "$INPUT_TARBALL" ]; then
139
+ error_message="❌ ERROR: Tarball not found at path: $INPUT_TARBALL"
140
+ echo "$error_message"
141
+ echo "error-message=$error_message" >> $GITHUB_OUTPUT
142
+ exit 1
143
+ fi
144
+
145
+ echo "📦 Unpacking tarball and injecting PR version: $INPUT_TARBALL"
146
+
147
+ # Unpack to temp dir (npm pack format: top-level "package/" with package.json inside)
148
+ repack_dir=$(mktemp -d)
149
+ REPACK_DIR="$repack_dir"
150
+ tar -xzf "$INPUT_TARBALL" -C "$repack_dir"
151
+
152
+ if [ ! -f "$repack_dir/package/package.json" ]; then
153
+ error_message="❌ ERROR: Could not extract package.json from tarball (expected package/package.json)"
154
+ echo "$error_message"
155
+ echo "error-message=$error_message" >> $GITHUB_OUTPUT
156
+ exit 1
157
+ fi
158
+
159
+ package_name=$(jq -r '.name // empty' "$repack_dir/package/package.json")
160
+ if [ -z "$package_name" ] || [ "$package_name" = "null" ]; then
161
+ error_message="❌ ERROR: Tarball's package.json must have a 'name' field"
162
+ echo "$error_message"
163
+ echo "error-message=$error_message" >> $GITHUB_OUTPUT
164
+ exit 1
165
+ fi
166
+
167
+ # Generate PR-specific version (same format as normal mode) so we don't overwrite published versions
168
+ version="0.0.0-PR-${PR}--$(echo ${SHA} | cut -c -7)"
169
+ jq --arg v "$version" '.version = $v' "$repack_dir/package/package.json" > "$repack_dir/package/package.json.tmp" && mv "$repack_dir/package/package.json.tmp" "$repack_dir/package/package.json"
170
+
171
+ # Repack for publish (still secure: --ignore-scripts used when publishing)
172
+ (cd "$repack_dir" && tar -czf repack.tgz package)
173
+ TARBALL_TO_PUBLISH="$repack_dir/repack.tgz"
174
+
175
+ echo "📦 Tarball package: $package_name@$version (PR version)"
176
+ echo "package-name=$package_name" >> $GITHUB_OUTPUT
177
+ echo "version=$version" >> $GITHUB_OUTPUT
178
+ else
179
+ # Normal mode: validate package.json exists in current directory
180
+ if [ ! -f "package.json" ]; then
181
+ error_message="❌ ERROR: package.json not found in current directory. Make sure you're running this action in a directory with a package.json file"
182
+ echo "$error_message"
183
+ echo "error-message=$(extract_error "$error_message")" >> $GITHUB_OUTPUT
184
+ exit 1
185
+ fi
186
+
187
+ # Validate package.json is valid JSON
188
+ if ! jq empty package.json 2>/dev/null; then
189
+ error_message="❌ ERROR: package.json is not valid JSON"
190
+ echo "$error_message"
191
+ echo "error-message=$(extract_error "$error_message")" >> $GITHUB_OUTPUT
192
+ exit 1
193
+ fi
194
+
195
+ # Check if package has a name
196
+ package_name=$(jq -r '.name // empty' package.json)
197
+ if [ -z "$package_name" ] || [ "$package_name" = "null" ]; then
198
+ error_message="❌ ERROR: package.json must have a 'name' field"
199
+ echo "$error_message"
200
+ echo "error-message=$(extract_error "$error_message")" >> $GITHUB_OUTPUT
201
+ exit 1
202
+ fi
203
+
204
+ # Output package name for use in error handling
205
+ echo "package-name=$package_name" >> $GITHUB_OUTPUT
77
206
  fi
78
207
 
79
- # Check if package has a name
80
- package_name=$(jq -r '.name // empty' package.json)
81
- if [ -z "$package_name" ] || [ "$package_name" = "null" ]; then
82
- error_message=" ERROR: package.json must have a 'name' field"
83
- echo "$error_message"
84
- echo "error-message=$(sanitize_error "$error_message")" >> $GITHUB_OUTPUT
85
- exit 1
208
+ # Detect authentication mode and package manager
209
+ if [ -z "$INPUT_NPM_TOKEN" ]; then
210
+ echo "🔐 Using OIDC trusted publishing (no npm-token provided)"
211
+ echo "📦 Using npm for OIDC (--provenance requires npm)"
212
+
213
+ if [ -z "$ACTIONS_ID_TOKEN_REQUEST_URL" ]; then
214
+ error_message="❌ ERROR: OIDC token not available. Add 'permissions: { id-token: write }' to your workflow"
215
+ echo "$error_message"
216
+ echo "error-message=$error_message" >> $GITHUB_OUTPUT
217
+ exit 1
218
+ fi
86
219
  fi
87
220
 
88
- # Output package name for use in error handling
89
- echo "package-name=$package_name" >> $GITHUB_OUTPUT
221
+ if [ "$INPUT_NPM_TOKEN" ]; then
222
+ echo "🔐 Using token-based authentication"
90
223
 
91
- # Detect package manager
92
- if [ -f "./yarn.lock" ]; then
93
- package_manager="yarn"
94
- echo "📦 Detected package manager: yarn"
95
- elif [ -f "./pnpm-lock.yaml" ]; then
96
- package_manager="pnpm"
97
- echo "📦 Detected package manager: pnpm"
98
- else
99
- package_manager="npm"
100
- echo "📦 Detected package manager: npm"
224
+ # Token mode: use a temp userconfig file so we never overwrite or delete the project's .npmrc.
225
+ # npm merges NPM_CONFIG_USERCONFIG with project .npmrc, so custom registry/scoped config is preserved.
226
+ export NODE_AUTH_TOKEN="$INPUT_NPM_TOKEN"
227
+ NPMRC_AUTH_FILE=$(mktemp)
228
+ echo "//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}" > "$NPMRC_AUTH_FILE"
229
+ export NPM_CONFIG_USERCONFIG="$NPMRC_AUTH_FILE"
230
+
231
+ # Detect package manager for token-based publishing
232
+ if [ -f "./yarn.lock" ]; then
233
+ package_manager="yarn"
234
+ echo "📦 Detected package manager: yarn"
235
+ elif [ -f "./pnpm-lock.yaml" ]; then
236
+ package_manager="pnpm"
237
+ echo "📦 Detected package manager: pnpm"
238
+ else
239
+ package_manager="npm"
240
+ echo "📦 Detected package manager: npm"
241
+ fi
101
242
  fi
102
243
 
103
- # Generate version
104
- version="0.0.0-PR-${PR}--$(echo ${SHA} | cut -c -7)"
105
- echo "📦 Publishing $package_name@$version with $package_manager"
106
- echo "version=$version" >> $GITHUB_OUTPUT
107
-
108
- # Update package.json version (all package managers support npm version)
109
- version_output=$(npm version $version --no-git-tag-version 2>&1)
110
- version_exit_code=$?
111
- if [ $version_exit_code -ne 0 ]; then
112
- error_message="❌ ERROR: Failed to update package version. Check if the version format is valid. Error: $version_output"
113
- echo "$error_message"
114
- echo "error-message=$(sanitize_error "$error_message")" >> $GITHUB_OUTPUT
115
- exit 1
244
+ # Generate version (skip in tarball mode - already extracted)
245
+ if [ "$tarball_mode" = false ]; then
246
+ version="0.0.0-PR-${PR}--$(echo ${SHA} | cut -c -7)"
247
+ echo "📦 Publishing $package_name@$version with $package_manager"
248
+ echo "version=$version" >> $GITHUB_OUTPUT
249
+
250
+ # Update package.json version (all package managers support npm version)
251
+ version_output=$(npm version $version --no-git-tag-version 2>&1)
252
+ version_exit_code=$?
253
+ if [ $version_exit_code -ne 0 ]; then
254
+ error_message="❌ ERROR: Failed to update package version. Check if the version format is valid. Error: $version_output"
255
+ echo "$error_message"
256
+ echo "error-message=$(extract_error "$error_message")" >> $GITHUB_OUTPUT
257
+ exit 1
258
+ fi
259
+ else
260
+ echo "📦 Publishing $package_name@$version from tarball"
116
261
  fi
117
262
 
118
- # Publish package based on detected package manager
119
- case "$package_manager" in
120
- "yarn")
121
- publish_output=$(yarn publish --access public --tag pr --new-version $version --no-git-tag-version --skip-check-working-tree 2>&1)
263
+ # Publish package
264
+ if [ "$tarball_mode" = true ]; then
265
+ # SECURE TARBALL MODE: Publish repacked tarball (PR version injected) with --ignore-scripts
266
+ echo "🔒 Publishing tarball with --ignore-scripts (secure mode)"
267
+
268
+ if [ -z "$INPUT_NPM_TOKEN" ]; then
269
+ # OIDC mode with tarball
270
+ publish_output=$(npm publish "$TARBALL_TO_PUBLISH" --access public --tag pr --provenance --ignore-scripts 2>&1)
122
271
  publish_exit_code=$?
272
+
123
273
  if [ $publish_exit_code -ne 0 ]; then
124
- error_message=" ERROR: Failed to publish package with yarn. Error: $publish_output"
125
- echo "$error_message"
126
- echo "error-message=$(sanitize_error "$error_message")" >> $GITHUB_OUTPUT
127
- exit 1
274
+ handle_publish_error "OIDC (tarball)" "$publish_output"
128
275
  fi
129
- ;;
130
- "pnpm")
131
- publish_output=$(pnpm publish --no-git-checks --access public --tag pr 2>&1)
276
+ echo "✅ Successfully published $package_name@$version using OIDC (secure tarball mode)"
277
+ else
278
+ # Token mode with tarball - always use npm for tarball publishing
279
+ publish_output=$(npm publish "$TARBALL_TO_PUBLISH" --access public --tag pr --ignore-scripts 2>&1)
132
280
  publish_exit_code=$?
281
+
133
282
  if [ $publish_exit_code -ne 0 ]; then
134
- error_message=" ERROR: Failed to publish package with pnpm. Error: $publish_output"
135
- echo "$error_message"
136
- echo "error-message=$(sanitize_error "$error_message")" >> $GITHUB_OUTPUT
137
- exit 1
283
+ handle_publish_error "npm (tarball)" "$publish_output"
138
284
  fi
139
- ;;
140
- *)
141
- publish_output=$(npm publish --access public --tag pr 2>&1)
285
+ echo "✅ Successfully published $package_name@$version using npm (secure tarball mode)"
286
+ fi
287
+ else
288
+ # NORMAL MODE: Traditional publishing (INSECURE for pull_request_target)
289
+ if [ -z "$INPUT_NPM_TOKEN" ]; then
290
+ echo "📦 Publishing with OIDC trusted publishing..."
291
+
292
+ publish_output=$(npm publish --access public --tag pr --provenance 2>&1)
142
293
  publish_exit_code=$?
294
+
143
295
  if [ $publish_exit_code -ne 0 ]; then
144
- error_message=" ERROR: Failed to publish package with npm. Error: $publish_output"
145
- echo "$error_message"
146
- echo "error-message=$(sanitize_error "$error_message")" >> $GITHUB_OUTPUT
147
- exit 1
296
+ handle_publish_error "OIDC" "$publish_output"
148
297
  fi
149
- ;;
150
- esac
151
-
152
- echo "✅ Successfully published $package_name@$version using $package_manager"
298
+ echo "✅ Successfully published $package_name@$version using OIDC"
299
+ else
300
+ # Token mode: use detected package manager
301
+ case "$package_manager" in
302
+ "yarn")
303
+ publish_output=$(yarn publish --access public --tag pr --new-version $version --no-git-tag-version --skip-check-working-tree 2>&1)
304
+ publish_exit_code=$?
305
+ if [ $publish_exit_code -ne 0 ]; then
306
+ handle_publish_error "yarn" "$publish_output"
307
+ fi
308
+ ;;
309
+ "pnpm")
310
+ publish_output=$(pnpm publish --no-git-checks --access public --tag pr 2>&1)
311
+ publish_exit_code=$?
312
+ if [ $publish_exit_code -ne 0 ]; then
313
+ handle_publish_error "pnpm" "$publish_output"
314
+ fi
315
+ ;;
316
+ *)
317
+ publish_output=$(npm publish --access public --tag pr 2>&1)
318
+ publish_exit_code=$?
319
+ if [ $publish_exit_code -ne 0 ]; then
320
+ handle_publish_error "npm" "$publish_output"
321
+ fi
322
+ ;;
323
+ esac
324
+ echo "✅ Successfully published $package_name@$version using $package_manager"
325
+ fi
326
+ fi
153
327
  env:
154
- NODE_AUTH_TOKEN: ${{ inputs.npm-token }}
328
+ # CRITICAL: Use INPUT_NPM_TOKEN instead of NPM_TOKEN here to avoid
329
+ # setting NPM_TOKEN in the environment when empty (which could break OIDC)
330
+ INPUT_NPM_TOKEN: ${{ inputs.npm-token }}
331
+ INPUT_TARBALL: ${{ inputs.tarball }}
155
332
  PR: ${{ github.event.number }}
156
333
  SHA: ${{ github.event.pull_request.head.sha }}
157
334
 
158
- - uses: codfish/actions/comment@v2
335
+ - uses: codfish/actions/comment@v3
159
336
  if: failure() && inputs.comment == 'true'
160
337
  with:
161
338
  message: |
@@ -167,12 +344,19 @@ runs:
167
344
  upsert: true
168
345
  tag: ${{ inputs.comment-tag }}
169
346
 
170
- - uses: codfish/actions/comment@v2
347
+ - uses: codfish/actions/comment@v3
171
348
  if: success() && inputs.comment == 'true'
172
349
  with:
173
350
  message: |
174
351
  ✅ **PR package published successfully!**
175
352
 
176
- Install with: <code>npm install ${{ steps.publish.outputs.package-name }}@${{ steps.publish.outputs.version }}</code>
353
+ Install:
354
+
355
+ ${{ inputs.dev == 'true' && 'pnpm add -D ' || 'pnpm add ' }}${{ steps.publish.outputs.package-name }}@${{ steps.publish.outputs.version }}
356
+ ${{ inputs.dev == 'true' && 'npm install -D ' || 'npm install ' }}${{ steps.publish.outputs.package-name }}@${{ steps.publish.outputs.version }}
357
+ ${{ inputs.dev == 'true' && 'yarn add -D ' || 'yarn add ' }}${{ steps.publish.outputs.package-name }}@${{ steps.publish.outputs.version }}
358
+ ${{ inputs.dev == 'true' && 'bun add -d ' || 'bun add ' }}${{ steps.publish.outputs.package-name }}@${{ steps.publish.outputs.version }}
359
+
360
+ View on npm: https://www.npmjs.com/package/${{ steps.publish.outputs.package-name }}/v/${{ steps.publish.outputs.version }}
177
361
  upsert: true
178
362
  tag: ${{ inputs.comment-tag }}
package/package.json CHANGED
@@ -4,20 +4,25 @@
4
4
  "description": "Composite GitHub Actions for my projects.",
5
5
  "author": "Chris O'Donnell <chris@codfish.dev>",
6
6
  "license": "MIT",
7
- "version": "2.0.1",
7
+ "version": "3.3.1",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/codfish/actions.git"
11
+ },
8
12
  "publishConfig": {
9
13
  "access": "public"
10
14
  },
11
- "engines": {
12
- "node": ">=20"
13
- },
14
- "volta": {
15
- "node": "24.8.0"
16
- },
15
+ "files": [
16
+ "comment",
17
+ "npm-publish-pr",
18
+ "setup-node-and-install",
19
+ "bin",
20
+ "README.md"
21
+ ],
17
22
  "scripts": {
18
23
  "lint": "eslint .",
19
24
  "fix": "eslint . --fix",
20
- "format": "prettier --write \"**/*.{json,css,md}\" --config ./node_modules/@codfish/eslint-config/prettier.js",
25
+ "format": "prettier --write \"**/*.{json,css,md,yml}\" --config ./node_modules/@codfish/eslint-config/prettier.js",
21
26
  "test": "bash tests/scripts/test-runner.sh",
22
27
  "test:integration": "bash tests/scripts/test-runner.sh integration",
23
28
  "test:unit": "bash tests/scripts/test-runner.sh unit",
@@ -25,16 +30,16 @@
25
30
  "prepare": "husky"
26
31
  },
27
32
  "devDependencies": {
28
- "@codfish/eslint-config": "^12.1.1",
29
- "bats": "^1.10.0",
33
+ "@codfish/eslint-config": "12.3.0",
34
+ "bats": "^1.13.0",
30
35
  "doctoc": "^2.2.1",
31
- "eslint": "^9.36.0",
36
+ "eslint": "^9.39.2",
32
37
  "husky": "^9.1.7",
33
38
  "js-yaml": "^4.1.0",
34
- "lint-staged": "^16.2.0",
35
- "prettier": "^3.6.2"
39
+ "lint-staged": "^16.2.7",
40
+ "prettier": "^3.8.1"
36
41
  },
37
- "packageManager": "pnpm@10.17.1",
42
+ "packageManager": "pnpm@10.29.3",
38
43
  "commitlint": {
39
44
  "extends": [
40
45
  "./node_modules/@codfish/eslint-config/commitlint.js"