Edit

kc3-lang/freetype/.gitlab-ci.yml

Branch :

  • Show log

    Commit

  • Author : Alexei Podtelezhnikov
    Date : 2024-01-03 14:55:33
    Hash : a07ca46c
    Message : * .gitlab-ci.yml: Use detached CI pipelines. See issue freedesktop/freedesktop#540.

  • .gitlab-ci.yml
  • # CI setup for FreeType.
    
    # https://gitlab.freedesktop.org/freedesktop/freedesktop/-/issues/540
    workflow:
      rules:
        - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
        - if: $CI_PIPELINE_SOURCE == 'push'
    
    stages:
     - build
    
    # FIXME: Use --werror once warnings are fixed.
    variables:
      MESON_ARGS: --fatal-meson-warnings --default-library=both
      MESON_ARGS_WINDOWS: ${MESON_ARGS} --force-fallback-for=zlib
    
    .build windows common:
      # TODO: should probably get its own image at some point instead of reusing the GStreamer one
      # See https://gitlab.freedesktop.org/gstreamer/gstreamer/container_registry/18035 for latest
      image: "registry.freedesktop.org/gstreamer/gstreamer/amd64/windows:2022-07-29.3-main"
      stage: 'build'
      tags:
        - 'docker'
        - 'windows'
        - '2022'
        - 'gstreamer-windows'
    
    .build linux common:
      # See
      # https://gitlab.freedesktop.org/freetype/docker-images/container_registry/20896
      image: 'registry.freedesktop.org/freetype/docker-images/debian:latest'
      stage: 'build'
    
    .build macos common:
      stage: 'build'
      tags:
        - 'gst-macos-11.1'
    
    .build windows meson:
      extends: '.build windows common'
      variables:
        # Make sure any failure in PowerShell scripts is fatal.
        ErrorActionPreference: 'Stop'
        WarningPreference: 'Stop'
        # Uncomment the following key if you need to pass custom args, as well
        # with the `$env:MESON_ARGS` line in the `script:` blocks.
        # MESON_ARGS: >-
        #   -Dfoo=enabled
        #   -Dbar=disabled
      before_script:
        # Update RootCAs in order to access to some sites.
        - certutil -generateSSTFromWU "C:\roots.sst"
        - Import-Certificate -CertStoreLocation "Cert:\LocalMachine\Root" "C:\roots.sst"
        # Make sure meson is up to date so we don't need to rebuild the image
        # with each release.
        - pip3 install -U 'meson==0.59.*'
        - pip3 install --upgrade certifi
        - pip3 install -U ninja
    
        # Generate a UWP cross-file in case it's used
        - $PSDefaultParameterValues['Out-File:Encoding'] = 'ASCII'
        - echo "[binaries]" > uwp-crossfile.meson
        - echo "c = 'cl'" >> uwp-crossfile.meson
        - echo "strip = ['true']" >> uwp-crossfile.meson
        - echo "[built-in options]" >> uwp-crossfile.meson
        - echo "c_args = ['-DWINAPI_FAMILY=WINAPI_FAMILY_APP', '-DUNICODE', '-D_WIN32_WINNT=0x0A00', '-we4013']" >> uwp-crossfile.meson
        - echo "c_winlibs = ['windowsapp.lib']" >> uwp-crossfile.meson
      script:
        # For some reason, options are separated by newlines instead of spaces,
        # 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 $env:VS_UWP &&
            meson setup build $env:MESON_ARGS_WINDOWS $env:MESON_ARGS_UWP &&
            meson compile --verbose -C build
            $env:MESON_WINDOWS_TESTS"
    
    .build windows msbuild:
      extends: '.build windows common'
      variables:
        # Make sure any failure in PowerShell scripts is fatal.
        ErrorActionPreference: 'Stop'
        WarningPreference: 'Stop'
      script:
        - git submodule update --init --recursive
        - cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH &&
          MSBuild.exe -clp:ForceConsoleColor -t:Rebuild
                   -p:Configuration=Debug
                   -p:Platform=$env:PLATFORM
                   -p:UserDefines=FT_DEBUG_LOGGING
                   MSBuild.sln"
    
    
    # Format of job names:
    # <OS> <Build-Tool> <Build-Params> <Architecture>:
    
    
    # Windows jobs.
    
    windows meson vs2019 amd64:
      extends: '.build windows meson'
      variables:
        ARCH: 'amd64'
        MESON_WINDOWS_TESTS: '&& meson test -C build && meson test -C build --benchmark'
    
    windows meson vs2019 x86:
      extends: '.build windows meson'
      variables:
        ARCH: 'x86'
        MESON_WINDOWS_TESTS: '&& meson test -C build && meson test -C build --benchmark'
    
    windows meson vs2019 amd64 uwp:
      extends: '.build windows meson'
      variables:
        ARCH: 'amd64'
        VS_UWP: '-app_platform=UWP'
        MESON_ARGS_UWP: '--cross-file uwp-crossfile.meson -Dc_winlibs="windowsapp.lib"'
    
    windows msbuild vs2019 amd64:
      extends: '.build windows msbuild'
      variables:
        ARCH: 'amd64'
        PLATFORM: 'x64'
    
    
    # Linux Jobs.
    #
    # Jobs with "libs" in the name force-enable libraries.
    # They are disabled for the remaining jobs.
    
    linux autotools:
      extends: '.build linux common'
      script: |
        ./autogen.sh
        ./configure --with-brotli=no \
                    --with-bzip2=no \
                    --with-harfbuzz=no \
                    --with-png=no \
                    --with-zlib=no \
                    CC=gcc
    
        make -j$(nproc) && make install
    
    linux autotools libs:
      extends: '.build linux common'
      script: |
        ./autogen.sh
        ./configure --with-brotli=yes \
                    --with-bzip2=yes \
                    --with-harfbuzz=yes \
                    --with-png=yes \
                    --with-zlib=yes \
                    CC=gcc
    
        make -j$(nproc) && make install
    
    linux autotools libs clang:
      extends: '.build linux common'
      script: |
        ./autogen.sh
        ./configure --with-brotli=yes \
                    --with-bzip2=yes \
                    --with-harfbuzz=yes \
                    --with-png=yes \
                    --with-zlib=yes \
                    CC=clang
    
        make -j$(nproc) && make install
    
    linux meson:
      extends: '.build linux common'
      script: |
        meson setup build ${MESON_ARGS} \
                          -Dbrotli=disabled \
                          -Dbzip2=disabled \
                          -Dharfbuzz=disabled \
                          -Dpng=disabled \
                          -Dzlib=disabled
    
        meson compile --verbose -C build
        meson install -C build
    
    linux meson libs:
      extends: '.build linux common'
      script: |
        meson setup build ${MESON_ARGS} \
                          -Dbrotli=enabled \
                          -Dbzip2=enabled \
                          -Dharfbuzz=disabled \
                          -Dpng=disabled \
                          -Dzlib=disabled
    
        meson compile --verbose -C build
        meson install -C build
    
    linux cmake:
      extends: '.build linux common'
      script: |
        cmake -B build -D FT_DISABLE_BROTLI=TRUE \
                       -D FT_DISABLE_BZIP2=TRUE \
                       -D FT_DISABLE_HARFBUZZ=TRUE \
                       -D FT_DISABLE_PNG=TRUE \
                       -D FT_DISABLE_ZLIB=TRUE
    
        cmake --build build --target install
    
    linux cmake libs:
      extends: '.build linux common'
      script: |
        cmake -B build -D FT_REQUIRE_BROTLI=TRUE \
                       -D FT_REQUIRE_BZIP2=TRUE \
                       -D FT_REQUIRE_HARFBUZZ=TRUE \
                       -D FT_REQUIRE_PNG=TRUE \
                       -D FT_REQUIRE_ZLIB=TRUE
    
        cmake --build build --target install
    
    
    # MacOS jobs.
    
    macos autotools:
      extends: '.build macos common'
      before_script:
        - '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"'
      script:
        - brew install autoconf automake libtool
        - ./autogen.sh
        - ./configure
        - 'make -j$(sysctl -n hw.logicalcpu)'
        - make install
    
    macos autotools clang:
      extends: '.build macos common'
      before_script:
        - '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"'
      script:
        - brew install autoconf automake libtool
        - ./autogen.sh
        - './configure CC=clang'
        - 'make -j$(sysctl -n hw.logicalcpu)'
        - make install
    
    macos meson:
      extends: '.build macos common'
      script:
        - pip3 install --upgrade pip
        - pip3 install -U meson
        - pip3 install --upgrade certifi
        - pip3 install -U ninja
    
        - meson setup build ${MESON_ARGS}
        - meson compile --verbose -C build
        - sudo meson install -C build