Rework CI implementation

Use ci-templates.
This commit is contained in:
Akira TAGOH 2023-03-31 23:21:45 +09:00
parent 7e2a1b2577
commit 428515daae
4 changed files with 856 additions and 257 deletions

View File

@ -1,17 +1,174 @@
image: fedora:rawhide # vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0 filetype=yaml:
#######################################
# #
# THIS FILE IS GENERATED, DO NOT EDIT #
# #
#######################################
# 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
.templates_sha: &template_sha dd90ac0d7a03b574eb4f18d7358083f0c97825f3
include:
# Fedora container builder template
- project: 'freedesktop/ci-templates'
ref: *template_sha
file: '/templates/fedora.yml'
- project: 'freedesktop/ci-templates'
ref: *template_sha
file: '/templates/ci-fairy.yml'
stages: stages:
- build - prep
- test
- container_clean
before_script: variables:
- dnf -y upgrade --disablerepo=rawhide-modular --nogpgcheck fedora-repos fedora-repos-rawhide FDO_UPSTREAM_REPO: fontconfig/fontconfig
- dnf -y upgrade --disablerepo=rawhide-modular GIT_DEPTH: 1
- dnf -y install --disablerepo=rawhide-modular --allowerasing --skip-broken @buildsys-build autoconf automake libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf bubblewrap
- dnf -y install --disablerepo=rawhide-modular --allowerasing --skip-broken ninja-build wget python3-pip
- pip install meson
shared-build: # these tags should be updated each time the list of packages is updated
stage: build # 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-03-31.0-b3f8fc5f8b0d'
FEDORA_EXEC: 'bash .gitlab-ci/fedora-install.sh'
#######################################
# #
# containers stage #
# #
#######################################
# Build a container for each distribution + version. The ci-templates
# will re-use the containers if the tag doesn't change.
fedora:rawhide@container-prep:
extends:
- .fdo.container-build@fedora
stage: prep
variables:
GIT_STRATEGY: none
FDO_DISTRIBUTION_VERSION: 'rawhide'
FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC
fedora:38@container-prep:
extends:
- .fdo.container-build@fedora
stage: prep
variables:
GIT_STRATEGY: none
FDO_DISTRIBUTION_VERSION: '38'
FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC
fedora:37@container-prep:
extends:
- .fdo.container-build@fedora
stage: prep
variables:
GIT_STRATEGY: none
FDO_DISTRIBUTION_VERSION: '37'
FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC
fedora:36@container-prep:
extends:
- .fdo.container-build@fedora
stage: prep
variables:
GIT_STRATEGY: none
FDO_DISTRIBUTION_VERSION: '36'
FDO_DISTRIBUTION_PACKAGES: '@buildsys-build autoconf automake libtool gettext gettext-devel gperf expat-devel libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf bubblewrap ninja-build wget python3-pip'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
FDO_DISTRIBUTION_EXEC: $FEDORA_EXEC
#######################################
# #
# container clean stage #
# #
#######################################
#
# This stage will look for the container images e currently have in
# the registry and will remove any that are not tagged with the provided
# $container_image:$tag
#
# This job only runs for a scheduled pipeline.
#
# Go to your Profile, Settings, Access Tokens
# Create a personal token with `api' scope, copy the value.
# Go to CI/CD, Schedules, schedule a monthly job.
# Define a variable of type File named AUTHFILE. Content is that token
# value.
.container-clean:
stage: container_clean
image: golang:alpine
before_script:
- apk add python3 py-pip git
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
script:
- ci-fairy -v --authfile $AUTHFILE delete-image
--repository $FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION
--exclude-tag $FDO_DISTRIBUTION_TAG
dependencies: []
allow_failure: true
only:
- schedules
fedora:rawhide@container-clean:
extends:
- .container-clean
variables:
GIT_STRATEGY: none
CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
FDO_DISTRIBUTION_VERSION: 'rawhide'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
fedora:38@container-clean:
extends:
- .container-clean
variables:
GIT_STRATEGY: none
CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
FDO_DISTRIBUTION_VERSION: '38'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
fedora:37@container-clean:
extends:
- .container-clean
variables:
GIT_STRATEGY: none
CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
FDO_DISTRIBUTION_VERSION: '37'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
fedora:36@container-clean:
extends:
- .container-clean
variables:
GIT_STRATEGY: none
CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
FDO_DISTRIBUTION_VERSION: '36'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
#######################################
# #
# build stage #
# #
#######################################
.build autotools shared expat:
stage: test
script: script:
- export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID" - export BUILD_ID="fontconfig-$CI_JOB_NAME_$CI_COMMIT_SHA-$CI_JOB_ID"
- export PREFIX="$(pwd)/prefix-$BUILD_ID" - export PREFIX="$(pwd)/prefix-$BUILD_ID"
@ -19,268 +176,397 @@ shared-build:
- export MAKEFLAGS="-j4" - export MAKEFLAGS="-j4"
- mkdir "$BUILDDIR" "$PREFIX" - mkdir "$BUILDDIR" "$PREFIX"
- cd "$BUILDDIR" - cd "$BUILDDIR"
- ../autogen.sh --prefix="$PREFIX" --enable-shared --disable-static --enable-libxml2 - env
- make - r=0
- make check - ../autogen.sh --prefix="$PREFIX" --enable-shared --disable-static --disable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
- make install - make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
- make distcheck - make distcheck V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
- mv /tmp/fc-build.log .
- exit $r
.build autotools shared libxml2:
stage: test
script:
- 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"
- mkdir "$BUILDDIR" "$PREFIX"
- cd "$BUILDDIR"
- env
- r=0
- ../autogen.sh --prefix="$PREFIX" --enable-shared --disable-static --enable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
- make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
- make distcheck V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
- mv /tmp/fc-build.log .
- exit $r
.build autotools static expat:
stage: test
script:
- 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"
- mkdir "$BUILDDIR" "$PREFIX"
- cd "$BUILDDIR"
- env
- r=0
- ../autogen.sh --prefix="$PREFIX" --disable-shared --enable-static --disable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
- make check V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
- make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
- mv /tmp/fc-build.log .
- exit $r
.build autotools static libxml2:
stage: test
script:
- 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"
- mkdir "$BUILDDIR" "$PREFIX"
- cd "$BUILDDIR"
- env
- r=0
- ../autogen.sh --prefix="$PREFIX" --disable-shared --enable-static --enable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
- make check V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
- make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
- mv /tmp/fc-build.log .
- exit $r
.build meson shared:
stage: test
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"
- export BUILDDIR="$(pwd)/build-$BUILD_ID"
- export MAKEFLAGS="-j4"
- env
- r=0
- meson --prefix="$PREFIX" --default-library=shared "$BUILDDIR" 2>&1 | tee /tmp/fc-build.log || r=$?
- meson compile -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
- meson test -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
- meson install -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
- meson dist -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
- mv /tmp/fc-build.log .
- exit $r
.build meson static:
stage: test
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"
- export BUILDDIR="$(pwd)/build-$BUILD_ID"
- export MAKEFLAGS="-j4"
- env
- r=0
- meson --prefix="$PREFIX" --default-library=static "$BUILDDIR" 2>&1 | tee /tmp/fc-build.log || r=$?
- meson compile -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
- meson test -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
- meson install -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
- mv /tmp/fc-build.log .
- exit $r
.fc_artifacts:
artifacts: artifacts:
name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
when: always when: always
expire_in: 5 days
paths: paths:
- fc-build.log
- build-*/fontconfig-*.tar.* - build-*/fontconfig-*.tar.*
- build-*/fontconfig*/_build/sub/*.log - build-*/fontconfig*/_build
- build-*/fontconfig*/_build/sub/test/*.log
- build-*/fontconfig*/_build/sub/test/*.trs
- build-*/fontconfig*/_build/sub/test/out*
- build-*/*.log
- build-*/test/*.log
- build-*/test/*.trs
- build-*/test/out*
- prefix-*
static-build:
stage: build
script:
- 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"
- mkdir "$BUILDDIR"
- cd "$BUILDDIR"
- ../autogen.sh --prefix="$PREFIX" --disable-shared --enable-static --enable-libxml2
- make
- make check
artifacts:
name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
when: always
paths:
- build-*/*.log
- build-*/test/*.log
- build-*/test/*.trs
- build-*/test/out*
mingw-build:
image: fedora:35
stage: build
before_script:
- dnf -y upgrade --disablerepo=rawhide-modular
- dnf -y install --disablerepo=rawhide-modular --allowerasing --skip-broken @buildsys-build autoconf automake libtool gettext gettext-devel gperf libxml2-devel freetype-devel json-c-devel git docbook-utils docbook-utils-pdf wget
- dnf -y install --disablerepo=rawhide-modular --allowerasing --skip-broken mingw64-gettext mingw64-freetype mingw64-libxml2 wine
script:
- 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"
- mkdir "$BUILDDIR"
- cd "$BUILDDIR"
- eval `rpm --eval %{mingw64_env}`
- ../autogen.sh --prefix="$PREFIX" --host=x86_64-mingw32 --disable-shared --enable-static --enable-libxml2
- make
- make check
artifacts:
name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
when: always
paths:
- build-*/*.log
- build-*/test/*.log
- build-*/test/*.trs
- build-*/test/out*
meson-shared-build:
image: fedora:latest
stage: build
script:
- 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"
- meson --prefix="$PREFIX" --default-library=shared "$BUILDDIR"
- ninja -C "$BUILDDIR"
- ninja -C "$BUILDDIR" test
- ninja -C "$BUILDDIR" install
artifacts:
name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
when: always
paths:
- build-*/meson-logs/*txt
- prefix-*
meson-static-build:
image: fedora:latest
stage: build
script:
- 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"
- meson --prefix="$PREFIX" --default-library=static "$BUILDDIR"
- ninja -C "$BUILDDIR"
- ninja -C "$BUILDDIR" test
- ninja -C "$BUILDDIR" install
artifacts:
name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
when: always
paths:
- build-*/meson-logs/*txt
- prefix-*
meson-mingw-w64-build:
image: fedora:latest
stage: build
# allow failure until https://gitlab.freedesktop.org/fontconfig/fontconfig/-/issues/263 is resolved
allow_failure: true
script:
- 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"
- eval `rpm --eval %{mingw64_env}`
- meson --prefix="$PREFIX" "$BUILDDIR" --cross-file .gitlab-ci/linux-mingw-w64-64bit.txt
- ninja -C "$BUILDDIR"
- ninja -C "$BUILDDIR" test
# install doesn't work, fccache problems, but autotools ci doesn't do that either
# - ninja -C "$BUILDDIR" install
artifacts:
name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
when: always
paths:
- build-*/meson-logs/*txt
- prefix-*
# FIXME: fontconfig should probably get its own image #######################################
# In the meantime, the latest GStreamer image tag can be found here: # #
# https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/.gitlab-image-tags.yml#L10 # test stage #
.build meson windows: # #
image: 'registry.freedesktop.org/gstreamer/gstreamer/amd64/windows:2022-09-23.0-main' #######################################
stage: 'build'
tags:
- 'docker' t_fedora:rawhide:autotools shared expat:
- 'windows' extends:
- '2022' - .build autotools shared expat
- .fdo.distribution-image@fedora
- .fc_artifacts
variables: variables:
# Make sure any failure in PowerShell scripts is fatal FDO_DISTRIBUTION_VERSION: 'rawhide'
ErrorActionPreference: 'Stop' FDO_DISTRIBUTION_TAG: $FEDORA_TAG
WarningPreference: 'Stop' needs:
# Uncomment the following key if need to pass custom args, as well with the - 'fedora:rawhide@container-prep'
# $env:MESON_ARGS line in the `script:` blocks
# MESON_ARGS: >-
# -Dfoo=enabled
# -Dbar=disabled
before_script:
# Make sure meson is up to date, so we don't need to rebuild the image with each release
- pip3 install -U meson certifi
script:
# For some reason, options are separated by newline instead of space, so we
# have to replace them first.
# - $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ")
# Gitlab executes PowerShell in docker, but VsDevCmd.bat is a batch script.
# Environment variables substitutions is done by PowerShell before calling
# cmd.exe, that's why we use $env:FOO instead of %FOO%
- cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH &&
SET CERT_PATH=$(python -m certifi) &&
SET SSL_CERT_FILE=$(python -m certifi) &&
SET REQUESTS_CA_BUNDLE=$(python -m certifi) &&
meson build $env:MESON_ARGS &&
ninja -C build &&
ninja -C build test"
artifacts:
name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
when: always
paths:
- build-*/meson-logs/*txt
- prefix-*
meson vs2019 amd64:
extends: '.build meson windows' t_fedora:rawhide:autotools shared libxml2:
extends:
- .build autotools shared libxml2
- .fdo.distribution-image@fedora
- .fc_artifacts
variables: variables:
ARCH: 'amd64' FDO_DISTRIBUTION_VERSION: 'rawhide'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:rawhide@container-prep'
meson vs2019 x86:
extends: '.build meson windows' t_fedora:rawhide:autotools static expat:
extends:
- .build autotools static expat
- .fdo.distribution-image@fedora
- .fc_artifacts
variables: variables:
ARCH: 'x86' FDO_DISTRIBUTION_VERSION: 'rawhide'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:rawhide@container-prep'
meson macos:
stage: 'build'
tags:
- gst-macos-11.1
artifacts:
name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}"
expire_in: '5 days'
when: 'always'
paths:
- "build/meson-logs/*txt"
before_script:
- pip3 install --upgrade pip
# Make sure meson is up to date
- pip3 install -U meson
# Need to install certificates for python
- pip3 install --upgrade certifi
# Anther way t install certificates
- open /Applications/Python\ 3.8/Install\ Certificates.command
# Get ninja
- curl -L -o ninja-mac.zip https://github.com/ninja-build/ninja/releases/download/v1.10.0/ninja-mac.zip
- unzip ninja-mac.zip
- sudo cp ninja /usr/local/bin
script:
- CERT_PATH=$(python3 -m certifi) && export SSL_CERT_FILE=${CERT_PATH} && export REQUESTS_CA_BUNDLE=${CERT_PATH} && meson build
- ninja -C build
- ninja -C build test
# msys infrastructure is a bit broken, disable for now t_fedora:rawhide:autotools static libxml2:
meson msys2: extends:
extends: '.build meson windows' - .build autotools static libxml2
when: 'manual' - .fdo.distribution-image@fedora
allow_failure: true - .fc_artifacts
script: variables:
# For some reason, options are separated by newline instead of space, so we FDO_DISTRIBUTION_VERSION: 'rawhide'
# have to replace them first. FDO_DISTRIBUTION_TAG: $FEDORA_TAG
# - $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ") needs:
- 'fedora:rawhide@container-prep'
- $env:PATH += ";C:\msys64\usr\bin;C:\msys64\mingw64/bin;C:\msys64\mingw32/bin"
# XXX: Copied from https://gitlab.freedesktop.org/gstreamer/gst-ci/blob/master/gitlab/ci_template.yml#L487
# For some reason docker build hangs if this is included in the image, needs more troubleshooting
- C:\msys64\usr\bin\bash -c "pacman-key --init && pacman-key --populate msys2 && pacman-key --refresh-keys || true"
- C:\msys64\usr\bin\bash -c "pacman -Syuu --noconfirm"
- C:\msys64\usr\bin\bash -c "pacman -Sy --noconfirm --needed mingw-w64-x86_64-toolchain ninja"
- C:\msys64\usr\bin\bash -c "meson build $env:MESON_ARGS &&
ninja -C build &&
ninja -C build test"
meson android arm64 fedora: t_fedora:rawhide:meson shared:
# See https://gitlab.freedesktop.org/gstreamer/gst-ci/container_registry/164 for current images extends:
image: 'registry.freedesktop.org/gstreamer/gst-ci/amd64/android-fedora:2020-10-22.0-master' - .build meson shared
stage: 'build' - .fdo.distribution-image@fedora
artifacts: - .fc_artifacts
name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}" variables:
expire_in: '5 days' FDO_DISTRIBUTION_VERSION: 'rawhide'
when: 'always' FDO_DISTRIBUTION_TAG: $FEDORA_TAG
paths: needs:
- "build/meson-logs/*.txt" - 'fedora:rawhide@container-prep'
before_script:
- dnf install -y python3-pip gcc ninja-build gperf
- pip3 install --user meson
script:
- export PATH="$HOME/.local/bin:$PATH"
- |
cat > android-cross-file.txt <<EOF
[constants]
ndk_path = '/android/ndk'
toolchain = ndk_path + '/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android'
api = '28'
[host_machine]
system = 'android'
cpu_family = 'aarch64'
cpu = 'aarch64'
endian = 'little'
[properties] t_fedora:rawhide:meson static:
sys_root = ndk_path + '/sysroot' extends:
c_args = ['-Wno-pointer-bool-conversion'] - .build meson static
c_link_args = ['-fuse-ld=gold'] - .fdo.distribution-image@fedora
cpp_link_args = ['-fuse-ld=gold'] - .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: 'rawhide'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:rawhide@container-prep'
t_fedora:38:autotools shared expat:
extends:
- .build autotools shared expat
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '38'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:38@container-prep'
t_fedora:38:autotools shared libxml2:
extends:
- .build autotools shared libxml2
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '38'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:38@container-prep'
t_fedora:38:autotools static expat:
extends:
- .build autotools static expat
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '38'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:38@container-prep'
t_fedora:38:autotools static libxml2:
extends:
- .build autotools static libxml2
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '38'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:38@container-prep'
t_fedora:38:meson shared:
extends:
- .build meson shared
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '38'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:38@container-prep'
t_fedora:38:meson static:
extends:
- .build meson static
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '38'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:38@container-prep'
t_fedora:37:autotools shared expat:
extends:
- .build autotools shared expat
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '37'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:37@container-prep'
t_fedora:37:autotools shared libxml2:
extends:
- .build autotools shared libxml2
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '37'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:37@container-prep'
t_fedora:37:autotools static expat:
extends:
- .build autotools static expat
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '37'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:37@container-prep'
t_fedora:37:autotools static libxml2:
extends:
- .build autotools static libxml2
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '37'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:37@container-prep'
t_fedora:37:meson shared:
extends:
- .build meson shared
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '37'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:37@container-prep'
t_fedora:37:meson static:
extends:
- .build meson static
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '37'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:37@container-prep'
t_fedora:36:autotools shared expat:
extends:
- .build autotools shared expat
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '36'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:36@container-prep'
t_fedora:36:autotools shared libxml2:
extends:
- .build autotools shared libxml2
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '36'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:36@container-prep'
t_fedora:36:autotools static expat:
extends:
- .build autotools static expat
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '36'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:36@container-prep'
t_fedora:36:autotools static libxml2:
extends:
- .build autotools static libxml2
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '36'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:36@container-prep'
t_fedora:36:meson shared:
extends:
- .build meson shared
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '36'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:36@container-prep'
t_fedora:36:meson static:
extends:
- .build meson static
- .fdo.distribution-image@fedora
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '36'
FDO_DISTRIBUTION_TAG: $FEDORA_TAG
needs:
- 'fedora:36@container-prep'
[binaries]
c = toolchain + api + '-clang'
cpp = toolchain + api + '-clang++'
ar = toolchain + '-ar'
strip = toolchain + '-strip'
EOF
- meson setup --werror --cross-file android-cross-file.txt build
- meson compile --verbose -C build

267
.gitlab-ci/ci.template Normal file
View File

@ -0,0 +1,267 @@
# vim: set expandtab shiftwidth=2 tabstop=8 textwidth=0 filetype=yaml:
{# You're looking at the template here, so you can ignore the below
warning. This is the right file to edit #}
#######################################
# #
# THIS FILE IS GENERATED, DO NOT EDIT #
# #
#######################################
# 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
.templates_sha: &template_sha dd90ac0d7a03b574eb4f18d7358083f0c97825f3
include:
{% for distro in distributions|sort(attribute="name") %}
# {{ distro.name.capitalize() }} container builder template
- project: 'freedesktop/ci-templates'
ref: *template_sha
file: '/templates/{{distro.name}}.yml'
{% endfor %}
- project: 'freedesktop/ci-templates'
ref: *template_sha
file: '/templates/ci-fairy.yml'
stages:
- prep
- test
- container_clean
variables:
FDO_UPSTREAM_REPO: fontconfig/fontconfig
GIT_DEPTH: 1
# these tags should be updated each time the list of packages is updated
# changing these will force rebuilding the associated image
# 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}}-{{
(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'
{% endfor %}
#######################################
# #
# containers stage #
# #
#######################################
# Build a container for each distribution + version. The ci-templates
# will re-use the containers if the tag doesn't change.
{% for distro in distributions %}
{% for version in distro.versions %}
{{distro.name}}:{{version}}@container-prep:
extends:
- .fdo.container-build@{{distro.name}}
stage: prep
variables:
GIT_STRATEGY: none
FDO_DISTRIBUTION_VERSION: '{{version}}'
FDO_DISTRIBUTION_PACKAGES: '{{' '.join(packages[distro.name].needed)}}'
FDO_DISTRIBUTION_TAG: ${{distro.name.upper()}}_TAG
FDO_DISTRIBUTION_EXEC: ${{distro.name.upper()}}_EXEC
{% endfor %}
{% endfor %}
#######################################
# #
# container clean stage #
# #
#######################################
#
# This stage will look for the container images e currently have in
# the registry and will remove any that are not tagged with the provided
# $container_image:$tag
#
# This job only runs for a scheduled pipeline.
#
# Go to your Profile, Settings, Access Tokens
# Create a personal token with `api' scope, copy the value.
# Go to CI/CD, Schedules, schedule a monthly job.
# Define a variable of type File named AUTHFILE. Content is that token
# value.
.container-clean:
stage: container_clean
image: golang:alpine
before_script:
- apk add python3 py-pip git
- pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates
script:
- ci-fairy -v --authfile $AUTHFILE delete-image
--repository $FDO_DISTRIBUTION_NAME/$FDO_DISTRIBUTION_VERSION
--exclude-tag $FDO_DISTRIBUTION_TAG
dependencies: []
allow_failure: true
only:
- schedules
{% for distro in distributions %}
{% for version in distro.versions %}
{{distro.name}}:{{version}}@container-clean:
extends:
- .container-clean
variables:
GIT_STRATEGY: none
CURRENT_CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/{{distro.name}}/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
FDO_DISTRIBUTION_VERSION: '{{version}}'
FDO_DISTRIBUTION_TAG: ${{distro.name.upper()}}_TAG
{% endfor %}
{% endfor %}
#######################################
# #
# build stage #
# #
#######################################
.build autotools shared expat:
stage: test
script:
- 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"
- mkdir "$BUILDDIR" "$PREFIX"
- cd "$BUILDDIR"
- env
- r=0
- ../autogen.sh --prefix="$PREFIX" --enable-shared --disable-static --disable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
- make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
- make distcheck V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
- mv /tmp/fc-build.log .
- exit $r
.build autotools shared libxml2:
stage: test
script:
- 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"
- mkdir "$BUILDDIR" "$PREFIX"
- cd "$BUILDDIR"
- env
- r=0
- ../autogen.sh --prefix="$PREFIX" --enable-shared --disable-static --enable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
- make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
- make distcheck V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
- mv /tmp/fc-build.log .
- exit $r
.build autotools static expat:
stage: test
script:
- 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"
- mkdir "$BUILDDIR" "$PREFIX"
- cd "$BUILDDIR"
- env
- r=0
- ../autogen.sh --prefix="$PREFIX" --disable-shared --enable-static --disable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
- make check V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
- make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
- mv /tmp/fc-build.log .
- exit $r
.build autotools static libxml2:
stage: test
script:
- 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"
- mkdir "$BUILDDIR" "$PREFIX"
- cd "$BUILDDIR"
- env
- r=0
- ../autogen.sh --prefix="$PREFIX" --disable-shared --enable-static --enable-libxml2 2>&1 | tee /tmp/fc-build.log || r=$?
- make check V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
- make install V=1 2>&1 | tee -a /tmp/fc-build.log || r=$?
- mv /tmp/fc-build.log .
- exit $r
.build meson shared:
stage: test
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"
- export BUILDDIR="$(pwd)/build-$BUILD_ID"
- export MAKEFLAGS="-j4"
- env
- r=0
- meson --prefix="$PREFIX" --default-library=shared "$BUILDDIR" 2>&1 | tee /tmp/fc-build.log || r=$?
- meson compile -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
- meson test -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
- meson install -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
- meson dist -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
- mv /tmp/fc-build.log .
- exit $r
.build meson static:
stage: test
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"
- export BUILDDIR="$(pwd)/build-$BUILD_ID"
- export MAKEFLAGS="-j4"
- env
- r=0
- meson --prefix="$PREFIX" --default-library=static "$BUILDDIR" 2>&1 | tee /tmp/fc-build.log || r=$?
- meson compile -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
- meson test -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
- meson install -v -C "$BUILDDIR" | tee -a /tmp/fc-build.log || r=$?
- mv /tmp/fc-build.log .
- exit $r
.fc_artifacts:
artifacts:
name: fontconfig-$CI_COMMIT_SHA-$CI_JOB_ID
when: always
expire_in: 5 days
paths:
- fc-build.log
- build-*/fontconfig-*.tar.*
- build-*/fontconfig*/_build
#######################################
# #
# test stage #
# #
#######################################
{% for distro in distributions %}
{% for version in distro.versions %}
{% for bs in distro.buildsys %}
t_{{distro.name}}:{{version}}:{{bs}}:
extends:
- .build {{bs}}
- .fdo.distribution-image@{{distro.name}}
- .fc_artifacts
variables:
FDO_DISTRIBUTION_VERSION: '{{version}}'
FDO_DISTRIBUTION_TAG: ${{distro.name.upper()}}_TAG
{# Where we have extra_variables defined, add them to the list #}
{% if distro.build is defined and distro.build.extra_variables is defined %}
{% for var in distro.build.extra_variables %}
{{var}}
{% endfor %}
{% endif %}
needs:
- '{{distro.name}}:{{version}}@container-prep'
{% endfor %}
{% endfor %}
{% endfor %}

43
.gitlab-ci/config.yml Normal file
View File

@ -0,0 +1,43 @@
.default_tag: &default_tag "2023-03-31.0"
distributions:
- name: fedora
tag: *default_tag
base_type: fedora
versions:
- "rawhide"
- "38"
- "37"
- "36"
buildsys:
- "autotools shared expat"
- "autotools shared libxml2"
- "autotools static expat"
- "autotools static libxml2"
- "meson shared"
- "meson static"
packages:
fedora:
needed:
[
"@buildsys-build",
"autoconf",
"automake",
"libtool",
"gettext",
"gettext-devel",
"gperf",
"expat-devel",
"libxml2-devel",
"freetype-devel",
"json-c-devel",
"git",
"docbook-utils",
"docbook-utils-pdf",
"bubblewrap",
"ninja-build",
"wget",
"python3-pip",
]
use_qemu: false

View File

@ -0,0 +1,3 @@
#! /bin/bash
set -ex