Skip to content
  • Gábor Szeder's avatar
    travis-ci: don't run the test suite as root in the 32 bit Linux build · 53303302
    Gábor Szeder authored and Junio C Hamano's avatar Junio C Hamano committed
    Travis CI runs the 32 bit Linux build job in a Docker container, where
    all commands are executed as root by default.  Therefore, ever since
    we added this build job in 88dedd5e (Travis: also test on 32-bit
    Linux, 2017-03-05), we have a bit of code to create a user in the
    container matching the ID of the host user and then to run the test
    suite as this user.  Matching the host user ID is important, because
    otherwise the host user would have no access to any files written by
    processes running in the container, notably the logs of failed tests
    couldn't be included in the build job's trace log.
    
    Alas, this piece of code never worked, because it sets the variable
    holding the user name ($CI_USER) in a subshell, meaning it doesn't
    have any effect by the time we get to the point to actually use the
    variable to switch users with 'su'.  So all this time we were running
    the test suite as root.
    
    Reorganize that piece of code in 'ci/run-linux32-build.sh' a bit to
    avoid that problematic subshell and to ensure that we switch to the
    right user.  Furthermore, make the script's optional host user ID
    option mandatory, so running the build accidentally as root will
    become harder when debugging locally.  If someone really wants to run
    the test suite as root, whatever the reasons might be, it'll still be
    possible to do so by explicitly passing '0' as host user ID.
    
    Finally, one last catch: since commit 7e72cfce
    
     (travis-ci: save prove
    state for the 32 bit Linux build, 2017-12-27) the 'prove' test harness
    has been writing its state to the Travis CI cache directory from
    within the Docker container while running as root.  After this patch
    'prove' will run as a regular user, so in future build jobs it won't
    be able overwrite a previously written, still root-owned state file,
    resulting in build job failures.  To resolve this we should manually
    delete caches containing such root-owned files, but that would be a
    hassle.  Instead, work this around by changing the owner of the whole
    contents of the cache directory to the host user ID.
    
    Signed-off-by: default avatarSZEDER Gábor <szeder.dev@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    53303302