Skip to content

CI: speed up Windows installer building #5315

Closed

Description

@fingolfin

Right now building the Windows .exe installer runs in a CI job that takes ~90 minutes to run.

Of these, it seems about 30 minutes (!) are spent on building semigroups (this is based on timestamps in CI build logs, so it may not be quite accurate). Note that semigroups and its dependencies use a lot of heavy C++ code, which seems to tax the poor CI VM to its limit. (I suspect Normaliz(Interface) adds another substantial chunk but did not verify that).

It would be good to reduce these timings. An immediate idea would be to try and use ccache, and persist its cache across CI runs, like we do with our primary CI. Of course this is a bit different here because we need ccache inside cygwin... So most likely we can't just use https://github.com/Chocobo1/setup-ccache-action . But if someone figures out how to install ccache and ensure it gets used, and figures out where it stores its cache, then it won't be hard to persist that across CI runs using https://github.com/actions/cache

Activity

  1. added
    os: windowsIssues and PRs that are (at least partially) specific to Windows
    topic: ciAnything related to GitHub Actions, Codecov, AppVeyor, Coveralls, Travis, ...
    on Jan 12, 2023
  2. ChrisJefferson commented on Jan 13, 2023

    @ChrisJefferson
    Contributor

    One problem is the directory that cygwin is installed in contains the version of GAP. One way of solving this would be to instead point ccache at a known global directory.

    Also note that cygwin's copy of cache is from 2013, and marked as unmaintained, so we can't use anything too modern / fancy.

    I tested ccache on my machine building semigroups on cygwin, it about doubles the speed.

  3. fingolfin commented on Jan 26, 2023

    @fingolfin
    MemberAuthor

    One problem is the directory that cygwin is installed in contains the version of GAP. One way of solving this would be to instead point ccache at a known global directory.

    I don't understand, in how far is this a problem?

    Also note that cygwin's copy of cache is from 2013, and marked as unmaintained, so we can't use anything too modern / fancy.

    What "fancy" things would one want to use there?

    I assume to install it, we just need to add ccache to the relevant PKGS_TO_INSTALL, right?

    And then figure out how to ensure it is used

    And finally preserve its cache directory across CI runs

    I tested ccache on my machine building semigroups on cygwin, it about doubles the speed.

    That sounds nice!

  4. fingolfin commented on Oct 23, 2026

    @fingolfin
    MemberAuthor

    Fixed by gap-system/gap-windows#11 and #6777: release_gap.sh now compiles through ccache, and the Windows installer job keeps the cache across runs; pull requests restore master's cache but don't save their own.

    Windows installer job before (40 runs, Oct 15–16): 53–90 min, of which 42–68 min building packages, almost all of it libsemigroups/semigroups, Normaliz and CARAT.

    After (first 6 runs with a filled cache, Oct 23): 14–22 min, of which 3.5–5.8 min building packages; ccache served 1103–1163 of 1164 compilations. Inno Setup (4–6 min) and the Cygwin setup steps are now the largest parts.

    One timeout (run 38520025115) came from a 75 min Cygwin package download from mirrors.kernel.org, not from compiling. That is unchanged, but now fits within the 120 min limit.

    Generative AI assisted with the analysis and this comment.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    os: windowsIssues and PRs that are (at least partially) specific to Windowstopic: ciAnything related to GitHub Actions, Codecov, AppVeyor, Coveralls, Travis, ...

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions