Beanstalk

Version Control with a Human Face

Release model

The release model is associate with the Release Server model, which allows you to deploy your code via FTP or SFTP to your web server.

Writable attributes

  1. revision — what revision of the server to deploy;
  2. comment — just text that will be displayed in release notes;
  3. deploy_from_scratch — deploy from the first revision rather then doing incremental deployment;
  4. environment_id — environment you want to deploy to.

Find all successful releases

repository_id is required. Either name of the repo or it’s ID can be used. Use page parameter to skim through pages. Beanstalk will send 20 releases per page.

http-request
GET /api/repo_name/releases.xml

Click to expand…

http-response
<?xml version="1.0" encoding="UTF-8"?>
<releases type="array">
  <release>
    <account-id type="integer">23452</account-id>
    <author>gilbert</author>
    <comment>Deploying yesterday's changes.</comment>
    <created-at type="datetime">
      2009-11-04T10:03:29Z
    </created-at>
    <deployed-at type="datetime">
      2009-11-04T10:03:40Z
    </deployed-at>
    <id type="integer">2547</id>
    <last-retry-at type="datetime" nil="true"></last-retry-at>
    <repository-id type="integer">98765</repository-id>
    <environment-name>Staging</environment-name>
    <environment-id>6</environment-id>      
    <retries type="integer">0</retries>
    <revision type="integer">81</revision>
    <state>complete</state>
    <updated-at type="datetime">
      2009-11-04T10:03:40Z
    </updated-at>
  </release>
  <release>
    <account-id type="integer">8765</account-id>
    <author>ilya</author>
    <comment>Going crazy</comment>
    <created-at type="datetime">
      2008-06-26T17:02:22Z
    </created-at>
    <deployed-at type="datetime">
      2008-06-26T17:03:30Z
    </deployed-at>
    <id type="integer">6543</id>
    <last-retry-at type="datetime" nil="true"></last-retry-at>
    <repository-id type="integer">8967</repository-id>
    <environment-name>Staging</environment-name>
    <environment-id>6</environment-id>
    <retries type="integer">0</retries>
    <revision type="integer">249</revision>
    <state>complete</state>
    <updated-at type="datetime">
      2008-11-04T14:50:01Z
    </updated-at>
  </release>
</releases>
ruby
Beanstalk::API::Release.find_all_for_environment(environment_id=7, "repo", page=nil)

Find a single release

repository_id is required. Either name of the repo or it’s ID can be used. Release ID is required.

http-request
GET /api/repo_name/8765.xml

Click to expand…

http-response
<?xml version="1.0" encoding="UTF-8"?>
<release>
  <account-id type="integer">8765</account-id>
  <author>ilya</author>
  <comment>Going crazy</comment>
  <created-at type="datetime">
    2008-06-26T17:02:22Z
  </created-at>
  <deployed-at type="datetime">
    2008-06-26T17:03:30Z
  </deployed-at>
  <id type="integer">6543</id>
  <last-retry-at type="datetime" nil="true"></last-retry-at>
  <repository-id type="integer">8967</repository-id>
  <environment-name>Staging</environment-name>
  <environment-id>6</environment-id>
  <retries type="integer">0</retries>
  <revision type="integer">249</revision>
  <state>complete</state>
  <updated-at type="datetime">
    2008-11-04T14:50:01Z
  </updated-at>
</release>
ruby
Beanstalk::API::Release.find_for_repository(8765, "repo")

Create new release

Creating a release means requesting a deployment. If you already have some releases in state “new” or “retry”, Beanstalk will delete them after creating a new one.

See the list of writable attributes at the top of the page. Both revision and release_server_id are required. release_server_id should be an ID of an enabled server under your account.

http-request
POST /api/repo_name/releases.xml/?environment_id=6
<release>
  <revision type="integer">1</revision>
</release>

Click to expand…

http-response
<?xml version="1.0" encoding="UTF-8"?>
<release>
  <account-id type="integer">23452</account-id>
  <author>gilbert</author>
  <comment>Deploying yesterday's changes.</comment>
  <created-at type="datetime">
    2009-11-04T10:03:29Z
  </created-at>
  <deployed-at type="datetime">
    2009-11-04T10:03:40Z
  </deployed-at>
  <id type="integer">2547</id>
  <last-retry-at type="datetime" nil="true"></last-retry-at>
  <repository-id type="integer">98765</repository-id>
  <environment-name>Staging</environment-name>
  <environment-id>6</environment-id>
  <retries type="integer">0</retries>
  <revision type="integer">81</revision>
  <state>complete</state>
  <updated-at type="datetime">
    2009-11-04T10:03:40Z
  </updated-at>
</release>

--OR IF INVALID--

<?xml version="1.0" encoding="UTF-8"?>
<errors>
  <error>Server can't be blank</error>
</errors>
ruby
r = Beanstalk::API::Release.new
r.prefix_options = { :repository_id => 58, :environment_id => 6 }
r.revision = 1
r.save