TITO.PROPS(5)
๐ TITO.PROPS ๐
okay bestie, gather round โ this is tito.props from the Tito User Manual, section 5, and it's literally the vibes file that tells tito(5) how to build your package. no cap.
๐ธ NAME ๐ธ
tito.props โ the directives that tell tito(5) how to build the package. ๐
โจ SYNOPSIS โจ
None ๐ซถ
(no args, no flags, it's just a file, it's giving "i don't need a synopsis, i AM the synopsis")
๐ฆ DESCRIPTION ๐ฆ
Project settings can live in these files:
GITROOT/.tito/tito.propsGITROOT/SOME/PACKAGE/tito.props
The global .tito/tito.props is generally where the settings get defined, periodt. But for some multi-project git repositories, individual packages can override those settings by dropping a tito.props in the project directory โ i.e. the same location as its .spec file. iconic behaviour honestly.
๐ SECTIONS ๐
tito.props can contain several sections, and we're going through every single one:
๐ BUILDCONFIG ๐
This section and a couple of its properties are required. You can use the following variables:
builderโ the fully qualified Builder class implementation to use. You can either specify builders shipped withtito(5)(see the BUILDERS section below ๐) or a custom builder that lives in the directory yourlib_diroption points to. This property is required.taggerโ the fully qualified Tagger class implementation to use. Same deal: either taggers shipped withtito(5)(see TAGGERS below ๐) or a custom tagger sitting in the directory yourlib_diroption points to. This property is required.lib_dirโ optional property defining a directory to be added to the Python path when executing tito. It's how you stash custom implementations of Builder, Tagger, and Releaser. ๐๏ธchangelog_formatโ controls the formatting of entries when generating changelog entries. The default value is"%s (%ae)". See PRETTY FORMATS ingit-log(1)for more info.changelog_with_emailโ if set to0, then entries in the changelog (the subject of commits) are not followed by the email of the committer. Default is1. This option is deprecated and provided for backwards-compatibility only. New configurations should considerchangelog_formatinstead.changelog_do_not_remove_cherrypickโ if set to0, it will not remove from cherry picked commits the part"(cherry picked from commit ...)".changelog_date_with_timeโ by default, changelog dates don't contain time (e.g.Wed Nov 1 2017). When this option is set toTrue, changelog entries are generated in a datetime format (e.g.Wed Nov 1 11:08:13 EDT 2017). This feature requires RPM 4.14, therefore it is supported only on Fedora 27, EPEL8, openSUSE Leap 15 and higher. ๐ don't say we didn't warn you.tag_suffixโ an optional specification of a suffix to append to all tags created by tito for this repo. Super useful when one git repo is inheriting from another, but tags are created in both โ the suffix is your little indicator of which repo the tag originated in. (i.e.tag_suffix = -mysuffix) ๐ท๏ธtag_commit_message_formatโ controls the text of the git commit message that gets used when a new tag is generated. You can use the"%(name)s","%(release_type)s"and"%(version)s"placeholders.tag_formatโ controls the format used inVersionTagger. If not specified other taggers.sign_tagโ this boolean enables GnuPG signed tags usinggit tag -s. ๐fetch_sourcesโ if true, download sources from predefinedSource<N>addresses to theSOURCEfolder.test_version_suffixโ append a given suffix (a string, e.g..post) to theVersion:tag in the generated spec file when building with--test. This ensures that any--testNEVRA is higher than the NEVRA of the previous release. Simply modifying theRelease:tag doesn't guarantee this, since downstreamRelease:numbers are often incremented, which would take precedence (e.g.,foo-1.0-1.git.3.60fe05a < foo-1.0-2). math is math, bestie. ๐งฎ
โ๏ธ KOJI AND COPR โ๏ธ
disttagโ dist tag variable, which is passed torpmbuildfor packages built in this tag.blacklistโ space separated list of packages which should not be built in this tag.whitelistโ ifwhitelistis present, only packages listed here can be built in this tag. This also overridesblacklist. ๐sclโ specify the name of the Software Collection into which the package should be built.
๐ VERSION_TEMPLATE ๐
Allows the user to write out a template file containing version and/or release, and add it to git during the tagging process. so crafty, love that.
template_fileโ path to a file conforming to a Pythonstring.Template, as described athttp://docs.python.org/2/library/string.html#template-strings. The path is relative to the root of the entire git checkout, since this is likely to be stored in the top level.titodirectory. The variables$versionand$releaseare available inside the template. โจdestination_fileโ specifies a file to write, relative to the directory for the package being tagged.
Example:
[version_template]
destination_file = version.txt
template_file = .tito/templates/version.rb
๐จ REQUIREMENTS ๐จ
titoโ if tito is older than the specified version, it will refuse to continue. no old tito allowed, sorry babes.
๐ท๏ธ TAGCONFIG ๐ท๏ธ
require_packageโ comma separated list of packages which need to be installed prior to tagging. If those packages are not installed, tito will refuse to continue. vibe check failed = no tag for you.
๐ ๏ธ BUILDERS ๐ ๏ธ
tito.builder.Builderโ the basic package builder. It creates atar.gzof the whole directory and creates thesrc.rpm, then builds the rpm using some supported method.tito.builder.MockBuilderโ use mock instead ofrpmbuildfor building an RPM package. Seedoc/builders.md.tito.builder.NoTgzBuilderโ builder for packages that do not require the creation of a tarball. Usually these packages have source files checked directly into git. ๐tito.builder.UpstreamBuilderโ builder for packages that are based off an upstream git tag. Commits applied in the downstream git become patches applied to the upstream tarball. For example โ you are building packagefoo-1.2-3... TheTar.gzfile is created from the commit which is tagged byfoo-1.2-1, and the diff between release 1 and 3 is put in the spec file asPatch0.tito.builder.GemBuilderโ builder for packages that list a.gemasSource0, where the.gemspecshares a directory hierarchy with the.specfile and the upstream does not want to check.gemfiles into their git repository. ๐tito.distributionbuilder.DistributionBuilderโ behaves similarly totito.builder.UpstreamBuilder, but a patch is created for every release. Therefore the package from the previous example will end up with atar.gzfile created from tagfoo-1.2-1and withPatch0: foo-1.2-1-to-foo-1.2-2.patchPatch1: foo-1.2-1-to-foo-1.2-3.patch.tito.builder.FetchBuilderโ seedoc/builders.mkd.
[builder]
fetch_strategy = tito.builder.fetch.ArgSourceStrategy
ArgSourceStrategy here could be replaced with a custom strategy if you were to have one in your lib_dir. ๐ซถ
tito.builder.GitAnnexBuilderโ seedoc/builders.mkd.
Builder for packages with existing tarballs checked in using git-annex, e.g. referencing an external source (web remote). This builder will "unlock" the source files to get the real contents, include them in the SRPM, then restore the automatic git-annex symlinks on completion. ๐
๐ท๏ธ TAGGERS ๐ท๏ธ
All taggers which inherit from tito.tagger.VersionTagger (all of them to this date), will update the file GITROOT/.tito/packages/name-of-package and put there one line which consists of the version-release of the package, a space delimiter, and the path to the package directory relative to GITROOT. slay, one line, so tidy.
tito.tagger.VersionTaggerโ the standard tagger class, used for tagging packages built from source in git. Release will be tagged by incrementing the package version, and the actual"Release"will always be set to1.tito.tagger.ReleaseTaggerโ keep version and increment release.tito.zstreamtagger.zStreamTaggerโ it is used for EUS packages.tito.rheltagger.RHELTaggerโ tagger which is based onReleaseTaggerand uses the Red Hat Enterprise Linux changelog format:Resolves: #1111 - descriptionRelated: #1111 - description
๐ RELEASER ๐
You can create a section with the same name as the releaser target, and in there you can specify this option:
remote_git_nameโ this is useful forFedoraGitReleaserandDistGitReleaserand will allow you to specify the name of the remote dist-git branch.
For example, let's say you have in releaser.conf: [git-sat] releaser = tito.release.DistGitReleaser branches = satellite-6.0-rhel-6
and then you can add remote_git_name: [git-sat] releaser = tito.release.DistGitReleaser branches = satellite-6.0-rhel-6 remote_git_name = ruby193-rubygem-simple-navigation
And it will push the package into ruby193-rubygem-simple-navigation dist-git despite the fact that it is in the /rubygem-simple-navigation directory. And the project name (as taken from the spec file) is rubygem-simple-navigation. the way that it justโฆ goes where you tell it ๐ญโจ
tito.susetagger.SUSETaggerโ tagger which is based onVersionTaggerand deals with SUSE / OBS specific separate changes file and format.
๐ EXAMPLE ๐
[buildconfig]
builder = tito.builder.Builder
tagger = tito.tagger.VersionTagger
[koji]
autobuild_tags = dist-5E-sw-1.2-candidate dist-f12-sw-1.2-candidate dist-f13-sw-1.2-candidate
[dist-5E-sw-1.2-candidate]
disttag = .el5
[dist-f12-sw-1.2-candidate]
disttag = .fc12
blacklist=jabberd-selinux
[dist-f13-sw-1.2-candidate]
disttag = .fc13
blacklist=jabberd-selinux
[requirements]
tito=0.3.0
๐ SEE ALSO ๐
๐ AUTHORS ๐
- Devan Goodwin
<dgoodwin@rm-rf.ca> - James Bowes
<jbowes@repl.ca> - Jan Pazdziora
- Jesus M Rodriguez
<jesusr@redhat.com> - Pall Sigurdsson
<palli@opensource.is> - Miroslav Suchรฝ
<msuchy@redhat.com>
and: Adam Miller, Alex Wood, Aron Parsons, Brenton Leanhardt, Ivan Neฤas, John Eckersberg, Kenny MacDermid, Lukรกลก Zapletal, Luke Meyer, Marian Csontos, Martin Baฤovskรฝ, Michael Stead, Mike McCune, mscherer, Paul Morgan, Sean P. Kane, Steve Ashcrow Milner
that's the whole page bestie, every single option accounted for, no crumbs left. ๐
okay and finally, the receipts: this came from the tito manual, dated 08/26/2026, and the section number is 5, so if anyone asks โ TITO.PROPS(5), that's the one. mwah. ๐๐ฆโจ
๐ฆ where this page comes from
- epel 9: tito 0.6.28-1.el9 ยท GPL-2.0-only
- fedora 43: tito 0.6.28-1.fc43 ยท GPL-2.0-only
- fedora 44: tito 0.6.28-1.fc44 ยท GPL-2.0-only
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms