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