|
3 | 3 | # It performs the following steps: |
4 | 4 | # 1. Creates a script to check for the latest versions of all dependencies |
5 | 5 | # 2. Updates package.json with the latest versions |
6 | | -# 3. Removes the yarn.lock file |
7 | | -# 4. Runs yarn install to generate a new lock file with latest versions |
8 | | -# 5. Commits and pushes the changes to the main branch |
| 6 | +# 3. Validates and fixes the package.json structure if needed |
| 7 | +# 4. Removes the yarn.lock file |
| 8 | +# 5. Runs yarn install to generate a new lock file with latest versions |
| 9 | +# 6. Commits and pushes the changes to the main branch |
9 | 10 | # |
10 | 11 | # To run this workflow: |
11 | 12 | # 1. Go to Actions tab in the repository |
|
86 | 87 | - name: Update dependencies |
87 | 88 | run: node update-deps.js |
88 | 89 |
|
| 90 | + - name: Create validation script |
| 91 | + run: | |
| 92 | + cat > validate-package-json.js << 'EOF' |
| 93 | + const fs = require('fs'); |
| 94 | +
|
| 95 | + try { |
| 96 | + // Read the package.json file |
| 97 | + const packageJsonPath = './package.json'; |
| 98 | + const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf8'); |
| 99 | + |
| 100 | + console.log('Reading package.json...'); |
| 101 | + |
| 102 | + // Parse the JSON to validate it |
| 103 | + let packageJson; |
| 104 | + try { |
| 105 | + packageJson = JSON.parse(packageJsonContent); |
| 106 | + console.log('Package.json is valid JSON.'); |
| 107 | + } catch (parseError) { |
| 108 | + console.error('Error parsing package.json:', parseError.message); |
| 109 | + process.exit(1); |
| 110 | + } |
| 111 | + |
| 112 | + // Check for numeric keys in dependencies or devDependencies |
| 113 | + const hasNumericKeys = Object.keys(packageJson.dependencies || {}).some(key => !isNaN(key)) || |
| 114 | + Object.keys(packageJson.devDependencies || {}).some(key => !isNaN(key)); |
| 115 | + |
| 116 | + if (hasNumericKeys) { |
| 117 | + console.error('Found numeric keys in dependencies or devDependencies. This indicates corruption.'); |
| 118 | + |
| 119 | + // Filter out numeric keys |
| 120 | + const cleanDependencies = {}; |
| 121 | + const cleanDevDependencies = {}; |
| 122 | + |
| 123 | + Object.entries(packageJson.dependencies || {}).forEach(([key, value]) => { |
| 124 | + if (isNaN(key)) { |
| 125 | + cleanDependencies[key] = value; |
| 126 | + } else { |
| 127 | + console.log(`Removing numeric dependency key: ${key}`); |
| 128 | + } |
| 129 | + }); |
| 130 | + |
| 131 | + Object.entries(packageJson.devDependencies || {}).forEach(([key, value]) => { |
| 132 | + if (isNaN(key)) { |
| 133 | + cleanDevDependencies[key] = value; |
| 134 | + } else { |
| 135 | + console.log(`Removing numeric devDependency key: ${key}`); |
| 136 | + } |
| 137 | + }); |
| 138 | + |
| 139 | + // Update the package.json object |
| 140 | + packageJson.dependencies = cleanDependencies; |
| 141 | + packageJson.devDependencies = cleanDevDependencies; |
| 142 | + |
| 143 | + // Write the fixed package.json |
| 144 | + fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n'); |
| 145 | + console.log('Fixed package.json and saved.'); |
| 146 | + } else { |
| 147 | + console.log('No numeric keys found. Package.json structure looks good.'); |
| 148 | + } |
| 149 | + |
| 150 | + // Print the current dependencies |
| 151 | + console.log('\nCurrent dependencies:'); |
| 152 | + Object.entries(packageJson.dependencies || {}).forEach(([key, value]) => { |
| 153 | + console.log(` ${key}: ${value}`); |
| 154 | + }); |
| 155 | + |
| 156 | + console.log('\nCurrent devDependencies:'); |
| 157 | + Object.entries(packageJson.devDependencies || {}).forEach(([key, value]) => { |
| 158 | + console.log(` ${key}: ${value}`); |
| 159 | + }); |
| 160 | + |
| 161 | + } catch (error) { |
| 162 | + console.error('Error:', error.message); |
| 163 | + process.exit(1); |
| 164 | + } |
| 165 | + EOF |
| 166 | +
|
| 167 | + - name: Validate package.json |
| 168 | + run: node validate-package-json.js |
| 169 | + |
89 | 170 | - name: Remove lock file |
90 | 171 | run: rm -f yarn.lock |
91 | 172 |
|
|
0 commit comments