npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

grunt-continue-ext

v2.0.0

Published

A grunt plugin to force other tasks to continue after failures (extended)

Downloads

52

Readme

grunt-continue-ext

NPM version Build Status dependencies Status devDependencies Status

NPM Downloads

A grunt plugin to force other tasks to continue after failures and check for warnings issued after them

Inspired by and extended from this answer by explunit on StackOverflow.

Usage

Install next to your project's Gruntfile.js with:

$ npm install grunt-continue-ext

Here is a simple example gruntfile to show how you might force grunt to continue after failing tests if you have some cleanup that you need to perform afterward

module.exports = function(grunt) {

  // Add the grunt-continue tasks
  grunt.loadNpmTasks('grunt-continue-ext');

  // Other tasks and configuration
  ...

  grunt.registerTask('default', [
    'setup',
    'continue:on',
    // All tasks after this point will be run with the force
    // option so that grunt will continue after failures
    'test',
    'continue:off',
    // Tasks after this point will be run without the force
    // option so that grunt exits if they fail
    'cleanup'
  ]);

};

continue:off does not turn off the continuing if --force was specified at the command line.

If continue:on is called muliple times continue:off must be called that many times in order to stop continuing.

If continue:off is called more times than continue:on it will fail.

Checking to see if there were no failures within the block

It is sometimes useful to check if there were no warnings issued by any tasks within continue:on and continue:off. For example, you may run a test within the block and cleanup at the end. In this instance you want the overall build to fail after the cleanup.

To accommodate this add the following task at the end:

module.exports = function(grunt) {

  // Add the grunt-continue tasks
  grunt.loadNpmTasks('grunt-continue-ext');

  // Other tasks and configuration
  ...

  grunt.registerTask('default', [
    'setup',
    'continue:on',
    // All tasks after this point will be run with the force
    // option so that grunt will continue after failures
    'test',
    'continue:off',
    // Tasks after this point will be run without the force
    // option so that grunt exits if they fail
    'cleanup',
    'continue:fail-on-warning'
  ]);

};

Checking to see if there were any failures within the block

When you write unit tests for Grunt tasks, sometimes you need to test, that a failure was handled properly. You do not want the overall build to fail after a failing tasks did. You actually want the build to fail, if the task did not fail. You can achieve this by executing the continue:check-any-warnings task, once the continuation block ended:

module.exports = function(grunt) {

  // Add the grunt-continue tasks
  grunt.loadNpmTasks('grunt-continue-ext');

  // Other tasks and configuration
  ...

  grunt.registerTask('default', [
    // Tasks, which should succeed preparing output for unit test checks
    'move:rename',
    ...
    // Prevent Grunt from failing, if a task fails from know on
    'continue:on',
    // Tasks, which should intentionally fail
    'move:failed_wrong_path',
    ...
    // Allow Grunt to fail, if a task fails from know on
    'continue:off',
    // Check, that the tasks, which should fail, actually failed
    'continue:check-any-warnings',
    // Check ouput of the succeeding tasks
    'nodeunit'
  ]);

};

Checking to see if there were only specific failures within the block

When you write unit tests for Grunt tasks, sometimes you need to test, that a failure was reported properly. You want the build to fail, if the failure was not reported, or if the expected warning was not issued. You can achieve this by configuring the continue:check-warnings task and by executing it, once the continuation block ended:

module.exports = function(grunt) {

  grunt.initConfig({
    'continue:check-warnings': {
      test: {
        warnings: [
          'No files or directories specified.',
          'Moving failed.',
          ...
        ]
      }
    },
    ...
  });

  grunt.loadNpmTasks('grunt-continue-ext');
  ...

  grunt.registerTask('default', [
    'move:rename',
    ...
    'continue:on',
    'move:failed_missing_source',
    'move:failed_invalid_destination',
    ...
    'continue:off',
    // Check if all specified warnings were issued
    'continue:check-warnings',
    'nodeunit'
  ]);

};

Clearing warnings before another block is entered

If you use multiple continue:on and continue:off blocks of tasks, you may need to check, if a warning was issued by any task only in one specific block. It is useful, if you check for occurrences of warnings by continue:check-any-warnings or by continue:check-warnings. You can achieve this by executing the continue:clear-warnings task before the continuation block is entered:

module.exports = function(grunt) {

  grunt.initConfig({
    'continue:check-warnings': {
      second_tests: {
        warnings: [
          'No files or directories specified.',
          'Moving failed.'
        ]
      }
    },
    ...
  });

  grunt.loadNpmTasks('grunt-continue-ext');
  ...

  grunt.registerTask('default', [
    'move:rename',
    ...

    // Check if the task fails
    'continue:on',
    'move:missing_task_settings',
    'continue:off',
    'continue:check-any-warnings',

    // Make sure, tha the next check will start with no remembered warnings
    'continue:clear-warnings',

    // Check if the tasks fail and issue specified warnings
    'continue:on',
    'move:failed_missing_source',
    'move:failed_invalid_destination',
    'continue:off',
    'continue:check-warnings:second_tests',

    'nodeunit'
  ]);

};

Contributing

In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using:

$ npm test

Background

This project started as a fork of grunt-continue with the additional support for cheking of grunt warnings.

License

Copyright © 2017-2018 Ferdinand Prantl Copyright © 2013 Peter Halliday

Licensed under the MIT license.