On Sat, Feb 24, 2024 at 9:21 PM Volker Krause <vkra...@kde.org> wrote:

> On Saturday, 24 February 2024 04:31:49 CET Ben Cooksley wrote:
> > On Fri, Feb 23, 2024 at 11:12 PM Sune Vuorela <nos...@vuorela.dk> wrote:
> > > On 2024-02-22, Nate Graham <n...@kde.org> wrote:
> > > > I've started pondering post-megarelease projects. We've spent so
> long on
> > > > porting and bugfixing that I think it might be useful to shift gears
> to
> > > > feature work, and I'd like to brainstorm potential large-scale
> projects
> > > > and gauge the level of interest in putting resources into them soon.
> > >
> > > A bit more from the devops end that I'd love to see people tackle:
> > >  - Ensure frameworks and app unit tests interacting with windows can
> run
> > >
> > >    on Windows.
> > >    More details: The following fails on our windows CI
> > >
> https://invent.kde.org/sune/windows-test-thingie/-/blob/master/main.cpp
> > >    I find it weird that we are spending resources on putting things in
> > >    the windows store and making apps available on windows, but we can't
> > >    actually have passing tests in our CI.
> >
> > This unfortunately will not be easy to solve.
>
> And that's fine, we are in dreaming territory here anyway :)
>
> > One of the key things that we've learned out of doing CI, as has been
> > showcased by FreeBSD in particular, is that the builders need to be
> > ephemeral - that is only around for the build in question that is being
> run.
> > We're currently accomplishing this by using containers - via Podman (for
> > Linux/Android/FreeBSD) and Docker (for Windows).
> >
> > Containers also offer us the advantage of allowing people to easily
> > reproduce the CI environment on their local system without too much
> trouble.
> >
> > For Windows however, Microsoft has limited the container stack to not
> allow
> > anything GUI related to work. The underlying libraries may be there, but
> > the equivalent display server components are not operational.
> >
> > To complicate things further, on Windows certain permissions are
> restricted
> > to the interactive console and are not possible to do as either a
> scheduled
> > task or as a system service.
> > Usage of existing Windows automation frameworks such as Powershell
> Remoting
> > or SSH will therefore not work if we want things to perfectly replicate a
> > end user environment - because those will run the command(s) as part of a
> > non-interactive session (even if the user we connect as is the same one
> > logged in on the desktop console).
> >
> > Resolving this will therefore not only require running full sized Windows
> > VMs (on an ephemeral basis to avoid the recently resolved issues that
> used
> > to plague FreeBSD), but would also need the VM to automatically login and
> > spawn an agent as part of the interactive desktop session that we would
> > connect to in order to run the CI tests.
> >
> > The spawning of a VM would require refactoring the setup of our poor CI
> > workers (again - after they were only just recently completely rebuilt to
> > allow the transition to Podman to fix flatpak-builder) to make use of
> > something like:
> > -
> >
> https://forum.gitlab.com/t/custom-executor-into-windows-vm-using-linux-kvm-l
> > ibvirt/72713/5 -
> > https://docs.gitlab.com/runner/executors/custom_examples/libvirt.html
> >
> > We would still have to write the agent that receives our commands
> > (something like
> > https://gist.github.com/cschwede/3e2c025408ab4af531651098331cce45 maybe)
> >
> > We would still have to solve the issue of how to share disk images among
> > our nodes so they were built (ideally would be able to use Gitlab's
> > Container Registry for this, which is something Tart can do - Tart being
> a
> > virtualisation management utility for ARM based Macs), as well as
> > automating the installation of the various OSes we need to run this way.
> > See
> >
> https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/autom
> > ate-windows-setup?view=windows-11 for some notes on that for Windows.
> >
> > The big downside to all of that of course is that the worker nodes would
> > take longer to startup, and it would make sharing build artifacts much
> more
> > difficult and/or less efficient.
> >
> > >  - Find a way to run unit tests on android CI.
> >
> > Likewise, this is very non-trivial - from my understanding our tooling
> > currently for building Android software is centered around it all being
> > cross compiled rather than being built on the native architecture it will
> > be run on.
> > Naturally tests cannot be run (unless you emulate, which I guess we could
> > consider...) if the CPU architectures are not compatible.
> >
> > Even if you emulate though, I imagine we would need to provide a full
> > Android system setup (including all of it's relevant bits of system
> > infrastructure, such as it's display server DisplayFlinger) in order for
> > tests to truly be of use.
> > The path of least resistance is probably by making use of Google's
> existing
> > Android emulator - although i've no idea how you would tie that into CI.
>
> Right, the Android emulator is probably the first thing to look at for
> this.
> That alone isn't enough though, we can't just copy over a unit test
> executable
> and run it there, this needs to be wrapped in an APK (and which
> potentially
> needs to be given permissions, as we don't want system UI dialogs popping
> up,
> etc).
>
> The Qt CI seems to be doing something like this meanwhile, might be worth
> investigating how this is done there.
>
> > We would need to have our build chains ready to build on a native system
> > before we could think about this I think. Building Android x86/x64
> wouldn't
> > cover things off properly due as it won't reflect the actual CPUs being
> > used on end-user devices (and ARM processors can expose issues that don't
> > happen on x86/x64 based systems)
>
> For Android I'd rate that less relevant actually, we'd get by far the most
> things covered with x86_64 as well. I'm only aware of one ARM-specific
> runtime
> issue recently, and that was ARM32 only even. The vast majority of
> problems
> are either related to APK packaging or interaction with (changing) Android
> platform infrastructure, all of which is platform-independent. And the
> majority of ARM-specific issues we actually encounter during building.
>
> ARM64 native builds nevertheless belong on this wishlist, but IMHO more
> importantly for ARM Flatpaks for the mobile apps.
>

I already have a ticket for that - https://phabricator.kde.org/T17120

Hardware will likely be provided via a CAX31 / CAX41 (
https://www.hetzner.com/cloud/) as the number of builds isn't likely to be
huge and therefore cannot justify a RX170 (
https://www.hetzner.com/dedicated-rootserver/matrix-rx/)
(which would make more sense if all our Android builds were ARM native)

At this stage i'd like to get us comfortably through into the post-Binary
Factory world before anything further takes place though (some teething
issues have popped up that weren't immediately evident prior to it's
decommissioning that will need resolving).

>From my side, the next big thing to start breaking down and building via CI
would be docs.kde.org.


>
> > >  - Make autotests guarding on all our CI's.
> > >
> > >  - Clazy and clang-tidy and cppcheck on all our repositories in CI
> > >
> > >  /Sune
> >
> > Hopefully the above is food for thought as to why we don't have the
> above -
> > don't mean to say it can't be done, but it certainly is not trivial to
> > accomplish...
>
> Sure, and likewise the wishlist isn't meant as criticism of what we have,
> on
> the contrary, IMHO our CI/CD system has made huge steps forward with the
> migration to Gitlab and to container runners as well as the new signing
> service, but now we are hooked for more ;-)
>
> Yes, those are ambitious ideas, but they would significantly help
> application
> development I think, and assuming Nate's original question was also about
> where the e.V. might want to invest resources into going forward, our
> CI/CD
> infrastructure would IMHO be a good area to (continue to) invest in.
>
> Regards,
> Volker
>

Cheers,
Ben

Reply via email to