Setuptools extension to release an egg
Report any bug or feature requests to : http://trac.ingeniweb.com
iw.releaser provides command line utilities to make it easier to release and deploy zc.buildout/subversion based projects.
- new setuptools commands
release: used to release an egg-based package; -
build_mo: used to search and compile .po file
- console scripts
project_release: used to release a buildout based project -
project_deploy: used to deploy a buildout based project -
project_copy_eggs: used to collect all eggs used in a project -
project_md5: used to compute the MD5 hash of a buildout project
- a hook to be able to launch actions when a package is released
- a paste template to create a project structure
iw.releaser, you just need to run easy_install:
$ easy_install iw.releaser
or you can launch its setup if you have downloaded it:
$ python setup.py install
To work with iw.releaser, let’s do a small tutorial on how to create a buildbout-based project. This is done in a few steps:
- setting up your environement
- creating the project structure
- creating egg-based packages
- releasing eggs
- releasing the buildout
- upgrading an existing buildout
The first thing to do to work smoothly with zc.buildout is to set up a few things on your environment to make sure you can run all kind of buildout-based applications.
Put two files in your home directory:
HOME/.buildout/.httpauth: this file will contain the authentication informations when the system tries to reach a http ressource which is password protected (like a svn or a private web site). It is a text file where each line is: realm,url,user,password
HOME/.buildout/default.cfg: this file set some defaults values, so zc.buildout can cache and spare downloaded eggs.
[buildout] download-cache = /home/tarek/.buildout/downloads eggs-directory = /home/tarek/.buildout/eggs
Next, you need to make sure you can release your eggs to several targets, because some private eggs are not to be published at the cheeseshop. At this time, the only software that provides the same web services than Cheeseshop is Plone Software Center >= 1.5.
To make it possible to handle several cheeseshop-like servers,
we need to install a small addon, called
$ easy_install iw.dist
This will allow you to define several servers in .pypirc. For instance if you are working with a private cheeseshop-like server you can define it like this in HOME/.pypirc
[distutils] index-servers = pypi ingeniweb-public [pypi] username:ingeniweb password:secret [ingeniweb-public] repository:http://products.ingeniweb.com/catalog username:ingeniweb password:secret
Last, you need to define the release strategy configuration, that will provide for each target server the packages that must be released there (regular expressions) and the command sequence that is used with setup.py. Here’s a default example:
[release] commands = ingeniweb-public pypi [ingeniweb-public] command = mregister sdist build_mo bdist_egg mupload packages = ^iw\..* [pypi] command = mregister sdist build_mo bdist_egg mupload packages = ^plone\..* ^collective\..*
This will push all eggs that starts with
to Pypi and all eggs that starts with
iw. to ingeniweb-public.
The command used to push the packages are defined by
Every project must be structurized the same way.
$ paster create -t iw_plone_project my_project
This will ask you for a few values:
- project_name: the name of the project
- project_repo: the root of the subversion repository
- some more values that can be left to default.
This will generate a set of folders in
$ ls my_project ./buildout ./bundles ./docs ./packages ./releases
Each folder has a role:
- buildout: contains the buildout
- bundles: contains the bundle used to work in develop mode
- docs: contains the docs
- packages: contains the egg-based package
- releases: contains the releases of the buildout
This structure must be commited in your subversion:
$ svn import my_project http://some.svn/my_project -m "initial commit"
You will then be able to work in your buildout.
From there you can add some packages into the project, by putting them
packages folder, by using any template available in ZopeSkel.
be carefull though, to use a trunk/tags/branches in packages for each project
$ cd my_projet/packages $ paster create -t plone plone.example $ mv plone.example trunk $ mkdir plone.example $ mv trunk plone.example/ $ mkdir plone.example/tags plone.example/branches $ svn add plone.example $ svn ci -m “initial import of plone.example”
Do not use trunk as a package name with paster, as this will generate bad metadata in the package
From there you can bind the package to your buildout, with a develop variable, in your my_project/buildout folder:
[buildout] ... develop= .../packages/monprojet.reports/trunk
bundle folder can also be used to set svn:externals to make it
simpler to work in the buildout.
Releasing eggs is done by calling
release from a package:
$ python setup.py release running release This package is version 0.1.2 Do you want to run tests before releasing ? [y/N]: N Do you want to create the release ? If no, you will just be able to deploy again the current release [y/N]: Y Enter a version [0.1.2]: 0.1.2 Commiting changes... Creating branches... ...
This will take care of upgrading the setup.py version, creating the tag in svn, and pushing the package to the various cheeseshop-like servers.
Releasing the project consists of calling
$ cd my_project/buildout $ project_release What version you are releasing ? 0.1 Added version file.
This will copy
subversion. You can then work in this release, to pinpoint the versions.
The next step is to generate a tarball:
$ cd /tmp $ svn co http://somesvn/my_projet/releases/0.1 my_project $ cd my_project $ project_deploy prod.cfg
This will build a tarball in /tmp, and set everything up so the buildout can be reinstalled offline anywhere with this archive.
To upgrade an existing buildout, you can use the
It will create a tarball with all eggs needed to run the project.
Run it in your buildout, by pointing the .cfg and giving the name of the archive:
$ project_eggs buildout.cfg /tmp/upgrade.tgz
You can even give a filter to collect specific packages with glob-like names, separated by commas:
$ project_eggs buildout.cfg /tmp/upgrade.tgz "iw.*,plone.*"
This filter will only get the eggs starting with
Release history Release notifications
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size iw.releaser-0.3.6-py2.4.egg (158.6 kB)||File type Egg||Python version 2.4||Upload date||Hashes View hashes|
|Filename, size iw.releaser-0.3.6.tar.gz (74.7 kB)||File type Source||Python version None||Upload date||Hashes View hashes|