On Thu, Dec 17, 2020 at 8:06 PM Ben Cotton <bcot...@redhat.com> wrote:
>
> https://fedoraproject.org/wiki/Changes/Enable_Spec_File_Preprocessing
>
>
> == Summary ==
> This change should enable an opt-in spec file preprocessor in Fedora
> infrastructure for the benefit of packagers. The preprocessor allows
> some very neat tricks that were impossible before, for example
> generate changelog and release automatically from git metadata or pack
> the entire dist-git repository into an rpm-source tarball (effectively
> allowing unpacked repos to live in DistGit).

As far as I can tell, this is the third implementation of generated
changelogs ... did the autorelease / autochangelog work that was even
already deployed in staging not go anywhere?

> == Owner ==
> * Name: [[User:clime| Michal Novotný]]
> * Email: cl...@fedoraproject.org
>
>
> == Detailed Description ==
>
> There is a recently added feature into mock:
> [https://github.com/rpm-software-management/mock/wiki/Plugin-rpkg-preprocessor
> the rpkg preprocessor] which, if enabled, introduces an intermediate
> step just before srpm building. This step consists of running the spec
> file through a text preprocessing engine that includes an already
> present library of macros designed specifically for rpm spec file
> generation from git metadata. This library is called
> [https://docs.pagure.org/rpkg-util/v3/macro_reference.html
> rpkg-macros]. The macros there allow packagers to have their
> `%changelog`, `Release`, `Version`, `VCS` tag, or even `Source` fields
> automatically generated from dist-git repository data and metadata.
> The library can be easily extended in future to support more packager
> use-cases or even a completely new library can be developed that
> doesn't look at git metadata at all and instead, for example, analyses
> already present tarball content to render spec file based on upstream
> information. This doesn't mean it will happen but the framework is
> generic enough to support that. There is also support for user-defined
> macros that are loaded on-demand from a file placed alongside the
> package sources, maintained by packager. This feature wouldn't be
> enabled by this change from start but it's an example of freedom that
> the preprocessing framework is able to provide. Enabling this change
> should be very easy, basically adding:
>
> <pre>
> config_opts['plugin_conf']['rpkg_preprocessor_enable'] = True
> </pre>
>
> into mock configuration of Koji builders and using at least mock 2.7.
> Some very minor change may be also needed in Koji regarding the spec
> file lookup.
>
> Even if the change is enabled on the infrastructure level like this,
> the packager will still need to opt-in to use the preprocessor. The
> opting-in is done by placing `rpkg.conf` file into the package
> top-level directory with the following content:
>
> <pre>
> [rpkg]
> preprocess_spec = True
> </pre>
>
> When this is done by a packager, the preprocessor will be finally
> enabled for the given package.
>
> Alongside, there is an ongoing work to add the preprocessor support
> into the `rpkg` python library so that a packager can easily work with
> the spec files containing the preprocessor (rpkg) macros:
> https://pagure.io/rpkg/pull-request/530
>
> The macros are supported since epel6 until the most latest Fedora
> (preproc, rpkg-macros, and rpm-git-tag-sort packages are needed). The
> spec preprocessing step in mock happens in a target chroot just before
> the srpm build.
>
>
> == Benefit to Fedora ==
>
> This change offers solution to some long-standing issues in Fedora
> around packaging (i.e. automatic release and changelog generation)
> while also offering some interesting future options (for example
> unpacked dist-git repos). The big advantage of this approach is that
> it is explicit. Spec file stays the source of truth and by looking
> inside one, you will be able to determine how the text will expand for
> a certain git repository state.

What does "unpacked dist-git repos" mean? Is this a euphemism for source-git?

> == Scope ==
> * Proposal owners:
> For the very basic support, probably a small patch in Koji is needed
> to be able to lookup not only `.spec` files but also `.spec.rpkg`
> files (the `.spec.rpkg` extension explicitly states that the spec file
> is a template). Also the `rpmdevtools/rpmdev-bumpspec` script should
> be tweaked to be compatible with spec files using the macros.

Is the Change owner going to submit patches for fedpkg and rpmdevtools?

> * Other developers:
> Some optional help with `rpmdevtools/rpmdev-bumpspec` changes would be 
> welcome.

rpmdev-bumpspec is a tangled mess of spaghetti code and I'd rather not
touch it or make it even more complicated.
I also think this can't be optional. releng uses rpmdev-bumpspec as
part of scripted mass rebuilds, so it must work with all packages.

> * Release engineering: [https://pagure.io/releng/issue/9910 #9910] (a
> check of an impact with Release Engineering is needed)
> Enabling the rpkg_preprocessor plugin in mock config for Koji builders.
>
> * Policies and guidelines:
> The new macro support should be mentioned or even described in the
> packaging guidelines. We should decide if the full power of the
> rpkg-macros library should be allowed from start (i.e. even unpacked
> repos).
>
> * Trademark approval: N/A (not needed for this Change)
>
> * Alignment with Objectives: N/A
>
> == Upgrade/compatibility impact ==
> Because of the opt-in nature on packager side, there should be no
> compatibility issues.
>
> == How To Test ==
> Once the feature is enabled, one can test it by providing the
> `rpkg.conf` file with the required content in a package repository and
> use some rpkg macro in the spec file: e.g.
>
> <pre>
> Name: {{{ git_dir_name }}}
> </pre>
>
> to generate the name of the package from the repository name (this
> should actually produce the original text as package names should be
> the same as the repository basenames).

Not sure I understand, but what's the benefit of making the Name a
macro determined by the repository name?
As stated, they must always be the same anyway, so why make this a
dynamic templated value?

> To try it out first without committing to dist-git, one can use `rpkg`
> command-line tool from
> https://copr.fedorainfracloud.org/coprs/clime/rpkg-util/ or even
> fedpkg's koji scratch build after
> [https://pagure.io/rpkg/pull-request/530 the work in the pyrpkg]
> library is finished.
>
> One can also currently use Copr's SCM "rpkg" build method where the
> macros are enabled but the rpkg-macros there are in version 2 whereas
> this change is about introducing the
> [https://docs.pagure.org/rpkg-util/v3/macro_reference.html version 3
> rpkg-macros]. However, while there are some differences between v2 and
> v3, the idea and most of the working is the same.
>
> == User Experience ==
> This change is intended for packagers. It should help to make a bit of
> their work easier and offer them some new interesting options.
>
> == Dependencies ==
> N/A
>
> == Contingency Plan ==
>
> Packagers can opt-out on individual basis by removing the `rpkg.conf`
> file or just setting the `preproces_spec` property to `False`. On
> infrastructure level, the rpkg_preprocessor plugin could be disabled
> again.
>
> == Documentation ==
> - 
> [https://github.com/rpm-software-management/mock/wiki/Plugin-rpkg-preprocessor
> Mock's rpkg_preprocessor plugin]
>
> - [https://docs.pagure.org/rpkg-util/v3/macro_reference.html
> rpkg-macros reference (the library of macros ready to be used in spec
> files)]
>
> == Release Notes ==
> Currently N/A
>
>
> --
> Ben Cotton
> He / Him / His
> Senior Program Manager, Fedora & CentOS Stream
> Red Hat
> TZ=America/Indiana/Indianapolis
> _______________________________________________
> devel mailing list -- devel@lists.fedoraproject.org
> To unsubscribe send an email to devel-le...@lists.fedoraproject.org
> Fedora Code of Conduct: 
> https://docs.fedoraproject.org/en-US/project/code-of-conduct/
> List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
> List Archives: 
> https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org
_______________________________________________
devel mailing list -- devel@lists.fedoraproject.org
To unsubscribe send an email to devel-le...@lists.fedoraproject.org
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org

Reply via email to