Skip to content

🚦 Check and align required software versions in your project

License

Notifications You must be signed in to change notification settings

chimurai/requirements

Repository files navigation

requirements

npm coveralls dependency Status snyk code style: prettier

Validate your project's software requirements.

requirements-screenshot

install

$ npm install -D requirements
$ yarn add --dev requirements

setup

Scaffold a new requirements.config.mjs configuration file

$ npx requirements --init

config

Configure the requirements.config.mjs file in your project root.

export default {
  software: {
    node: '*',
    yarn: '~1.17.3',
    nginx: {
      semver: '>= 1.16.x',
      optional: true, // optional (won't fail)
      installMessage: '<install instruction>', // custom message when binary is not found
      updateMessage: '<update instruction>', // custom message when binary has wrong version
    },
    httpd: {
      semver: '^1.x',
      flag: '-v', // custom version flag
    },
  },
  // custom functions to verify requirements which are not related to software versions
  // see ./tests/custom-check-ssh.config.mjs for an example
  custom: {
    'Example title for custom requirements check', {
      fn: () => { throw new Error('throw Error when requirement not met.') },
      errorMessage: 'This error message is shown when the above function throws Error',
    }
  }
};

check requirements

Run requirements command in the project root. By default it will try to find the requirements.config.mjs file.

npx requirements

Or use a custom path:

npx requirements --config <filepath>

CLI options

npx requirements --help
Options:
  --help, -h     Show help                                             [boolean]
  --version, -v  Show version number                                   [boolean]
  --init, -i     Create a requirements.config.mjs file
  --config, -c   Path to the configuration file
                                            [default: "requirements.config.mjs"]
  --force, -f    Succeeds even if not all requirements are satisfied
                                                      [boolean] [default: false]
  --quiet, -q    Only output when errors are present                   [boolean]
  --debug        Print raw data                                        [boolean]

require('requirements')

const { checkSoftware, renderTable } = require('requirements');

(async () => {
  const result = await checkSoftware({ node: '*' });
  console.log(renderTable(result));
})();

checkSoftware() returns an Array with results

[
  {
    bin: 'node',
    semver: '*',
    installed: true,
    version: '12.8.1',
    satisfies: true,
  },
];

testing

# test functionality
yarn build
node bin/requirements.js --config tests/requirements.config.mjs

# unit tests
yarn test

license

The MIT License (MIT)

Copyright (c) 2017-2024 Steven Chim