@codfish/actions 2.0.0 → 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.
- package/README.md +135 -64
- package/bin/generate-docs.js +10 -10
- package/comment/README.md +9 -9
- package/comment/action.yml +3 -3
- package/npm-publish-pr/README.md +319 -40
- package/npm-publish-pr/action.yml +271 -87
- package/package.json +19 -14
- package/setup-node-and-install/README.md +77 -34
- package/setup-node-and-install/action.yml +40 -5
- package/.github/codeql-config.yml +0 -21
- package/.github/dependabot.yml +0 -35
- package/.github/workflows/claude-code-review.yml +0 -43
- package/.github/workflows/claude.yml +0 -38
- package/.github/workflows/release.yml +0 -48
- package/.github/workflows/security.yml +0 -103
- package/.github/workflows/update-docs.yml +0 -38
- package/.github/workflows/validate.yml +0 -210
- package/.husky/pre-commit +0 -1
- package/.nvmrc +0 -1
- package/AGENT.md +0 -149
- package/CLAUDE.md +0 -3
- package/CONTRIBUTING.md +0 -316
- package/SECURITY.md +0 -208
- package/eslint.config.js +0 -8
- package/tests/fixtures/.node-version +0 -1
- package/tests/fixtures/.nvmrc +0 -1
- package/tests/fixtures/lockfiles/package-lock.json +0 -12
- package/tests/fixtures/lockfiles/pnpm-lock.yaml +0 -9
- package/tests/fixtures/lockfiles/yarn.lock +0 -7
- package/tests/fixtures/package-json/minimal.json +0 -4
- package/tests/fixtures/package-json/scoped.json +0 -6
- package/tests/fixtures/package-json/valid.json +0 -13
- package/tests/integration/comment/basic.bats +0 -95
- package/tests/integration/npm-pr-version/basic.bats +0 -438
- package/tests/integration/setup-node-and-install/basic.bats +0 -638
- package/tests/scripts/test-helpers.sh +0 -113
- 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)
|
|
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:
|
|
10
|
-
description:
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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@
|
|
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
|
|
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
|
-
#
|
|
57
|
-
|
|
58
|
-
local
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
#
|
|
64
|
-
if [
|
|
65
|
-
|
|
66
|
-
echo "
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
#
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
#
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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
|
-
|
|
89
|
-
|
|
221
|
+
if [ "$INPUT_NPM_TOKEN" ]; then
|
|
222
|
+
echo "🔐 Using token-based authentication"
|
|
90
223
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
-
|
|
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
|
-
|
|
131
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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
|
-
|
|
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@
|
|
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@
|
|
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
|
|
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": "
|
|
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
|
-
"
|
|
12
|
-
"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
"
|
|
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": "
|
|
29
|
-
"bats": "^1.
|
|
33
|
+
"@codfish/eslint-config": "12.3.0",
|
|
34
|
+
"bats": "^1.13.0",
|
|
30
35
|
"doctoc": "^2.2.1",
|
|
31
|
-
"eslint": "^9.
|
|
36
|
+
"eslint": "^9.39.2",
|
|
32
37
|
"husky": "^9.1.7",
|
|
33
38
|
"js-yaml": "^4.1.0",
|
|
34
|
-
"lint-staged": "^16.2.
|
|
35
|
-
"prettier": "^3.
|
|
39
|
+
"lint-staged": "^16.2.7",
|
|
40
|
+
"prettier": "^3.8.1"
|
|
36
41
|
},
|
|
37
|
-
"packageManager": "pnpm@10.
|
|
42
|
+
"packageManager": "pnpm@10.29.3",
|
|
38
43
|
"commitlint": {
|
|
39
44
|
"extends": [
|
|
40
45
|
"./node_modules/@codfish/eslint-config/commitlint.js"
|