Skip to content

Commit

Permalink
(#195) Update .nvmrc file with correct Node Version
Browse files Browse the repository at this point in the history
Closes #195

* Updated `.nvmrc` and `README.md` files with correct Node version
* Added `engines` property to `package.json` to specify Node and npm version ranges
* Added `.npmrc` file and set `engine-strict` property to `true`
* Updated Node version for GitHub actions
* Updated `README.md` file `Setup` section
* Added validation script file
  • Loading branch information
Oluwaseun Longe authored and Oluwaseun Longe committed Sep 3, 2024
1 parent c7111fd commit 1759ae7
Show file tree
Hide file tree
Showing 7 changed files with 121 additions and 56 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/push-actions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: "20.11.0"
node-version: "20.15.0"
cache: "npm"
- name: Install X11 dependencies for robotjs (needed for unit testing on input-mask tests)
run: sudo apt-get install libxtst-dev libpng++-dev xvfb
Expand All @@ -35,7 +35,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: "20.11.0"
node-version: "20.15.0"
cache: "npm"
- name: Set up JDK 11 for x64
uses: actions/setup-java@v4
Expand Down
1 change: 1 addition & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
engine-strict=true
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v20.4.0
v20.15.0
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ A place to learn and share with developers what makes web work accessible. This

- nvm: A Node version manager. It allows you to install several versions of node on the same machine and change versions easily.
- [Here are instructions in how to install nvm](https://github.com/nvm-sh/nvm#usage)
- After installing nvm, install a Node version >= 18 using nvm, ideally `nvm install 20.11.0`
- After installing nvm, install a Node version >= 20.15.0 using nvm, ideally `nvm install 20.15.0`
- npm: a Node Package Manager, usually installed alongside Node
- More info: [Downloading and installing Node.js and NPM](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
- Lynx: A text-only browser used for testing for how a website will work without graphics turned on.
Expand Down Expand Up @@ -74,6 +74,17 @@ A place to learn and share with developers what makes web work accessible. This
```sh
git clone [email protected]:PublicisSapient/enable-a11y.git
cd enable-a11y
```

```sh
nvm use
```

This instructs nvm to use the Node version specified in the `.nvmrc` file located in the project root directory.

> Note: If the specified version has not been installed yet, nvm will advise to install it after running the command above.

```sh
npm clean-install
```

Expand Down
53 changes: 53 additions & 0 deletions bin/validate-node-version.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#!/usr/bin/env node

import chalk from 'chalk';
import { execSync } from 'child_process';
import fs from 'fs';
import path from 'path';

async function getRunningVersion() {
const terminalCmd = 'node --version';

try {
return execSync(terminalCmd).toString().trim();
} catch (e) {
console.log(chalk.red(`Node version validation failed while running ${terminalCmd}`), e);
}
}

async function validateVersion() {
const directory = path.resolve();
let runningVersion;

try {
const filePath = path.resolve(directory, '.nvmrc');
const fileMetadata = await fs.promises.stat(filePath);
const fileContent = fs.readFileSync(filePath, "utf8");
let specVersion;

if (fileMetadata) {
specVersion = fileContent.startsWith("v") ? fileContent : `v${fileContent};`
runningVersion = (await getRunningVersion()).trim();

if (runningVersion.trim() !== specVersion.trim()) {
console.log(chalk.red(`Your Node version ${runningVersion} does not match the specified version ${specVersion} \rfound in the .nvmrc file in your project root`) );
console.log('\n-------------\n');
console.log(chalk.red('Run command "nvm use" in your terminal before running "npm run start" again.\n'));
process.exit(1);
}
}


} catch (e) {
if (e.code !== "ENOENT") {
console.log(chalk.red('An unexpected error occurred while validating your Node version.\n'));
console.error(e);
process.exit(1);
}
console.log(chalk.red('Make sure the ".nvmrc" file from the Git repository is present in your project root directory\n'));
console.error(e);
process.exit(1);
}
}

validateVersion();
98 changes: 48 additions & 50 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,14 @@
"format": "npx prettier . --write",
"format-check": "npx prettier . --check",
"eslint": "eslint .",
"server": "node bin/promote-node-modules-to-server.js && concurrently --kill-others \"less-watch-compiler\" \"npm-watch\" \"node bin/server.js\" ",
"server": "npm run validate:version && node bin/promote-node-modules-to-server.js && concurrently --kill-others \"less-watch-compiler\" \"npm-watch\" \"node bin/server.js\" ",
"start": "npm run server",
"stylelint": "npx stylelint \"**/*.less\"",
"stylelint:fix": "npx stylelint \"**/*.less\" --fix",
"watch": "npm-watch",
"convert-modules-to-libs": "bash bin/convert-modules-to-libs.sh",
"prepare": "node .husky/install.mjs"
"prepare": "node .husky/install.mjs",
"validate:version": "node bin/validate-node-version.mjs"
},
"jest": {
"verbose": true,
Expand Down Expand Up @@ -94,6 +95,7 @@
"@prettier/plugin-php": "^0.22.2",
"accessibility-js-routines": "^3.4.1",
"babel-preset-env": "^1.7.0",
"chalk": "^5.3.0",
"chromedriver": "^126.0.4",
"concurrently": "^8.2.2",
"eslint": "^8.57.0",
Expand Down

0 comments on commit 1759ae7

Please sign in to comment.