synack / repoman

A reprepro and pbuilder management API with a RESTful interface

This URL has Read+Write access

Jeremy Grosser (author)
Wed Oct 21 18:02:39 -0700 2009
commit  97c1f865a69cfa9bd85324de9b1c06400f5d7df4
tree    61da9a91421f90d2933e207131d55b96d81be18e
parent  96a614ba1798ef0c1a4d45c5ca193aea22fc5597
name age message
file README Loading commit data...
directory conf/
directory debian/
directory html/
directory repoman/
directory scripts/
file setup.py
README
Repoman is a RESTful interface to our Debian repository.

Get a list of available distributions
$ curl -X GET http://repoman.example.com/repository/
[
    "anotherrepo", 
    "myrepo", 
    "myotherrepo"
]

Get a list of packages in a distribution
$ curl -X GET http://repoman.example.com/repository/myrepo
[
    "libavahi-compat-libdnssd-dev", 
    "hadoop-doc", 
    "libavahi-common3", 
    "libavahi-core5", 
    "hadoop", 
    "php5-pecl-http", 
    ...
]

Get detailed information about a package
$ curl -X GET http://repoman.example.com/repository/myrepo/php5
[
    {
        "SHA1": "cae8b9a4a821237a24b5757566efdc95391090d4", 
        "Maintainer": "Jeremy Grosser <synack@digg.com>", 
        "Description": "server-side, HTML-embedded scripting language (meta-package) This package is a meta-package 
        that, when installed, guarantees that you have at least one of the four server-side versions of the PHP5 
        interpreter installed.  Removing this package won't remove PHP5 from your system, however it may remove other 
        packages that depend on this one. . PHP5 is an HTML-embedded scripting language. Much of its syntax is borrowed 
        from C, Java and Perl with a couple of unique PHP-specific features thrown in. The goal of the language is to 
        allow web developers to write dynamically generated pages quickly. . Homepage: http://www.php.net/", 
        "Package": "php5", 
        "Section": "web", 
        "MD5sum": "0efa615337f0ba59d8369e4469884730", 
        "Installed-Size": "20", 
        "Filename": "pool/main/p/php5/php5_5.2.9-digg8_all.deb", 
        "Priority": "normal", 
        "Depends": "libapache2-mod-php5 (>= 5.2.9-digg8) | php5-cgi (>= 5.2.9-digg8), php5-common (>= 5.2.9-digg8)", 
        "Version": "5.2.9-digg8", 
        "Architecture": "all", 
        "SHA256": "26844b968f6b51c1a02fd59c21455bf6ba47e46e47e53c6676af0ee4c2dd799b", 
        "Size": "1024"
    }
]

Add a new package to a distribution
$ tar -tzvf package.tar.gz 
-rw-r--r-- root/root      1143 2009-08-19 00:20 digg-example_0.1-1.dsc
-rw-r--r-- root/root    651952 2009-08-19 00:20 digg-example_0.1-1.tar.gz
-rw-r--r-- root/root     53888 2009-08-19 00:20 digg-example_0.1-1_all.deb
-rw-r--r-- root/root      1717 2009-08-19 00:20 digg-example_0.1-1_amd64.changes

$ curl -F"package=@package.tar.gz;type=application/x-tar-gz" http://repoman.example.com/repository/myotherrepo
[
    [
        {
            "SHA1": "18327ff3b2ac4e364baf700484fa487a78847a7a", 
            "Maintainer": "Jeremy Grosser <synack@digg.com>", 
            "Description": "Example package", 
            "Package": "digg-example", 
            "Section": "python", 
            "MD5sum": "4bbbee22e1ccbba6a2287f46e12c1b4b", 
            "Installed-Size": "836", 
            "Filename": "pool/main/d/digg-example/digg-example_0.1-1_all.deb", 
            "Priority": "normal", 
            "Depends": "python, python-support (>= 0.90.0)", 
            "Version": "0.1-1", 
            "Architecture": "all", 
            "SHA256": "23c31968821ac71a5b788ba193b92b48c78c9d677b2ba32823b9c8111387a2ea", 
            "Python-Version": "2.4, 2.5, 2.6", 
            "Size": "53888"
        }
    ]
]

Copy a package from one distribution to another
$ curl -X POST http://repoman.example.com/repository/myotherrepo/digg-example/copy?dstdist=anotherrepo

Delete a package from a distribution
$ curl -X DELETE http://repoman.example.com/repository/anotherrepo/digg-example


You may optionally pass a query argument to specify an output format. Valid formats are json (default), yaml, xml, and 
pickle
$ curl -X GET http://repoman.example.com/repository/myotherrepo/digg-example?format=xml
<?xml version='1.0'?>
<methodResponse>
<params>
<param>
<value><array><data>
<value><struct>
<member>
<name>SHA1</name>
<value><string>18327ff3b2ac4e364baf700484fa487a78847a7a</string></value>
</member>
<member>
<name>Maintainer</name>
<value><string>Jeremy Grosser &lt;synack@digg.com&gt;</string></value>
</member>
...

Build a package
$ curl -X POST -d "cburl=http://repoman.example.com/repository/myotherrepo&ref=origin/master" 
http://repoman.example.com/buildbot/github/synack/ncore

There are a few POST arguments passed here...
 * '''ref''' - Git ref to be built. This can be a tag, commit id, branch, etc. Branches must be prefixed with origin/ 
 (required)
 * '''cburl''' - URL to post the resulting build tarball to. (optional)
 * '''submodules''' - If this option is specified, the buildbot will attempt to update submodules before building. 
 (optional)

The response to a properly formed POST will be a build ID hash.

Get the status of a build
$ curl -X GET http://repoman.example.com/buildbot/status/f82334b6664a4739a8c341544feec898
Build complete.

The last component of the URL is the build ID returned by the initial build POST. Completed builds may only show in 
status for up to 24 hours. After which, the build directories are cleaned and removed.

Get the build package tarball
curl -X GET http://repoman.example.com/buildbot/tarball/f82334b6664a4739a8c341544feec898

Returns the tarball binary if the build is done or an informative message otherwise. Completed builds may only be 
available for up to 24 hours. After which, the build directories are cleaned and removed.