Documentation (beta)

Introduction

What is SyncRelease?


SyncRelease is a complete release management and deployment system for website owners who use Subversion for their software development. Initially, it was developed for FloFeed.com in production use for streamlining release management and website deployment process.


As the application gets mature and tested in real-world projects, SyncRelease has been rewritten into a complete release management and deployment application for Subversion, with extreme focus on ease of use, high standards and functionalities for real-world web projects.



How it works?


SyncRelease’s release management system revolves around the idea that you should be able to selectively push any code changes you want, while being able to rollback to any point in your release history.


The most important thing to harness the power of SyncRelease is to understand the concept of release well.

Concept of Release

In SyncRelease, release is a snapshot of your software/website code at a certain point. From Subversion or version control system point of view, it is a collection of changesets or revisions. In SVN, each release or snapshot is stored in /tags directory of your SVN repository, with prefix name of syncrelease- followed by release number. To illustrate the concept of release, please consider following example:



  • Let’s say at the beginning, we have following directory structure with empty content in your repository at revision no. 1.
/branches
/tags
/trunk




  • Then you add this repository as a site to be managed by SyncRelease, SyncRelease will create a release tag or snapshot in /tags directory with a name like syncrelease-1, containing revision number 1. Now, syncrelease-1 release tag will have same code as trunk, which is emtpy, as follow:

/branches
/tags
    /syncrelease-1
/trunk

NOTE: Whenever you add a new repository to SyncRelease, the first release tag syncrelease-1 will have same code as that of /trunk at that time.


Now we will have the following revision(s) in trunk and the first release:


../_images/release-fig1.png




  • Next, let’s assume a user commits the following changes:
revision 2  -------> Added file A.txt
revision 3  -------> Added file B.txt
revision 4  -------> Added file C.txt


Then, the snapshot of our repository will be like this:

../_images/release-fig2.png
/branches
/tags
    /syncrelease-1
/trunk
    A.txt
    B.txt
    C.txt




  • Now, the outstanding revisions are 2, 3 and 4. Next we will create a new release by selecting only revision 2 from trunk, although SyncRelease allows you to select more than one revision. Then our repository will be like this below:

../_images/release-fig3.png
/branches
/tags
    /syncrelease-1
    /syncrelease-2
        A.txt
/trunk
    A.txt
    B.txt
    C.txt




  • Now, outstanding revisions are 3 and 4. Next, we will create a release by selecting only revision 4 and will get the following result:
../_images/release-fig4.png
/branches
/tags
    /syncrelease-1
    /syncrelease-2
        A.txt
    /syncrelease-3
        A.txt
        B.txt

/trunk
    A.txt
    B.txt
    C.txt




  • Now outstanding revision left is only 3. And we will create a new release by selecting revision 3. Then, our repository will result in as follow:
../_images/release-fig5.png
/branches
/tags
    /syncrelease-1
    /syncrelease-2
        A.txt
    /syncrelease-3
        A.txt
        B.txt
    /syncrelease-4
        A.txt
        B.txt
        C.txt

/trunk
    A.txt
    B.txt
    C.txt

When creating release by selecting revisions, SyncRelease will automatically detect any dependencies in code changes. Please see more on



Time-machine

Now, you can deploy a specific release or rollback to any point in your release history by selecting a release number, just like a time-machine.


../_images/release-fig6.png