Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/pr-node-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ jobs:
- examples/21
- examples/22
- examples/23
- examples/24
lando-version:
- 3-edge
os:
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
## {{ UNRELEASED_VERSION }} - [{{ UNRELEASED_DATE }}]({{ UNRELEASED_LINK }})

* Added support for Node LTS `24` (up to `24.11`)
* Updated Node LTS support to include the latest minor versions for `22` (up to `22.21`) and `20` (up to `20.19`)
* Fixed `test:leia`

## v1.5.0 - [March 5, 2025](https://github.com/lando/node/releases/tag/v1.5.0)

* Updated Node support to include the latest minor versions for Node `23` (up to `23.8`), `22` (up to `22.14`), `20` (up to `20.18`), `19` (up to `19.9`), `18` (up to `18.20`), and `16` (up to `16.20`)
Expand Down
20 changes: 20 additions & 0 deletions builders/node.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,18 @@ const _ = require('lodash');
// Constants
const LEGACY_DEFAULT_VERSION = '14';
const supportedVersions = [
'24',
'24.11',
'24.10',
'24.9',
'24.8',
'24.7',
'24.6',
'24.5',
'24.4',
'24.3',
'24.2',
'24.1',
'23',
'23.8',
'23.7',
Expand All @@ -16,6 +28,13 @@ const supportedVersions = [
'23.2',
'23.1',
'22',
'22.21',
'22.20',
'22.19',
'22.18',
'22.17',
'22.16',
'22.15',
'22.14',
'22.13',
'22.12',
Expand All @@ -39,6 +58,7 @@ const supportedVersions = [
'21.2',
'21.1',
'20',
'20.19',
'20.18',
'20.17',
'20.16',
Expand Down
1 change: 1 addition & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ services:

## Supported versions

* [24](https://hub.docker.com/_/node)
* [23](https://hub.docker.com/_/node)
* [22](https://hub.docker.com/_/node)
* [21](https://hub.docker.com/_/node)
Expand Down
3 changes: 3 additions & 0 deletions examples/24/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node_modules
*.log
package-lock.json
39 changes: 39 additions & 0 deletions examples/24/.lando.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: lando-node-24
services:
defaults:
type: node:24
build:
- yarn
command: /app/node_modules/.bin/nodemon src/app-http.js --watch src --ignore *.test.js
cli:
type: node
compass:
type: node:24
globals:
grunt-cli: latest
custom:
type: node:24
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:24.7.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": ../..
86 changes: 86 additions & 0 deletions examples/24/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# Node 24 Example

This example exists primarily to test the following documentation:

* [Node 14-24 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 24.x as the default version
lando exec defaults -- "env | grep NODE_VERSION=24."

# Should use a user specified version if given
lando exec custom -- "env | grep NODE_VERSION=24."

# Should use a user specified patch version if given
lando exec custom2 -- "env | grep NODE_VERSION=24.7.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 serve 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 using ports below 1024
lando exec defaults -- pgrep -c -u root -f "node src/app-http.js" | grep 1
lando exec custom -- pgrep -c -u root -f "node src/app-https.js" | grep 1

# Should run as node if using ports 1024 and above
lando exec custom2 -- pgrep -c -u node -f "node src/app-custom.js" | grep 1

# 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
```
27 changes: 27 additions & 0 deletions examples/24/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"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"
}
}
28 changes: 28 additions & 0 deletions examples/24/src/app-custom.js
Original file line number Diff line number Diff line change
@@ -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('<h1>DANCING DANCING STARLIGHT</h1>');
});
21 changes: 21 additions & 0 deletions examples/24/src/app-http.js
Original file line number Diff line number Diff line change
@@ -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('<h1>I said "Oh my!" What a marvelous tune!!!</h1>');
});
28 changes: 28 additions & 0 deletions examples/24/src/app-https.js
Original file line number Diff line number Diff line change
@@ -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('<h1>I said "Oh my!" What a marvelous tune!!!</h1>');
});
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
"docs:preview": "vitepress preview docs",
"lint": "eslint . --ext .js --ext .mjs ",
"test:unit": "nyc --reporter=html --reporter=text mocha --timeout 5000 test/**/*.spec.js",
"test:leia": "npm run leia \"examples/**/README.md\" -c 'Destroy tests' --stdin",
"test:leia": "leia \"examples/**/README.md\" -c 'Destroy tests' --stdin",
"test": "npm run lint && npm run test:unit"
},
"dependencies": {
Expand Down
Loading