diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 0000000..3c03207
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+18
diff --git a/content/code-style/code-style-c.md b/content/code-style/code-style-c.md
index bbfd398..aa30589 100644
--- a/content/code-style/code-style-c.md
+++ b/content/code-style/code-style-c.md
@@ -26,5 +26,5 @@ None. Any further exceptions that would benefit a project should be documented a
| Tools/Procedures | Type | Notes |
| ------------------------------------------------------------ | ---------- | --------------------------------------------- |
-| [PC-lint Plus](https://www.gimpel.com/) | Commercial | Checks MISRA C automotive guidelines |
+| [PC-lint Plus](https://pclintplus.com/pc-lint-plus/) | Commercial | Checks MISRA C automotive guidelines |
| [clang-format](https://clang.llvm.org/docs/ClangFormat.html) | Free | Formats source code according to style guide. |
diff --git a/content/development-practises/packaging-and-distribution.md b/content/development-practises/packaging-and-distribution.md
index 3dc1c06..0db8fbc 100644
--- a/content/development-practises/packaging-and-distribution.md
+++ b/content/development-practises/packaging-and-distribution.md
@@ -43,7 +43,7 @@ For reusable software modules, e-Tools provides [Artifactory Pro](https://www.jf
### Python
-[Distutils](https://docs.python.org/3/library/distutils.html)(setuptools) has become the primary method for packaging and distributing python packages and scripts. By using distutils and building a package with setup.py you can easily distribute packages publically on [PyPi](https://pypi.python.org/pypi) or privately using a [Git Repository](https://pip.pypa.io/en/stable/reference/pip_install/#git) or [Artifactory](https://www.jfrog.com/confluence/display/RTF/PyPI+Repositories).
+[Distutils](https://docs.python.org/3/library/)(setuptools) has become the primary method for packaging and distributing python packages and scripts. By using distutils and building a package with setup.py you can easily distribute packages publically on [PyPi](https://pypi.python.org/pypi) or privately using a [Git Repository](https://pip.pypa.io/en/stable/reference/pip_install/#git) or [Artifactory](https://www.jfrog.com/confluence/display/RTF/PyPI+Repositories).
This [Quick Start](https://the-hitchhikers-guide-to-packaging.readthedocs.io/en/latest/quickstart.html) give a good high level overview on building your first Python package. For more advanced features refer to the[ setuptools documentation](https://setuptools.readthedocs.io/en/latest/setuptools.html#basic-use).
diff --git a/content/development-practises/unit-testing.md b/content/development-practises/unit-testing.md
index b37c227..77c4363 100644
--- a/content/development-practises/unit-testing.md
+++ b/content/development-practises/unit-testing.md
@@ -96,7 +96,7 @@ Following are some of the good practices that are applicable regardless of the d
| ---------- | ----------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| C# | NUnit
XUnit
MSUnitTest | NUnit mocks
Moq
[NSubstitute](https://nsubstitute.github.io/) | OpenCover
ReportGenerator |
| C++ | [Google Test](https://github.com/google/googletest)
[Catch2](https://github.com/catchorg/Catch2) | [Google Mock](https://github.com/google/googletest/tree/main/googlemock)
[FakeIt](https://github.com/eranpeer/FakeIt) | [Google Test Adapter](https://github.com/csoltenborn/GoogleTestAdapter)
[TeamCity](https://www.jetbrains.com/teamcity/) |
-| Java | [JUnit](https://junit.org/)
[Test NG](https://testng.org/doc/) | [Mockito](https://site.mockito.org/)
[JMockit](https://jmockit.github.io/) | [Gradle](https://gradle.org/)
[Surefire plugin](https://maven.apache.org/surefire/maven-surefire-plugin/)
[Jacoco](https://www.eclemma.org/jacoco/)
[SonarQube](https://www.sonarqube.org/) |
+| Java | [JUnit](https://junit.org/)
[Test NG](https://testng.org/) | [Mockito](https://site.mockito.org/)
[JMockit](https://jmockit.github.io/) | [Gradle](https://gradle.org/)
[Surefire plugin](https://maven.apache.org/surefire/maven-surefire-plugin/)
[Jacoco](https://www.eclemma.org/jacoco/)
[SonarQube](https://www.sonarqube.org/) |
| JavaScript | [Jest](https://jestjs.io/)
[Jasmine](https://github.com/jasmine/) | Jasmine | [Jest](https://jestjs.io/)
Karma
Cobertura |
| Python | [pytest](https://docs.pytest.org/en/latest/) | [pytest-mock](https://pypi.python.org/pypi/pytest-mock)
wrapper for [mock](https://pypi.python.org/pypi/mock) | [pytest-cov](https://pytest-cov.readthedocs.io/en/latest/) |
diff --git a/package-lock.json b/package-lock.json
index 0d94a38..3ec8ea0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,8 +10,8 @@
"license": "private",
"devDependencies": {
"@fullhuman/postcss-purgecss": "5.0.0",
- "@trimbleinc/modus-bootstrap": "1.6.2",
- "autoprefixer": "10.4.16",
+ "@trimbleinc/modus-bootstrap": "1.6.3",
+ "autoprefixer": "10.4.17",
"clipboard": "2.0.11",
"eslint": "8.56.0",
"eslint-config-google": "0.14.0",
@@ -21,14 +21,14 @@
"jquery": "3.7.1",
"npm-run-all": "4.1.5",
"popper.js": "1.16.1",
- "postcss": "8.4.32",
+ "postcss": "8.4.33",
"postcss-cli": "11.0.0",
- "prettier": "3.1.1",
- "stylelint": "16.1.0",
- "stylelint-config-standard-scss": "12.0.0"
+ "prettier": "3.2.4",
+ "stylelint": "16.2.0",
+ "stylelint-config-standard-scss": "13.0.0"
},
"engines": {
- "node": ">=16"
+ "node": ">=18"
}
},
"node_modules/@aashutoshrathi/word-wrap": {
@@ -589,9 +589,9 @@
"dev": true
},
"node_modules/@trimbleinc/modus-bootstrap": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/@trimbleinc/modus-bootstrap/-/modus-bootstrap-1.6.2.tgz",
- "integrity": "sha512-t8Cxro8dF6jNx3pj9n/yIBQXwUSWY5Knlv/k+5kFrAMlpTDvISxB/2RlgSEjjHDHGU7+Hsde+tT0BHgmroKfJg==",
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/@trimbleinc/modus-bootstrap/-/modus-bootstrap-1.6.3.tgz",
+ "integrity": "sha512-8pDuaOOCyvDijiBuMtCOrOImMnykTp/yJj6VbfV2i8t1hzTCtJgSNT3rvqRTP+XsZU9mJ6opyssNC4Tnd+gw+g==",
"dev": true,
"dependencies": {
"bootstrap": "4.6.2"
@@ -907,9 +907,9 @@
"dev": true
},
"node_modules/autoprefixer": {
- "version": "10.4.16",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz",
- "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==",
+ "version": "10.4.17",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz",
+ "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==",
"dev": true,
"funding": [
{
@@ -926,9 +926,9 @@
}
],
"dependencies": {
- "browserslist": "^4.21.10",
- "caniuse-lite": "^1.0.30001538",
- "fraction.js": "^4.3.6",
+ "browserslist": "^4.22.2",
+ "caniuse-lite": "^1.0.30001578",
+ "fraction.js": "^4.3.7",
"normalize-range": "^0.1.2",
"picocolors": "^1.0.0",
"postcss-value-parser": "^4.2.0"
@@ -1072,9 +1072,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.22.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz",
- "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==",
+ "version": "4.22.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
+ "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==",
"dev": true,
"funding": [
{
@@ -1091,9 +1091,9 @@
}
],
"dependencies": {
- "caniuse-lite": "^1.0.30001541",
- "electron-to-chromium": "^1.4.535",
- "node-releases": "^2.0.13",
+ "caniuse-lite": "^1.0.30001565",
+ "electron-to-chromium": "^1.4.601",
+ "node-releases": "^2.0.14",
"update-browserslist-db": "^1.0.13"
},
"bin": {
@@ -1187,9 +1187,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001559",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001559.tgz",
- "integrity": "sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA==",
+ "version": "1.0.30001579",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz",
+ "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==",
"dev": true,
"funding": [
{
@@ -1559,9 +1559,9 @@
"dev": true
},
"node_modules/electron-to-chromium": {
- "version": "1.4.572",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.572.tgz",
- "integrity": "sha512-RlFobl4D3ieetbnR+2EpxdzFl9h0RAJkPK3pfiwMug2nhBin2ZCsGIAJWdpNniLz43sgXam/CgipOmvTA+rUiA==",
+ "version": "1.4.643",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.643.tgz",
+ "integrity": "sha512-QHscvvS7gt155PtoRC0dR2ilhL8E9LHhfTQEq1uD5AL0524rBLAwpAREFH06f87/e45B9XkR6Ki5dbhbCsVEIg==",
"dev": true
},
"node_modules/emoji-regex": {
@@ -3324,9 +3324,9 @@
}
},
"node_modules/meow": {
- "version": "13.0.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-13.0.0.tgz",
- "integrity": "sha512-4Hu+75Vo7EOR+8C9RmkabfLijuwd9SrzQ8f0SyC4qZZwU6BlxeOt5ulF3PGCpcMJX4hI+ktpJhea0P6PN1RiWw==",
+ "version": "13.1.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-13.1.0.tgz",
+ "integrity": "sha512-o5R/R3Tzxq0PJ3v3qcQJtSvSE9nKOLSAaDuuoMzDVuGTwHdccMWcYomh9Xolng2tjT6O/Y83d+0coVGof6tqmA==",
"dev": true,
"engines": {
"node": ">=18"
@@ -3471,9 +3471,9 @@
}
},
"node_modules/node-releases": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
- "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
"dev": true
},
"node_modules/normalize-package-data": {
@@ -4095,9 +4095,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.32",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz",
- "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==",
+ "version": "8.4.33",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz",
+ "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==",
"dev": true,
"funding": [
{
@@ -4271,9 +4271,9 @@
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.0.13",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
- "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+ "version": "6.0.15",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
+ "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
"dev": true,
"dependencies": {
"cssesc": "^3.0.0",
@@ -4299,9 +4299,9 @@
}
},
"node_modules/prettier": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz",
- "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz",
+ "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==",
"dev": true,
"bin": {
"prettier": "bin/prettier.cjs"
@@ -5153,14 +5153,14 @@
}
},
"node_modules/stylelint": {
- "version": "16.1.0",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.1.0.tgz",
- "integrity": "sha512-Sh1rRV0lN1qxz/QsuuooLWsIZ/ona7NKw/fRZd6y6PyXYdD2W0EAzJ8yJcwSx4Iw/muz0CF09VZ+z4EiTAcKmg==",
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.2.0.tgz",
+ "integrity": "sha512-gwqU5AkIb52wrAzzn+359S3NIJDMl02TXLUaV2tzA/L6jUdpTwNt+MCxHlc8+Hb2bUHlYVo92YeSIryF2gJthA==",
"dev": true,
"dependencies": {
- "@csstools/css-parser-algorithms": "^2.4.0",
- "@csstools/css-tokenizer": "^2.2.2",
- "@csstools/media-query-list-parser": "^2.1.6",
+ "@csstools/css-parser-algorithms": "^2.5.0",
+ "@csstools/css-tokenizer": "^2.2.3",
+ "@csstools/media-query-list-parser": "^2.1.7",
"@csstools/selector-specificity": "^3.0.1",
"balanced-match": "^2.0.0",
"colord": "^2.9.3",
@@ -5180,14 +5180,14 @@
"is-plain-object": "^5.0.0",
"known-css-properties": "^0.29.0",
"mathml-tag-names": "^2.1.3",
- "meow": "^13.0.0",
+ "meow": "^13.1.0",
"micromatch": "^4.0.5",
"normalize-path": "^3.0.0",
"picocolors": "^1.0.0",
- "postcss": "^8.4.32",
+ "postcss": "^8.4.33",
"postcss-resolve-nested-selector": "^0.1.1",
"postcss-safe-parser": "^7.0.0",
- "postcss-selector-parser": "^6.0.13",
+ "postcss-selector-parser": "^6.0.15",
"postcss-value-parser": "^4.2.0",
"resolve-from": "^5.0.0",
"string-width": "^4.2.3",
@@ -5244,9 +5244,9 @@
}
},
"node_modules/stylelint-config-standard": {
- "version": "35.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-35.0.0.tgz",
- "integrity": "sha512-JyQrNZk2BZwVKFauGGxW2U6RuhIfQ4XoHHo+rBzMHcAkLnwI/knpszwXjzxiMgSfcxbZBckM7Vq4LHoANTR85g==",
+ "version": "36.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-36.0.0.tgz",
+ "integrity": "sha512-3Kjyq4d62bYFp/Aq8PMKDwlgUyPU4nacXsjDLWJdNPRUgpuxALu1KnlAHIj36cdtxViVhXexZij65yM0uNIHug==",
"dev": true,
"dependencies": {
"stylelint-config-recommended": "^14.0.0"
@@ -5255,24 +5255,24 @@
"node": ">=18.12.0"
},
"peerDependencies": {
- "stylelint": "^16.0.0"
+ "stylelint": "^16.1.0"
}
},
"node_modules/stylelint-config-standard-scss": {
- "version": "12.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-12.0.0.tgz",
- "integrity": "sha512-ATh3EcEOLZq0iwlFaBdIsSavrla0lNtJ7mO7hdE7DgVT6imozRggFSqd4cFcjzVnOLKv/uJT63MmqA1acIflbw==",
+ "version": "13.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-13.0.0.tgz",
+ "integrity": "sha512-WaLvkP689qSYUpJQPCo30TFJSSc3VzvvoWnrgp+7PpVby5o8fRUY1cZcP0sePZfjrFl9T8caGhcKg0GO34VDiQ==",
"dev": true,
"dependencies": {
"stylelint-config-recommended-scss": "^14.0.0",
- "stylelint-config-standard": "^35.0.0"
+ "stylelint-config-standard": "^36.0.0"
},
"engines": {
"node": ">=18.12.0"
},
"peerDependencies": {
"postcss": "^8.3.3",
- "stylelint": "^16.0.2"
+ "stylelint": "^16.1.0"
},
"peerDependenciesMeta": {
"postcss": {
diff --git a/package.json b/package.json
index cf69010..cafdd07 100644
--- a/package.json
+++ b/package.json
@@ -9,12 +9,12 @@
},
"repository": {
"type": "git",
- "url": "https://github.com/trimble-oss/devguide.git"
+ "url": "git+https://github.com/trimble-oss/devguide.git"
},
"license": "private",
"author": "Trimble",
"engines": {
- "node": ">=16"
+ "node": ">=18"
},
"scripts": {
"build": "npm-run-all lint-css && npx hugo && npm run lint-html",
@@ -23,7 +23,7 @@
"lint-css": "stylelint \"assets/css/*.scss\" --fix",
"lint-html": "htmlhint \"layouts/**/*.html\"",
"lint-js": "eslint \"assets/js/*.js\" --fix",
- "lint-links": "npx linkinator ./public/",
+ "lint-links": "npx linkinator ./public/ --silent --recurse",
"lint-markdown": "npx markdownlint content/**/*.md",
"lint-spellcheck": "npx cspell \"content/**/*.md\" --no-progress",
"prettier": "prettier --write \"assets/**/*.*s\"",
@@ -33,8 +33,8 @@
},
"devDependencies": {
"@fullhuman/postcss-purgecss": "5.0.0",
- "@trimbleinc/modus-bootstrap": "1.6.2",
- "autoprefixer": "10.4.16",
+ "@trimbleinc/modus-bootstrap": "1.6.3",
+ "autoprefixer": "10.4.17",
"clipboard": "2.0.11",
"eslint": "8.56.0",
"eslint-config-google": "0.14.0",
@@ -44,11 +44,11 @@
"jquery": "3.7.1",
"npm-run-all": "4.1.5",
"popper.js": "1.16.1",
- "postcss": "8.4.32",
+ "postcss": "8.4.33",
"postcss-cli": "11.0.0",
- "prettier": "3.1.1",
- "stylelint": "16.1.0",
- "stylelint-config-standard-scss": "12.0.0"
+ "prettier": "3.2.4",
+ "stylelint": "16.2.0",
+ "stylelint-config-standard-scss": "13.0.0"
},
"hugo-bin": {
"buildTags": "extended"