[Scummvm-devel] The new Buildbot: what’s happening, what needs to happen

Colin Snover scummvm-devel at zetafleet.com
Thu Dec 21 03:47:42 CET 2017


Hi guys,

Thank you both for your question about the worker requirement, it is a
great question to ask.

To me, the biggest argument for such a requirement is that the bus
factor on these ports is really low, usually just one person. Making
sure we always have a worker image helps to reduce the risk of dead
ports by ensuring that at least the build process for all of the
“official” (i.e. in our tree) ports is documented, reproducible, and
(strongly preferably) updatable, so binaries can be created by
automation or any other team member instead of relying on a single
person. There are at least four examples I can point to that indicate a
real need for this kind of strict requirement for any of our official ports:

1. Code for a new “official” 3DS port was added to our tree in 2016, and
then we never actually released for this platform because the porter
disappeared before any release could be made;
2. When the usual Windows porter was lost around the 1.9 release time,
there was apparently a non-trivial amount of time & effort needed to get
a working build system up and running again, and then I essentially had
to re-do this work yet again to update Buildbot, which just wastes the
core team’s limited time;
3. Porters do stuff which is totally undocumented, like the Nero images
which are currently being created for the Dreamcast port. If the porter
disappears, it’s unclear if anybody is going to be able to reproduce
this. I was only even able to create a Dreamcast worker because digitall
sent me some scripts that they’d used to create a cross-compiler for
this platform in the past;
3. We *still* don’t have any binaries available of ScummVM 2.0 for
Ubuntu/Debian, iOS, PSP, or Wii, even though these are our top platforms
after Windows, macOS, and Android. We wouldn’t even have an Android
package if I hadn’t already done the Buildbot work, and it was unclear
for a time whether we would have a Windows package ready to go for 2.0
either.

If we don’t have a policy like this, these exact same issues will recur
eventually with every newly accepted port. It does no good for us to say
we “officially” support some platform when we can’t actually make a
release binary for it, and it is damaging to the ScummVM brand and to
our users when we can’t even get our most popular ports’ binaries ready
by release day. This change won’t fix all the release process issues
(this is probably impossible), but it does at least get us to the point
where we don’t ever have to worry if we’re even going to be able to
actually *release* something at release time.

A secondary reason for such a requirement is build security. There’s a
small but sadly non-zero risk that bad code could be introduced by a
porter. Since we are giving these binaries our stamp of approval by
calling them “official”, and we have no good way for the core team to
actually vet them, we can partially mitigate the risk of a bad actor
introducing something ugly by making the process more transparent and
robust against subversion. In the current global environment I feel that
it is important to try to reduce these kinds of secondary risks where
possible, and having a transparent and reproducible build system which
fixes the above issues will also help to ensure the integrity of our
releases.

I understand that there are some potential downsides to this proposal, I
just can’t think of another more reasonable approach that won’t leave us
right back where we are today. If you can, let me know of the
alternative. We could grandfather some of the manual ports, but that
still doesn’t really solve the bus factor problem. Also, it’s important
to acknowledge that this policy change would only move unbuildable ports
outside our “official” realm, so we do not have a direct hand in
managing them or maintaining their code/tracking their bugs in our bug
tracker any longer; it won’t prevent them from existing, or even from
being linked on our downloads page, or from being pulled back in again
in the future if someone makes the effort later on to create a
functioning worker image.

With regards to the specific technical questions: For anything that
can’t be cross-compiled from Linux for some reason, there is always the
nuclear option of running qemu in a worker. With regards to macOS, I
don’t think there is any particular reason why those releases need to
come in a dmg any more than they need to be delivered as pkg/mpkg
installers, though there is a project called libdmg-hfsplus which can
also create dmgs.

Best,

On 2017-12-18 16:54, Thierry Crozat wrote:
> Hi Colin,
>
> I was about to write almost the same thing.
>
> This looks like a great idea overall, and thank you for all your work
> on this.
>
> I am however not sure having a buildbot worker for all ports should be
> a requirement. Can you give your reasoning for this suggestion?
> I am worried this would be a death sentence for a few ports (you
> mentioned difficulties with Samsung TV and OS/2, and I have also had
> difficulties getting mac PPC compilation to work with anything
> remotely modern). There is probably not many users for those, but I am
> a bit uncomfortable with killing them if we have porters willing to
> build those manually. I am a bit less worried for ports on more modern
> platforms as cross-compilation on Linux seems to be usually well
> supported. Packaging might be an issue though (I don't know of any way
> to create a dmg image on Linux for example, which might force us to
> use zip instead for macOS packages).
>
> Thierry
>
>> On 18 Dec 2017, at 22:21, Eugene Sandulenko <sev at scummvm.org
>> <mailto:sev at scummvm.org>> wrote:
>>
>> On 17 December 2017 at 15:36, Willem Jan Palenstijn <wjp at usecode.org
>> <mailto:wjp at usecode.org>> wrote:
>>
>>     On Sat, Dec 16, 2017 at 09:08:15PM -0600, Colin Snover wrote:
>>     > Team,
>>     >
>>     > One of my goals for the next release of ScummVM is to automate the
>>     > process of building and generating release packages. My hope is
>>     that
>>     > this will allow us to have a faster release cycle, more consistent
>>     > release quality, and free up manpower to focus on the many parts of
>>     > ScummVM which cannot be so easily automated (like adding more
>>     engines! :)).
>>     >
>>     > The first two major parts of this project are nearly complete: the
>>     > upgrade of Buildbot, and the introduction of infrastructure
>>     management
>>     > using Ansible.
>>
>>     Hi Colin,
>>
>>     Let me start by saying: Thank you! This is great work, and will
>>     really help
>>     keep ScummVM portable and maintainable. I'm very enthusiastic
>>     about these
>>     changes.
>>
>>
>> In short, I also like the idea, and I see no problem with granting
>> you the needed permissions.
>>
>> The only thing which I would like to discuss, is the requirements for
>> every port to have a buildbot instance. I have no real data, but I
>> would be not surprised that in some cases some toolchains will not be
>> easy to install on Linux environment. And of course, I could be wrong
>> in this regard.
>>
>>
>> Eugene 
>> _______________________________________________
>> Scummvm-devel mailing list
>> Scummvm-devel at lists.scummvm.org <mailto:Scummvm-devel at lists.scummvm.org>
>> http://lists.scummvm.org/listinfo/scummvm-devel
>
>
>
> _______________________________________________
> Scummvm-devel mailing list
> Scummvm-devel at lists.scummvm.org
> http://lists.scummvm.org/listinfo/scummvm-devel


-- 
Colin Snover
https://zetafleet.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.scummvm.org/pipermail/scummvm-devel/attachments/20171220/3c188687/attachment.html>


More information about the Scummvm-devel mailing list