* Make previous_release return nil if there is no previous release [Mathias Meyer]
* Play nice with rubies that don't inspect terminals well (ie. JRuby) by defaulting screen columns to 80 [Bob McWhirter]
* Rollback of deploy:symlink would explode if there was no previous revision to rollback to [Jamis Buck]
* Fix bug in transfer.rb that caused get/put/upload/download to ignore blocks passed to them [arika]
* Fix issue with git SCM that caused "Unable to resolve revision" errors when there was trailing whitespace in git's output [Mark Zuneska, Daniel Berlinger and Evan Closson]
* Only make deploy:start, deploy:stop, and deploy:restart try sudo as :runner. The other sudo-enabled tasks (deploy:setup, deploy:cleanup, etc.) will now use the :admin_runner user (which by default is unset). [Jamis Buck]
* Make sure triggers defined as a block inherit the scope of the task they are attached to, instead of the task they were called from [Jamis Buck]
* Make deploy:upload use the upload() helper for more efficient directory processing [Jamis Buck]
* Make deploy:upload accept globs [Mark Imbriaco]
* Make sure the host is reported with the output from scm_run [Jamis Buck]
* Make git SCM honor the :scm_verbose option [Jamis Buck]
* Don't follow symlinks when using :copy_cache [Jamis Buck]
* If :mode is given to upload() helper, do a chmod after to set the mode [Jamis Buck]
* Fix load_from_file method for windows users [Neil Wilson]
* Display a deprecation error if a remote git branch is specified [Tim Harper]
* Fix deployment recipes to use the updated sudo helper [Jamis Buck]
* Enhance the sudo helper so it can be used to return the command, instead of executing it [Jamis Buck]
* Revert "make sudo helper play nicely with complex command chains", since it broke stuff [Jamis Buck]
* Make set(:default_shell, false) work for not using a shell on a per-command basis [Ryan McGeary]
* Improved test coverage [Ryan McGeary]
* Fixed "coverage" take task [Ryan McGeary]
* Use upload() instead of put() with the copy strategy [Jamis Buck]
* Revert the "git fetch --tags" change, since it didn't work as expected [Jamis Buck]
* Fix deploy:pending when using git SCM [Ryan McGeary]
* Make sure deploy:check works with :none scm (which has no default command) [Jamis Buck]
* Add debug switch for enabling conditional execution of commands [Mark Imbriaco]
* Make deploy:setup obey the :use_sudo and :runner directives, and generalize the :use_sudo and :runner options into a try_sudo() helper method [Jamis Buck]
* Make sudo helper play nicely with complex command chains [Jamis Buck]
* Expand file-transfer options with new upload() and download() helpers. [Jamis Buck]
* Allow SCP transfers in addition to SFTP. [Jamis Buck]
* Use Net::SSH v2 and Net::SSH::Gateway. [Jamis Buck]
* Added #export method for git SCM [Phillip Goldenburg]
* For query_revision, git SCM used git-rev-parse on the repo hosting the Capfile, which may NOT be the same tree as the actual source reposistory. Use git-ls-remote instead to resolve the revision for checkout. [Robin H. Johnson]
* Allow :ssh_options hash to be specified per server [Jesse Newland]
* Added support for depend :remote, :file to test for existence of a specific file [Andrew Carter]
* Ensure that the default run options are mixed into the command options when executing a command from the cap shell [Ken Collins]
* Added :none SCM module for deploying a specific directory's contents [Jamis Buck]
* Improved "copy" strategy supports local caching and pattern exclusion (via :copy_cache and :copy_exclude variables) [Jamis Buck]
* Don't break task descriptions on a period that appears in the middle of a sentence [Jamis Buck]
* Added support for :on_error => :continue in task definitions, allowing tasks to effectively ignore connection and execution errors that occur as they run [Rob Holland]
* Use correct parameters for Logger constructor in the SCM and Strategy base initializers [Jamis Buck]
* Set LC_ALL=C before querying the revision, to make sure the output is in a predictable locale and can be parsed predictably [via Leandro Nunes dos Santos]
* Add :copy_remote_dir variable for the :copy strategy, to indicate where the archive should be copied to on the remote servers [Jamis Buck]
* Make the awk use in the dependencies code work with POSIX awk [mcornick]
* Make variable accesses thread safe [via Adrian Danieli]
* Make user input for yes/no prompts work correctly in the Mercurial module [Matthew Elder]
* Use single quotes to escape semicolon in find command, instead of a backslash [via michael.italia@gmail.com]
* Better quoting of reserved characters in commands [Jamis Buck]
* Make sure Net::SSH versions prior to 1.1.0 still work [Jamis Buck]
* Allow the :hosts and :roles keys to accept lambdas, which will be evaluated lazily to allow runtime selection of hosts and roles in tasks [Jamis Buck]
* Use `which' to test whether a command exists in the remote path, instead of `test -p' [Jamis Buck]
* Make sure the connection factory is established synchronously, to avoid multiple gateway instances being spawned [Jamis Buck]
* Make sure symlink and finalize_update tasks reference the most recent release when called by themselves [Jamis Buck]
* ssh_options < server options when connecting [Jamis Buck]
* Logger defaults to $stderr instead of STDERR [lhartley]
* Use cp -RPp instead of -a in the remote cache strategy
* Make the UploadError exception include an array of the hosts that failed [rob@inversepath.com]
* Allow "empty" roles to be declared [Jamis Buck]
* Mercurial SCM module [Tobias Luetke, Matthew Elder]
* Invoke all commands via sh (customizable via :default_shell) [Jamis Buck]
* Make sure all directories exist on each deploy which are necessary for subsequent commands to succeed, since some SCM's won't save empty directories [Matthew Elder]
* Add :default_environment variable, which is applied to every command
* Don't retry failed connections if an explicit auth_methods list is given [Chris Farms]
* Added support for load and exit callbacks, which get invoked when all recipes have been loaded and when all requested tasks have been executed [Jamis Buck]
* Added support for start and finish callbacks, which get invoked when any task is called via the command-line [Jamis Buck]
* Make `capify' understand simple command-line switches [Jamis Buck]
* Make the server definition itself available to SSH channels, rather than just the host name [Jamis Buck]
* Identify servers by their complete credentials in logs, rather than simply by hostname [Jamis Buck]
* Uniquely identify servers based on hostname, port, and username, instead of merely on hostname [Jamis Buck]
* Allow (e.g.) scm_command and local_scm_command to be set in the event of different paths to the scm command on local vs. remote hosts. [Jamis Buck]
* Kill the "deploy:app" namespace and move those tasks into deploy, directly. [Jamis Buck]
* Make sure 'desc' applies to the next defined task, in any namespace. [Jamis Buck]
* Fix shell so that servers for a task are correctly discovered. [Jamis Buck]
* Use the no-auth-cache option with subversion so that username/password tokens do not get cached by capistrano usage [jonathan]
* Deprecated upper-cased variables [Jamis Buck]
* Make sure Actor#get does not close the SFTP channel (so subsequent SFTP operations work) [Dov Murik]
* Add :env option to 'run' (and friends) so that you can specify environment variables to be injected into the new process' environment [Mathieu Lajugie]
* Deprecate rake integration in favor of invoking `cap' directly [Jamis Buck]
* Make sure the CVS module references the repository explicitly in cvs_log [weyus@att.net]
* Remove trace messages when loading a file [Jamis Buck]
* Cleaner error messages for authentication failures and command errors [Jamis Buck]
* Added support for ~/.caprc, also -x and -c switches. [Jamis Buck]
* Updated migrate action to use db:migrate task in Rails instead of the deprecated migrate task [DHH]
* Allow SSH user and port to be encoded in the hostname strings [Ezra Zygmuntowicz]
* Fixed that new checkouts were not group-writable [DHH, Jamis Buck]
* Fixed that cap setup would use 755 on the deploy_to and shared directory roots instead of 775 [DHH]
* Don't run the cleanup task on servers marked no_release [Jamis Buck]
* Fix typo in default_io_proc so it correctly checks the stream parameter to see if it is the error stream [Stephen Haberman]
* Make sure assets in images, javascripts, and stylesheets are touched after updating the code, to ensure the asset timestamping feature of rails works correctly [Jamis Buck]
* Added warning if password is prompted for and termios is not installed [John Labovitz]
* Added :as option to sudo, so you can specify who the command is executed as [Mark Imbriaco]
* Make update_code and symlink a macro task under the name "update" for easy of deploy to servers that does not run fcgis [DHH]
* Changed setup, update_code, rollback_code, and symlink to work on all servers instead of only those in the :app, :web, and :db roles. A server can opt out of being part of the release deployment by setting :no_release => true [DHH]
* Added support for :except on task declarations as the opposite of :only [DHH]. Example:
role :app, "192.168.0.2"
role :file, "192.168.0.3", :no_release => true
task :symlink, :except => { :no_release => true } do
on_rollback { run "ln -nfs #{previous_release} #{current_path}" }
run "ln -nfs #{current_release} #{current_path}"
end
cap symlink # will not run on 192.168.0.3
* Deprecate the -r/--recipe switch in favor of -f/--file (for more make/rake-like semantics) [Jamis Buck]
* Fix gemspec to include a dependency on rake 0.7 [Jamis Buck]
* Added respect for ENV["HOSTS"] that'll be used instead of the roles specified in the task definition [DHH]. Example:
HOSTS=192.168.0.1 cap setup # one-off setup for that server, doesn't need to be prespecified in the recipes file
* Added respect for ENV["ROLES"] that'll be used instead of the roles specified in the task definition [DHH]. Example:
task :setup, :roles => [ :app, :web, :db ]
# normally this would run every where
end
ROLES=app cap setup # this will only run for the app role, overwritting the default declaration
* Added :hosts option to task definition that allows you to specify cross-cutting tasks [DHH]. Example:
task :setup, :hosts => [ "06.example.com", "01.example.com" ] do
# this task will happen on 06 and 01 regardless of which roles they belong to
end
* Fix operator precedence problem in script for touching the revisions.log #3223 [jason.garber@emu.edu]
* Use process reaper instead of custom reap script for restarting
* Use -S switch to set variables before reading recipe files #2242
* Have setup.rb create a switchtower.cmd file on Win32 platforms #2402
* Add diff_from_last_deploy to the rails switchtower rakefile template
* Add diff_from_last_deploy task (currently only works with subversion)
* Add deploy_with_migrations task.
* Make the migrate task more customizable.
* If no password is given with the -p switch, prompt for password immediately.
* Do not install a switchtower stub in the script directory. Assume the switchtower executable is in the path.
* Remove trailing newlines from commands to prevent trailing backslash #2141
* Default parameters work correctly with the generator #2218 [Scott Barron]
* Attempt to require 'rubygems' explicitly when running the switchtower utility #2134
* Make default tasks work only on app/db/web roles, so that additional roles may be created for boxes with specific needs without needing to (for instance) deploy the app to those boxes
* Default the application name to "Application" when using --apply-to
* Show the help screen instead of an error when no arguments are given
* Make SwitchTower easier to invoke programmatically via SwitchTower::CLI
* Specify the revision to release via the :revision variable (defaults to latest revision)
* Allow variables to be set via the cli using the -s switch
* Log checkouts to a "revisions.log" file
* Changed behavior of checkout to use the timestamp as the release name, instead of the revision number
* Added CVS module (very very experimental!)
* Works with public keys now, for passwordless deployment
* Subversion module recognizes the password prompt for HTTP authentication
* Preserve +x on scripts when using darcs #1929 [Scott Barron]
* When executing multiline commands, use a backslash to escape the newline