git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>,
	Phillip Wood <phillip.wood123@gmail.com>,
	Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Subject: [PATCH v3 0/8] ci: add GitLab CI definition
Date: Mon, 30 Oct 2023 13:14:39 +0100	[thread overview]
Message-ID: <cover.1698667545.git.ps@pks.im> (raw)
In-Reply-To: <cover.1698305961.git.ps@pks.im>

[-- Attachment #1: Type: text/plain, Size: 7779 bytes --]

Hi,

this is the third version of this patch series that adds GitLab CI
definitions to the Git project. Please refer to the cover letter for v1
of this series [1] for the motivation and intent -- I won't repeat it
here as it's a bit on the longer side.

Changes compared to v2:

    - Patch 5: This is a new preparatory step to unify the setup of some
      environment variables. It also fixes some smallish issues, like
      e.g. the fact that some envvars were set _after_ the export.

    - Patch 6: Another new preparatory step. It makes our infra around
      certain helper functions that have the intent to interact with the
      project repository, e.g. to cache good trees. We now detect the
      case when there is no Git or when the project is not a Git repo
      and bail out gracefully.

    - Patch 7: The last new preparatory patch. Installs a bunch of
      dependencies which are required for the test runtime in the Alpine
      based job. This increases test coverage.

    - Patch 8: Several smaller improvements:
        - Added a note why we install sudo and shadow in linux-musl now.
        - Fixed an issue where the HOME directory was part of the
          project directory, and thus Git complained about newly added
          untracked files.
        - Added the "pedantic" job that does a pednatic compilation on
          Fedora.
        - Added more test time dependencies.
        - Made the "echo -e" invocation portable by using printf
          instead.

What I didn't address yet is a suggestion by Phillip, namely to unify
the logic that sets up unprivileged builds. I don't have the infra
available to test any such change that would ultimately also impact
GitHub Workflows and Azure Pipelines and thus do not feel comfortable
to refactor this. I agree with the suggestion though, so I propose to
rather handle it at a later point in time.

A test run of this patch series can be found at [2].

Thanks!

Patrick

[1]: <cover.1698305961.git.ps@pks.im>
[2]: https://gitlab.com/gitlab-org/git/-/pipelines/1054750795

Patrick Steinhardt (8):
  ci: reorder definitions for grouping functions
  ci: make grouping setup more generic
  ci: group installation of Docker dependencies
  ci: split out logic to set up failed test artifacts
  ci: unify setup of some environment variables
  ci: squelch warnings when testing with unusable Git repo
  ci: install test dependencies for linux-musl
  ci: add support for GitLab CI

 .gitlab-ci.yml                    |  53 +++++++++
 ci/install-docker-dependencies.sh |  22 +++-
 ci/lib.sh                         | 187 +++++++++++++++++++++---------
 ci/print-test-failures.sh         |   6 +
 t/lib-httpd.sh                    |   3 +-
 5 files changed, 215 insertions(+), 56 deletions(-)
 create mode 100644 .gitlab-ci.yml

Range-diff against v2:
1:  4eb9cfc816b = 1:  ef44ed5c3b1 ci: reorder definitions for grouping functions
2:  85617ef8577 = 2:  77798fa7a7a ci: make grouping setup more generic
3:  57bbc50e3dc = 3:  4542bd38dc2 ci: group installation of Docker dependencies
4:  5ab11d5236d = 4:  5fdda7fd83f ci: split out logic to set up failed test artifacts
-:  ----------- > 5:  6af0075fd87 ci: unify setup of some environment variables
-:  ----------- > 6:  78d863bf24e ci: squelch warnings when testing with unusable Git repo
-:  ----------- > 7:  f150d61a1ce ci: install test dependencies for linux-musl
5:  37a507e9b25 ! 8:  5272d66d9f1 ci: add support for GitLab CI
    @@ Commit message
     
         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.
    +    solutions. Note that as the builds on GitLab CI run as unprivileged
    +    user, we need to pull in both sudo and shadow packages to our Alpine
    +    based job to set this up.
     
         [1]: https://gitlab.com/gitlab-org/git
     
    @@ .gitlab-ci.yml (new)
     +  before_script:
     +    - ./ci/install-docker-dependencies.sh
     +  script:
    -+    - useradd builder --home-dir "${CI_PROJECT_DIR}"
    ++    - useradd builder --create-home
     +    - chown -R builder "${CI_PROJECT_DIR}"
     +    - sudo --preserve-env --set-home --user=builder ./ci/run-build-and-tests.sh
     +  after_script:
    @@ .gitlab-ci.yml (new)
     +      - jobname: linux-asan-ubsan
     +        image: ubuntu:latest
     +        CC: clang
    ++      - jobname: pedantic
    ++        image: fedora:latest
     +      - jobname: linux-musl
     +        image: alpine:latest
     +  artifacts:
    @@ ci/install-docker-dependencies.sh: 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
    ++	apk add --update shadow sudo build-base curl-dev openssl-dev expat-dev gettext \
    + 		pcre2-dev python3 musl-libintl perl-utils ncurses \
    + 		apache2 bash cvs gnupg perl-cgi perl-dbd-sqlite >/dev/null
      	;;
     +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}}
    ++	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 \
    ++		libdbd-sqlite3-perl libio-socket-ssl-perl libnet-smtp-ssl-perl ${CC_PACKAGE:-${CC:-gcc}} \
    ++		apache2 cvs cvsps gnupg libcgi-pm-perl subversion
     +	;;
      pedantic)
      	dnf -yq update >/dev/null &&
    @@ ci/lib.sh: then
     +then
     +	begin_group () {
     +		need_to_end_group=t
    -+		echo -e "\e[0Ksection_start:$(date +%s):$(echo "$1" | tr ' ' _)\r\e[0K$1"
    ++		printf "\e[0Ksection_start:$(date +%s):$(echo "$1" | tr ' ' _)\r\e[0K$1\n"
     +		trap "end_group '$1'" EXIT
     +		set -x
     +	}
    @@ ci/lib.sh: then
     +		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"
    ++		printf "\e[0Ksection_end:$(date +%s):$(echo "$1" | tr ' ' _)\r\e[0K\n"
     +		trap - EXIT
     +	}
      else
      	begin_group () { :; }
      	end_group () { :; }
     @@ ci/lib.sh: then
    - 	MAKEFLAGS="$MAKEFLAGS --jobs=10"
    - 	test windows != "$CI_OS_NAME" ||
    - 	GIT_TEST_OPTS="--no-chain-lint --no-bin-wrappers $GIT_TEST_OPTS"
    + 	cache_dir="$HOME/none"
    + 
    + 	GIT_TEST_OPTS="--github-workflow-markup"
     +elif test true = "$GITLAB_CI"
     +then
     +	CI_TYPE=gitlab-ci
    @@ ci/lib.sh: then
     +	case "$CI_JOB_IMAGE" in
     +	macos-*)
     +		CI_OS_NAME=osx;;
    -+	alpine:*|ubuntu:*)
    ++	alpine:*|fedora:*|ubuntu:*)
     +		CI_OS_NAME=linux;;
     +	*)
     +		echo "Could not identify OS image" >&2
    @@ ci/lib.sh: then
     +	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"
      else
      	echo "Could not identify CI type" >&2
      	env >&2
-- 
2.42.0


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  parent reply	other threads:[~2023-10-30 12:14 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
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 ` Patrick Steinhardt [this message]
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=cover.1698667545.git.ps@pks.im \
    --to=ps@pks.im \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=oswald.buddenhagen@gmx.de \
    --cc=phillip.wood123@gmail.com \
    /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).