Message ID | 6cf6400f2e0f7336e9b13ddbf412101c4ab48dc5.1585474409.git.congdanhqx@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Travis + Azure jobs for linux with musl libc | expand |
On Sun, Mar 29, 2020 at 05:12:31PM +0700, Đoàn Trần Công Danh wrote: > Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com> > diff --git a/ci/run-alpine-build.sh b/ci/run-alpine-build.sh > new file mode 100755 > index 0000000000..c83df536e4 > --- /dev/null > +++ b/ci/run-alpine-build.sh > @@ -0,0 +1,31 @@ > +#!/bin/sh > +# > +# Build and test Git in Alpine Linux > +# > +# Usage: > +# run-alpine-build.sh <host-user-id> > +# > + > +set -ex > + > +useradd () { > + adduser -D "$@" > +} > + > +. "${0%/*}/lib-docker.sh" > + > +# Update packages to the latest available versions > +apk add --update autoconf build-base curl-dev openssl-dev expat-dev \ > + gettext pcre2-dev python3 musl-libintl >/dev/null In 'ci/run-docker.sh' we run 'docker run' with a bunch of '--env ...' options to make some important environment variables available inside the container. At this point in this script all those variables are set to the expected values, but ... > +# Build and test > +su -m -l $CI_USER -c ' ... but here, for some reason, those environment variables are not set anymore. This is bad, because this CI job then builds Git sequentially, runs the tests sequentially, runs the tests with 'make' instead of 'prove', and runs the tests without '-V -x'. IOW, it's slow, it produces a lot of useless output, it doesn't report all the failures, and doesn't tell us anything about the failures. > + set -ex > + cd /usr/src/git > + test -n "$cache_dir" && ln -s "$cache_dir/.prove" t/.prove > + autoconf > + echo "PYTHON_PATH=/usr/bin/python3" >config.mak > + ./configure --with-libpcre The recommended way to build Git is without autoconf and configure. You can set the PYTHON_PATH and USE_LIBPCRE Makefile knobs in MAKEFLAGS in 'ci/lib.sh', but to be able to access MAKEFLAGS in the container you'll need to build this patch series on top of: https://public-inbox.org/git/20200401212151.15164-1-szeder.dev@gmail.com/ > + make > + make test > +' > diff --git a/ci/run-docker.sh b/ci/run-docker.sh > index be698817cb..f203db03cf 100755 > --- a/ci/run-docker.sh > +++ b/ci/run-docker.sh > @@ -10,6 +10,10 @@ Linux32) > CI_TARGET=linux32 > CI_CONTAINER="daald/ubuntu32:xenial" > ;; > +linux-musl) > + CI_TARGET=alpine > + CI_CONTAINER=alpine > + ;; > *) > exit 1 ;; > esac > -- > 2.26.0.302.g234993491e >
On 2020-04-02 00:18:35+0200, SZEDER Gábor <szeder.dev@gmail.com> wrote: > On Sun, Mar 29, 2020 at 05:12:31PM +0700, Đoàn Trần Công Danh wrote: > > Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com> > > > diff --git a/ci/run-alpine-build.sh b/ci/run-alpine-build.sh > > new file mode 100755 > > index 0000000000..c83df536e4 > > --- /dev/null > > +++ b/ci/run-alpine-build.sh > > @@ -0,0 +1,31 @@ > > +#!/bin/sh > > +# > > +# Build and test Git in Alpine Linux > > +# > > +# Usage: > > +# run-alpine-build.sh <host-user-id> > > +# > > + > > +set -ex > > + > > +useradd () { > > + adduser -D "$@" > > +} > > + > > +. "${0%/*}/lib-docker.sh" > > + > > +# Update packages to the latest available versions > > +apk add --update autoconf build-base curl-dev openssl-dev expat-dev \ > > + gettext pcre2-dev python3 musl-libintl >/dev/null > > In 'ci/run-docker.sh' we run 'docker run' with a bunch of '--env ...' > options to make some important environment variables available > inside the container. At this point in this script all those > variables are set to the expected values, but ... > > > +# Build and test > > +su -m -l $CI_USER -c ' > > ... but here, for some reason, those environment variables are not set > anymore. This is bad, because this CI job then builds Git > sequentially, runs the tests sequentially, runs the tests with 'make' > instead of 'prove', and runs the tests without '-V -x'. IOW, it's > slow, it produces a lot of useless output, it doesn't report all the > failures, and doesn't tell us anything about the failures. At this point, I tempted to change this to su -m -l $CI_USER -c /usr/src/git/ci/run-build-and-tests.sh instead. But, after digging into ci/lib.sh, I found too many setup for "$CI_*", let choose your path instead. > > + set -ex > > + cd /usr/src/git > > + test -n "$cache_dir" && ln -s "$cache_dir/.prove" t/.prove > > + autoconf > > + echo "PYTHON_PATH=/usr/bin/python3" >config.mak > > + ./configure --with-libpcre > > The recommended way to build Git is without autoconf and configure. > You can set the PYTHON_PATH and USE_LIBPCRE Makefile knobs in > MAKEFLAGS in 'ci/lib.sh', but to be able to access MAKEFLAGS in the > container you'll need to build this patch series on top of: > > https://public-inbox.org/git/20200401212151.15164-1-szeder.dev@gmail.com/ > > > + make > > + make test > > +' > > diff --git a/ci/run-docker.sh b/ci/run-docker.sh > > index be698817cb..f203db03cf 100755 > > --- a/ci/run-docker.sh > > +++ b/ci/run-docker.sh > > @@ -10,6 +10,10 @@ Linux32) > > CI_TARGET=linux32 > > CI_CONTAINER="daald/ubuntu32:xenial" > > ;; > > +linux-musl) > > + CI_TARGET=alpine > > + CI_CONTAINER=alpine > > + ;; > > *) > > exit 1 ;; > > esac > > -- > > 2.26.0.302.g234993491e > >
Hi Gábor, On Thu, 2 Apr 2020, SZEDER Gábor wrote: > On Sun, Mar 29, 2020 at 05:12:31PM +0700, Đoàn Trần Công Danh wrote: > > Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com> > > > + set -ex > > + cd /usr/src/git > > + test -n "$cache_dir" && ln -s "$cache_dir/.prove" t/.prove > > + autoconf > > + echo "PYTHON_PATH=/usr/bin/python3" >config.mak > > + ./configure --with-libpcre > > The recommended way to build Git is without autoconf and configure. That is news to me. My understanding still is that `make` is the recommended way to build Git, and `./configure` is only for those who want to use autoconf. It seems that the `INSTALL` file agrees with my understanding: -- snip -- Git installation Normally you can just do "make" followed by "make install", and that will install the git programs in your own ~/bin/ directory. If you want to do a global install, you can do $ make prefix=/usr all doc info ;# as yourself # make prefix=/usr install install-doc install-html install-info # ;# as root (or prefix=/usr/local, of course). Just like any program suite that uses $prefix, the built results have some paths encoded, which are derived from $prefix, so "make all; make prefix=/usr install" would not work. The beginning of the Makefile documents many variables that affect the way git is built. You can override them either from the command line, or in a config.mak file. Alternatively you can use autoconf generated ./configure script to set up install paths (via config.mak.autogen), so you can write instead $ make configure ;# as yourself $ ./configure --prefix=/usr ;# as yourself $ make all doc ;# as yourself # make install install-doc install-html;# as root -- snap -- If you think that I am wrong, I invite you to change the recommendation by proposing a patch to `INSTALL`, to change the current recommendation. Ciao, Dscho
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes: >> The recommended way to build Git is without autoconf and configure. > > That is news to me. > > My understanding still is that `make` is the recommended way to build Git, > and `./configure` is only for those who want to use autoconf. > > It seems that the `INSTALL` file agrees with my understanding: Did you misread the sentence you quoted? It says "without", not "with", so I think you two are on the same page.
Hi Junio, On Tue, 7 Apr 2020, Junio C Hamano wrote: > Johannes Schindelin <Johannes.Schindelin@gmx.de> writes: > > >> The recommended way to build Git is without autoconf and configure. > > > > That is news to me. > > > > My understanding still is that `make` is the recommended way to build Git, > > and `./configure` is only for those who want to use autoconf. > > > > It seems that the `INSTALL` file agrees with my understanding: > > Did you misread the sentence you quoted? It says "without", not > "with", so I think you two are on the same page. Yes, I misread it. Thanks for pointing that out. Ciao, Dscho
diff --git a/.travis.yml b/.travis.yml index 069aeeff3c..0cfc3c3428 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,6 +33,14 @@ matrix: - docker before_install: script: ci/run-docker.sh + - env: jobname=linux-musl + os: linux + compiler: + addons: + services: + - docker + before_install: + script: ci/run-docker.sh - env: jobname=StaticAnalysis os: linux compiler: diff --git a/azure-pipelines.yml b/azure-pipelines.yml index f6dcc35ad4..615289167b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -503,6 +503,41 @@ jobs: PathtoPublish: t/failed-test-artifacts ArtifactName: failed-test-artifacts +- job: linux_musl + displayName: linux-musl + condition: succeeded() + pool: + vmImage: ubuntu-latest + steps: + - bash: | + test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1 + + res=0 + sudo AGENT_OS="$AGENT_OS" BUILD_BUILDNUMBER="$BUILD_BUILDNUMBER" BUILD_REPOSITORY_URI="$BUILD_REPOSITORY_URI" BUILD_SOURCEBRANCH="$BUILD_SOURCEBRANCH" BUILD_SOURCEVERSION="$BUILD_SOURCEVERSION" SYSTEM_PHASENAME="$SYSTEM_PHASENAME" SYSTEM_TASKDEFINITIONSURI="$SYSTEM_TASKDEFINITIONSURI" SYSTEM_TEAMPROJECT="$SYSTEM_TEAMPROJECT" CC=$CC MAKEFLAGS="$MAKEFLAGS" jobname=linux-musl bash -lxc ci/run-docker.sh || res=1 + + sudo chmod a+r t/out/TEST-*.xml + test ! -d t/failed-test-artifacts || sudo chmod a+r t/failed-test-artifacts + + test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || sudo umount "$HOME/test-cache" || res=1 + exit $res + displayName: 'jobname=linux-musl ci/run-docker.sh' + env: + GITFILESHAREPWD: $(gitfileshare.pwd) + - task: PublishTestResults@2 + displayName: 'Publish Test Results **/TEST-*.xml' + inputs: + mergeTestResults: true + testRunTitle: 'musl' + platform: Linux + publishRunAttachments: false + condition: succeededOrFailed() + - task: PublishBuildArtifacts@1 + displayName: 'Publish trash directories of failed tests' + condition: failed() + inputs: + PathtoPublish: t/failed-test-artifacts + ArtifactName: failed-test-artifacts + - job: static_analysis displayName: StaticAnalysis condition: succeeded() diff --git a/ci/run-alpine-build.sh b/ci/run-alpine-build.sh new file mode 100755 index 0000000000..c83df536e4 --- /dev/null +++ b/ci/run-alpine-build.sh @@ -0,0 +1,31 @@ +#!/bin/sh +# +# Build and test Git in Alpine Linux +# +# Usage: +# run-alpine-build.sh <host-user-id> +# + +set -ex + +useradd () { + adduser -D "$@" +} + +. "${0%/*}/lib-docker.sh" + +# Update packages to the latest available versions +apk add --update autoconf build-base curl-dev openssl-dev expat-dev \ + gettext pcre2-dev python3 musl-libintl >/dev/null + +# Build and test +su -m -l $CI_USER -c ' + set -ex + cd /usr/src/git + test -n "$cache_dir" && ln -s "$cache_dir/.prove" t/.prove + autoconf + echo "PYTHON_PATH=/usr/bin/python3" >config.mak + ./configure --with-libpcre + make + make test +' diff --git a/ci/run-docker.sh b/ci/run-docker.sh index be698817cb..f203db03cf 100755 --- a/ci/run-docker.sh +++ b/ci/run-docker.sh @@ -10,6 +10,10 @@ Linux32) CI_TARGET=linux32 CI_CONTAINER="daald/ubuntu32:xenial" ;; +linux-musl) + CI_TARGET=alpine + CI_CONTAINER=alpine + ;; *) exit 1 ;; esac
Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com> --- .travis.yml | 8 ++++++++ azure-pipelines.yml | 35 +++++++++++++++++++++++++++++++++++ ci/run-alpine-build.sh | 31 +++++++++++++++++++++++++++++++ ci/run-docker.sh | 4 ++++ 4 files changed, 78 insertions(+) create mode 100755 ci/run-alpine-build.sh