From 2621f46316ad1e597be51013e408d12ed64c59ac Mon Sep 17 00:00:00 2001 From: SMTP Relay & Email - Free Send <60409540+msgwing@users.noreply.github.com> Date: Sun, 30 Aug 2026 23:38:43 +0200 Subject: [PATCH 1/3] chore(zerosmtp-check): bump to 1.3.0 - explain/explainJson need publishing Found today while building the VS Code extension: npm still serves 1.2.1 (published 2026-08-22 17:58), but #300 (2026-08-26) exported explain()/explainJson() as part of the public API and added a 25-test suite - four days of real functionality nobody running `npx zerosmtp-check` from npm actually has yet. The VS Code extension had to depend on this package via file:../zerosmtp-check specifically because of this gap. Version bump only - .github/workflows/publish-npm.yml is manual by its own design ("publishing is the owner's decision", a version is permanent once published). Filing a do-akceptacji issue with the exact dispatch instructions rather than triggering it myself. --- packages/zerosmtp-check/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/zerosmtp-check/package.json b/packages/zerosmtp-check/package.json index f6e7e91..949da0b 100644 --- a/packages/zerosmtp-check/package.json +++ b/packages/zerosmtp-check/package.json @@ -1,6 +1,6 @@ { "name": "zerosmtp-check", - "version": "1.2.1", + "version": "1.3.0", "description": "Check whether outbound SMTP works from this machine, and say what an SMTP error actually means. TCP, STARTTLS/implicit TLS, certificates and AUTH against any host, plus --explain for the refusal your log, library or printer panel printed. No credentials, no mail sent, no dependencies.", "type": "module", "bin": { From 261a05bd36de1c5aaddf77712a1561d45a30c08b Mon Sep 17 00:00:00 2001 From: SMTP Relay & Email - Free Send <60409540+msgwing@users.noreply.github.com> Date: Sun, 30 Aug 2026 23:47:48 +0200 Subject: [PATCH 2/3] chore(vscode): use the published zerosmtp-check@1.3.0 instead of file: Gap closed today (#386, #387): zerosmtp-check@1.3.0 is now on npm with explain()/explainJson() actually exported. Switched the dependency from file:../zerosmtp-check to ^1.3.0 and verified end to end - reinstalled from a clean node_modules, confirmed the resolved package.json really is 1.3.0, ran the extension's own test suite against it (9/9), and ran the exact dynamic import() the extension code uses (zerosmtp-check/index.js) directly to confirm explain() is callable from the real published package, not just present by version number. --- packages/zerosmtp-vscode/README.md | 11 +++-------- packages/zerosmtp-vscode/package.json | 2 +- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/packages/zerosmtp-vscode/README.md b/packages/zerosmtp-vscode/README.md index 3052c98..52589db 100644 --- a/packages/zerosmtp-vscode/README.md +++ b/packages/zerosmtp-vscode/README.md @@ -41,14 +41,9 @@ gap: whether one already exists, and creating one is not something this task can do on its own. `"private": true` is set so a stray `vsce publish` can't ship this by accident. -- **The `zerosmtp-check` dependency is `file:../zerosmtp-check`**, not a - published npm version. As of this writing, the npm registry's - `zerosmtp-check@1.2.1` predates the `explain`/`explainJson` exports this - extension calls — they exist in this repository's copy of `index.js` but - were never published under a new version. Before this extension is packaged - for real, `zerosmtp-check` needs a version bump and a publish - (`.github/workflows/publish-npm.yml`), and this dependency needs to switch - from the `file:` reference to that published semver range. +- ~~The `zerosmtp-check` dependency is `file:../zerosmtp-check`~~ — resolved + 2026-08-30: `zerosmtp-check@1.3.0` (with `explain`/`explainJson` exported) + is now published, and the dependency is a real semver range (`^1.3.0`). - **The scanner is a heuristic, deliberately.** It has no test against every config format in the wild (only `appsettings.json`, `web.config`, and `.env` shapes are covered by `test/scanner.test.js`), and it does not parse diff --git a/packages/zerosmtp-vscode/package.json b/packages/zerosmtp-vscode/package.json index 53754f1..962bfe1 100644 --- a/packages/zerosmtp-vscode/package.json +++ b/packages/zerosmtp-vscode/package.json @@ -59,6 +59,6 @@ "test": "node --test test/*.test.js" }, "dependencies": { - "zerosmtp-check": "file:../zerosmtp-check" + "zerosmtp-check": "^1.3.0" } } From 22cc0800d2755fb476a9e9ff13b837ea8f4aaa4d Mon Sep 17 00:00:00 2001 From: SMTP Relay & Email - Free Send <60409540+msgwing@users.noreply.github.com> Date: Sun, 30 Aug 2026 23:55:21 +0200 Subject: [PATCH 3/3] ci: build Jekyll on every PR/push, not only on deploy to main Found during review of #366: pages-deploy.yml only builds Jekyll on push to main, so a broken Liquid template (unclosed {% if %}/{% elsif %}, a bad include) in a PR passes every other check here and only breaks once already on production. That PR was verified by hand (grepping the if/elsif/endif chain) rather than by a gate - which worked once but doesn't scale to every future change in docs/_layouts/ or docs/_config.yml. Closes #367. New job runs the same build pages-deploy.yml runs (same Ruby version, same --config flags, same fetch-depth: 0 for jekyll-last-modified-at), minus the deploy steps. No Ruby available locally to test this directly - the real test is this PR's own CI run. --- .github/workflows/lint.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index bb0933e..8db5c4f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -111,6 +111,29 @@ jobs: - name: Workflow files parse, and carry no control characters run: python .github/check-workflows.py + # Found 2026-08-30, during review of #366: pages-deploy.yml only builds + # Jekyll on push to main, so a broken Liquid template (an unclosed + # {% if %}/{% elsif %}, a bad include) in a pull request passes every other + # check here and only breaks once it has already reached production. That + # PR was verified by hand (grepping the if/elsif/endif chain) instead of by + # a gate - which worked once, but doesn't scale to every future change in + # docs/_layouts/ or docs/_config.yml. This job runs the same build + # pages-deploy.yml runs, without the deploy steps, on every push and PR. + jekyll-build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + with: + fetch-depth: 0 # jekyll-last-modified-at needs real per-file git log, same reason pages-deploy.yml uses it + - uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.3' + bundler-cache: true + working-directory: docs + - name: Build with Jekyll + working-directory: docs + run: bundle exec jekyll build --destination _site --config _config.yml,_config_actions.yml + bash: needs: changes if: needs.changes.outputs.code == 'true'