From: Phillip Wood <phillip.wood123@gmail.com>
To: Patrick Steinhardt <ps@pks.im>, git@vger.kernel.org
Cc: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Subject: Re: [PATCH v2 5/5] ci: add support for GitLab CI
Date: Fri, 27 Oct 2023 11:19:04 +0100 [thread overview]
Message-ID: <0d889da1-7fd8-4e21-965f-6222e4433ecf@gmail.com> (raw)
In-Reply-To: <37a507e9b255dd40c0536438dfe3fa05b067f08f.1698398590.git.ps@pks.im>
On 27/10/2023 10:25, Patrick Steinhardt wrote:
> We already support Azure Pipelines and GitHub Workflows in the Git
> project, but until now we do not have support for GitLab CI. While it is
> arguably not in the interest of the Git project to maintain a ton of
> different CI platforms, GitLab has recently ramped up its efforts and
> tries to contribute to the Git project more regularly.
I agree we don't want to support too many CI platforms but I think
adding support for GitLab is good as it helps to stop us being too tied
to GitHub Actions (which should make it easier if we ever need to
transition to a different platform in the future) and provides an
alternative for contributors who want to use a different platform.
> Part of a problem we hit at GitLab rather frequently is that our own,
> custom CI setup we have is so different to the setup that the Git
> project has. More esoteric jobs like "linux-TEST-vars" that also set a
> couple of environment variables do not exist in GitLab's custom CI
> setup, and maintaining them to keep up with what Git does feels like
> wasted time. The result is that we regularly send patch series upstream
> that fail to compile or pass tests in GitHub Workflows. We would thus
> like to integrate the GitLab CI configuration into the Git project to
> help us send better patch series upstream and thus reduce overhead for
> the maintainer.
>
> The integration does not necessarily have to be a first-class citizen,
> which would in practice only add to the fallout that pipeline failures
> have for the maintainer. That being said, we are happy to maintain this
> alternative CI setup for the Git project and will make test results
> available as part of our own mirror of the Git project at [1].
Having someone committed to on-going maintenance is great.
> This commit introduces the integration into our regular CI scripts so
> that most of the setup continues to be shared across all of the CI
> solutions.
>
> [1]: https://gitlab.com/gitlab-org/git
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
> .gitlab-ci.yml | 51 +++++++++++++++++++++++++++++++
> ci/install-docker-dependencies.sh | 9 +++++-
> ci/lib.sh | 49 +++++++++++++++++++++++++++++
> ci/print-test-failures.sh | 6 ++++
> 4 files changed, 114 insertions(+), 1 deletion(-)
> create mode 100644 .gitlab-ci.yml
>
> diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
> new file mode 100644
> index 00000000000..43d3a961fa0
> --- /dev/null
> +++ b/.gitlab-ci.yml
> @@ -0,0 +1,51 @@
> +default:
> + timeout: 2h
> +
> +workflow:
> + rules:
> + - if: $CI_PIPELINE_SOURCE == "merge_request_event"
> + - if: $CI_COMMIT_TAG
> + - if: $CI_COMMIT_REF_PROTECTED == "true"
> +
> +test:
> + image: $image
> + before_script:
> + - ./ci/install-docker-dependencies.sh
> + script:
> + - useradd builder --home-dir "${CI_PROJECT_DIR}"
> + - chown -R builder "${CI_PROJECT_DIR}"
> + - sudo --preserve-env --set-home --user=builder ./ci/run-build-and-tests.sh
It's really good that you're running the tests as an unprivileged user.
This is something we used to do when we were using Travis that got lost
in the transition to Azure Pipelines which means some tests that rely on
httpd are now skipped as they refuse to run as root.
ci/run-docker-build.sh is currently bit-rotting, I wonder if it is
possible to update it so that we can run the dockerized tests in the
same way on all CI platforms.
> + after_script:
> + - |
> + if test "$CI_JOB_STATUS" != 'success'
> + then
> + sudo --preserve-env --set-home --user=builder ./ci/print-test-failures.sh
> + fi
> + parallel:
> + matrix:
> + - jobname: linux-sha256
> + image: ubuntu:latest
> + CC: clang
> + - jobname: linux-gcc
> + image: ubuntu:20.04
> + CC: gcc
> + CC_PACKAGE: gcc-8
> + - jobname: linux-TEST-vars
> + image: ubuntu:20.04
> + CC: gcc
> + CC_PACKAGE: gcc-8
> + - jobname: linux-gcc-default
> + image: ubuntu:latest
> + CC: gcc
> + - jobname: linux-leaks
> + image: ubuntu:latest
> + CC: gcc
> + - jobname: linux-asan-ubsan
> + image: ubuntu:latest
> + CC: clang
> + - jobname: linux-musl
> + image: alpine:latest
> + artifacts:
> + paths:
> + - t/failed-test-artifacts
> + when: on_failure
This file is pleasingly small.
> diff --git a/ci/install-docker-dependencies.sh b/ci/install-docker-dependencies.sh
> index d0bc19d3bb3..1cd92db1876 100755
> --- a/ci/install-docker-dependencies.sh
> +++ b/ci/install-docker-dependencies.sh
> @@ -7,6 +7,9 @@
>
> begin_group "Install dependencies"
>
> +# Required so that apt doesn't wait for user input on certain packages.
> +export DEBIAN_FRONTEND=noninteractive
> +
> case "$jobname" in
> linux32)
> linux32 --32bit i386 sh -c '
> @@ -16,9 +19,13 @@ linux32)
> '
> ;;
> linux-musl)
> - apk add --update build-base curl-dev openssl-dev expat-dev gettext \
> + apk add --update git shadow sudo build-base curl-dev openssl-dev expat-dev gettext \
> pcre2-dev python3 musl-libintl perl-utils ncurses >/dev/null
It would be helpful to explain the new dependencies in the commit
message. I can see why you're adding sudo, but how were we getting away
without installing the other packages for GitHub Actions?
> ;;
> +linux-*)
> + apt update -q &&
> + apt install -q -y sudo git make language-pack-is libsvn-perl apache2 libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext zlib1g-dev perl-modules liberror-perl libauthen-sasl-perl libemail-valid-perl libio-socket-ssl-perl libnet-smtp-ssl-perl ${CC_PACKAGE:-${CC:-gcc}}
> + ;;
> pedantic)
> dnf -yq update >/dev/null &&
> dnf -yq install make gcc findutils diffutils perl python3 gettext zlib-devel expat-devel openssl-devel curl-devel pcre2-devel >/dev/null
> diff --git a/ci/lib.sh b/ci/lib.sh
> index 9ffdf743903..f518df7e2cb 100755
> --- a/ci/lib.sh
> +++ b/ci/lib.sh
> @@ -14,6 +14,22 @@ then
> need_to_end_group=
> echo '::endgroup::' >&2
> }
> +elif test true = "$GITLAB_CI"
> +then
> + begin_group () {
> + need_to_end_group=t
> + echo -e "\e[0Ksection_start:$(date +%s):$(echo "$1" | tr ' ' _)\r\e[0K$1"
> + trap "end_group '$1'" EXIT
> + set -x
> + }
> +
> + end_group () {
> + test -n "$need_to_end_group" || return 0
> + set +x
> + need_to_end_group=
> + echo -e "\e[0Ksection_end:$(date +%s):$(echo "$1" | tr ' ' _)\r\e[0K"
> + trap - EXIT
> + }
> else
> begin_group () { :; }
> end_group () { :; }
> @@ -203,6 +219,39 @@ then
> MAKEFLAGS="$MAKEFLAGS --jobs=10"
> test windows != "$CI_OS_NAME" ||
> GIT_TEST_OPTS="--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS"
> +elif test true = "$GITLAB_CI"
> +then
> + CI_TYPE=gitlab-ci
> + CI_BRANCH="$CI_COMMIT_REF_NAME"
> + CI_COMMIT="$CI_COMMIT_SHA"
> + case "$CI_JOB_IMAGE" in
> + macos-*)
> + CI_OS_NAME=osx;;
> + alpine:*|ubuntu:*)
> + CI_OS_NAME=linux;;
> + *)
> + echo "Could not identify OS image" >&2
> + env >&2
> + exit 1
> + ;;
> + esac
> + CI_REPO_SLUG="$CI_PROJECT_PATH"
> + CI_JOB_ID="$CI_JOB_ID"
I guess making this explicit is helpful, otherwise someone may wonder
why CI_JOB_ID is not being set.
> + CC="${CC_PACKAGE:-${CC:-gcc}}"
> + DONT_SKIP_TAGS=t
> + handle_failed_tests () {
> + create_failed_test_artifacts
> + }
> +
> + cache_dir="$HOME/none"
> +
> + runs_on_pool=$(echo "$CI_JOB_IMAGE" | tr : -)
> +
> + export GIT_PROVE_OPTS="--timer --jobs $(nproc)"
> + export GIT_TEST_OPTS="--verbose-log -x"
> + MAKEFLAGS="$MAKEFLAGS --jobs=$(nproc)"
> + test windows != "$CI_OS_NAME" ||
> + GIT_TEST_OPTS="--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS"
This last paragraph feels like it should be common to all the CI
providers. There are some small differences but if we're going to
support several providers it would be nice to set the common options
centrally. I'm pretty sure the --jobs=10 we use for the GitHub and Azure
is not optimal, using $(nproc) is nice so long as it is supported on all
the images we use.
I had a quick glance through the previous patches and they all look like
nice cleanups that make our ci support less dependent on a single
provider. This series looks like a nice addition to our CI support.
Best Wishes
Phillip
> else
> echo "Could not identify CI type" >&2
> env >&2
> diff --git a/ci/print-test-failures.sh b/ci/print-test-failures.sh
> index 57277eefcd0..c33ad4e3a22 100755
> --- a/ci/print-test-failures.sh
> +++ b/ci/print-test-failures.sh
> @@ -51,6 +51,12 @@ do
> tar czf failed-test-artifacts/"$test_name".trash.tar.gz "$trash_dir"
> continue
> ;;
> + gitlab-ci)
> + mkdir -p failed-test-artifacts
> + cp "${TEST_EXIT%.exit}.out" failed-test-artifacts/
> + tar czf failed-test-artifacts/"$test_name".trash.tar.gz "$trash_dir"
> + continue
> + ;;
> *)
> echo "Unhandled CI type: $CI_TYPE" >&2
> exit 1
next prev parent reply other threads:[~2023-10-27 10:19 UTC|newest]
Thread overview: 101+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-26 7:59 [PATCH 0/5] ci: add GitLab CI definition Patrick Steinhardt
2023-10-26 8:00 ` [PATCH 1/5] ci: reorder definitions for grouping functions Patrick Steinhardt
2023-10-26 8:26 ` Oswald Buddenhagen
2023-10-27 8:17 ` Patrick Steinhardt
2023-10-26 8:00 ` [PATCH 2/5] ci: make grouping setup more generic Patrick Steinhardt
2023-10-26 8:00 ` [PATCH 3/5] ci: group installation of Docker dependencies Patrick Steinhardt
2023-10-26 8:34 ` Oswald Buddenhagen
2023-10-27 8:17 ` Patrick Steinhardt
2023-10-26 8:00 ` [PATCH 4/5] ci: split out logic to set up failed test artifacts Patrick Steinhardt
2023-10-26 8:35 ` Oswald Buddenhagen
2023-11-03 22:35 ` Christian Couder
2023-11-06 7:16 ` Patrick Steinhardt
2023-10-26 8:00 ` [PATCH 5/5] ci: add support for GitLab CI Patrick Steinhardt
2023-10-26 9:07 ` Oswald Buddenhagen
2023-10-27 8:17 ` Patrick Steinhardt
2023-10-27 10:22 ` Phillip Wood
2023-10-27 10:43 ` Oswald Buddenhagen
2023-10-27 14:32 ` Phillip Wood
2023-10-27 17:47 ` Oswald Buddenhagen
2023-10-30 9:49 ` Phillip Wood
2023-10-30 14:04 ` Dragan Simic
2023-10-27 10:49 ` Oswald Buddenhagen
2023-10-27 11:11 ` Patrick Steinhardt
2023-10-27 9:25 ` [PATCH v2 0/5] ci: add GitLab CI definition Patrick Steinhardt
2023-10-27 9:25 ` [PATCH v2 1/5] ci: reorder definitions for grouping functions Patrick Steinhardt
2023-10-27 9:25 ` [PATCH v2 2/5] ci: make grouping setup more generic Patrick Steinhardt
2023-10-27 9:25 ` [PATCH v2 3/5] ci: group installation of Docker dependencies Patrick Steinhardt
2023-10-27 9:25 ` [PATCH v2 4/5] ci: split out logic to set up failed test artifacts Patrick Steinhardt
2023-10-27 9:25 ` [PATCH v2 5/5] ci: add support for GitLab CI Patrick Steinhardt
2023-10-27 10:19 ` Phillip Wood [this message]
2023-10-27 11:19 ` Patrick Steinhardt
2023-10-27 11:57 ` Patrick Steinhardt
2023-10-27 13:02 ` Phillip Wood
2023-10-29 16:13 ` Phillip Wood
2023-10-30 10:46 ` Patrick Steinhardt
2023-10-29 16:27 ` Phillip Wood
2023-10-30 10:45 ` Patrick Steinhardt
2023-10-30 0:22 ` Junio C Hamano
2023-10-27 11:01 ` Oswald Buddenhagen
2023-10-27 13:17 ` Phillip Wood
2023-10-27 15:53 ` Oswald Buddenhagen
2023-10-31 19:36 ` Jeff King
2023-11-01 3:33 ` Junio C Hamano
2023-10-30 12:14 ` [PATCH v3 0/8] ci: add GitLab CI definition Patrick Steinhardt
2023-10-30 12:14 ` [PATCH v3 1/8] ci: reorder definitions for grouping functions Patrick Steinhardt
2023-10-30 12:14 ` [PATCH v3 2/8] ci: make grouping setup more generic Patrick Steinhardt
2023-10-30 12:14 ` [PATCH v3 3/8] ci: group installation of Docker dependencies Patrick Steinhardt
2023-10-30 12:14 ` [PATCH v3 4/8] ci: split out logic to set up failed test artifacts Patrick Steinhardt
2023-10-30 12:15 ` [PATCH v3 5/8] ci: unify setup of some environment variables Patrick Steinhardt
2023-10-30 15:09 ` Phillip Wood
2023-10-30 15:19 ` Patrick Steinhardt
2023-10-30 18:22 ` Dragan Simic
2023-10-30 12:15 ` [PATCH v3 6/8] ci: squelch warnings when testing with unusable Git repo Patrick Steinhardt
2023-10-30 12:15 ` [PATCH v3 7/8] ci: install test dependencies for linux-musl Patrick Steinhardt
2023-10-30 12:47 ` Patrick Steinhardt
2023-10-30 13:22 ` Patrick Steinhardt
2023-10-30 15:13 ` Phillip Wood
2023-10-30 15:23 ` Patrick Steinhardt
2023-10-30 16:09 ` Phillip Wood
2023-10-30 12:15 ` [PATCH v3 8/8] ci: add support for GitLab CI Patrick Steinhardt
2023-10-30 15:46 ` [PATCH 0/5] ci: add GitLab CI definition Taylor Blau
2023-10-31 7:46 ` Patrick Steinhardt
2023-10-31 19:12 ` Taylor Blau
2023-11-01 0:15 ` Junio C Hamano
2023-11-01 11:56 ` Patrick Steinhardt
2023-10-31 9:04 ` [PATCH v4 0/8] " Patrick Steinhardt
2023-10-31 9:04 ` [PATCH v4 1/8] ci: reorder definitions for grouping functions Patrick Steinhardt
2023-10-31 9:04 ` [PATCH v4 2/8] ci: make grouping setup more generic Patrick Steinhardt
2023-10-31 9:04 ` [PATCH v4 3/8] ci: group installation of Docker dependencies Patrick Steinhardt
2023-10-31 9:04 ` [PATCH v4 4/8] ci: split out logic to set up failed test artifacts Patrick Steinhardt
2023-10-31 9:04 ` [PATCH v4 5/8] ci: unify setup of some environment variables Patrick Steinhardt
2023-10-31 17:06 ` Victoria Dye
2023-11-01 3:14 ` Junio C Hamano
2023-11-01 11:44 ` Patrick Steinhardt
2023-10-31 9:05 ` [PATCH v4 6/8] ci: squelch warnings when testing with unusable Git repo Patrick Steinhardt
2023-10-31 9:05 ` [PATCH v4 7/8] ci: install test dependencies for linux-musl Patrick Steinhardt
2023-10-31 9:05 ` [PATCH v4 8/8] ci: add support for GitLab CI Patrick Steinhardt
2023-10-31 17:47 ` Victoria Dye
2023-11-01 11:44 ` Patrick Steinhardt
2023-10-31 18:22 ` [PATCH v4 0/8] ci: add GitLab CI definition Victoria Dye
2023-11-01 3:22 ` Junio C Hamano
2023-11-01 11:44 ` Patrick Steinhardt
2023-11-01 13:02 ` [PATCH v5 0/8] ci: add support for GitLab CI Patrick Steinhardt
2023-11-01 13:02 ` [PATCH v5 1/8] ci: reorder definitions for grouping functions Patrick Steinhardt
2023-11-01 13:02 ` [PATCH v5 2/8] ci: make grouping setup more generic Patrick Steinhardt
2023-11-01 13:02 ` [PATCH v5 3/8] ci: group installation of Docker dependencies Patrick Steinhardt
2023-11-01 13:02 ` [PATCH v5 4/8] ci: split out logic to set up failed test artifacts Patrick Steinhardt
2023-11-01 13:03 ` [PATCH v5 5/8] ci: unify setup of some environment variables Patrick Steinhardt
2023-11-01 13:03 ` [PATCH v5 6/8] ci: squelch warnings when testing with unusable Git repo Patrick Steinhardt
2023-11-01 13:03 ` [PATCH v5 7/8] ci: install test dependencies for linux-musl Patrick Steinhardt
2023-11-01 13:03 ` [PATCH v5 8/8] ci: add support for GitLab CI Patrick Steinhardt
2023-11-09 8:05 ` [PATCH v6 0/8] ci: add GitLab CI definition Patrick Steinhardt
2023-11-09 8:05 ` [PATCH v6 1/8] ci: reorder definitions for grouping functions Patrick Steinhardt
2023-11-09 8:05 ` [PATCH v6 2/8] ci: make grouping setup more generic Patrick Steinhardt
2023-11-09 8:05 ` [PATCH v6 3/8] ci: group installation of Docker dependencies Patrick Steinhardt
2023-11-09 8:05 ` [PATCH v6 4/8] ci: split out logic to set up failed test artifacts Patrick Steinhardt
2023-11-09 8:05 ` [PATCH v6 5/8] ci: unify setup of some environment variables Patrick Steinhardt
2023-11-09 8:05 ` [PATCH v6 6/8] ci: squelch warnings when testing with unusable Git repo Patrick Steinhardt
2023-11-09 8:05 ` [PATCH v6 7/8] ci: install test dependencies for linux-musl Patrick Steinhardt
2023-11-09 8:05 ` [PATCH v6 8/8] ci: add support for GitLab CI Patrick Steinhardt
2023-11-09 10:06 ` [PATCH v6 0/8] ci: add GitLab CI definition Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0d889da1-7fd8-4e21-965f-6222e4433ecf@gmail.com \
--to=phillip.wood123@gmail.com \
--cc=git@vger.kernel.org \
--cc=oswald.buddenhagen@gmx.de \
--cc=phillip.wood@dunelm.org.uk \
--cc=ps@pks.im \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).