Hi Will!

I’ve been happy with the GitHub Actions approach to Windows CI for erlfdb. The 
submodule-based installation of third party actions hasn’t proven to be a 
significant contributor to the total runtime. I think adding this workflow to 
the glazier repo is a great idea.

I remain interested in a simplified option for Windows builds that uses 
pre-built packages for Erlang/OTP instead of relying on our own glazier-based 
artifacts. I’m under the impression that we build Erlang ourselves mostly for 
historical reasons, but I could be wrong. In the CI world we could simplify a 
few steps by using the setup-beam action if we went that route as well. But we 
don’t have to address that here.

I have a few questions about the workflow — what’s the thinking behind the 
separate “coucholddeps” and “couchdb” jobs? — but we can save that for a PR if 
you like. Cheers,

Adam

> On Dec 9, 2021, at 4:06 AM, Will Young <lostnetwork...@gmail.com> wrote:
> 
> Hi,
> 
>  I've been looking into github workflows primarily with an interest
> in being able to run ci tests on some of the supported platforms on
> changes to test a potential contribution isn't going to break them.
> 
>  In the case of windows everything is unbundled so glazier's process
> is providing a couchdb package with spidermonkey+icu, otp+openssl,
> where most of this is built from source.
> 
> I've put put this process into a flow as several separate jobs that
> deliver intermediate results using some workarounds from discussions
> on slack, and could avoid many of the older workarounds in glazier by
> using newer versions of the dependencies.
> 
> An example of the resulting release binaries are here:
> https://github.com/lostnet/couchdb/releases/tag/msdeps12
> 
> And the workflow that is generating them is here:
> https://github.com/lostnet/couchdb/blob/msdeps12/.github/workflows/mslegacy.yml
> 
> I think it would make sense to integrate this as a flow on the
> couchdb-glazier repo to create an automated reference build and
> binaries.
> 
> Issues:
> 
> 1.  versioning for reliability and supply side attacks (as discussed on 
> slack):
> 
> The runners get updated to new versions of things which break builds.
> It is helpful though to be easily able to attempt to reproduce older
> builds again to eliminate theories of the source of new build
> failures.
> Versions of things should also be locked down as should uses of third
> party actions like erlfdb's flows do via git submodule pinning. There
> is an inherent tradeoff that the install time of anything locked down
> instead of from a runner's defaults adds to the runtime.
> 
> 2. Using the flow for release binaries:
> 
>  Aside from (1) it would not be wise to use gpg keys on a cloud
> service. Releases can be modified to add binaries so a couchdb member
> could add signed binaries ideally using binaries built in the flow
> itself if they can verify they were correctly built (or possibly
> running the flow on their own clone or manually follow the flow
> actions.)
>  The versions of dependencies and compilers used in the build are
> newer than past builds. Where possible it would be best to verify
> these versions as older versions usually have more quirks for
> automating the build on modern runners.
> 
> 3. For CI:
>  If glazier repo had these flows and releases, I would like to add
> the ability to run the couchdbolddeps job as a manual action in the
> couchdb repo similar to the ubuntu ci added with esr91pr.
> 
> 4. There are still quite a few problems in the tests to investigate as
> well as whether the resulting packages are valid (and whether
> foundationdb is intended to be external or a bundled deliverable on
> couch4?)
> 
> At Any rate, I would appreciate any thoughts on automating the windows builds.
> 
> Thanks,
> Will Young

Reply via email to