Subject: Re: [PATCH v2 02/13] ci/lib.sh: encapsulate Travis-specific things

From: SZEDER Gábor <[email-masked]>
Date: Fri, 19 Oct 2018 00:01:06 +0200

On Mon, Oct 15, 2018 at 03:12:00AM -0700, Johannes Schindelin via GitGitGadget wrote:
> diff --git a/ci/lib.sh b/ci/lib.sh
> index 06970f7213..8532555b4e 100755
> --- a/ci/lib.sh
> +++ b/ci/lib.sh
> @@ -1,5 +1,26 @@
>  # Library of functions shared by all CI scripts
>  
> +if test true = "$TRAVIS"
> +then
> +	# We are running within Travis CI
> +	CI_BRANCH="$TRAVIS_BRANCH"
> +	CI_COMMIT="$TRAVIS_COMMIT"
> +	CI_JOB_ID="$TRAVIS_JOB_ID"
> +	CI_JOB_NUMBER="$TRAVIS_JOB_NUMBER"
> +	CI_OS_NAME="$TRAVIS_OS_NAME"
> +	CI_REPO_SLUG="$TRAVIS_REPO_SLUG"
> +
> +	cache_dir="$HOME/travis-cache"
> +
> +	url_for_job_id () {
> +		echo "https://travis-ci.org/$CI_REPO_SLUG/jobs/$1"
> +	}
> +
> +	BREW_INSTALL_PACKAGES="git-lfs gettext"
> +	export GIT_PROVE_OPTS="--timer --jobs 3 --state=failed,slow,save"
> +	export GIT_TEST_OPTS="--verbose-log -x --immediate"
> +fi

Please set all these variables ...

> +
>  skip_branch_tip_with_tag () {
>  	# Sometimes, a branch is pushed at the same time the tag that points
>  	# at the same commit as the tip of the branch is pushed, and building
> @@ -13,10 +34,10 @@ skip_branch_tip_with_tag () {
>  	# we can skip the build because we won't be skipping a build
>  	# of a tag.
>  
> -	if TAG=$(git describe --exact-match "$TRAVIS_BRANCH" 2>/dev/null) &&
> -		test "$TAG" != "$TRAVIS_BRANCH"
> +	if TAG=$(git describe --exact-match "$CI_BRANCH" 2>/dev/null) &&
> +		test "$TAG" != "$CI_BRANCH"
>  	then
> -		echo "$(tput setaf 2)Tip of $TRAVIS_BRANCH is exactly at $TAG$(tput sgr0)"
> +		echo "$(tput setaf 2)Tip of $CI_BRANCH is exactly at $TAG$(tput sgr0)"
>  		exit 0
>  	fi
>  }
> @@ -25,7 +46,7 @@ skip_branch_tip_with_tag () {
>  # job if we encounter the same tree again and can provide a useful info
>  # message.
>  save_good_tree () {
> -	echo "$(git rev-parse $TRAVIS_COMMIT^{tree}) $TRAVIS_COMMIT $TRAVIS_JOB_NUMBER $TRAVIS_JOB_ID" >>"$good_trees_file"
> +	echo "$(git rev-parse $CI_COMMIT^{tree}) $CI_COMMIT $CI_JOB_NUMBER $CI_JOB_ID" >>"$good_trees_file"
>  	# limit the file size
>  	tail -1000 "$good_trees_file" >"$good_trees_file".tmp
>  	mv "$good_trees_file".tmp "$good_trees_file"
> @@ -35,7 +56,7 @@ save_good_tree () {
>  # successfully before (e.g. because the branch got rebased, changing only
>  # the commit messages).
>  skip_good_tree () {
> -	if ! good_tree_info="$(grep "^$(git rev-parse $TRAVIS_COMMIT^{tree}) " "$good_trees_file")"
> +	if ! good_tree_info="$(grep "^$(git rev-parse $CI_COMMIT^{tree}) " "$good_trees_file")"
>  	then
>  		# Haven't seen this tree yet, or no cached good trees file yet.
>  		# Continue the build job.
> @@ -45,18 +66,18 @@ skip_good_tree () {
>  	echo "$good_tree_info" | {
>  		read tree prev_good_commit prev_good_job_number prev_good_job_id
>  
> -		if test "$TRAVIS_JOB_ID" = "$prev_good_job_id"
> +		if test "$CI_JOB_ID" = "$prev_good_job_id"
>  		then
>  			cat <<-EOF
> -			$(tput setaf 2)Skipping build job for commit $TRAVIS_COMMIT.$(tput sgr0)
> +			$(tput setaf 2)Skipping build job for commit $CI_COMMIT.$(tput sgr0)
>  			This commit has already been built and tested successfully by this build job.
>  			To force a re-build delete the branch's cache and then hit 'Restart job'.
>  			EOF
>  		else
>  			cat <<-EOF
> -			$(tput setaf 2)Skipping build job for commit $TRAVIS_COMMIT.$(tput sgr0)
> +			$(tput setaf 2)Skipping build job for commit $CI_COMMIT.$(tput sgr0)
>  			This commit's tree has already been built and tested successfully in build job $prev_good_job_number for commit $prev_good_commit.
> -			The log of that build job is available at https://travis-ci.org/$TRAVIS_REPO_SLUG/jobs/$prev_good_job_id
> +			The log of that build job is available at $(url_for_job_id $prev_good_job_id)
>  			To force a re-build delete the branch's cache and then hit 'Restart job'.
>  			EOF
>  		fi
> @@ -81,7 +102,6 @@ check_unignored_build_artifacts ()
>  # and installing dependencies.
>  set -ex

... after we turn on 'set -x', so the variables' values will be
visible in the logs.

(Or move this 'set -ex' to the beginning of the script?  Then we
could perhaps avoid similar issues in the future.)

> -cache_dir="$HOME/travis-cache"
>  good_trees_file="$cache_dir/good-trees"
>  
>  mkdir -p "$cache_dir"