CHANGELOG ========= 1.3.1 ----- 2014/07/16 ### User notes (GH-161) Deployments fail where a branch has \W in the git branch name In 1.3.0 environment naming was partially reworked to allow better handling of per-environment deployment, but unfortunately this caused a regression where environments would be differently named in 1.3.0. This fix changes the environment deployment on a per-name basis to use the normalized name instead of the raw Git branch name. This bugfix release also incorporates all fixes added in 1.2.2. ### Thanks Thanks to Chris Spence for his work on this release. 1.3.0 ----- 2014/06/07 ### User notes #### (GH-104) SVN support for environments. R10k can now dynamically generate enviroments based on SVN repositories. SVN repositories must SVN repositories must conform to the conventional SVN repository structure with the directories trunk/, branches/, and optionally tags/ in the root of the repository. The trunk/ directory is specifically mapped to the production environment, branches are created as environments with the name of the given branch. Please note that since SVN support for environments should be considered preliminary and may still have some kinks to be worked out, so use it with caution in production. #### (GH-112) Modules can be deployed in a single environment. When deploying modules with `r10k deploy module `, users can specify the `-e ` flag to update modules in a single environment. #### (GH-117) Controllable behavior for invalid Git branches. Git sources can now tune how r10k behaves when it encounters a git branch with a non-word character. Valid values are 'correct_and_warn' which emits a warning and sanitizes the environment name, 'correct' which silently corrects the environment, and 'error' which emits an error and ignores the environment. ### Developer notes #### IMPORTANT: as of 1.3.0, r10k is relaxing how it implements semantic versioning. There are a lot of internal APIs in r10k that need to be improved or overhauled, and making changes in a backwards compatible manner has been impeding development on a number of important features. There's no indication that there are any consumers of the r10k internal APIs, and if that's the case then r10k doesn't help anyone by maintaining SemVer for its internal APIs. As of 1.3.0, r10k is dropping guarantees about API compatibility for most of the core functionality. The `R10K::Task*` classes were designed to be the primary interface for external use and those will remain backwards compatible for 1.x. However any code around configuration parsing, deployments, sources, environments, and modules may have API changes in minor versions. That being said, if you are using any of these APIs and you experience breakage, you're not out of luck. If an API change actually does affect you please report it as a bug and those specific APIs can probably be fixed up. Hopefully this will ease development of r10k while not making the lives of external developers too painful. #### (GH-116) Allow alternate implementations of sources and environments This allows the groundwork for allowing users to implement plugins for sources and environments. A real API specification for sources and environments has been started, and sources and environments can be defined at runtime. In the long run r10k will add a plugin system for loading additional code from Rubygems and other sources, so r10k will be extensible without requiring modifications to the source. 1.2.2 ----- 2014/07/16 ### User Notes (GH-165) `r10k puppetfile` only consumes handled command line options. Previously, passing `-v` or other commands when running `r10k puppetfile *` could result in this error: r10k puppetfile install --help --trace Error while running: # This was due to overly greedy code passing in all options from the command line to the TaskRunner. This has been fixed so only known options are passed along, and options that aren't relevant (such as :verbose) will be ignored. (GH-158) Log levels are now documented in the command line --help pages. (GH-137) Git remotes are now correctly updated. A regression in the Git remote handling meant that git remotes would never be properly updated when switching Git environments and modules from one remote to another, and the git alternates file was never updated properly. This has been fixed so that when the Git remote is updated, all references to the remotes and alternates will be updated. (GH-163) All Git tags are deleted when switching Git remotes Git tags cannot necessarily be transferred from one Git repository to another, so when a Git repo has its remotes changed all tags are deleted to prevent stale tags from overwriting tags from the new repo. 1.2.1 ----- 2014/04/21 ### User Notes (GH-93) r10k deploy subcommands now respect the --help flag. (GH-100) The addition of a faster command execution library was POSIX centric, but there were a number of users that were running r10k on Windows, which brike their environments. Support for Windows has been re-added and Windows is now a supported platform for using the r10k puppetfile commands. Please note that r10k now requires Ruby 1.9.3 on Windows to function. ### Thanks Thanks to Sam Kottler and Daniel Dreier for their their work on this release. 1.2.0 ----- 2014/03/07 ### User Notes Preliminary support for Puppetfile modules from SVN sources. SVN repositories can track the latest available revision or may be pinned to a specific revision. Forge modules can now track the latest available version. This can be enabled by setting the module version to `:latest`. Git based Puppetfile modules can now be specified as branches, tags, and commits. When tags and commits are specified r10k can perform optimizations when updating the given repositories to reduce network accesses. Command execution has been greatly improved. The old library for executing commands (systemu) had very high overhead and was 50 - 100 times slower than %x[] or fork/exec. It's been replaced with a custom process execution implementation. Modules can swap out sources. When an existing module is changed from Forge to Git, for instance, the existing module will be removed before the new module is installed. (GH-30) 1.2.0rc2 -------- 2014/02/27 ### Notes Git repositories were not tracking their upstream remotes, repos should now properly update upstream changes. Git reference clones now fetch their cache remotes immediately after the initial clone. 1.2.0rc1 -------- 2014/02/08 Release Candidate 1 for 1.2.0 1.1.4 ----- 2014-02-24 This is a backwards compatible bugfix release. ### Notes * (GH-90) Multiple environments with the same name but with different sources were previously colliding and some environments were being ignored. This has been fixed and all environments should be deployed when updates are run. ### Thanks Thanks to the following contributors for their their extraordinary patience and help in for chasing down GH-90: * Andreas Ntaflos (antaflos) * Igor Galić (igalic) 1.1.3 ----- 2014-01-26 This is a backwards compatible maintenance release. ### Notes * (GH-82) Added all git managed files, including README.markdown, CHANGELOG, and LICENSE to the gemspec for better compatibility with non-gem packages. 1.1.2 ----- 2014-01-06 This is a backwards compatible maintenance release. ### Developer notes * If Puppet and r10k are required in the same namespace, it's possible for the vendored copy of SemVer to conflict with the Puppet version. This was fixed by renaming the copy vendored in r10k and putting it under a namespace. 1.1.1 ----- 2013-12-11 This is a backwards compatible bugfix release. ### User notes * (GH-48) Environment prefixing always defaults to off. Users were already using r10k with multiple sources but in different directories, and prefixing breaks this behavior. Since this was a backwards incompatible change this has to be rolled back. * (GH-64) Multiple sources in a single directory no longer purge each other. ### Thanks Thanks to the following contributors for their help in 1.1.1: * Stig Sandbeck Mathisen * Gabriel M Schuyler 1.1.0 ----- 2013-09-30 This is a backwards compatible bugfix and feature release. ### User notes (GH-35) Puppetfiles can now specify a path to the moduledir, instead of assuming '/modules'. It can be set with the Puppetfile `moduledir` directive. Note that this is not compatible with librarian-puppet. (GH-53) Multiple environment sources can now be specified in a single directory. When multiple sources are specified, each environment will be prefixed with the source name. This can be enabled and disabled with the source `prefix` option. (GH-45) Documentation has been greatly expanded. (GH-56) New subcommand: `r10k puppetfile check` allows you to validate the syntax of a Puppetfile. (GH-66) Initial clones use `git checkout` when switching to a new branch instead of just `git reset`; without this change it would look like the wrong branch was checked out. (GH-59) r10k can now pull from Pulp repositories for Forge based modules. (GH-70) Handle unset HOME - in case that HOME is unset, assume that the current user is root. This mainly occurs when r10k is being run as the `prerun` command under Puppet. ### Developer notes The method mocking framework has been switched from mocha to rspec-mocks. Mocha is notoriously bad about breaking changes between versions and rspec-mocks is very robust, so Mocha has been ripped out and dropped as a dependency. Rspec expectations now use the `expect(thing).to` syntax instead `thing.should` A quasi settings framework has been extracted to make application settings less bad. In the long term a general application framework will be extracted from r10k to handle generic 'application' problems like this, but for now the settings framework is the way to handle singleton data. R10K:Git::Cache object memoization has been extracted into a standalone class instead of being grafted onto the class. All hail the single responsibility principle! R10K::Module code has been refactored. There's now a real base class instead of a hacky mixin with some metadata magic on top. ### Thanks Thanks to the following contributors for their help in 1.1.0: * Alex Linden Levy * Abhay Chrungoo * Adam Vessey * Chuck Schweizer * Elias Probst * Greg Baker * Jochen Schalanda * Theo Chatzimichos 1.0.0 ----- 2013-05-30 This is a backwards incompatible bugfix and feature release. ### Configuration The configuration file format of 0.0.9 should be compatible with 1.0.0, and any issues with that should be considered a bug. A longstanding issue was confusion between symbols and strings in r10k.yaml (GH-18). To resolve this, symbols and strings will be treated equally and should produce the same behavior. In the long run, symbols will probably be deprecated for the sake of conformity. ### Command line invocation A number of commands have been renamed. They still but will emit a deprecation warning and will redirect to the new command implementation. The only exceptions is the are the `r10k environment cache` and `r10k environment stale` commands, but they were pretty much useless anyways. Log level verbosity can now be specified by level name instead of level number. If --verbose is passed without a level, it will set the log level to `info`. ### Puppetfile support r10k can be used to deploy modules from a standalone Puppetfile. See `r10k puppetfile` for more information. Modules without a version in the format of 'foo/bar' will be assumed. (GH-21) ### API r10k handles versioning according to SemVer; since this is a major release this is a backwards incompatible API change. It's unlikely that this has had any extensions written on top of it, but if you have, then heads up. However, all versions of 1.x should be backwards compatible. ### Bugfixes A number of bugs were due to underlying architecture flaws. Part of 1.0.0 has been a significant architectural overhaul, so on top of all of the above changes there should be a lot of other bugs that have been fixed.