check_for_pinned_versions.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // Licensed to Cloudera, Inc. under one
  2. // or more contributor license agreements. See the NOTICE file
  3. // distributed with this work for additional information
  4. // regarding copyright ownership. Cloudera, Inc. licenses this file
  5. // to you under the Apache License, Version 2.0 (the
  6. // "License"); you may not use this file except in compliance
  7. // with the License. You may obtain a copy of the License at
  8. //
  9. // http://www.apache.org/licenses/LICENSE-2.0
  10. //
  11. // Unless required by applicable law or agreed to in writing, software
  12. // distributed under the License is distributed on an "AS IS" BASIS,
  13. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. // See the License for the specific language governing permissions and
  15. // limitations under the License.
  16. const fs = require('fs');
  17. const invalidVersionRegex = /^[<>~^]/;
  18. const runCheck = async () => {
  19. // eslint-disable-next-line no-restricted-syntax
  20. console.log('Checking if package.json contains invalid versions...');
  21. const packageJson = await fs.promises.readFile('package.json');
  22. const { dependencies, devDependencies } = JSON.parse(packageJson);
  23. const allDependencies = Object.entries(dependencies).concat(Object.entries(devDependencies));
  24. const invalidDependencies = allDependencies
  25. .filter(([, version]) => invalidVersionRegex.test(version))
  26. .map(([name, version]) => `${name}: ${version}`);
  27. if (invalidDependencies.length) {
  28. console.warn(
  29. `Found invalid version(s):\n\n${invalidDependencies.join(
  30. '\n'
  31. )}\n\nPlease fix by "pinning" to a specific version (remove ~, ^, > or < prefixes).`
  32. );
  33. process.exitCode = 1;
  34. } else {
  35. // eslint-disable-next-line no-restricted-syntax
  36. console.log(`Done! No invalid versions found.`);
  37. }
  38. };
  39. runCheck().catch(e => {
  40. console.error(e);
  41. process.exitCode = 1;
  42. });