ultimate-jekyll-manager 1.9.14 → 1.9.16
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/CLAUDE.md
CHANGED
|
@@ -55,6 +55,8 @@ The only things that ARE safe to run inside UJM itself:
|
|
|
55
55
|
|
|
56
56
|
### For Framework Development (This Repository)
|
|
57
57
|
|
|
58
|
+
> **🚫 NEVER use `npx mgr ...` from the framework repo.** `npx mgr` is for CONSUMER projects only (where the bin is linked in `node_modules/.bin/`). From the framework repo, use `npm test`, `npm start`, etc. — the `scripts` in `package.json` call the local `bin/` directly. This applies to ALL four OMEGA frameworks (BEM/UJM/BXM/EM).
|
|
59
|
+
|
|
58
60
|
1. `npm install` — install UJM's own deps
|
|
59
61
|
2. `npm start` (≡ `npm run prepare:watch`) — copies `src/` → `dist/` on file change
|
|
60
62
|
3. Test in the **designated test consumer** — `../ultimate-jekyll-website` is UJM's consumer for validating framework changes end-to-end (exercise any consumer-level flow there freely: builds, tests, runtime). From inside it, run `npx mgr install dev` to swap UJM to this local repo — required whenever you edit the framework source and want the consumer to pick up the changes (the consumer otherwise keeps its installed `node_modules/ultimate-jekyll-manager`). Reverse with `npx mgr install live`.
|
|
@@ -175,6 +177,7 @@ Note: `-t` short alias belongs to `translation`. The `test` command uses `--test
|
|
|
175
177
|
|
|
176
178
|
## Development Workflow
|
|
177
179
|
|
|
180
|
+
- **🚫 NEVER use `npx mgr ...` from the framework repo** — `npx mgr` is for CONSUMER projects only (where the bin lives in `node_modules/.bin/`). From the framework repo, use `npm test`, `npm start`, etc. — the `scripts` in `package.json` call `node bin/ultimate-jekyll-manager` directly. This applies to ALL four OMEGA frameworks (BEM/UJM/BXM/EM).
|
|
178
181
|
- **🚫 NEVER run `npm start` in a consumer project** — the user runs the dev server; running it again kills theirs. Assume it's already running; if it isn't, **instruct the user to run it** rather than running it yourself. Instead, **check `logs/dev.log`** after editing files to confirm the watcher recompiled successfully (`Reloading Browsers...` = success; `errored` = fix the error) — never tail/attach to the process. If editing multiple files, check the log once after the last edit. A change that breaks the build is not a completed change. Running `npx mgr test` is fine.
|
|
179
182
|
- **Live-test UI changes via CDP.** After code changes compile, use the `chrome-devtools` MCP tools (screenshots, click, evaluate JS, console logs) to verify the change works in the running browser. This is the primary way to confirm UI changes — type-checking and test suites verify code correctness, not feature correctness. Read the URL from the consumer's `.temp/_config_browsersync.yml`. Prefer `https://localhost:4000`; fall back to the local network IP (e.g. `https://192.168.x.x:4000`) if localhost doesn't connect. See [docs/cdp-debugging.md](docs/cdp-debugging.md) + `~/.claude/mcp-server/servers/chrome-devtools/CLAUDE.md`.
|
|
180
183
|
|
|
@@ -36,7 +36,7 @@ jobs:
|
|
|
36
36
|
git config --global user.email "$GITHUB_ACTOR@users.noreply.github.com"
|
|
37
37
|
git config --global user.name "$GITHUB_ACTOR"
|
|
38
38
|
- name: Checkout main branch
|
|
39
|
-
uses: actions/checkout@
|
|
39
|
+
uses: actions/checkout@v7
|
|
40
40
|
with:
|
|
41
41
|
token: ${{ secrets.GH_TOKEN }}
|
|
42
42
|
fetch-depth: 0
|
|
@@ -57,13 +57,26 @@ jobs:
|
|
|
57
57
|
run: |
|
|
58
58
|
bundle install
|
|
59
59
|
- name: Setup node
|
|
60
|
-
uses: actions/setup-node@
|
|
60
|
+
uses: actions/setup-node@v6
|
|
61
61
|
with:
|
|
62
62
|
node-version: ${{ env.NODE_VERSION }}
|
|
63
63
|
- name: Install Socket Firewall
|
|
64
64
|
run: npm install -g sfw
|
|
65
|
-
-
|
|
66
|
-
|
|
65
|
+
# Retry up to 3 times — transient ECONNRESET / socket hang-ups on GH Actions
|
|
66
|
+
# runners are common, and sfw crashes (instead of gracefully degrading) when
|
|
67
|
+
# a fetch fails mid-flight, killing the whole job.
|
|
68
|
+
- name: Run node install (with retry)
|
|
69
|
+
run: |
|
|
70
|
+
for attempt in 1 2 3; do
|
|
71
|
+
echo "Install attempt $attempt of 3..."
|
|
72
|
+
sfw npm install && break
|
|
73
|
+
echo "Attempt $attempt failed"
|
|
74
|
+
if [ "$attempt" -eq 3 ]; then
|
|
75
|
+
echo "All 3 install attempts failed"
|
|
76
|
+
exit 1
|
|
77
|
+
fi
|
|
78
|
+
sleep 15
|
|
79
|
+
done
|
|
67
80
|
- name: Log dependency versions
|
|
68
81
|
run: |
|
|
69
82
|
echo "🖥️ Unix Versions: "
|
|
@@ -361,16 +361,18 @@ async function rewriteOversizedSources(files) {
|
|
|
361
361
|
}
|
|
362
362
|
|
|
363
363
|
// Lowercase the extension on each Vinyl file's path before piping into gulp-responsive-modern.
|
|
364
|
-
//
|
|
365
|
-
//
|
|
366
|
-
//
|
|
367
|
-
// on-disk file untouched while letting the plugin recognize the format.
|
|
364
|
+
// On case-sensitive filesystems (Linux CI), the on-disk file may be IMG_3119.JPG while the
|
|
365
|
+
// lowercased path points to a nonexistent IMG_3119.jpg. We read file.contents into a buffer
|
|
366
|
+
// first so sharp uses the buffer (not the renamed path), then safely lowercase the extension.
|
|
368
367
|
function lowercaseExtTransform() {
|
|
369
368
|
return new Transform({
|
|
370
369
|
objectMode: true,
|
|
371
370
|
transform(file, _enc, cb) {
|
|
372
371
|
const ext = path.extname(file.path);
|
|
373
372
|
if (ext && ext !== ext.toLowerCase()) {
|
|
373
|
+
if (file.isNull()) {
|
|
374
|
+
file.contents = jetpack.read(file.path, 'buffer');
|
|
375
|
+
}
|
|
374
376
|
file.path = file.path.slice(0, -ext.length) + ext.toLowerCase();
|
|
375
377
|
}
|
|
376
378
|
cb(null, file);
|
|
@@ -439,7 +441,7 @@ async function determineFilesToProcess(files, meta, githubCache, stats) {
|
|
|
439
441
|
// Track expected outputs for this file
|
|
440
442
|
const baseName = path.basename(file, path.extname(file));
|
|
441
443
|
const dirName = path.dirname(relativePath).replace(/^src\/assets\/images\/?/, '');
|
|
442
|
-
const originalExt = path.extname(file).slice(1);
|
|
444
|
+
const originalExt = path.extname(file).slice(1).toLowerCase();
|
|
443
445
|
|
|
444
446
|
// Only generate responsive outputs for supported formats
|
|
445
447
|
// Other formats (svg, gif, webp) pass through as-is
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ultimate-jekyll-manager",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.16",
|
|
4
4
|
"description": "Ultimate Jekyll dependency manager",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"files": [
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
"gulp-filter": "^10.0.0",
|
|
100
100
|
"gulp-postcss": "^10.0.0",
|
|
101
101
|
"gulp-rename": "^2.1.0",
|
|
102
|
-
"gulp-responsive-modern": "^1.0.
|
|
102
|
+
"gulp-responsive-modern": "^1.0.1",
|
|
103
103
|
"gulp-sass": "^6.0.1",
|
|
104
104
|
"html-minifier-terser": "^7.2.0",
|
|
105
105
|
"html-validate": "^11.5.3",
|