A deployment tool to push change from a repository (Git/SVN) to a target (SFTP/FTP) by calculating differences between pushed versions.
SCMs can be Git or SVN repositories, and targets can be SFTP or FTP.
Its main feature is to update a target server according to the changes made on the SCM repository. The tool will retrieve the SCM differences since the last push and upload the new or changed files to the server.
- Uploads only new/changed files
- Deletes removed files
- Dry run mode to simulate the push
- Logs actions, detected changes and SCM diff for review
- Temp folder used on the server for operations (uploads, ...), to prevent disrupting the site during long operations and allow rollback if something fails (connexions drops, write not possible, ...)
- Stores encrypted passwords
- Excludes files that shouldn't be pushed from SCM to server
- Updates permissions on pushed files/folder
Best used with CI setups (Jenkins, GitLab, Travis, ...).
Puscha actually uses Flysytem underneath, so many more adapters than SFTP/FTP could be available for the target: Azure, AWS S3, DigitalOcean Spaces, Dropbox, Rackspace, WebDAV, ZipArchive, ...
Puscha can deploy to multiple targets at the same time.
NB: Puscha is a major refactoring of PushFTP
- PHP 7.1+
- SVN 1.9 (maybe less)
- Git 2.9 (maybe less)
A puscha.json or puscha.yaml file at the root of the project contains all the settings. See the samples
folder for various configurations.
A JSON schema is provided (src/schema.json
), and a test config command is available to validate the configuration file (see below).
Download the puscha.phar
file, which contains the packaged tool, then:
$ php puscha.phar list
It is also possible to clone the repository and, after running composer install
, run:
$ ./puscha list
The main command runs a profile from the configuration file:
$ php puscha.phar --help run
This command is best run with -v for more information on what is being done. It can also be run with -vvv for detailed debug logs.
A helper command is provided to encrypt passwords:
$ php puscha.phar --help tools:encrypt-password
A helper command is provided to encrypt passwords:
$ php puscha.phar --help tools:test-config
A Vagrantfile is provided to launch a "target" box with SFTP and FTP. Check the file to adapt the settings to your environment.
The password for the ubuntu user of the box can usually be found in the file ~/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-xenial64/20161221.0.0/virtualbox/Vagrantfile
(depending on your version of the xenial box).
PHPUnit tests are provided in the tests directory, as well as a phpunit.xml. Run tests with:
$ php composer.phar run test
Symfony code style is applied (rules from: https://github.com/djoos/Symfony-coding-standard) Run phpcs with:
$ php composer.phar run codestyle
With pure-ftpd and hidden files not enabled
Current flysystem's ftp implementation doesn't correctly hidden folders on pure-ftpd servers when not explicitely enabled (thephpleague/flysystem#1006), which causes Puscha to fail creating it's temporary folders.
Solutions: enable dot files in pure-ftp ("yes" in /etc/pure-ftpd/conf/DisplayDotFiles
), use another ftp server (vsftp for example), use sftp, ...