v1.5.3
  date: 2022-04-23
  changes:
    - Patch up race condition in symlink copying.
v1.5.2
  date: 2022-04-12
  changes:
    - Unlink symlinks when copy destination is a symlink.
v1.5.1
  date: 2022-04-11
  changes:
    - Fixed symlink destination handling.
v1.5.0
  date: 2022-04-10
  changes:
    - Updated dependencies.
    - Add symlink handling for copying files.
v1.4.1
  date: 2021-05-24
  changes:
    - Fix --preload option to be a known option
    - Switch to GitHub Actions
v1.4.0
  date: 2021-04-21
  changes:
    - Security fixes in production and dev dependencies
    - Liftup/Liftoff upgrade breaking change. Update your scripts to use --preload instead of --require. Ref: https://github.com/js-cli/js-liftoff/commit/e7a969d6706e730d90abb4e24d3cb4d3bce06ddb.
v1.3.0
  date: 2020-08-18
  changes:
    - Switch to use `safeLoad` for loading YML files via `file.readYAML`.
    - Upgrade legacy-log to ~3.0.0.
    - Upgrade legacy-util to ~2.0.0.
v1.2.1
  date: 2020-07-07
  changes:
    - Remove path-is-absolute dependency.
      (PR: https://github.com/gruntjs/grunt/pull/1715)
v1.2.0
  date: 2020-07-03
  changes:
    - Allow usage of grunt plugins that are located in any location that
      is visible to Node.js and NPM, instead of node_modules directly
      inside package that have a dev dependency to these plugins.
      (PR: https://github.com/gruntjs/grunt/pull/1677)
    - Removed coffeescript from dependencies. To ease transition, if
      coffeescript is still around, Grunt will attempt to load it.
      If it is not, and the user loads a CoffeeScript file,
      Grunt will print a useful error indicating that the
      coffeescript package should be installed as a dev dependency.
      This is considerably more user-friendly than dropping the require entirely,
      but doing so is feasible with the latest grunt-cli as users
      may simply use grunt --require coffeescript/register.
      (PR: https://github.com/gruntjs/grunt/pull/1675)
    - Exposes Grunt Option keys for ease of use.
      (PR: https://github.com/gruntjs/grunt/pull/1570)
    - Avoiding infinite loop on very long command names.
      (PR: https://github.com/gruntjs/grunt/pull/1697)
v1.1.0
  date: 2020-03-16
  changes:
    - Update to mkdirp ~1.0.3
    - Only support versions of Node >= 8
v1.0.4
  date: 2019-04-22
  changes:
    - Update js-yaml to address https://npmjs.com/advisories/788
    - Use SOURCE_DATE_EPOCH to render dates in template.
v1.0.3
  date: 2018-06-03
  changes:
    - Drop support for Node 0.10 and 0.12.
    - Dependency updates: rimraf, grunt-legacy-log, grunt-legacy-util.
    - Fix race condition with file.mkdir.
v1.0.2
  date: 2018-02-07
  changes:
    - Fix for readYAML error messages.
    - Remove deprecation warning for coffeescript. Pull #1621.
v1.0.1
  date: 2016-04-05
  changes:
    - minor fix for npm issues when installing grunt and grunt-cli at the same time. Pull #1500.
v1.0.0
  date: 2016-04-04
  changes:
    - full list of changes is on http://gruntjs.com, please also see changes from 1.0.0-rc1.
    - if you have a Grunt plugin that includes `grunt` in the `peerDependencies`,
      we recommend tagging with `"grunt": "">= 0.4.0"` and publishing a new version on npm.
    - Prevent async callback from being called multiple times. Pull #1464.
    - Update copyright to jQuery Foundation and remove redundant headers. Fixes #1478.
    - Update glob to 7.0.x. Fixes #1467.
    - Removing duplicate BOM strip code. Pull #1482.
    - Update legacy log and util to 1.0.0.
    - Update to latest cli ~1.2.0.
    - Use grunt-known-options for shared options between Grunt and grunt-cli.
v1.0.0-rc1
  date: 2016-02-11
  changes:
    - full list of changes is on http://gruntjs.com
    - if you have a Grunt plugin that includes `grunt` in the `peerDependencies`,
      we recommend tagging with `"grunt": "">= 0.4.0"`
    - `coffee-script` is upgraded to `~1.10.0` which could incur breaking changes
      when using the language with plugins and Gruntfiles.
    - `nopt` is upgraded to `~3.0.6` which has fixed many issues, including passing
      multiple arguments and dealing with numbers as options. Be aware previously
      `--foo bar` used to pass the value `'bar'` to the option `foo`. It will now
      set the option `foo` to `true` and run the task `bar`.
    -`glob` is upgraded to `~6.0.4` and `minimatch` is upgraded to `~3.0.0`. Results
      are now sorted by default with `grunt.file.expandMapping()`. Pass the
      `nosort: true` option if you don't want the results to be sorted.
    - `lodash` was upgraded to `~4.3.0`. Many changes have occurred. Some of which
      that directly effect Grunt are `grunt.util._.template()` returns a compile
      function and `grunt.util._.flatten` no longer flattens deeply.
      `grunt.util._` is deprecated and we highly encourage you to
      `npm install lodash` and `var _ = require('lodash')` to use `lodash`.
      Please see the lodash changelog for a full list of changes: https://github.com/lodash/lodash/wiki/Changelog
    - `iconv-lite` is upgraded to `~0.4.13` and strips the BOM by default.
    - `js-yaml` is upgraded to `~3.5.2` and may affect `grunt.file.readYAML`.
      We encourage you to please `npm install js-yaml` and use
      `var YAML = require('js-yaml')` directly in case of future deprecations.
    - A file `mode` option can be passed into
      [grunt.file.write()](http://gruntjs.com/api/grunt.file#grunt.file.write).
    - `Done, without errors.` was changed to `Done.` to avoid failing by mistake
      on the word `errors`.
v0.4.5:
  date: 2014-05-12
  changes:
    - Updated rimraf to 2.2.8. Closes gh-1134.
    - Moved grunt.log into separate grunt-legacy-log module.
    - Updated grunt-legacy-util to 0.2.0. Closes gh-971, gh-1129, gh-1118.
    - Added grunt.task.exists method to check if a task exists. Closes gh-1131.
    - Added grunt.config.merge method to deep merge config data. See gh-1039.
    - Fixed symlink issues with 'file.isPathCwd' and 'file.doesPathContain'. Closes gh-1112.
    - Config and util.recurse no longer mangle Buffer instances. See gh-971.
    - Config and util.recurse now enumerate inherited object properties. See gh-1129.
    - Config and util.recurse now throw useful circular reference error. See gh-1118.
    - Warn instead of error when no new tasks found via '.loadTasks' method. Closes gh-1059.
    - Added Windows CI testing. Closes gh-1110.
    - Removed "CONTRIBUTING.md" from .npmignore. Closes gh-1093.
v0.4.4:
  date: 2014-03-12
  changes:
    - Only signal completion of tasks async if grunt.task.start is invoked with `{asyncDone:true}`.
v0.4.3:
  date: 2014-03-07
  changes:
    - When devving Grunt, do "npm install && npm uninstall grunt" (isaacs/npm#3958)
    - Grunt is now tested on Node.js 0.11
    - Extracted internal "util" lib to "grunt-legacy-util" lib
    - task.normalizeMultiTaskFiles now flattens nested "files" arrays. Closes gh-1034.
    - Better error in renameTask if task doesn't exist. Closes gh-1058.
    - Update rimraf to latest version. Closes gh-1043.
    - Empty string "ext" should strip extension. Closes gh-1087.
    - Add expandMapping .extDot option. Can be 'first' or 'last' but defaults to 'first'. Closes gh-979.
    - Add default array for util.spawn optional args. Closes gh-1064.
    - util.spawn "grunt" option now uses proper Node, passes Node exec options. Closes gh-980, gh-981, gh-877.
    - Make all tasks asynchronous to reduce call stack. Closes gh-1026.
    - Fix <%= grunt.task.current.target %> in Multitask files. Closes gh-994.
    - Generalize cli tests, see gh-983, gh-991.
    - --debug option can optionally be Boolean. Closes Gh-983, gh-991.
v0.4.2:
  date: 2013-11-21
  changes:
    - Extract internal "namespace" lib to external "getobject" lib.
    - '"Grunt collections" are now deprecated, use peerDependencies. See "grunt-contrib" 0.8.0 for details.'
    - Fix stdout / stderr issues on Windows. Closes gh-940, gh-921, gh-744, gh-792, gh-644, gh-708.
    - Fix pipe-redirecting on Windows. Closes gh-510.
    - Fixed this.options() in renamed basic tasks. Closes gh-855.
    - Update underscore.string dependency to follow semver. Closes gh-886.
    - Output task options in verbose mode. Closes gh-749.
    - Add file.preserveBOM property. Closes gh-806, gh-937.
    - Test that file methods warn. Closes gh-909.
    - Fixed a few spelling errors in code comments. Closes gh-849.
    - Updated watch, jshint and nodeunit deps. Closes gh-914.
v0.4.1:
  date: 2013-03-13
  changes:
    - Fix path.join thrown errors with expandMapping rename. Closes gh-725.
    - Update copyright date to 2013. Closes gh-660.
    - Remove some side effects from manually requiring Grunt. Closes gh-605.
    - "grunt.log: add formatting support and implicitly cast msg to a string. Closes gh-703."
    - Update js-yaml to version 2. Closes gh-683.
    - The grunt.util.spawn method now falls back to stdout when the `grunt` option is set. Closes gh-691.
    - Making --verbose "Files:" warnings less scary. Closes gh-657.
    - "Fixing typo: the grunt.fatal method now defaults to FATAL_ERROR. Closes gh-656, gh-707."
    - Removed a duplicate line. Closes gh-702.
    - Gruntfile name should no longer be case sensitive. Closes gh-685.
    - The grunt.file.delete method warns and returns false if file doesn't exist. Closes gh-635, gh-714.
    - The grunt.package property is now resolved via require(). Closes gh-704.
    - The grunt.util.spawn method no longer breaks on multibyte stdio. Closes gh-710.
    - Fix "path.join arguments must be strings" error in file.expand/recurse when options.cwd is not set. Closes gh-722.
    - Adding a fairly relevant keyword to package.json (task).
v0.4.0:
  date: 2013-02-18
  changes:
    - Initial release of 0.4.0.
    - See http://gruntjs.com/upgrading-from-0.3-to-0.4 for a list of changes / migration guide.
