Modularity: Default component references

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I have a simple question and I don't know the answer:

What should a default value of a version-control-system reference for a module
component ("ref" value in modulemd YAML document) look like?


If a module document looks like this:

    document: modulemd-packager
    version: 3
    data:
      name: A
      stream: B
      components:
        rpms:
          foo:
            rationale: API.
            ref: C
          bar:
            rationale: API.

there are people concerned with the missing "ref:" line for package "bar".
(Compare to "ref: C" for package "foo".) They want a sane default value so
they do not have to repeat it over and over again.

What's actually the default? Current specification
<https://github.com/fedora-modularity/libmodulemd/blob/main/yaml_specs/modulemd_packager_v3.yaml#L400>
reads:

    If no ref is given, the build system is permitted to make reasonable
    assumptions about the correct default value. Otherwise, the fall-back is
    the default branch for the git repository (commonly 'master').

So the specification is clear that it's implementation-defined. (I.e. how MBS
is configured.) But there are two concerns:

(1) "master" is not a good default for Fedora because Fedora renamed "master"
branch to "rawhide"/"main". MBS developers know about it and want to move to
"main" <https://pagure.io/fm-orchestrator/issue/1735>. The "main" would become
the "reasonable default value" configured in Fedora's MBS instance.

(2) There are people questioning even this git-ish "reasonable default value" 
<https://pagure.io/fm-orchestrator/issue/1226>,
<https://pagure.io/modularity/issue/142>. They would like to see the
component ref to default to a branch name of the module YAML file:

    Whatever the name of the branch is in module repository, the same branch
    must be used for the referred components. If there is not branch like this
    for the specified component, then master is used.

What do say current packaging guidelines
<https://docs.fedoraproject.org/en-US/modularity/policies/naming-guidelines/#_package_branch_name>?

    using upstream major versions as branches is recommended

Well, that's a value no machine can figure out. That won't help us in
selecting a proper default for MBS. (Actually I saw a request to change the
recommended branch from an "upstream major version" to "stream-MODULE-STREAM"
with an explanation that the latter prevents from conflicts if multiple
modules want to include a different version of the package.)

What do packagers use in Fedora 36?

# zcat /var/cache/dnf/fedora-modular-f440a08391e7b71d/repodata/32db3716d3542119dfbb23f3880a7fcbf17e5720669de9570db941aedcf475a8-modules.yaml.gz | grep ref: |sort | uniq -c | sort -n -r
    115         ref: f33
     56         ref: f34
     14         ref: rawhide
      5         ref: stream-postgresql-11
      3         ref: 1.22
      3         ref: stream-postgresql-12
      2         ref: 1.21
      2         ref: 1.20
      2         ref: 1
      2         ref: stream-6.0
      2         ref: latest
      1         ref: 9.2
      1         ref: 82lts
      1         ref: 8.10
      1         ref: 6.2
      1         ref: 6.1
      1         ref: 6.0
      1         ref: 5f5f293e
      1         ref: 4.0
      1         ref: 16
      1         ref: 14
      1         ref: 1.23
      1         ref: 1.14
      1         ref: 10.7
      1         ref: 10.6
      1         ref: 10.5
      1         ref: stream-1.20
      1         ref: stream-postgresql-14
      1         ref: stream-postgresql-10
      1         ref: stream-mainline
      1         ref: nextcloud-22
      1         ref: nextcloud-21
      1         ref: nextcloud-19
      1         ref: nextcloud-18
      1         ref: nextcloud-stable
      1         ref: mariadb-10.7
      1         ref: mariadb-10.6
      1         ref: mariadb-10.5

Plenty of them refer to a Fedora release branch (f34), a large amount of them
point to Rawhide, the rest uses a stream value or module-stream value.


As we can see, different people have different opinions. Based on that I was
thinking about adding a new top-level "ref" into modulemd-packager-v3 format.
A packager could define it's own default value. Moreover, it could
support some kind of templating like this:

    data:
      name: NAME
      stream: STREAM
      configurations:
        - context: CONTEXT
          platform: PLATFORM
          buildopts:
            ref: stream-%n-%s-%c-%p
      components:
        rpms:
          foo:
            ref: A_GIT_TREE_ISH
          bar:

would expand to:

      components:
        rpms:
          foo:
            ref: A_GIT_TREE_ISH
          bar:
            ref: stream-NAME-STREAM-CONTEXT-PLATFORM

That would address this request <https://pagure.io/modularity/issue/109> where
a packager wants use different braches for different Fedora (platform)
versions. There could be a formatting string "%b" expanding to a branch name
the module document. However, this new feature would require some changes on
various places (format specification, libmodulemd, MBS) and it would still
won't address the default. The dafault when packager does not want to type
anything.

A similar approach was already proposed in
<https://pagure.io/modularity/issue/142#comment-579336> by introducing
"ref: __REF_STREAM__" and "ref: __REF_PLATFORM__" special values.

However, adding a new option or new special values has already been disliked
with:

    However, where I propose to follow convention over configuration, you are
    adding more configuration. Where I propose to simplify and remove things,
    you propose more stuff.

I believe a motivation for relying on no explicit reference is to have the
module document portable. E.g. creating a new stream of ruby would mean only
copying the same document into a new branch and MBS would automacically
started using RPM components from the new branch. The packager coul save his
sed-fu for more compelling occasions. On the other hand, locally developed
modules which does not reside in any git tree have simply no branch.


Can we reach a consesus? Can developers of Fedora recommend a default that
would be less questionable?

-- Petr

Attachment: signature.asc
Description: PGP signature

_______________________________________________
devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
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@xxxxxxxxxxxxxxxxxxxxxxx
Do not reply to spam on the list, report it: https://pagure.io/fedora-infrastructure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Users]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]

  Powered by Linux