.gitlab-ci.yml | 417 +++++++++++++++++++++++++++--------------- .gitlab-ci/build.sh | 24 +- .gitlab-ci/ci.template | 147 ++++++++++++++ .gitlab-ci/config.yml | 78 ++++++- .gitlab-ci/freebsd-cross.sh | 4 .gitlab-ci/freebsd-install.sh | 3 6 files changed, 499 insertions(+), 174 deletions(-) New commits: commit 51160281e3c8eec793099ad5d5f0d1ed762d8d9b Author: Akira TAGOH <akira@xxxxxxxxx> Date: Wed Dec 6 19:21:38 2023 +0900 CI: static build only for rawhide diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4899faf..c6434f3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -41,8 +41,8 @@ variables: # changing these will force rebuilding the associated image # Note: these tags have no meaning and are not tied to a particular # fontconfig version - FEDORA_TAG: '2023-12-05.1-7b7a4d882550' - FREEBSD_TAG: '2023-12-05.1-9e4cd5a85377' + FEDORA_TAG: '2023-12-05.1-7c59f403cca5' + FREEBSD_TAG: '2023-12-05.1-b3f6fd9ee634' FEDORA_EXEC: 'bash .gitlab-ci/fedora-install.sh' FREEBSD_EXEC: 'bash .gitlab-ci/freebsd-install.sh' @@ -372,7 +372,7 @@ t_fedora:rawhide:autotools shared libxml2: - 'fedora:rawhide@container-prep' -t_fedora:rawhide:autotools static expat: +t_fedora:rawhide:meson shared expat: extends: - .build@template - .fdo.distribution-image@fedora @@ -381,14 +381,14 @@ t_fedora:rawhide:autotools static expat: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: 'rawhide' FDO_DISTRIBUTION_TAG: $FEDORA_TAG - FC_BUILDSYS: autotools - FC_BUILD_TYPE: static + FC_BUILDSYS: meson + FC_BUILD_TYPE: shared FC_XML_BACKEND: expat needs: - 'fedora:rawhide@container-prep' -t_fedora:rawhide:autotools static libxml2: +t_fedora:rawhide:autotools static expat: extends: - .build@template - .fdo.distribution-image@fedora @@ -399,12 +399,12 @@ t_fedora:rawhide:autotools static libxml2: FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_BUILDSYS: autotools FC_BUILD_TYPE: static - FC_XML_BACKEND: libxml2 + FC_XML_BACKEND: expat needs: - 'fedora:rawhide@container-prep' -t_fedora:rawhide:mingw autotools static libxml2: +t_fedora:rawhide:autotools static libxml2: extends: - .build@template - .fdo.distribution-image@fedora @@ -416,13 +416,11 @@ t_fedora:rawhide:mingw autotools static libxml2: FC_BUILDSYS: autotools FC_BUILD_TYPE: static FC_XML_BACKEND: libxml2 - FC_BUILD_PLATFORM: mingw - FC_BUILD_ARCH: x86_64-mingw32 needs: - 'fedora:rawhide@container-prep' -t_fedora:rawhide:meson shared expat: +t_fedora:rawhide:meson static expat: extends: - .build@template - .fdo.distribution-image@fedora @@ -432,13 +430,13 @@ t_fedora:rawhide:meson shared expat: FDO_DISTRIBUTION_VERSION: 'rawhide' FDO_DISTRIBUTION_TAG: $FEDORA_TAG FC_BUILDSYS: meson - FC_BUILD_TYPE: shared + FC_BUILD_TYPE: static FC_XML_BACKEND: expat needs: - 'fedora:rawhide@container-prep' -t_fedora:rawhide:meson static expat: +t_fedora:rawhide:mingw autotools static libxml2: extends: - .build@template - .fdo.distribution-image@fedora @@ -447,9 +445,11 @@ t_fedora:rawhide:meson static expat: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: 'rawhide' FDO_DISTRIBUTION_TAG: $FEDORA_TAG - FC_BUILDSYS: meson + FC_BUILDSYS: autotools FC_BUILD_TYPE: static - FC_XML_BACKEND: expat + FC_XML_BACKEND: libxml2 + FC_BUILD_PLATFORM: mingw + FC_BUILD_ARCH: x86_64-mingw32 needs: - 'fedora:rawhide@container-prep' @@ -506,7 +506,7 @@ t_fedora:39:autotools shared libxml2: - 'fedora:39@container-prep' -t_fedora:39:autotools static expat: +t_fedora:39:meson shared expat: extends: - .build@template - .fdo.distribution-image@fedora @@ -515,96 +515,21 @@ t_fedora:39:autotools static expat: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: '39' FDO_DISTRIBUTION_TAG: $FEDORA_TAG - FC_BUILDSYS: autotools - FC_BUILD_TYPE: static + FC_BUILDSYS: meson + FC_BUILD_TYPE: shared FC_XML_BACKEND: expat needs: - 'fedora:39@container-prep' -t_fedora:39:autotools static libxml2: - extends: - - .build@template - - .fdo.distribution-image@fedora - - .fc_artifacts - variables: - FC_DISTRO_NAME: fedora - FDO_DISTRIBUTION_VERSION: '39' - FDO_DISTRIBUTION_TAG: $FEDORA_TAG - FC_BUILDSYS: autotools - FC_BUILD_TYPE: static - FC_XML_BACKEND: libxml2 - needs: - - 'fedora:39@container-prep' -t_fedora:39:mingw autotools static libxml2: - extends: - - .build@template - - .fdo.distribution-image@fedora - - .fc_artifacts - variables: - FC_DISTRO_NAME: fedora - FDO_DISTRIBUTION_VERSION: '39' - FDO_DISTRIBUTION_TAG: $FEDORA_TAG - FC_BUILDSYS: autotools - FC_BUILD_TYPE: static - FC_XML_BACKEND: libxml2 - FC_BUILD_PLATFORM: mingw - FC_BUILD_ARCH: x86_64-mingw32 - needs: - - 'fedora:39@container-prep' -t_fedora:39:meson shared expat: - extends: - - .build@template - - .fdo.distribution-image@fedora - - .fc_artifacts - variables: - FC_DISTRO_NAME: fedora - FDO_DISTRIBUTION_VERSION: '39' - FDO_DISTRIBUTION_TAG: $FEDORA_TAG - FC_BUILDSYS: meson - FC_BUILD_TYPE: shared - FC_XML_BACKEND: expat - needs: - - 'fedora:39@container-prep' -t_fedora:39:meson static expat: - extends: - - .build@template - - .fdo.distribution-image@fedora - - .fc_artifacts - variables: - FC_DISTRO_NAME: fedora - FDO_DISTRIBUTION_VERSION: '39' - FDO_DISTRIBUTION_TAG: $FEDORA_TAG - FC_BUILDSYS: meson - FC_BUILD_TYPE: static - FC_XML_BACKEND: expat - needs: - - 'fedora:39@container-prep' -t_fedora:39:mingw meson static expat: - extends: - - .build@template - - .fdo.distribution-image@fedora - - .fc_artifacts - variables: - FC_DISTRO_NAME: fedora - FDO_DISTRIBUTION_VERSION: '39' - FDO_DISTRIBUTION_TAG: $FEDORA_TAG - FC_BUILDSYS: meson - FC_BUILD_TYPE: static - FC_XML_BACKEND: expat - FC_BUILD_PLATFORM: mingw - FC_BUILD_ARCH: linux-mingw-w64-64bit - FC_BUILD_NO_INSTALL: 1 - needs: - - 'fedora:39@container-prep' t_fedora:38:autotools shared expat: @@ -640,7 +565,7 @@ t_fedora:38:autotools shared libxml2: - 'fedora:38@container-prep' -t_fedora:38:autotools static expat: +t_fedora:38:meson shared expat: extends: - .build@template - .fdo.distribution-image@fedora @@ -649,96 +574,21 @@ t_fedora:38:autotools static expat: FC_DISTRO_NAME: fedora FDO_DISTRIBUTION_VERSION: '38' FDO_DISTRIBUTION_TAG: $FEDORA_TAG - FC_BUILDSYS: autotools - FC_BUILD_TYPE: static + FC_BUILDSYS: meson + FC_BUILD_TYPE: shared FC_XML_BACKEND: expat needs: - 'fedora:38@container-prep' -t_fedora:38:autotools static libxml2: - extends: - - .build@template - - .fdo.distribution-image@fedora - - .fc_artifacts - variables: - FC_DISTRO_NAME: fedora - FDO_DISTRIBUTION_VERSION: '38' - FDO_DISTRIBUTION_TAG: $FEDORA_TAG - FC_BUILDSYS: autotools - FC_BUILD_TYPE: static - FC_XML_BACKEND: libxml2 - needs: - - 'fedora:38@container-prep' -t_fedora:38:mingw autotools static libxml2: - extends: - - .build@template - - .fdo.distribution-image@fedora - - .fc_artifacts - variables: - FC_DISTRO_NAME: fedora - FDO_DISTRIBUTION_VERSION: '38' - FDO_DISTRIBUTION_TAG: $FEDORA_TAG - FC_BUILDSYS: autotools - FC_BUILD_TYPE: static - FC_XML_BACKEND: libxml2 - FC_BUILD_PLATFORM: mingw - FC_BUILD_ARCH: x86_64-mingw32 - needs: - - 'fedora:38@container-prep' -t_fedora:38:meson shared expat: - extends: - - .build@template - - .fdo.distribution-image@fedora - - .fc_artifacts - variables: - FC_DISTRO_NAME: fedora - FDO_DISTRIBUTION_VERSION: '38' - FDO_DISTRIBUTION_TAG: $FEDORA_TAG - FC_BUILDSYS: meson - FC_BUILD_TYPE: shared - FC_XML_BACKEND: expat - needs: - - 'fedora:38@container-prep' -t_fedora:38:meson static expat: - extends: - - .build@template - - .fdo.distribution-image@fedora - - .fc_artifacts - variables: - FC_DISTRO_NAME: fedora - FDO_DISTRIBUTION_VERSION: '38' - FDO_DISTRIBUTION_TAG: $FEDORA_TAG - FC_BUILDSYS: meson - FC_BUILD_TYPE: static - FC_XML_BACKEND: expat - needs: - - 'fedora:38@container-prep' -t_fedora:38:mingw meson static expat: - extends: - - .build@template - - .fdo.distribution-image@fedora - - .fc_artifacts - variables: - FC_DISTRO_NAME: fedora - FDO_DISTRIBUTION_VERSION: '38' - FDO_DISTRIBUTION_TAG: $FEDORA_TAG - FC_BUILDSYS: meson - FC_BUILD_TYPE: static - FC_XML_BACKEND: expat - FC_BUILD_PLATFORM: mingw - FC_BUILD_ARCH: linux-mingw-w64-64bit - FC_BUILD_NO_INSTALL: 1 - needs: - - 'fedora:38@container-prep' t_freebsd:14.0:autotools shared expat: diff --git a/.gitlab-ci/ci.template b/.gitlab-ci/ci.template index c7fd321..3a1f662 100644 --- a/.gitlab-ci/ci.template +++ b/.gitlab-ci/ci.template @@ -283,6 +283,7 @@ check-ci-script: {% for version in distro.versions %} {% for build in distro.builds %} +{% if not 'build_only' in build or build.build_only == version %} t_{{distro.name}}:{{version}}:{{build.name}}: extends: {% if distro.qemu_based %} @@ -304,6 +305,7 @@ t_{{distro.name}}:{{version}}:{{build.name}}: {% endif %} needs: - '{{distro.name}}:{{version}}@container-prep' +{% endif %} {% endfor %} {% endfor %} diff --git a/.gitlab-ci/config.yml b/.gitlab-ci/config.yml index 21ee147..d3547f0 100644 --- a/.gitlab-ci/config.yml +++ b/.gitlab-ci/config.yml @@ -21,34 +21,39 @@ distributions: FC_BUILD_TYPE: shared FC_XML_BACKEND: libxml2 FC_BUILD_DISTCHECK: 1 + - name: "meson shared expat" + variables: + FC_BUILDSYS: meson + FC_BUILD_TYPE: shared + FC_XML_BACKEND: expat - name: "autotools static expat" + build_only: "rawhide" variables: FC_BUILDSYS: autotools FC_BUILD_TYPE: static FC_XML_BACKEND: expat - name: "autotools static libxml2" + build_only: "rawhide" variables: FC_BUILDSYS: autotools FC_BUILD_TYPE: static FC_XML_BACKEND: libxml2 + - name: "meson static expat" + build_only: "rawhide" + variables: + FC_BUILDSYS: meson + FC_BUILD_TYPE: static + FC_XML_BACKEND: expat - name: "mingw autotools static libxml2" + build_only: "rawhide" variables: FC_BUILDSYS: autotools FC_BUILD_TYPE: static FC_XML_BACKEND: libxml2 FC_BUILD_PLATFORM: mingw FC_BUILD_ARCH: x86_64-mingw32 - - name: "meson shared expat" - variables: - FC_BUILDSYS: meson - FC_BUILD_TYPE: shared - FC_XML_BACKEND: expat - - name: "meson static expat" - variables: - FC_BUILDSYS: meson - FC_BUILD_TYPE: static - FC_XML_BACKEND: expat - name: "mingw meson static expat" + build_only: "rawhide" variables: FC_BUILDSYS: meson FC_BUILD_TYPE: static commit 966ab23a99b8f39631c59464c045c6d406145d5b Author: Akira TAGOH <akira@xxxxxxxxx> Date: Tue Dec 5 14:39:00 2023 +0900 CI: Update * Add FreeBSD * Add some sanity checks diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e66d15c..4899faf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -17,14 +17,20 @@ include: - project: 'freedesktop/ci-templates' ref: *template_sha file: '/templates/fedora.yml' + # Freebsd container builder template + - project: 'freedesktop/ci-templates' + ref: *template_sha + file: '/templates/freebsd.yml' - project: 'freedesktop/ci-templates' ref: *template_sha file: '/templates/ci-fairy.yml' - local: '.gitlab-ci/other.yml' stages: + - sanity check - prep - test + - deploy - container_clean variables: @@ -35,9 +41,45 @@ variables: # changing these will force rebuilding the associated image # Note: these tags have no meaning and are not tied to a particular # fontconfig version - FEDORA_TAG: '2023-12-05.0-e56dbdc02823' + FEDORA_TAG: '2023-12-05.1-7b7a4d882550' + FREEBSD_TAG: '2023-12-05.1-9e4cd5a85377' + + FEDORA_EXEC: 'bash .gitlab-ci/fedora-install.sh' + FREEBSD_EXEC: 'bash .gitlab-ci/freebsd-install.sh' + +####################################### +# # +# sanity check # +# # +####################################### - FEDORA_EXEC: 'bash .gitlab-ci/fedora-install.sh' +fail-if-fork-is-not-public: + stage: sanity check + script: + - | + if [ $CI_PROJECT_VISIBILITY != "public" ]; then + echo "*************************************************************************************" + echo "Project visibility must be set to 'public'." + echo "Change this in $CI_PROJECT_URL/edit under 'Visibility, project features, permissions'" + echo "*************************************************************************************" + exit 1 + fi + except: + - main@fontconfig/fontconfig + +check-ci-script: + extends: + - .fdo.ci-fairy + stage: sanity check + script: + - ci-fairy generate-template --verify && exit 0 || true + - > + printf "%s\n" \ + "Committed gitlab-ci.yml differs from generated gitlab-ci.yml." \ + "To change the gitlab CI, edit .gitlab-ci/ci.template and/or .gitlab-ci/config.yml" \ + " and run ci-fairy generate-template. For details, see " \ + "https://freedesktop.pages.freedesktop.org/ci-templates/ci-fairy.html#templating-gitlab-ci-yml" + - exit 1 ####################################### # # @@ -78,6 +120,30 @@ fedora:38@container-prep: FDO_DISTRIBUTION_TAG: $FEDORA_TAG FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC +freebsd:14.0@container-prep: + extends: .fdo.qemu-build@freebsd + tags: + - kvm + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '14.0' + FDO_DISTRIBUTION_PACKAGES: 'gcc autoconf automake libtool gettext gperf expat libxml2 freetype2 json-c git ninja wget python3 py39-pip pkgconf gmake' + FDO_DISTRIBUTION_TAG: $FREEBSD_TAG + FDO_DISTRIBUTION_EXEC: $FREEBSD_EXEC + +freebsd:13.2@container-prep: + extends: .fdo.qemu-build@freebsd + tags: + - kvm + stage: prep + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_VERSION: '13.2' + FDO_DISTRIBUTION_PACKAGES: 'gcc autoconf automake libtool gettext gperf expat libxml2 freetype2 json-c git ninja wget python3 py39-pip pkgconf gmake' + FDO_DISTRIBUTION_TAG: $FREEBSD_TAG + FDO_DISTRIBUTION_EXEC: $FREEBSD_EXEC + ####################################### # # # container clean stage # @@ -138,6 +204,24 @@ fedora:38@container-clean: FDO_DISTRIBUTION_VERSION: '38' FDO_DISTRIBUTION_TAG: $FEDORA_TAG +freebsd:14.0@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/freebsd/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '14.0' + FDO_DISTRIBUTION_TAG: $FREEBSD_TAG + +freebsd:13.2@container-clean: + extends: + - .container-clean + variables: + GIT_STRATEGY: none + CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/freebsd/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG + FDO_DISTRIBUTION_VERSION: '13.2' + FDO_DISTRIBUTION_TAG: $FREEBSD_TAG + ####################################### # # @@ -145,9 +229,68 @@ fedora:38@container-clean: # # ####################################### +.check_tainted: &check_tainted | + # make sure the kernel is not tainted + if [[ "$(ssh localhost -p 5555 cat /proc/sys/kernel/tainted)" -gt 0 ]]; + then + echo tainted kernel ; + exit 1 ; + fi + +.build-in-qemu@template: + tags: + - kvm + script: + - /app/vmctl start || (echo "Error - Failed to start the VM." && exit 1) + + - *check_tainted + + - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID" + - export PREFIX="$(pwd)/prefix-$BUILD_ID" + - export BUILDDIR="$(pwd)/build-$BUILD_ID" + - export MAKEFLAGS="-j4" + - | + buildopt=() + for bo in $FC_BUILD_ENABLED; do + buildopt+=(-e $bo) + done + for bo in $FC_BUILD_DISABLED; do + buildopt+=(-d $bo) + done + [ -n "$FC_BUILD_ARCH" ] && buildopt+=(-a $FC_BUILD_ARCH) + [ $FC_BUILD_DISTCHECK -eq 1 ] && buildopt+=(-c) + [ $FC_BUILD_NO_INSTALL -eq 1 ] && buildopt+=(-I) + [ $FC_BUILD_NO_CHECK -eq 1 ] && buildopt+=(-C) + buildopt+=(-s $FC_BUILDSYS) + buildopt+=(-t $FC_BUILD_TYPE) + buildopt+=(-X $FC_XML_BACKEND) + export buildopt + - "scp -r $(pwd) vm:" + - echo "CI_JOB_ID=\"$CI_JOB_ID\"" > fcenv + - echo "CI_JOB_NAME=\"$CI_JOB_NAME\"" >> fcenv + - echo "BUILD_ID=\"$BUILD_ID\"" >> fcenv + - echo "MAKEFLAGS=\"$MAKEFLAGS\"" >> fcenv + - echo "MAKE=\"$MAKE\"" >> fcenv + - "scp fcenv vm:~/$CI_PROJECT_NAME/.gitlab-ci/fcenv" + - /app/vmctl exec "cd $CI_PROJECT_NAME ; bash .gitlab-ci/build.sh ${buildopt[@]}" && touch .success || true + - scp -r vm:$CI_PROJECT_NAME/build $BUILDDIR + + - *check_tainted + + - /app/vmctl stop + - if [[ ! -e .success ]]; + then + exit 1 ; + fi + variables: + FC_BUILDSYS: autotools + FC_XML_BACKEND: expat + FC_BUILD_TYPE: both + FC_BUILD_DISTCHECK: 0 + FC_BUILD_NO_INSTALL: 0 + FC_BUILD_NO_CHECK: 0 + .build@template: - before_script: - - pip install meson script: - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID" - export PREFIX="$(pwd)/prefix-$BUILD_ID" @@ -164,16 +307,18 @@ fedora:38@container-clean: [ -n "$FC_BUILD_ARCH" ] && buildopt+=(-a $FC_BUILD_ARCH) [ $FC_BUILD_DISTCHECK -eq 1 ] && buildopt+=(-c) [ $FC_BUILD_NO_INSTALL -eq 1 ] && buildopt+=(-I) + [ $FC_BUILD_NO_CHECK -eq 1 ] && buildopt+=(-C) buildopt+=(-s $FC_BUILDSYS) buildopt+=(-t $FC_BUILD_TYPE) buildopt+=(-X $FC_XML_BACKEND) - sh .gitlab-ci/build.sh ${buildopt[*]} + sh .gitlab-ci/build.sh ${buildopt[@]} variables: FC_BUILDSYS: autotools FC_XML_BACKEND: expat FC_BUILD_TYPE: both FC_BUILD_DISTCHECK: 0 FC_BUILD_NO_INSTALL: 0 + FC_BUILD_NO_CHECK: 0 .fc_artifacts: artifacts: @@ -181,9 +326,11 @@ fedora:38@container-clean: when: always expire_in: 5 days paths: - - fc-build.log - - build-*/fontconfig-*.tar.* - - build-*/fontconfig*/_build + - build*/fc-build.log + - build*/fontconfig-*.tar.* + - build*/test/*log + - build*/fontconfig*/_build + - build*/meson-logs/* ####################################### # # @@ -594,3 +741,127 @@ t_fedora:38:mingw meson static expat: - 'fedora:38@container-prep' +t_freebsd:14.0:autotools shared expat: + extends: + - .build-in-qemu@template + - .fdo.distribution-image@freebsd + - .fc_artifacts + variables: + FC_DISTRO_NAME: freebsd + FDO_DISTRIBUTION_VERSION: '14.0' + FDO_DISTRIBUTION_TAG: $FREEBSD_TAG + FC_BUILDSYS: autotools + FC_BUILD_TYPE: shared + FC_XML_BACKEND: expat + MAKE: gmake + FC_BUILD_NO_CHECK: 1 + needs: + - 'freebsd:14.0@container-prep' + + +t_freebsd:14.0:autotools shared libxml2: + extends: + - .build-in-qemu@template + - .fdo.distribution-image@freebsd + - .fc_artifacts + variables: + FC_DISTRO_NAME: freebsd + FDO_DISTRIBUTION_VERSION: '14.0' + FDO_DISTRIBUTION_TAG: $FREEBSD_TAG + FC_BUILDSYS: autotools + FC_BUILD_TYPE: shared + FC_XML_BACKEND: libxml2 + MAKE: gmake + FC_BUILD_NO_CHECK: 1 + needs: + - 'freebsd:14.0@container-prep' + + +t_freebsd:14.0:meson shared expat: + extends: + - .build-in-qemu@template + - .fdo.distribution-image@freebsd + - .fc_artifacts + variables: + FC_DISTRO_NAME: freebsd + FDO_DISTRIBUTION_VERSION: '14.0' + FDO_DISTRIBUTION_TAG: $FREEBSD_TAG + FC_BUILDSYS: meson + FC_BUILD_TYPE: shared + FC_XML_BACKEND: expat + FC_BUILD_NO_CHECK: 1 + needs: + - 'freebsd:14.0@container-prep' + + +t_freebsd:13.2:autotools shared expat: + extends: + - .build-in-qemu@template + - .fdo.distribution-image@freebsd + - .fc_artifacts + variables: + FC_DISTRO_NAME: freebsd + FDO_DISTRIBUTION_VERSION: '13.2' + FDO_DISTRIBUTION_TAG: $FREEBSD_TAG + FC_BUILDSYS: autotools + FC_BUILD_TYPE: shared + FC_XML_BACKEND: expat + MAKE: gmake + FC_BUILD_NO_CHECK: 1 + needs: + - 'freebsd:13.2@container-prep' + + +t_freebsd:13.2:autotools shared libxml2: + extends: + - .build-in-qemu@template + - .fdo.distribution-image@freebsd + - .fc_artifacts + variables: + FC_DISTRO_NAME: freebsd + FDO_DISTRIBUTION_VERSION: '13.2' + FDO_DISTRIBUTION_TAG: $FREEBSD_TAG + FC_BUILDSYS: autotools + FC_BUILD_TYPE: shared + FC_XML_BACKEND: libxml2 + MAKE: gmake + FC_BUILD_NO_CHECK: 1 + needs: + - 'freebsd:13.2@container-prep' + + +t_freebsd:13.2:meson shared expat: + extends: + - .build-in-qemu@template + - .fdo.distribution-image@freebsd + - .fc_artifacts + variables: + FC_DISTRO_NAME: freebsd + FDO_DISTRIBUTION_VERSION: '13.2' + FDO_DISTRIBUTION_TAG: $FREEBSD_TAG + FC_BUILDSYS: meson + FC_BUILD_TYPE: shared + FC_XML_BACKEND: expat + FC_BUILD_NO_CHECK: 1 + needs: + - 'freebsd:13.2@container-prep' + + +####################################### +# # +# deploy stage # +# # +####################################### + +check-merge-request: + extends: + - .fdo.ci-fairy + stage: deploy + script: + - ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml + artifacts: + when: on_failure + reports: + junit: results.xml + allow_failure: true + diff --git a/.gitlab-ci/build.sh b/.gitlab-ci/build.sh index 7c3c47b..39900a4 100755 --- a/.gitlab-ci/build.sh +++ b/.gitlab-ci/build.sh @@ -3,29 +3,36 @@ set -ex set -o pipefail +cidir=$(dirname $0) +[ -f ${cidir}/fcenv ] && . ${cidir}/fcenv + case "$OSTYPE" in msys) MyPWD=$(pwd -W) ;; + *BSD) PATH=$PATH:/usr/local/bin ;& *) MyPWD=$(pwd) ;; esac enable=() disable=() distcheck=0 enable_install=1 +disable_check=0 cross=0 buildsys="autotools" type="both" arch="" buildopt=() SRCDIR=$MyPWD +export MAKE=${MAKE:-make} export BUILD_ID=${BUILD_ID:-fontconfig-$$} export PREFIX=${PREFIX:-$MyPWD/prefix} export BUILDDIR=${BUILDDIR:-$MyPWD/build} -while getopts a:ce:d:hIs:t:X: OPT +while getopts a:cCe:d:hIs:t:X: OPT do case $OPT in 'a') arch=$OPTARG ;; 'c') distcheck=1 ;; + 'C') disable_check=1 ;; 'e') enable+=($OPTARG) ;; 'd') disable+=($OPTARG) ;; 'I') enable_install=0 ;; @@ -87,15 +94,18 @@ if [ x"$buildsys" == "xautotools" ]; then mkdir "$BUILDDIR" "$PREFIX" cd "$BUILDDIR" ../autogen.sh --prefix="$PREFIX" ${buildopt[*]} 2>&1 | tee /tmp/fc-build.log || r=$? - make V=1 2>&1 | tee -a /tmp/fc-build.log || r=$? - make check V=1 2>&1 | tee -a /tmp/fc-build.log || r=$? + $MAKE V=1 2>&1 | tee -a /tmp/fc-build.log || r=$? + if [ $disable_check -eq 0 ]; then + $MAKE check V=1 2>&1 | tee -a /tmp/fc-build.log || r=$? + fi if [ $enable_install -eq 1 ]; then - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$? + $MAKE install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$? fi if [ $distcheck -eq 1 ]; then - make distcheck V=1 2>&1 | tee -a /tmp/fc-build.log || r=$? + $MAKE distcheck V=1 2>&1 | tee -a /tmp/fc-build.log || r=$? fi elif [ x"$buildsys" == "xmeson" ]; then + pip install meson for i in "${enable[@]}"; do buildopt+=(-D$i=true) done @@ -120,7 +130,9 @@ elif [ x"$buildsys" == "xmeson" ]; then buildopt+=(--default-library=$type) meson setup --prefix="$PREFIX" ${buildopt[*]} "$BUILDDIR" 2>&1 | tee /tmp/fc-build.log || r=$? meson compile -v -C "$BUILDDIR" 2>&1 | tee -a /tmp/fc-build.log || r=$? - meson test -v -C "$BUILDDIR" 2>&1 | tee -a /tmp/fc-build.log || r=$? + if [ $disable_check -eq 0 ]; then + meson test -v -C "$BUILDDIR" 2>&1 | tee -a /tmp/fc-build.log || r=$? + fi if [ $enable_install -eq 1 ]; then meson install -C "$BUILDDIR" 2>&1 | tee -a /tmp/fc-build.log || r=$? fi diff --git a/.gitlab-ci/ci.template b/.gitlab-ci/ci.template index 3612421..c7fd321 100644 --- a/.gitlab-ci/ci.template +++ b/.gitlab-ci/ci.template @@ -27,8 +27,10 @@ include: - local: '.gitlab-ci/other.yml' stages: + - sanity check - prep - test + - deploy - container_clean variables: @@ -40,16 +42,50 @@ variables: # Note: these tags have no meaning and are not tied to a particular # fontconfig version {% for distro in distributions %} - {{"%-13s"| format(distro.name.upper() + '_TAG:')}}'{{distro.tag}}-{{ + {{"%-15s"| format(distro.name.upper() + '_TAG:')}}'{{distro.tag}}-{{ (ci_fairy.hashfiles('.gitlab-ci/config.yml', '.gitlab-ci/' + distro.name + '-install.sh'))[0:12] }}' {% endfor %} {% for distro in distributions %} - {{"%-13s"| format(distro.name.upper() + '_EXEC:')}}'bash .gitlab-ci/{{distro.name}}-install.sh' + {{"%-15s"| format(distro.name.upper() + '_EXEC:')}}'bash .gitlab-ci/{{distro.name}}-install.sh' {% endfor %} +####################################### +# # +# sanity check # +# # +####################################### + +fail-if-fork-is-not-public: + stage: sanity check + script: + - | + if [ $CI_PROJECT_VISIBILITY != "public" ]; then + echo "*************************************************************************************" + echo "Project visibility must be set to 'public'." + echo "Change this in $CI_PROJECT_URL/edit under 'Visibility, project features, permissions'" + echo "*************************************************************************************" + exit 1 + fi + except: + - main@fontconfig/fontconfig + +check-ci-script: + extends: + - .fdo.ci-fairy + stage: sanity check + script: + - ci-fairy generate-template --verify && exit 0 || true + - > + printf "%s\n" \ + "Committed gitlab-ci.yml differs from generated gitlab-ci.yml." \ + "To change the gitlab CI, edit .gitlab-ci/ci.template and/or .gitlab-ci/config.yml" \ + " and run ci-fairy generate-template. For details, see " \ + "https://freedesktop.pages.freedesktop.org/ci-templates/ci-fairy.html#templating-gitlab-ci-yml" + - exit 1 + ####################################### # # # containers stage # @@ -62,7 +98,15 @@ variables: {% for version in distro.versions %} {{distro.name}}:{{version}}@container-prep: +{% if distro.qemu_based %} + extends: .fdo.qemu-build@{{distro.name}} +{% else %} extends: .fdo.container-build@{{distro.name}} +{% endif %} +{% if distro.qemu_based %} + tags: + - kvm +{% endif %} stage: prep variables: GIT_STRATEGY: none @@ -126,9 +170,68 @@ variables: # # ####################################### +.check_tainted: &check_tainted | + # make sure the kernel is not tainted + if [[ "$(ssh localhost -p 5555 cat /proc/sys/kernel/tainted)" -gt 0 ]]; + then + echo tainted kernel ; + exit 1 ; + fi + +.build-in-qemu@template: + tags: + - kvm + script: + - /app/vmctl start || (echo "Error - Failed to start the VM." && exit 1) + + - *check_tainted + + - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID" + - export PREFIX="$(pwd)/prefix-$BUILD_ID" + - export BUILDDIR="$(pwd)/build-$BUILD_ID" + - export MAKEFLAGS="-j4" + - | + buildopt=() + for bo in $FC_BUILD_ENABLED; do + buildopt+=(-e $bo) + done + for bo in $FC_BUILD_DISABLED; do + buildopt+=(-d $bo) + done + [ -n "$FC_BUILD_ARCH" ] && buildopt+=(-a $FC_BUILD_ARCH) + [ $FC_BUILD_DISTCHECK -eq 1 ] && buildopt+=(-c) + [ $FC_BUILD_NO_INSTALL -eq 1 ] && buildopt+=(-I) + [ $FC_BUILD_NO_CHECK -eq 1 ] && buildopt+=(-C) + buildopt+=(-s $FC_BUILDSYS) + buildopt+=(-t $FC_BUILD_TYPE) + buildopt+=(-X $FC_XML_BACKEND) + export buildopt + - "scp -r $(pwd) vm:" + - echo "CI_JOB_ID=\"$CI_JOB_ID\"" > fcenv + - echo "CI_JOB_NAME=\"$CI_JOB_NAME\"" >> fcenv + - echo "BUILD_ID=\"$BUILD_ID\"" >> fcenv + - echo "MAKEFLAGS=\"$MAKEFLAGS\"" >> fcenv + - echo "MAKE=\"$MAKE\"" >> fcenv + - "scp fcenv vm:~/$CI_PROJECT_NAME/.gitlab-ci/fcenv" + - /app/vmctl exec "cd $CI_PROJECT_NAME ; bash .gitlab-ci/build.sh ${buildopt[@]}" && touch .success || true + - scp -r vm:$CI_PROJECT_NAME/build $BUILDDIR + + - *check_tainted + + - /app/vmctl stop + - if [[ ! -e .success ]]; + then + exit 1 ; + fi + variables: + FC_BUILDSYS: autotools + FC_XML_BACKEND: expat + FC_BUILD_TYPE: both + FC_BUILD_DISTCHECK: 0 + FC_BUILD_NO_INSTALL: 0 + FC_BUILD_NO_CHECK: 0 + .build@template: - before_script: - - pip install meson script: - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID" - export PREFIX="$(pwd)/prefix-$BUILD_ID" @@ -145,16 +248,18 @@ variables: [ -n "$FC_BUILD_ARCH" ] && buildopt+=(-a $FC_BUILD_ARCH) [ $FC_BUILD_DISTCHECK -eq 1 ] && buildopt+=(-c) [ $FC_BUILD_NO_INSTALL -eq 1 ] && buildopt+=(-I) + [ $FC_BUILD_NO_CHECK -eq 1 ] && buildopt+=(-C) buildopt+=(-s $FC_BUILDSYS) buildopt+=(-t $FC_BUILD_TYPE) buildopt+=(-X $FC_XML_BACKEND) - sh .gitlab-ci/build.sh ${buildopt[*]} + sh .gitlab-ci/build.sh ${buildopt[@]} variables: FC_BUILDSYS: autotools FC_XML_BACKEND: expat FC_BUILD_TYPE: both FC_BUILD_DISTCHECK: 0 FC_BUILD_NO_INSTALL: 0 + FC_BUILD_NO_CHECK: 0 .fc_artifacts: artifacts: @@ -162,9 +267,11 @@ variables: when: always expire_in: 5 days paths: - - fc-build.log - - build-*/fontconfig-*.tar.* - - build-*/fontconfig*/_build + - build*/fc-build.log + - build*/fontconfig-*.tar.* + - build*/test/*log + - build*/fontconfig*/_build + - build*/meson-logs/* ####################################### # # @@ -178,7 +285,11 @@ variables: t_{{distro.name}}:{{version}}:{{build.name}}: extends: +{% if distro.qemu_based %} + - .build-in-qemu@template +{% else %} - .build@template +{% endif %} - .fdo.distribution-image@{{distro.name}} - .fc_artifacts variables: @@ -198,3 +309,21 @@ t_{{distro.name}}:{{version}}:{{build.name}}: {% endfor %} {% endfor %} +####################################### +# # +# deploy stage # +# # +####################################### + +check-merge-request: + extends: + - .fdo.ci-fairy + stage: deploy + script: + - ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml + artifacts: + when: on_failure + reports: + junit: results.xml + allow_failure: true + diff --git a/.gitlab-ci/config.yml b/.gitlab-ci/config.yml index 968d7e2..21ee147 100644 --- a/.gitlab-ci/config.yml +++ b/.gitlab-ci/config.yml @@ -1,9 +1,10 @@ -.default_tag: &default_tag "2023-12-05.0" +.default_tag: &default_tag "2023-12-05.1" distributions: - name: fedora tag: *default_tag base_type: fedora + qemu_based: false versions: - "rawhide" - "39" @@ -55,6 +56,34 @@ distributions: FC_BUILD_PLATFORM: mingw FC_BUILD_ARCH: linux-mingw-w64-64bit FC_BUILD_NO_INSTALL: 1 + - name: freebsd + tag: *default_tag + base_type: freebsd + qemu_based: true + versions: + - "14.0" + - "13.2" + builds: + - name: "autotools shared expat" + variables: + FC_BUILDSYS: autotools + FC_BUILD_TYPE: shared + FC_XML_BACKEND: expat + MAKE: gmake + FC_BUILD_NO_CHECK: 1 # FIXME: There is GNU-specific parameter issue in touch command. + - name: "autotools shared libxml2" + variables: + FC_BUILDSYS: autotools + FC_BUILD_TYPE: shared + FC_XML_BACKEND: libxml2 + MAKE: gmake + FC_BUILD_NO_CHECK: 1 + - name: "meson shared expat" + variables: + FC_BUILDSYS: meson + FC_BUILD_TYPE: shared + FC_XML_BACKEND: expat + FC_BUILD_NO_CHECK: 1 packages: fedora: @@ -83,4 +112,24 @@ packages: "mingw64-libxml2", "wine", ] - use_qemu: false + freebsd: + needed: + [ + "gcc", + "autoconf", + "automake", + "libtool", + "gettext", + "gperf", + "expat", + "libxml2", + "freetype2", + "json-c", + "git", + "ninja", + "wget", + "python3", + "py39-pip", + "pkgconf", + "gmake", + ] diff --git a/.gitlab-ci/freebsd-cross.sh b/.gitlab-ci/freebsd-cross.sh new file mode 100644 index 0000000..c770d88 --- /dev/null +++ b/.gitlab-ci/freebsd-cross.sh @@ -0,0 +1,4 @@ +#! /bin/sh + +echo "** Cross build not supported." +exit 1 diff --git a/.gitlab-ci/freebsd-install.sh b/.gitlab-ci/freebsd-install.sh new file mode 100644 index 0000000..4a21923 --- /dev/null +++ b/.gitlab-ci/freebsd-install.sh @@ -0,0 +1,3 @@ +#! /bin/bash + +set -ex