• Wez Furlong's avatar
    getdeps: allow satisfying deps from system packages · 5de9cfc6
    Wez Furlong authored
    Summary:
    From the outset, we wanted to be sure that getdeps was able
    to source and build the dependencies so that we knew that we'd have
    a repeatable build.  This came at the cost of build times: having
    to build boost on each CI run is a bit of a chore.
    
    This commit adds three new elements to the manifest files:
    
    * `rpms` - a list of RPM names that are all required to be present
      in order to consider the dependency satisfied
    * `debs` - like `rpms` above, but scoped to debian package names
    * `preinstalled.env` - a list of environment variables that if they
      are all set and non-empty will satisfy the dependency.
    
    A new `--allow-system-packages` option to getdeps enables the new
    logic that looks for system packages; it is off by default, but
    enabled in the generated GitHub Actions workflows.
    
    A new `install-system-deps` subcommand is provided that will attempt
    to install the system packages needed to satisfy the build.  This
    typically needs to be run via sudo and is thus broken out separately
    from the main getdeps build flow.
    
    I made a pass over the manifest files and added package names that
    satisfy the build on ubuntu-18 and fedora-31.
    
    shri-khare: I renamed the `Python3.7.6` manifest to just `python` as
    part of this change; the version of python that it pulls in through
    the normal build is the same and I believe that an equal or newer
    version of python3 is available in the GH actions builder.
    
    The `preinstalled.env` is used only by the boost manifest: it references
    the name of an environment variable that is set by the github
    windows hosts and that points to a pre-built and pre-installed
    copy of boost.  Since there is no package manager that we can
    easily query for this sort of thing, probing from the environment
    seems like a reasonable and fast way to check for this.  We
    may need to evolve this over time to become more feature rich,
    but this seems like a good starting point.
    
    This commit has the potential to save 20 minutes of build time
    from each public CI build just due to the boost dependency alone!
    
    Refs: https://github.com/facebook/watchman/pull/797
    
    Reviewed By: yfeldblum
    
    Differential Revision: D20740410
    
    fbshipit-source-id: 6c38019449c54465127656c3d18a6ff1f30adaea
    5de9cfc6
libmnl 304 Bytes