From 68d3ff9ca94423f4b2e2df612b840e2a383cb2f7 Mon Sep 17 00:00:00 2001 From: Aaron Feledy Date: Thu, 26 Feb 2026 23:58:21 -0600 Subject: [PATCH 1/3] fix: remove Node 19 and 21 test examples Node 19 and 21 are EOL odd-numbered (non-LTS) releases. Modern npm packages like minimatch@10.2.4 require Node '18 || 20 || >=22', causing yarn install to fail in these examples and cascading all tests to fail. Odd-numbered Node releases (19, 21, 23) have short support windows. Node 23 is still covered in CI since it's recent enough for current deps. Node 18, 20, 22, and 24 (the LTS releases) remain fully tested. Fixes flaky CI on examples/19 and examples/21. --- .github/workflows/pr-node-tests.yml | 2 - CHANGELOG.md | 1 + examples/19/.gitignore | 3 - examples/19/.lando.yml | 37 ------------- examples/19/README.md | 83 ---------------------------- examples/19/package.json | 27 --------- examples/19/src/app-custom.js | 28 ---------- examples/19/src/app-http.js | 21 ------- examples/19/src/app-https.js | 28 ---------- examples/21/.gitignore | 3 - examples/21/.lando.yml | 39 ------------- examples/21/README.md | 86 ----------------------------- examples/21/package.json | 27 --------- examples/21/src/app-custom.js | 28 ---------- examples/21/src/app-http.js | 21 ------- examples/21/src/app-https.js | 28 ---------- 16 files changed, 1 insertion(+), 461 deletions(-) delete mode 100644 examples/19/.gitignore delete mode 100644 examples/19/.lando.yml delete mode 100644 examples/19/README.md delete mode 100644 examples/19/package.json delete mode 100644 examples/19/src/app-custom.js delete mode 100644 examples/19/src/app-http.js delete mode 100644 examples/19/src/app-https.js delete mode 100644 examples/21/.gitignore delete mode 100644 examples/21/.lando.yml delete mode 100644 examples/21/README.md delete mode 100644 examples/21/package.json delete mode 100644 examples/21/src/app-custom.js delete mode 100644 examples/21/src/app-http.js delete mode 100644 examples/21/src/app-https.js diff --git a/.github/workflows/pr-node-tests.yml b/.github/workflows/pr-node-tests.yml index dc690dd..d10e859 100644 --- a/.github/workflows/pr-node-tests.yml +++ b/.github/workflows/pr-node-tests.yml @@ -17,9 +17,7 @@ jobs: - examples/14 - examples/16 - examples/18 - - examples/19 - examples/20 - - examples/21 - examples/22 - examples/23 - examples/24 diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ce1a43..1e1829c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * Updated `lodash-es` to `4.17.23` * Updated `tar` to `4.4.19` in examples/12 * Updated GitHub Actions dependencies +* Removed Node 19 and 21 test examples (EOL, deps like `minimatch` no longer support odd non-LTS releases) ## v1.6.0 - [December 6, 2025](https://github.com/lando/node/releases/tag/v1.6.0) diff --git a/examples/19/.gitignore b/examples/19/.gitignore deleted file mode 100644 index 740a0a4..0000000 --- a/examples/19/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -*.log -package-lock.json diff --git a/examples/19/.lando.yml b/examples/19/.lando.yml deleted file mode 100644 index 93b4f9c..0000000 --- a/examples/19/.lando.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: lando-node-19 -services: - defaults: - type: node:19 - build: - - yarn - command: /app/node_modules/.bin/nodemon src/app-http.js --watch src --ignore *.test.js - cli: - type: node - compass: - type: node:19 - globals: - grunt-cli: latest - custom: - type: node:18 - ssl: true - globals: - gulp-cli: latest - port: 3000 - build: - - yarn - command: /app/node_modules/.bin/nodemon src/app-https.js --watch src --ignore *.test.js - custom2: - type: node:19.4.0 - ssl: 4444 - port: 3000 - build: - - yarn - command: /app/node_modules/.bin/nodemon src/app-custom.js --watch src --ignore *.test.js -tooling: - grunt: - service: compass - -# This is important because it lets lando know to test against the plugin in this repo -# DO NOT REMOVE THIS! -plugins: - "@lando/node": ../.. diff --git a/examples/19/README.md b/examples/19/README.md deleted file mode 100644 index 74fa914..0000000 --- a/examples/19/README.md +++ /dev/null @@ -1,83 +0,0 @@ -# Node 19 Example - -This example exists primarily to test the following documentation: - -* [Node 14-19 Service](https://docs.devwithlando.io/tutorials/node.html) -* [Installing compass in your node service](https://docs.lando.dev/guides/using-compass-on-a-lando-node-service.html) - -## Start up tests - -Run the following commands to get up and running with this example. - -```bash -# Should start up successfully -lando poweroff -lando start -``` - -## Verification commands - -Run the following commands to validate things are rolling as they should. - -```bash -# Should use 19.x as the default version -lando exec defaults -- "env | grep NODE_VERSION=19." - -# Should use a user specified version if given -lando exec custom -- "env | grep NODE_VERSION=18." - -# Should use a user specified patch version if given -lando exec custom2 -- "env | grep NODE_VERSION=19.4.0" - -# Should serve over port 80 by default -lando exec defaults -- "curl http://localhost | grep tune" - -# Should set NODE_EXTRA_CA_CERTS with lando domain CA -lando exec defaults -- "env" | grep NODE_EXTRA_CA_CERTS | grep "$LANDO_CA_CERT" - -# Should only serve over http by default -lando exec defaults -- "curl https://localhost" || echo $? | grep 7 - -# Should serve over specified ports if given -lando exec custom -- "curl http://localhost:3000 | grep tune" - -# Should serve over https is ssl is set by user -lando exec custom -- "curl https://localhost | grep tune" - -# Should servce over a custom https port if ssl is set to a specific port -lando exec custom2 -- "curl https://localhost:4444 | grep DANCING" - -# Should run as root if it needs to -lando exec defaults -- "ps -a -u root" | grep "node" | wc -l | grep 2 -lando exec custom -- "ps -a -u root" | grep "node" | wc -l | grep 2 - -# Should run as node if it can -lando exec custom2 -- "ps -a -u node" | grep "node" | wc -l | grep 2 - -# Should install global dependencies if specified by user and have them available in PATH -lando exec custom -- "gulp -v" -lando exec custom -- "which gulp | grep /var/www/.npm-global" - -# Should PATH prefer node dependency binaries installed in /app/node_modules over global ones -lando exec custom -- "npm install gulp-cli --no-save" -lando exec custom -- "gulp -v" -lando exec custom -- "which gulp | grep /app/node_modules/.bin" -lando exec custom -- "npm uninstall gulp-cli" -lando exec custom -- "which gulp | grep /var/www/.npm-global" - -# Should not serve port for cli -lando exec cli -- "curl http://localhost" || echo $? | grep 7 - -# Should install gruntcli -lando grunt -V -``` - -## Destroy tests - -Run the following commands to trash this app like nothing ever happened. - -```bash -# Should be destroyed with success -lando destroy -y -lando poweroff -``` diff --git a/examples/19/package.json b/examples/19/package.json deleted file mode 100644 index f6e1a0b..0000000 --- a/examples/19/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "node-lando", - "version": "1.0.0", - "description": "Node example for Lando", - "main": "app.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "https://github.com/lando/lando/tree/master/examples/node" - }, - "keywords": [ - "node", - "docker", - "localdev" - ], - "author": "Mike Pirog", - "license": "MIT", - "dependencies": { - "express": "^4.15.3" - }, - "devDependencies": { - "grunt-contrib-compass": "^1.1.1", - "nodemon": "^2.0.15" - } -} diff --git a/examples/19/src/app-custom.js b/examples/19/src/app-custom.js deleted file mode 100644 index b47fc14..0000000 --- a/examples/19/src/app-custom.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Lando node express example - * - * @name taylorswift - */ - -'use strict'; - -// Load modules -const fs = require('fs'); -const http = require('http'); -const https = require('https'); -const express = require('express'); -const app = express(); - -// Create our HTTPS server options -const key = fs.readFileSync('/certs/cert.key'); -const cert = fs.readFileSync('/certs/cert.crt'); - -// Create our servers -https.createServer({key, cert}, app).listen(4444); -http.createServer(app).listen(3000); - -// Basic HTTP response -app.get('/', (req, res) => { - res.header('Content-type', 'text/html'); - return res.end('

DANCING DANCING STARLIGHT

'); -}); diff --git a/examples/19/src/app-http.js b/examples/19/src/app-http.js deleted file mode 100644 index fe682e2..0000000 --- a/examples/19/src/app-http.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Lando node express example - * - * @name taylorswift - */ - -'use strict'; - -// Load modules -const http = require('http'); -const express = require('express'); -const app = express(); - -// Create our server -http.createServer(app).listen(80); - -// Basic HTTP response -app.get('/', (req, res) => { - res.header('Content-type', 'text/html'); - return res.end('

I said "Oh my!" What a marvelous tune!!!

'); -}); diff --git a/examples/19/src/app-https.js b/examples/19/src/app-https.js deleted file mode 100644 index 84c81bf..0000000 --- a/examples/19/src/app-https.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Lando node express example - * - * @name taylorswift - */ - -'use strict'; - -// Load modules -const fs = require('fs'); -const http = require('http'); -const https = require('https'); -const express = require('express'); -const app = express(); - -// Create our HTTPS server options -const key = fs.readFileSync('/certs/cert.key'); -const cert = fs.readFileSync('/certs/cert.crt'); - -// Create our servers -https.createServer({key, cert}, app).listen(443); -http.createServer(app).listen(3000); - -// Basic HTTP response -app.get('/', (req, res) => { - res.header('Content-type', 'text/html'); - return res.end('

I said "Oh my!" What a marvelous tune!!!

'); -}); diff --git a/examples/21/.gitignore b/examples/21/.gitignore deleted file mode 100644 index 740a0a4..0000000 --- a/examples/21/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -*.log -package-lock.json diff --git a/examples/21/.lando.yml b/examples/21/.lando.yml deleted file mode 100644 index 4fbd66e..0000000 --- a/examples/21/.lando.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: lando-node-21 -services: - defaults: - type: node:21 - build: - - yarn - command: /app/node_modules/.bin/nodemon src/app-http.js --watch src --ignore *.test.js - cli: - type: node - compass: - type: node:21 - globals: - grunt-cli: latest - custom: - type: node:21 - ssl: true - globals: - gulp-cli: latest - port: 3000 - build: - - yarn - command: /app/node_modules/.bin/nodemon src/app-https.js --watch src --ignore *.test.js - custom2: - type: node:21.5.0 - ssl: 4444 - port: 3000 - build: - - yarn - command: /app/node_modules/.bin/nodemon src/app-custom.js --watch src --ignore *.test.js -tooling: - grunt: - service: compass - npx: - service: cli - -# This is important because it lets lando know to test against the plugin in this repo -# DO NOT REMOVE THIS! -plugins: - "@lando/node": ../.. diff --git a/examples/21/README.md b/examples/21/README.md deleted file mode 100644 index 61e2114..0000000 --- a/examples/21/README.md +++ /dev/null @@ -1,86 +0,0 @@ -# Node 21 Example - -This example exists primarily to test the following documentation: - -* [Node 14-21 Service](https://docs.devwithlando.io/tutorials/node.html) -* [Installing compass in your node service](https://docs.lando.dev/guides/using-compass-on-a-lando-node-service.html) - -## Start up tests - -Run the following commands to get up and running with this example. - -```bash -# Should start up successfully -lando poweroff -lando start -``` - -## Verification commands - -Run the following commands to validate things are rolling as they should. - -```bash -# Should use 21.x as the default version -lando exec defaults -- "env | grep NODE_VERSION=21." - -# Should use a user specified version if given -lando exec custom -- "env | grep NODE_VERSION=21." - -# Should use a user specified patch version if given -lando exec custom2 -- "env | grep NODE_VERSION=21.5.0" - -# Should serve over port 80 by default -lando exec defaults -- "curl http://localhost | grep tune" - -# Should set NODE_EXTRA_CA_CERTS with lando domain CA -lando exec defaults -- "env" | grep NODE_EXTRA_CA_CERTS | grep "$LANDO_CA_CERT" - -# Should only serve over http by default -lando exec defaults -- "curl https://localhost" || echo $? | grep 7 - -# Should serve over specified ports if given -lando exec custom -- "curl http://localhost:3000 | grep tune" - -# Should serve over https is ssl is set by user -lando exec custom -- "curl https://localhost | grep tune" - -# Should servce over a custom https port if ssl is set to a specific port -lando exec custom2 -- "curl https://localhost:4444 | grep DANCING" - -# Should run as root if it needs to -lando exec defaults -- "ps -a -u root" | grep "node" | wc -l | grep 2 -lando exec custom -- "ps -a -u root" | grep "node" | wc -l | grep 2 - -# Should run as node if it can -lando exec custom2 -- "ps -a -u node" | grep "node" | wc -l | grep 2 - -# Should install global dependencies if specified by user and have them available in PATH -lando exec custom -- "gulp -v" -lando exec custom -- "which gulp | grep /var/www/.npm-global" - -# Should PATH prefer node dependency binaries installed in /app/node_modules over global ones -lando exec custom -- "npm install gulp-cli --no-save" -lando exec custom -- "gulp -v" -lando exec custom -- "which gulp | grep /app/node_modules/.bin" -lando exec custom -- "npm uninstall gulp-cli" -lando exec custom -- "which gulp | grep /var/www/.npm-global" - -# Should not serve port for cli -lando exec cli -- "curl http://localhost" || echo $? | grep 7 - -# Should install gruntcli -lando grunt -V - -# Should execute npx scripts -lando npx cowsay "Hello World" -``` - -## Destroy tests - -Run the following commands to trash this app like nothing ever happened. - -```bash -# Should be destroyed with success -lando destroy -y -lando poweroff -``` diff --git a/examples/21/package.json b/examples/21/package.json deleted file mode 100644 index 7f9f428..0000000 --- a/examples/21/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "node-lando", - "version": "1.0.0", - "description": "Node example for Lando", - "main": "app.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "https://github.com/lando/lando/tree/master/examples/node" - }, - "keywords": [ - "node", - "docker", - "localdev" - ], - "author": "Mike Pirog", - "license": "MIT", - "dependencies": { - "express": "^4.19.2" - }, - "devDependencies": { - "grunt-contrib-compass": "^1.1.1", - "nodemon": "^3.0.1" - } -} diff --git a/examples/21/src/app-custom.js b/examples/21/src/app-custom.js deleted file mode 100644 index b47fc14..0000000 --- a/examples/21/src/app-custom.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Lando node express example - * - * @name taylorswift - */ - -'use strict'; - -// Load modules -const fs = require('fs'); -const http = require('http'); -const https = require('https'); -const express = require('express'); -const app = express(); - -// Create our HTTPS server options -const key = fs.readFileSync('/certs/cert.key'); -const cert = fs.readFileSync('/certs/cert.crt'); - -// Create our servers -https.createServer({key, cert}, app).listen(4444); -http.createServer(app).listen(3000); - -// Basic HTTP response -app.get('/', (req, res) => { - res.header('Content-type', 'text/html'); - return res.end('

DANCING DANCING STARLIGHT

'); -}); diff --git a/examples/21/src/app-http.js b/examples/21/src/app-http.js deleted file mode 100644 index fe682e2..0000000 --- a/examples/21/src/app-http.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Lando node express example - * - * @name taylorswift - */ - -'use strict'; - -// Load modules -const http = require('http'); -const express = require('express'); -const app = express(); - -// Create our server -http.createServer(app).listen(80); - -// Basic HTTP response -app.get('/', (req, res) => { - res.header('Content-type', 'text/html'); - return res.end('

I said "Oh my!" What a marvelous tune!!!

'); -}); diff --git a/examples/21/src/app-https.js b/examples/21/src/app-https.js deleted file mode 100644 index 84c81bf..0000000 --- a/examples/21/src/app-https.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Lando node express example - * - * @name taylorswift - */ - -'use strict'; - -// Load modules -const fs = require('fs'); -const http = require('http'); -const https = require('https'); -const express = require('express'); -const app = express(); - -// Create our HTTPS server options -const key = fs.readFileSync('/certs/cert.key'); -const cert = fs.readFileSync('/certs/cert.crt'); - -// Create our servers -https.createServer({key, cert}, app).listen(443); -http.createServer(app).listen(3000); - -// Basic HTTP response -app.get('/', (req, res) => { - res.header('Content-type', 'text/html'); - return res.end('

I said "Oh my!" What a marvelous tune!!!

'); -}); From 59da434eb8016e435a5cd6f092472a030307eee2 Mon Sep 17 00:00:00 2001 From: Aaron Feledy Date: Thu, 26 Feb 2026 23:59:57 -0600 Subject: [PATCH 2/3] fix: keep Node 21 example, pin minimatch for compat Keep examples/21 to verify compatibility with older odd-numbered Node releases. Pin minimatch to ^9.0.0 via yarn resolutions since minimatch 10.x requires Node '18 || 20 || >=22' which excludes Node 21. Still removes examples/19 (too old, images less reliable). --- .github/workflows/pr-node-tests.yml | 1 + CHANGELOG.md | 3 +- examples/21/.gitignore | 3 + examples/21/.lando.yml | 39 +++++++++++++ examples/21/README.md | 86 +++++++++++++++++++++++++++++ examples/21/package.json | 30 ++++++++++ examples/21/src/app-custom.js | 28 ++++++++++ examples/21/src/app-http.js | 21 +++++++ examples/21/src/app-https.js | 28 ++++++++++ 9 files changed, 238 insertions(+), 1 deletion(-) create mode 100644 examples/21/.gitignore create mode 100644 examples/21/.lando.yml create mode 100644 examples/21/README.md create mode 100644 examples/21/package.json create mode 100644 examples/21/src/app-custom.js create mode 100644 examples/21/src/app-http.js create mode 100644 examples/21/src/app-https.js diff --git a/.github/workflows/pr-node-tests.yml b/.github/workflows/pr-node-tests.yml index d10e859..ae13a32 100644 --- a/.github/workflows/pr-node-tests.yml +++ b/.github/workflows/pr-node-tests.yml @@ -18,6 +18,7 @@ jobs: - examples/16 - examples/18 - examples/20 + - examples/21 - examples/22 - examples/23 - examples/24 diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e1829c..7bd57f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,8 @@ * Updated `lodash-es` to `4.17.23` * Updated `tar` to `4.4.19` in examples/12 * Updated GitHub Actions dependencies -* Removed Node 19 and 21 test examples (EOL, deps like `minimatch` no longer support odd non-LTS releases) +* Removed Node 19 test example (EOL, deps like `minimatch` no longer support it) +* Fixed Node 21 test example by pinning `minimatch` to `^9.0.0` for compatibility ## v1.6.0 - [December 6, 2025](https://github.com/lando/node/releases/tag/v1.6.0) diff --git a/examples/21/.gitignore b/examples/21/.gitignore new file mode 100644 index 0000000..740a0a4 --- /dev/null +++ b/examples/21/.gitignore @@ -0,0 +1,3 @@ +node_modules +*.log +package-lock.json diff --git a/examples/21/.lando.yml b/examples/21/.lando.yml new file mode 100644 index 0000000..4fbd66e --- /dev/null +++ b/examples/21/.lando.yml @@ -0,0 +1,39 @@ +name: lando-node-21 +services: + defaults: + type: node:21 + build: + - yarn + command: /app/node_modules/.bin/nodemon src/app-http.js --watch src --ignore *.test.js + cli: + type: node + compass: + type: node:21 + globals: + grunt-cli: latest + custom: + type: node:21 + ssl: true + globals: + gulp-cli: latest + port: 3000 + build: + - yarn + command: /app/node_modules/.bin/nodemon src/app-https.js --watch src --ignore *.test.js + custom2: + type: node:21.5.0 + ssl: 4444 + port: 3000 + build: + - yarn + command: /app/node_modules/.bin/nodemon src/app-custom.js --watch src --ignore *.test.js +tooling: + grunt: + service: compass + npx: + service: cli + +# This is important because it lets lando know to test against the plugin in this repo +# DO NOT REMOVE THIS! +plugins: + "@lando/node": ../.. diff --git a/examples/21/README.md b/examples/21/README.md new file mode 100644 index 0000000..61e2114 --- /dev/null +++ b/examples/21/README.md @@ -0,0 +1,86 @@ +# Node 21 Example + +This example exists primarily to test the following documentation: + +* [Node 14-21 Service](https://docs.devwithlando.io/tutorials/node.html) +* [Installing compass in your node service](https://docs.lando.dev/guides/using-compass-on-a-lando-node-service.html) + +## Start up tests + +Run the following commands to get up and running with this example. + +```bash +# Should start up successfully +lando poweroff +lando start +``` + +## Verification commands + +Run the following commands to validate things are rolling as they should. + +```bash +# Should use 21.x as the default version +lando exec defaults -- "env | grep NODE_VERSION=21." + +# Should use a user specified version if given +lando exec custom -- "env | grep NODE_VERSION=21." + +# Should use a user specified patch version if given +lando exec custom2 -- "env | grep NODE_VERSION=21.5.0" + +# Should serve over port 80 by default +lando exec defaults -- "curl http://localhost | grep tune" + +# Should set NODE_EXTRA_CA_CERTS with lando domain CA +lando exec defaults -- "env" | grep NODE_EXTRA_CA_CERTS | grep "$LANDO_CA_CERT" + +# Should only serve over http by default +lando exec defaults -- "curl https://localhost" || echo $? | grep 7 + +# Should serve over specified ports if given +lando exec custom -- "curl http://localhost:3000 | grep tune" + +# Should serve over https is ssl is set by user +lando exec custom -- "curl https://localhost | grep tune" + +# Should servce over a custom https port if ssl is set to a specific port +lando exec custom2 -- "curl https://localhost:4444 | grep DANCING" + +# Should run as root if it needs to +lando exec defaults -- "ps -a -u root" | grep "node" | wc -l | grep 2 +lando exec custom -- "ps -a -u root" | grep "node" | wc -l | grep 2 + +# Should run as node if it can +lando exec custom2 -- "ps -a -u node" | grep "node" | wc -l | grep 2 + +# Should install global dependencies if specified by user and have them available in PATH +lando exec custom -- "gulp -v" +lando exec custom -- "which gulp | grep /var/www/.npm-global" + +# Should PATH prefer node dependency binaries installed in /app/node_modules over global ones +lando exec custom -- "npm install gulp-cli --no-save" +lando exec custom -- "gulp -v" +lando exec custom -- "which gulp | grep /app/node_modules/.bin" +lando exec custom -- "npm uninstall gulp-cli" +lando exec custom -- "which gulp | grep /var/www/.npm-global" + +# Should not serve port for cli +lando exec cli -- "curl http://localhost" || echo $? | grep 7 + +# Should install gruntcli +lando grunt -V + +# Should execute npx scripts +lando npx cowsay "Hello World" +``` + +## Destroy tests + +Run the following commands to trash this app like nothing ever happened. + +```bash +# Should be destroyed with success +lando destroy -y +lando poweroff +``` diff --git a/examples/21/package.json b/examples/21/package.json new file mode 100644 index 0000000..2eb815c --- /dev/null +++ b/examples/21/package.json @@ -0,0 +1,30 @@ +{ + "name": "node-lando", + "version": "1.0.0", + "description": "Node example for Lando", + "main": "app.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/lando/lando/tree/master/examples/node" + }, + "keywords": [ + "node", + "docker", + "localdev" + ], + "author": "Mike Pirog", + "license": "MIT", + "dependencies": { + "express": "^4.19.2" + }, + "devDependencies": { + "grunt-contrib-compass": "^1.1.1", + "nodemon": "^3.0.1" + }, + "resolutions": { + "minimatch": "^9.0.0" + } +} diff --git a/examples/21/src/app-custom.js b/examples/21/src/app-custom.js new file mode 100644 index 0000000..b47fc14 --- /dev/null +++ b/examples/21/src/app-custom.js @@ -0,0 +1,28 @@ +/** + * Lando node express example + * + * @name taylorswift + */ + +'use strict'; + +// Load modules +const fs = require('fs'); +const http = require('http'); +const https = require('https'); +const express = require('express'); +const app = express(); + +// Create our HTTPS server options +const key = fs.readFileSync('/certs/cert.key'); +const cert = fs.readFileSync('/certs/cert.crt'); + +// Create our servers +https.createServer({key, cert}, app).listen(4444); +http.createServer(app).listen(3000); + +// Basic HTTP response +app.get('/', (req, res) => { + res.header('Content-type', 'text/html'); + return res.end('

DANCING DANCING STARLIGHT

'); +}); diff --git a/examples/21/src/app-http.js b/examples/21/src/app-http.js new file mode 100644 index 0000000..fe682e2 --- /dev/null +++ b/examples/21/src/app-http.js @@ -0,0 +1,21 @@ +/** + * Lando node express example + * + * @name taylorswift + */ + +'use strict'; + +// Load modules +const http = require('http'); +const express = require('express'); +const app = express(); + +// Create our server +http.createServer(app).listen(80); + +// Basic HTTP response +app.get('/', (req, res) => { + res.header('Content-type', 'text/html'); + return res.end('

I said "Oh my!" What a marvelous tune!!!

'); +}); diff --git a/examples/21/src/app-https.js b/examples/21/src/app-https.js new file mode 100644 index 0000000..84c81bf --- /dev/null +++ b/examples/21/src/app-https.js @@ -0,0 +1,28 @@ +/** + * Lando node express example + * + * @name taylorswift + */ + +'use strict'; + +// Load modules +const fs = require('fs'); +const http = require('http'); +const https = require('https'); +const express = require('express'); +const app = express(); + +// Create our HTTPS server options +const key = fs.readFileSync('/certs/cert.key'); +const cert = fs.readFileSync('/certs/cert.crt'); + +// Create our servers +https.createServer({key, cert}, app).listen(443); +http.createServer(app).listen(3000); + +// Basic HTTP response +app.get('/', (req, res) => { + res.header('Content-type', 'text/html'); + return res.end('

I said "Oh my!" What a marvelous tune!!!

'); +}); From b98e0e63ec93b6228a9f0b958362d52ee662e940 Mon Sep 17 00:00:00 2001 From: Aaron Feledy Date: Fri, 27 Feb 2026 00:00:23 -0600 Subject: [PATCH 3/3] chore: broaden hub.docker.com todoPattern for link checker Replace specific hub.docker.com/_/node pattern with hub.docker.com to catch all Docker Hub links (they frequently rate-limit or 403 on CI). --- netlify.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netlify.toml b/netlify.toml index 760a4d7..0b3d806 100644 --- a/netlify.toml +++ b/netlify.toml @@ -10,7 +10,7 @@ [[context.deploy-preview.plugins]] package = "netlify-plugin-checklinks" [context.deploy-preview.plugins.inputs] - todoPatterns = [ "load", "CHANGELOG.html", "x.com", "twitter.com", "/v/", "https://hub.docker.com/_/node" ] + todoPatterns = [ "load", "CHANGELOG.html", "x.com", "twitter.com", "/v/", "hub.docker.com" ] skipPatterns = [ ".rss", ".gif", ".jpg" ] checkExternal = true