1+ name : Validate package-lock.json Tests
2+ on : [push, pull_request]
3+
4+ jobs :
5+ run-package-lock-validation :
6+ runs-on : ubuntu-latest
7+ timeout-minutes : 90
8+ concurrency :
9+ group : ${{ github.workflow }}-${{ github.ref }}
10+ cancel-in-progress : true
11+ steps :
12+ - name : Checkout code
13+ uses : actions/checkout@v4
14+
15+ - name : Set up Node.js
16+ uses : actions/setup-node@v3
17+ with :
18+ node-version : 22
19+
20+ - name : Backup the current package-lock.json
21+ run : |
22+ # Backup the current package-lock.json
23+ mv package-lock.json package-lock-backup.json
24+
25+ # Generate a new package-lock.json
26+ npm install
27+
28+ - name : Validate top-level versions in package-lock.json
29+ run : |
30+ # Validate the main version field
31+ top_version_backup=$(jq -r '.version' package-lock-backup.json)
32+ top_version_new=$(jq -r '.version' package-lock.json)
33+
34+ # Define the ANSI escape code for red
35+ RED='\033[0;31m'
36+ NC='\033[0m' # No Color (resets the color)
37+
38+ if [ "$top_version_backup" != "$top_version_new" ]; then
39+ echo "The top-level version in package-lock.json is inconsistent."
40+ echo -e "${RED}Original version : $top_version_backup${NC}"
41+ echo -e "${RED}Generated version : $top_version_new${NC}"
42+ exit 1
43+ fi
44+
45+ - name : Validate dependencies top-level versions in package-lock.json
46+ run : |
47+ # Extract and validate top-level module versions
48+ jq '.packages[""].dependencies' package-lock-backup.json > top-level-versions-backup.json
49+ jq '.packages[""].dependencies' package-lock.json > top-level-versions-new.json
50+
51+ if ! diff -q top-level-versions-backup.json top-level-versions-new.json > /dev/null; then
52+ echo -e "${RED}Top-level module versions in package-lock.json are inconsistent.${NC}"
53+ echo -e "${RED}Differences:${NC}"
54+ diff top-level-versions-backup.json top-level-versions-new.json || true
55+ exit 1
56+ else
57+ echo "Top-level module versions are consistent. Validation passed."
58+ fi
59+
60+ - name : Validate devDependencies top-level versions in package-lock.json
61+ run : |
62+ # Extract and validate top-level module versions
63+ jq '.packages[""].devDependencies' package-lock-backup.json > top-level-versions-backup.json
64+ jq '.packages[""].devDependencies' package-lock.json > top-level-versions-new.json
65+
66+
67+ # Define the ANSI escape code for red
68+ RED='\033[0;31m'
69+ NC='\033[0m' # No Color (resets the color)
70+
71+ if ! diff -q top-level-versions-backup.json top-level-versions-new.json > /dev/null; then
72+ echo -e "${RED}Top-level module versions in package-lock.json are inconsistent.${NC}"
73+ echo -e "${RED}Differences:${NC}"
74+ diff top-level-versions-backup.json top-level-versions-new.json || true
75+ exit 1
76+ else
77+ echo "Top-level module versions are consistent. Validation passed."
78+ fi
79+
0 commit comments