TITO.PROPS(5)

๐Ÿ“ฆ
version 0.6.28 ยท 3 versions
, in epel 9, fedora 43, fedora 44

๐Ÿ’– 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.props
  • GITROOT/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 with tito(5) (see the BUILDERS section below ๐Ÿ‘‡) or a custom builder that lives in the directory your lib_dir option points to. This property is required.
  • tagger โ€” the fully qualified Tagger class implementation to use. Same deal: either taggers shipped with tito(5) (see TAGGERS below ๐Ÿ‘‡) or a custom tagger sitting in the directory your lib_dir option 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 in git-log(1) for more info.
  • changelog_with_email โ€” if set to 0, then entries in the changelog (the subject of commits) are not followed by the email of the committer. Default is 1. This option is deprecated and provided for backwards-compatibility only. New configurations should consider changelog_format instead.
  • changelog_do_not_remove_cherrypick โ€” if set to 0, 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 to True, 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 in VersionTagger. If not specified other taggers.
  • sign_tag โ€” this boolean enables GnuPG signed tags using git tag -s. ๐Ÿ”
  • fetch_sources โ€” if true, download sources from predefined Source<N> addresses to the SOURCE folder.
  • test_version_suffix โ€” append a given suffix (a string, e.g. .post) to the Version: tag in the generated spec file when building with --test. This ensures that any --test NEVRA is higher than the NEVRA of the previous release. Simply modifying the Release: tag doesn't guarantee this, since downstream Release: 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 to rpmbuild for packages built in this tag.
  • blacklist โ€” space separated list of packages which should not be built in this tag.
  • whitelist โ€” if whitelist is present, only packages listed here can be built in this tag. This also overrides blacklist. ๐Ÿ‘‘
  • 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 Python string.Template, as described at http://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 .tito directory. The variables $version and $release are 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 a tar.gz of the whole directory and creates the src.rpm, then builds the rpm using some supported method.
  • tito.builder.MockBuilder โ€” use mock instead of rpmbuild for building an RPM package. See doc/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 package foo-1.2-3... The Tar.gz file is created from the commit which is tagged by foo-1.2-1, and the diff between release 1 and 3 is put in the spec file as Patch0.
  • tito.builder.GemBuilder โ€” builder for packages that list a .gem as Source0, where the .gemspec shares a directory hierarchy with the .spec file and the upstream does not want to check .gem files into their git repository. ๐Ÿ’Ž
  • tito.distributionbuilder.DistributionBuilder โ€” behaves similarly to tito.builder.UpstreamBuilder, but a patch is created for every release. Therefore the package from the previous example will end up with a tar.gz file created from tag foo-1.2-1 and with Patch0: foo-1.2-1-to-foo-1.2-2.patch Patch1: foo-1.2-1-to-foo-1.2-3.patch.
  • tito.builder.FetchBuilder โ€” see doc/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 โ€” see doc/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 to 1.
  • tito.tagger.ReleaseTagger โ€” keep version and increment release.
  • tito.zstreamtagger.zStreamTagger โ€” it is used for EUS packages.
  • tito.rheltagger.RHELTagger โ€” tagger which is based on ReleaseTagger and uses the Red Hat Enterprise Linux changelog format:
    • Resolves: #1111 - description
    • Related: #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 for FedoraGitReleaser and DistGitReleaser and 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 on VersionTagger and 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 ๐Ÿ‘€

tito(8) titorc(5)

๐Ÿ‘‘ 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