git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: git@vger.kernel.org
Cc: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Subject: [PATCH v2 0/5] ci: add GitLab CI definition
Date: Fri, 27 Oct 2023 11:25:20 +0200	[thread overview]
Message-ID: <cover.1698398590.git.ps@pks.im> (raw)
In-Reply-To: <cover.1698305961.git.ps@pks.im>

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

Hi,

this is the second 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 v1:

    - Improved commit messages.

    - The `group ()` function is now generic across all the different CI
      solutions to reduce duplication.

This should hopefully address the feedback from Oswald -- thanks again!

Patrick

[1]: <cover.1698305961.git.ps@pks.im>


Patrick Steinhardt (5):
  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: add support for GitLab CI

 .gitlab-ci.yml                    |  51 +++++++++++
 ci/install-docker-dependencies.sh |  15 +++-
 ci/lib.sh                         | 139 ++++++++++++++++++++----------
 ci/print-test-failures.sh         |   6 ++
 4 files changed, 166 insertions(+), 45 deletions(-)
 create mode 100644 .gitlab-ci.yml

Range-diff against v1:
1:  586a8d1003b ! 1:  4eb9cfc816b ci: reorder definitions for grouping functions
    @@ Commit message
         output in our CI, where these groups then end up as collapsible sections
         in the respective pipeline platform. The way these functions are defined
         is not easily extensible though as we have an up front check for the CI
    -    _not_ being GitLab Actions, where we define the non-stub logic in the
    +    _not_ being GitHub Actions, where we define the non-stub logic in the
         else branch.
     
    -    Reorder the definitions such that we explicitly handle GitHub Actions.
    +    Reorder the conditional branches such that we explicitly handle GitHub
    +    Actions.
     
         Signed-off-by: Patrick Steinhardt <ps@pks.im>
     
2:  ec390354f15 ! 2:  85617ef8577 ci: make grouping setup more generic
    @@ Commit message
         or not. This ensures we can more readily add support for additional CI
         platforms.
     
    -    Second, this commit changes `end_group ()` to also accept a parameter
    -    that indicates _which_ group should end. This will be required by a
    -    later commit that introduces support for GitLab CI.
    +    Furthermore, the `group ()` function is made generic so that it is the
    +    same for both GitHub Actions and for other platforms. There is a
    +    semantic conflict here though: GitHub Actions used to call `set +x` in
    +    `group ()` whereas the non-GitHub case unconditionally uses `set -x`.
    +    The latter would get overriden if we kept the `set +x` in the generic
    +    version of `group ()`. To resolve this conflict, we simply drop the `set
    +    +x` in the generic variant of this function. As `begin_group ()` calls
    +    `set -x` anyway this is not much of a change though, as the only
    +    commands that aren't printed anymore now are the ones between the
    +    beginning of `group ()` and the end of `begin_group ()`.
    +
    +    Last, this commit changes `end_group ()` to also accept a parameter that
    +    indicates _which_ group should end. This will be required by a later
    +    commit that introduces support for GitLab CI.
     
         Signed-off-by: Patrick Steinhardt <ps@pks.im>
     
    @@ ci/lib.sh: then
      		echo '::endgroup::' >&2
      	}
     -	trap end_group EXIT
    - 
    - 	group () {
    - 		set +x
    +-
    +-	group () {
    +-		set +x
     -		begin_group "$1"
    -+
    -+		group="$1"
    - 		shift
    -+		begin_group "$group"
    -+
    - 		# work around `dash` not supporting `set -o pipefail`
    - 		(
    - 			"$@" 2>&1
    -@@ ci/lib.sh: then
    - 		sed 's/^\(\([^ ]*\):\([0-9]*\):\([0-9]*:\) \)\(error\|warning\): /::\5 file=\2,line=\3::\1/'
    - 		res=$(cat exit.status)
    - 		rm exit.status
    +-		shift
    +-		# work around `dash` not supporting `set -o pipefail`
    +-		(
    +-			"$@" 2>&1
    +-			echo $? >exit.status
    +-		) |
    +-		sed 's/^\(\([^ ]*\):\([0-9]*\):\([0-9]*:\) \)\(error\|warning\): /::\5 file=\2,line=\3::\1/'
    +-		res=$(cat exit.status)
    +-		rm exit.status
     -		end_group
    -+
    -+		end_group "$group"
    - 		return $res
    - 	}
    +-		return $res
    +-	}
     -
     -	begin_group "CI setup"
      else
      	begin_group () { :; }
      	end_group () { :; }
    -@@ ci/lib.sh: else
    + 
    +-	group () {
    +-		shift
    +-		"$@"
    +-	}
      	set -x
      fi
      
    ++group () {
    ++	group="$1"
    ++	shift
    ++	begin_group "$group"
    ++
    ++	# work around `dash` not supporting `set -o pipefail`
    ++	(
    ++		"$@" 2>&1
    ++		echo $? >exit.status
    ++	) |
    ++	sed 's/^\(\([^ ]*\):\([0-9]*\):\([0-9]*:\) \)\(error\|warning\): /::\5 file=\2,line=\3::\1/'
    ++	res=$(cat exit.status)
    ++	rm exit.status
    ++
    ++	end_group "$group"
    ++	return $res
    ++}
    ++
     +begin_group "CI setup"
     +trap "end_group 'CI setup'" EXIT
     +
3:  a65d235dd3c ! 3:  57bbc50e3dc ci: group installation of Docker dependencies
    @@ Metadata
      ## Commit message ##
         ci: group installation of Docker dependencies
     
    -    Pull in "lib.sh" into "install-docker-dependencies.sh" such that we can
    -    set up proper groups for those dependencise. This allows the reader to
    -    collapse sections in the CI output on GitHub Actions (and later on on
    -    GitLab CI).
    +    The output of CI jobs tends to be quite long-winded and hard to digest.
    +    To help with this, many CI systems provide the ability to group output
    +    into collapsible sections, and we're also doing this in some of our
    +    scripts.
    +
    +    One notable omission is the script to install Docker dependencies.
    +    Address it to bring more structure to the output for Docker-based jobs.
     
         Signed-off-by: Patrick Steinhardt <ps@pks.im>
     
4:  4a864a1d174 ! 4:  5ab11d5236d ci: split out logic to set up failed test artifacts
    @@ Commit message
         ci: split out logic to set up failed test artifacts
     
         We have some logic in place to create a directory with the output from
    -    failed tests, which will then subsequently be uploaded as CI artifact.
    +    failed tests, which will then subsequently be uploaded as CI artifacts.
         We're about to add support for GitLab CI, which will want to reuse the
         logic.
     
5:  35b07e5378d ! 5:  37a507e9b25 ci: add support for GitLab CI
    @@ Commit message
     
         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 sets a
    +    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 would otherwise 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 ensure to send better patch series upstream and thus
    -    reduce overhead for the maintainer.
    +    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
    @@ ci/install-docker-dependencies.sh: linux32)
     
      ## ci/lib.sh ##
     @@ ci/lib.sh: then
    + 		need_to_end_group=
      		echo '::endgroup::' >&2
      	}
    - 
    -+	group () {
    -+		set +x
    -+
    -+		group="$1"
    -+		shift
    -+		begin_group "$group"
    -+
    -+		# work around `dash` not supporting `set -o pipefail`
    -+		(
    -+			"$@" 2>&1
    -+			echo $? >exit.status
    -+		) |
    -+		sed 's/^\(\([^ ]*\):\([0-9]*\):\([0-9]*:\) \)\(error\|warning\): /::\5 file=\2,line=\3::\1/'
    -+		res=$(cat exit.status)
    -+		rm exit.status
    -+
    -+		end_group "$group"
    -+		return $res
    -+	}
     +elif test true = "$GITLAB_CI"
     +then
     +	begin_group () {
    @@ ci/lib.sh: then
     +		echo -e "\e[0Ksection_end:$(date +%s):$(echo "$1" | tr ' ' _)\r\e[0K"
     +		trap - EXIT
     +	}
    -+
    - 	group () {
    - 		set +x
    - 
    + else
    + 	begin_group () { :; }
    + 	end_group () { :; }
     @@ ci/lib.sh: then
      	MAKEFLAGS="$MAKEFLAGS --jobs=10"
      	test windows != "$CI_OS_NAME" ||
-- 
2.42.0


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

  parent reply	other threads:[~2023-10-27  9:25 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 ` Patrick Steinhardt [this message]
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 ` [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=cover.1698398590.git.ps@pks.im \
    --to=ps@pks.im \
    --cc=git@vger.kernel.org \
    --cc=oswald.buddenhagen@gmx.de \
    /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).