Re: RFC: Multiple parallel side tags

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

 



Dne 18. 06. 19 v 16:54 Aleksandra Fedorova napsal(a):
> On Tue, Jun 18, 2019 at 1:31 PM Neal Gompa <ngompa13@xxxxxxxxx> wrote:
>> On Tue, Jun 18, 2019 at 5:21 AM Aleksandra Fedorova <alpha@xxxxxxxxxxxx> wrote:
>>> Hi,
>>> On Tue, Jun 18, 2019 at 3:05 AM Neal Gompa <ngompa13@xxxxxxxxx> wrote:
>>>> On Mon, Jun 17, 2019 at 8:53 PM Kevin Fenzi <kevin@xxxxxxxxx> wrote:
>>>>> On 6/17/19 4:47 PM, Kevin Kofler wrote:
>>>>>> Kevin Fenzi wrote:
>>>>>>> I disagree. I think we need gating to block as much stuff that breaks
>>>>>>> things from landing as we can and then we should find that keeping
>>>>>>> composes going is much easier on all of us. Then things can be fixed
>>>>>>> when gating catches them and it's on the person who broke things.
>>>>>> And that is going to make development completely cringe to a halt. It is the
>>>>>> nature of a distribution branch under development that things will sometimes
>>>>>> be completely broken for a couple weeks. There needs to be a place to do
>>>>>> development that can cause such temporary breakage.
>>>>> I again completely disagree. There is no reason for weeks of breakage.
>>>>> Most of the issues that break composes are unannounced abi bumps where
>>>>> just rebuilding dependent packages fixes it. Or broken deps (likewise).
>>>>> Or mistakes made in kickstarts/comps. Or something that doesn't even
>>>>> run. What good does having everyone broken for weeks do?
>>>>>
>>>> And that comes down to people shouldn't need to have to think about
>>>> these things when working in Rawhide. While I don't disagree that
>>>> Rawhide should be usable, I fundamentally disagree with making it
>>>> harder for people to put things in Rawhide. We should be developing
>>>> our tooling to make it _easier_ for stuff to go into Rawhide, and have
>>>> Rawhide fix itself when the issues are relatively trivial to fix (such
>>>> as reverse dependency rebuilding).
>>> I think this is exactly what gating is supposed to do.
>>>
>>> Let's compare it in this way:
>>>
>>> currently to add a feature which may break Rawhide and some unknown
>>> dependencies of the component you need to write a HEADS-UP e-mail, or,
>>> better, submit a Change request with the analysis of the change.
>>> People who read this e-mail would need to make a guess on whether or
>>> not his change affects them, then they have to fetch it and test it
>>> somehow, then they have to provide the feedback back to you. You need
>>> to wait for feedback, then you get the reports, in best cases - bugs,
>>> which you need to debug, requesting more info. Then you implement the
>>> change, hit the unexpected bug, which was unnoticed, and block others
>>> from building their packages and implementing their changes for
>>> unknown amount of time.
>>>
>>> With gating you can submit a code change, the tooling will take care
>>> of building it, building its dependencies, informing you of possible
>>> breakages, giving you the list of actual issues with all the debug
>>> logs. And then based on this data you can proceed or stop and rework
>>> the change a bit more in collaboration with exactly those people
>>> affected.
>>>
>>> I also think that we need a second point of view here: you were
>>> talking about not driving away the developer, who makes the change.
>>> But there are also other people who we shouldn't drive away. For
>>> example developers who depend on the change. Or QA who need to react
>>> on such changes. These people are have their part in the process.
>>>
>>>
>>> But, to be honest, I think there is a bit of overreacting on the
>>> entire Gating topic.
>>>
>>> It doesn't do a hard block. It is included in the design that gating
>>> can be bypassed. But it supposed to provide better analysis of the
>>> change. Bypassing of the gate can happen, The key here is that it
>>> won't be a surprise, rather informed decision.
>>>
>> I think this is the first time I've heard a coherent description of
>> the intent of this stuff. If it really is intended to work this way,
>> it'd be very helpful.
>>
>>>>>> The side tag approach already does not scale, as evidenced by this thread.
>>>>> It does. You just need to communicate with others working in the same
>>>>> area, IMHO. I don't think we need some technical thing for something
>>>>> that happens rarely and can be solved by more communication.
>>>>>
>>>> Side tags will happen a lot more often because the tooling is pushing
>>>> us to do it that way. Don't discount the potential for future
>>>> insanity. I'm still not sure side-tags are enough. Could we have a
>>>> concept of a "scratch side tag"? Something like a scratch build, but
>>>> contains a collection of builds and creates an overlay repo that can
>>>> be used to run checks on for auto-merging? If they're good, then it
>>>> would get auto-built properly into the main rawhide tag (or even
>>>> stable tag!).
>>> Afaik, this is exactly the concept of a dynamic sidetag as Fedora
>>> Infra is currently implementing. Sidetag in koji as a sort of
>>> pull-request: you create sidetag, get repos and composes built out of
>>> it, run tests, get results. Then "merge" this sidetag into the main
>>> repo.
>>>
>>> And while clashing sidetags is a problem, it is the same problem as it
>>> happens with overlapping pull-requests when several people are working
>>> on the source code.
>>>
>>> There are several ways to address it:
>>>
>>> 1) create smaller pull-requests and merge them more often
>>>
>>> This is one of the core points of CI workflows and it also seems to be
>>> most often underestimated. There is an overhead in creating smaller
>>> changes, which we are trying to address with tooling. But the overhead
>>> is _linear_. While the complexity of one merge grows exponentially
>>> with the size of the branch you are merging.
>>>
>>> The smaller the changes - the easier the rebase.
>>>
>>> 2) reorganize the codebase
>>>
>>> When working with source code, it usually means splitting files. If
>>> there are many changes targeting the same file again and again,
>>> causing conflicts, it might mean this file has too much logic bundled
>>> in it and needs a split up.
>>>
>>> It might also be merging files. For example if there are many changes
>>> targeting two files and it causes problems when these two files get
>>> out of sync.
>>>
>>> When applied to RPM packages, it may be also a good question: if there
>>> is circular dependency between packages, so that these are strictly
>>> tied to each other by version and can only be processed together - why
>>> these are separate packages and not subpackages?
>>>
>>> 3) Talk about changes in advance
>>>
>>> This of course is the default, and it doesn't go anywhere with gating
>>> or without it. Again I believe gating can make it easier. For example,
>>> we can add a note on conflicting "pull-requests" and put a rebase
>>> requirement as a gating check.
>>>
>> I think you kind of missed what I was asking: I want side tags that
>> are composed entirely of scratch builds. The result *must not* be used
>> to merge into the distribution. It *must* be thrown away and when the
>> pull request (or whatever) is merged, it should trigger the build
>> again, which would be a "real" side tag that would get auto-merged on
>> success.
> You are right, I missed that part. And I agree this is needed. But I
> am not sure if there is already a proposal for that.
>
> There are several ways how one can implement it. I would personally
> prefer pull requests to dist-git over scratch builds. I think it is
> important to keep some visibility in the system, so that not just the
> owner of a change, but also random lurkers can see what is being
> prepared. (Also solves the )
>
> And if we look into PR-based workflows, then Zuul team has a proof of
> concept pipeline which builds packages on PR in Pagure.
> Which is not your ordinary Jenkins PR-triggered pipeline.
>
> The killer-feature of Zuul


Zuul team? Zuul feature? I am probably missing some context ...

It does not look like you are talking about
https://github.com/Netflix/zuul which is the first reference to Zuul
returned by Google.


Vít


>  is that it can manage cross-project
> dependencies. It understands links between pull-requests in different
> git repositories, even in different Git forges (Pagure and GitHub for
> example).
>
> If, let's say, you mark PR#123 in rpms/dnf as dependent on PR#765 in
> rpms/rpm. Zuul fetches source code for both projects into the
> workspace, and runs the pipeline in this workspace. Results of the
> pipeline will be applied to both PR's.
> Zuul could also do the merges for you, then it will also ensure that
> the chain merge of dependent patches happen in the right order.
>
> I like this concept, and I wonder if we can map this workflow cleanly
> on the sidetag process, which happens after code is merged in
> dist-git.
>
>> This is more or less the equivalent of a staging/integration overlay
>> that is used to test, where the artifacts are not preserved because
>> they aren't useful beyond that.
> _______________________________________________
> 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
_______________________________________________
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




[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