grunt-angular-verifybuild

Verify integrity of build artifacts for a yeoman angular project

npm install grunt-angular-verifybuild
1 downloads in the last week
17 downloads in the last month

grunt-angular-verifybuild

Verify integrity of build artifacts for a yeoman angular project

Getting Started

This plugin requires Grunt ~0.4.1

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

npm install grunt-angular-verifybuild --save-dev

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

grunt.loadNpmTasks('grunt-angular-verifybuild');

The "verifybuild" task

The build process for angular+typescript (https://github.com/anchann/angularjs-typescript-e2e) based projects is getting rather involved, partcularly because of the requirement to version all build artifacts other than index.html. To make sure that the build process doesn't break down the line, we add a final verification stage to the build process.

One can verify three things with the current implementation: existence of files, existence of revved versions of certain files, and references from a file to a set of revved files. Verifying these conditions on certain files will guarantee that the build ran successfully. An example of an unsuccessful build would be the partials bundle, templates.js, containing the contents of .html partials before references to assets in them were updated with their revved versions.

Probably obvious, but a representative set of files is enough, don't list all seven hundred of your asset files in the config.

Overview

In your project's Gruntfile, add a section named verifybuild to the data object passed into grunt.initConfig().

grunt.initConfig({
  verifybuild: {
    options: {
      exist: [
        'index.html',
      ],
      revved: [
        'scripts/scripts.js',
        'scripts/templates.js',
        'styles/styles.css',
      ],
      revvedRefs: {
        'index.html': [
          'scripts/scripts.js',
          'scripts/templates.js',
          'styles/styles.css',
        ],
        'scripts/templates.js': [
          'images/nested/many/levels/deep/bullet.png',
        ],
        'styles/styles.css': [
          'images/nested/many/levels/deep/bullet.png',
        ],
      },
    }
  },
})

Options

options.dist

Type: String Default value: grunt.config('yeoman').dist || ''

The directory that holds distribution artifacts.

options.exist

Type: Array of String Default value: ['index.html']

List of files whose existence is necessary for a successful build.

options.revved

Type: Array of String Default value: ['scripts/scripts.js', 'scripts/templates.js', 'styles/styles.css',]

List of files for which a revved version must be present. That is, in a successful build, if 'scripts/scripts.js' is listed in options.revved, something like scripts/41a432de.scripts.js had better be present in the dist directory.

options.revvedRefs

Type: Map<String, Array of String> Default value: {'index.html' : ['scripts/scripts.js', 'scripts/templates.js', 'styles/styles.css',] }

For each key : refs, a possibly revved file key must contain at least one textual reference to the revved names of each file in refs. So the text of index.html had better contain 0132abcd.scripts.js, 0132abcd.templates.js, and 0132abcd.styles.css. Yes, only the last part of the path is used in the matching. This should be reasonably safe, because revved filenames have a content-based hash in the name, and are thus fairly unique. If this proves to be a problem, we'll fix at that time.

TODO

I was going to write tests, but could not figure out how to test for grunt task failure, since it's the failure of verification that's most interesting to test for. Will dig a bit more and come back to this later.

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 Grunt.

Release History

(Nothing yet)

npm loves you