2009-07-25 13:29:53 -03:00
|
|
|
ABOUT
|
|
|
|
=====
|
|
|
|
|
|
|
|
Tito is a tool for managing RPM based projects using git for their source code
|
|
|
|
repository.
|
|
|
|
|
|
|
|
Tito offers the following features:
|
|
|
|
|
|
|
|
- Tag new releases with incremented RPM version or release.
|
|
|
|
- Auto-generate spec file changelog based on git history since last tag.
|
|
|
|
- Create reliable tar.gz's with consistent checksums from any tag.
|
|
|
|
- Build source and binary rpms off any tag.
|
|
|
|
- Build source and binary "test" rpms off most recently committed code.
|
|
|
|
- Build multiple source rpms with appropriate disttag's for submission to the
|
|
|
|
Koji build system
|
2011-10-16 13:31:57 -03:00
|
|
|
- Build rpms via the "mock" tool.
|
2009-07-25 13:29:53 -03:00
|
|
|
- On a per-branch basis in git:
|
|
|
|
- Maintain concurrent version streams.
|
|
|
|
- Vary the way packages are built/tagged.
|
|
|
|
- Report on any diffs or commits messages missing since last tag.
|
2011-10-16 13:31:57 -03:00
|
|
|
- Define release targets to publish your packages to yum repositories, or
|
|
|
|
the Fedora build system.
|
|
|
|
- Define custom builder/releaser implementations for your own project needs.
|
2009-07-25 13:29:53 -03:00
|
|
|
- Build packages off an "upstream" git repository, where modifications in the
|
|
|
|
"downstream" git repository will be applied as a patch in the source rpm.
|
|
|
|
- Manage all of the above for a git repository with many disjoint packages
|
2011-10-16 13:31:57 -03:00
|
|
|
within it.
|
2009-07-25 13:29:53 -03:00
|
|
|
|
|
|
|
|
|
|
|
GETTING STARTED
|
|
|
|
===============
|
|
|
|
|
|
|
|
From your git repository:
|
|
|
|
|
|
|
|
tito init
|
|
|
|
|
|
|
|
This will create a top-level metadata directory called "rel-eng/" and commit it
|
|
|
|
to git. This directory will store tito's configuration and package metadata on
|
|
|
|
a per branch basis. It will be filtered out when creating .tar.gz's.
|
|
|
|
|
|
|
|
|
|
|
|
TAGGING PACKAGES
|
|
|
|
================
|
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
Before doing most everything you'll need to tag your package(s).
|
2009-07-25 13:29:53 -03:00
|
|
|
|
|
|
|
Before doing this you'll need to ensure that your package spec files are at the top of the relative source tree for that package.
|
|
|
|
|
2011-09-13 10:26:16 -03:00
|
|
|
For the most common case, a single project git repository has the spec file and
|
|
|
|
root of the project at the top level of the git repository:
|
2009-07-25 13:29:53 -03:00
|
|
|
|
2011-09-13 10:26:16 -03:00
|
|
|
docs/
|
2009-07-25 13:29:53 -03:00
|
|
|
mypackage.spec
|
2011-09-13 10:26:16 -03:00
|
|
|
README
|
2009-07-25 13:29:53 -03:00
|
|
|
rel-eng/
|
|
|
|
src/
|
2011-09-13 10:26:16 -03:00
|
|
|
test/
|
2009-07-25 13:29:53 -03:00
|
|
|
|
2011-09-13 10:26:16 -03:00
|
|
|
For a multi-project git repository, packages can be defined in various
|
|
|
|
sub-directories, provided they do not nest (i.e. walking up the tree, two spec
|
|
|
|
files will never be encountered):
|
2009-07-25 13:29:53 -03:00
|
|
|
|
|
|
|
rel-eng/
|
|
|
|
package1/
|
2011-09-13 10:26:16 -03:00
|
|
|
docs/
|
2009-07-25 13:29:53 -03:00
|
|
|
mypackage.spec
|
2011-09-13 10:26:16 -03:00
|
|
|
README
|
2009-07-25 13:29:53 -03:00
|
|
|
src/
|
2011-09-13 10:26:16 -03:00
|
|
|
test/
|
2009-07-25 13:29:53 -03:00
|
|
|
subdir/
|
|
|
|
package2/
|
|
|
|
anotherpkg.spec
|
2011-09-13 10:26:16 -03:00
|
|
|
docs/
|
|
|
|
README
|
2009-07-25 13:29:53 -03:00
|
|
|
src/
|
2011-09-13 10:26:16 -03:00
|
|
|
test/
|
2009-07-25 13:29:53 -03:00
|
|
|
|
|
|
|
The packages can be organized in any hierarchy you like and even be moved
|
2011-09-13 10:26:16 -03:00
|
|
|
around and re-tagged, we only need to have the spec file in the top level
|
|
|
|
directory for that package.
|
2009-07-25 13:29:53 -03:00
|
|
|
|
2011-10-17 12:18:23 -03:00
|
|
|
Tagging packages is normally done with:
|
2009-07-25 13:29:53 -03:00
|
|
|
|
2011-10-17 12:18:23 -03:00
|
|
|
tito tag
|
2009-07-25 13:29:53 -03:00
|
|
|
|
2011-10-17 12:18:23 -03:00
|
|
|
This will:
|
|
|
|
|
|
|
|
- bump the version or release in the spec file (use --keep-version to use whatever is defined in the spec file)
|
|
|
|
- auto-generate a changelog from first line of each commit since last tag (use --no-auto-changelog if you do not want this)
|
|
|
|
- open an editor allowing you a chance to edit that changelog
|
|
|
|
- insert the changelog into your spec
|
|
|
|
- commit these changes, and generate a git tag
|
2009-07-25 13:29:53 -03:00
|
|
|
|
|
|
|
By default if you omit --keep-version, tito will tag by bumping the rpm
|
|
|
|
version. (i.e. we bump the Z in X.Y.Z. If you'd prefer to bump the package
|
|
|
|
release instead (normally should just be used for changes to the spec file or
|
|
|
|
patches applied within it), you can change the default_tagger class in
|
|
|
|
rel-eng/tito.props to ReleaseTagger. This will affect all packages in this git
|
|
|
|
branch, if you'd prefer to do this on a per-package basis you can do so in a
|
|
|
|
package specific tito.props. (see section below)
|
|
|
|
|
|
|
|
Once a package is tagged you will need to push both the auto-commit and the tag
|
|
|
|
to your remote git repository before tito will let you build it. (better
|
|
|
|
support for standalone git repositories is coming, for now --offline will help)
|
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
See "man tito" for more options.
|
2009-07-26 22:09:17 +08:00
|
|
|
|
2009-07-25 13:29:53 -03:00
|
|
|
BUILDING PACKAGES
|
|
|
|
=================
|
|
|
|
|
|
|
|
To build the most recent .tar.gz for a package, cd into that packages directory
|
|
|
|
and run:
|
|
|
|
|
|
|
|
tito build --tgz
|
|
|
|
|
|
|
|
Note that this tarball will have a consistent checksum every time.
|
|
|
|
|
|
|
|
Likewise the --srpm and --rpm options allow you to build both binary and source
|
|
|
|
rpms.
|
|
|
|
|
|
|
|
Add in the --tag=TAG option to build any of the above for any past tag.
|
|
|
|
|
|
|
|
If you're working on something locally and would like to check that your
|
|
|
|
package is still building ok without pushing your changes to the remote
|
|
|
|
repository, add the --test option. This will build a test rpm from your most
|
|
|
|
recently committed work. (NOTE: does *not* include uncommitted changes)
|
|
|
|
|
|
|
|
TODO: Document the use of --release, which is complicated and untested against
|
|
|
|
Fedora's Koji.
|
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
See "man tito" for more options.
|
2009-07-26 22:09:17 +08:00
|
|
|
|
2009-08-02 14:51:14 -03:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
RELEASING PACKAGES
|
|
|
|
==================
|
2009-08-02 14:51:14 -03:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
Tito supports a mechanism where you can define multiple release targets.
|
2009-08-02 14:51:14 -03:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
In rel-eng/releasers.conf, create a section like:
|
2009-08-02 14:51:14 -03:00
|
|
|
|
2012-11-04 21:37:21 +01:00
|
|
|
[yum-f15-x86_64]
|
|
|
|
releaser = tito.release.YumRepoReleaser
|
|
|
|
builder = tito.builder.MockBuilder
|
|
|
|
builder.mock = fedora-15-x86_64
|
|
|
|
rsync = fedorapeople.org:/srv/repos/dgoodwin/tito/fedora-15/x86_64/
|
2011-02-03 09:40:56 -04:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
You can define as many release targets as you like with various configurations.
|
|
|
|
To publish the most recently tagged build in your current branch you would run:
|
2011-01-07 16:44:43 -04:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
tito release yum-f15-x86_64
|
2011-01-07 16:44:43 -04:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
You can specify multiple targets on the CLI.
|
2011-01-07 16:44:43 -04:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
See "man 8 releasers.conf" for more information on defining release targets.
|
2011-01-07 16:44:43 -04:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
See "man tito" for more information on CLI arguments to "tito release".
|
2011-01-07 16:44:43 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
CUSTOM BUILDERS / TAGGERS / RELEASERS
|
|
|
|
=====================================
|
2011-01-07 16:44:43 -04:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
If the existing implementations Tito provides are not sufficient for
|
|
|
|
your needs, it is possible to define a lib_dir in tito.props globalconfig
|
|
|
|
section. This is a directory that tito will add to the python path during
|
|
|
|
execution, allowing you a place to define your own custom implementations of
|
|
|
|
builders, taggers, and releasers.
|
2011-01-07 16:44:43 -04:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
The process of actually writing a custom Builder/Tagger/Releaser is an exercise
|
|
|
|
left to the reader, but essentially you will want to work off the code in the
|
|
|
|
tito.builder module. Inherit from the base Builder, and override the methods
|
|
|
|
you need to.
|
2011-01-07 16:44:43 -04:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
Please note that if you store your custom implementations inside your source
|
|
|
|
tree, they will need to be kept in sync in all branches you are using for
|
|
|
|
consistent behavior. Also, there are no guarantees that tito will not change in
|
|
|
|
future releases, meaning that your custom implementations may occasionally need
|
|
|
|
to be updated.
|
2011-01-07 16:44:43 -04:00
|
|
|
|
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
TROUBLESHOOTING
|
|
|
|
===============
|
2011-01-07 16:44:43 -04:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
If you create a tag accidentally or that you wish to re-do, make sure you have
|
|
|
|
not git pushed the tag yet, the auto-commit is the most recent in your git
|
|
|
|
history, and run:
|
2011-01-07 16:44:43 -04:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
git tag -d YOURNEWTAG
|
|
|
|
git reset --hard HEAD^1
|
2011-02-14 09:11:10 -04:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
If your project is standalone (no remote reference you communicate with as
|
|
|
|
authoritative) you may wish to set offline = "true" in rel-eng/tito.props under
|
|
|
|
the globalconfig section, so you do not need to specify --offline with each
|
|
|
|
invocation.
|
2011-02-14 09:11:10 -04:00
|
|
|
|
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
CONFIGURATION
|
|
|
|
=============
|
2011-01-07 16:44:43 -04:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
See:
|
2011-01-07 16:44:43 -04:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
man 5 tito.props
|
2011-01-07 16:44:43 -04:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
man 5 releasers.conf
|
2011-01-07 16:44:43 -04:00
|
|
|
|
2011-10-16 13:31:57 -03:00
|
|
|
man 5 titorc
|
2011-01-07 16:44:43 -04:00
|
|
|
|
|
|
|
|
|
|
|
|