Subject: Re: [PATCH v5 1/6] ci/github: install git before checking out the repository

From: [email-masked]
Date: Wed, 23 Apr 2025 11:05:02 +0100

Hi Karthik

This looks good, I've left a few comments about the wording of the 
commit message but I wouldn't worry too much unless you end up 
re-rolling for some other reason.

On 23/04/2025 09:15, Karthik Nayak wrote:
> The GitHub's CI workflow uses 'actions/checkout@v4' to checkout the

We don't need "The" here

> repository. This action defaults to using the GitHub REST API to obtain

I'd maybe say "falls back" rather than "defaults"

> the repository if the `git` executable isn't available.
> 
> The step to build Git in the GitHub workflow can be summarized as:
> 
>    ...
>    - uses: actions/checkout@v4 #1
>    - run: ci/install-dependencies.sh #2
>    ...
>    - run: sudo --preserve-env --set-home --user=builder ci/run-build-and-tests.sh #3
>    ...
> 
> Step #1, clones the repository, since the `git` executable isn't present

It would be more accurate to say that it tries to clone the repository - 
if we fall back to extracting a tarball then we're not cloning.

> at this step, it uses GitHub's REST API to obtain a tar of the
> repository.
> 
> Step #2, installs all dependencies, which includes the `git` executable.
> 
> Step #3, sets up the build, which includes setting up meson in the meson
> job. At this point the `git` executable is present.
> 
> This means while the `git` executable is present, the repository doesn't
> contain the '.git' folder.

I'd maybe say "source tree" instead of "repository" as it isn't a 
repository without a ".git" directory.

> To keep both the CI's (GitLab and GitHub)
> behavior consistent and to ensure that the build is performed on a
> real-world scenario, install `git` before the repository is checked out.
> This ensures that 'actions/checkout@v4' will clone the repository
> instead of using a tarball. We also update the package cache while
> installing `git`, this is because some distros will fail to locate the
> package without updating the cache.

Nice explanation, the code changes look good

Thanks

Phillip

> Helped-by: Phillip Wood <[email-masked]>
> Signed-off-by: Karthik Nayak <[email-masked]>
> ---
>   .github/workflows/main.yml | 14 ++++++++++++++
>   1 file changed, 14 insertions(+)
> 
> diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
> index 37541f3d10..e9112b3a64 100644
> --- a/.github/workflows/main.yml
> +++ b/.github/workflows/main.yml
> @@ -414,6 +414,20 @@ jobs:
>       - name: prepare libc6 for actions
>         if: matrix.vector.jobname == 'linux32'
>         run: apt -q update && apt -q -y install libc6-amd64 lib64stdc++6
> +    - name: install git in container
> +      run: |
> +        if command -v git
> +        then
> +          : # nothing to do
> +        elif command -v apk
> +        then
> +          apk add --update git
> +        elif command -v dnf
> +        then
> +          dnf -yq update && dnf -yq install git
> +        else
> +          apt-get -q update && apt-get -q -y install git
> +        fi
>       - uses: actions/checkout@v4
>       - run: ci/install-dependencies.sh
>       - run: useradd builder --create-home
>