ci: add macos (arm64) CI

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5262>
This commit is contained in:
Matthew Waters 2023-08-29 16:10:49 +10:00 committed by GStreamer Marge Bot
parent 7affa01e05
commit e7fc0400bc
4 changed files with 75 additions and 29 deletions

View file

@ -188,6 +188,10 @@ windows amd64 docker:
) )
- ci/docker/windows/container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $WINDOWS_IMAGE $WINDOWS_UPSTREAM_IMAGE $DOCKERFILE - ci/docker/windows/container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $WINDOWS_IMAGE $WINDOWS_UPSTREAM_IMAGE $DOCKERFILE
.macos image:
image: "registry.freedesktop.org/gstreamer/gstreamer/macos-arm64/13-ventura:2023-08-29.1"
tags:
- gst-mac-arm
# ---- Preparation ----- # # ---- Preparation ----- #
# #
@ -205,9 +209,7 @@ gst indent:
- ./scripts/check-format-c - ./scripts/check-format-c
- ./scripts/format-csharp --check - ./scripts/format-csharp --check
rules: rules:
# Don't check indentation on post merge pipelines - !reference [.upstream-branch-rules, rules]
- if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH'
when: 'manual'
- if: '$CI_PROJECT_NAMESPACE != "gstreamer" || $CI_COMMIT_BRANCH != $GST_UPSTREAM_BRANCH' - if: '$CI_PROJECT_NAMESPACE != "gstreamer" || $CI_COMMIT_BRANCH != $GST_UPSTREAM_BRANCH'
when: 'always' when: 'always'
@ -254,29 +256,33 @@ commitlint:
# corresponds to -Dgstreamer:gst_debug meson arg # corresponds to -Dgstreamer:gst_debug meson arg
# GST_WERROR: make warning fatal or not # GST_WERROR: make warning fatal or not
# must be a string of a boolean, "true" or "false". Not yaml bool. # must be a string of a boolean, "true" or "false". Not yaml bool.
# # SUBPROJECTS_CACHE_DIR: The location in the image of the subprojects cache
# HAVE_CCACHE: whether we have ccache available
# must be a string of a boolean, "true" or "false". Not yaml bool.
.build_template: &build .build_template: &build
- export RUSTUP_HOME="/usr/local/rustup" - export RUSTUP_HOME="/usr/local/rustup"
- export CARGO_HOME="/usr/local/cargo" - export CARGO_HOME="/usr/local/cargo"
- export PATH="/usr/local/cargo/bin:$PATH" - export PATH="/usr/local/cargo/bin:$PATH"
- date -R - date -R
- ci/scripts/handle-subprojects-cache.py subprojects/ - ci/scripts/handle-subprojects-cache.py --cache-dir ${SUBPROJECTS_CACHE_DIR} subprojects/
- date -R - date -R
- export ARGS="--default-library=${BUILD_TYPE:-both} -Dgstreamer:gst_debug=${BUILD_GST_DEBUG:-true} ${MESON_ARGS}" - export ARGS="--default-library=${BUILD_TYPE:-both} -Dgstreamer:gst_debug=${BUILD_GST_DEBUG:-true} ${MESON_ARGS}"
- echo $GST_WERROR
- |- - |-
if [ $GST_WERROR == "true" ]; then if [ "$GST_WERROR" = "true" ]; then
export ARGS="$ARGS --native-file ./ci/meson/gst-werror.ini" export ARGS="$ARGS --native-file ./ci/meson/gst-werror.ini"
fi fi
- echo $ARGS - echo $ARGS
- date -R - date -R
- meson build/ $ARGS - meson setup build/ $(echo ${ARGS})
- date -R - date -R
- ninja -C build/ - ninja -C build/
- date -R - date -R
- ccache --show-stats - test "x$HAVE_CCACHE" = "xtrue" && ccache --show-stats
.build_ccache_vars: .build_ccache_vars:
variables: variables:
HAVE_CCACHE: 'true'
CCACHE_COMPILERCHECK: 'content' CCACHE_COMPILERCHECK: 'content'
CCACHE_COMPRESS: 'true' CCACHE_COMPRESS: 'true'
CCACHE_BASEDIR: '/cache/gstreamer/gstreamer' CCACHE_BASEDIR: '/cache/gstreamer/gstreamer'
@ -305,10 +311,15 @@ commitlint:
- subprojects/gstreamer-sharp/**/* - subprojects/gstreamer-sharp/**/*
- subprojects/gst-rtsp-server/**/* - subprojects/gst-rtsp-server/**/*
.upstream-branch-rules:
rules:
# If this matches, it means the pipeline is running against either the main
# or a stable branch, so make it manual
- if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH'
when: manual
.build: .build:
stage: 'build' stage: 'build'
extends:
- '.build_ccache_vars'
needs: needs:
- "trigger" - "trigger"
# Taking into account the slowest shared runner + time needed to upload the binaries to artifacts # Taking into account the slowest shared runner + time needed to upload the binaries to artifacts
@ -318,6 +329,7 @@ commitlint:
BUILD_GST_DEBUG: "true" BUILD_GST_DEBUG: "true"
GST_WERROR: "true" GST_WERROR: "true"
MESON_ARGS: "${DEFAULT_MESON_ARGS}" MESON_ARGS: "${DEFAULT_MESON_ARGS}"
SUBPROJECTS_CACHE_DIR: "/subprojects"
script: script:
- *build - *build
- ./gst-env.py gst-inspect-1.0 --version - ./gst-env.py gst-inspect-1.0 --version
@ -330,10 +342,7 @@ commitlint:
paths: paths:
- 'meson-logs/' - 'meson-logs/'
rules: rules:
# If this matches, it means the pipeline is running against either the main - !reference [.upstream-branch-rules, rules]
# or a stable branch, so make it manual
- if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH'
when: manual
- changes: - changes:
*modules_changes *modules_changes
- changes: - changes:
@ -344,12 +353,14 @@ commitlint:
- '.fedora image' - '.fedora image'
- '.fdo.suffixed-image@fedora' - '.fdo.suffixed-image@fedora'
- '.build' - '.build'
- '.build_ccache_vars'
needs: needs:
- "trigger" - "trigger"
- "fedora amd64 docker" - "fedora amd64 docker"
variables: variables:
GST_WERROR: "true" GST_WERROR: "true"
MESON_ARGS: "${SIMPLE_BUILD}" MESON_ARGS: "${SIMPLE_BUILD}"
SUBPROJECTS_CACHE_DIR: "/subprojects"
script: script:
- *build - *build
@ -444,10 +455,7 @@ build fedora clang:
-Dgst-plugins-good:soup-lookup-dep=true -Dgst-plugins-good:soup-lookup-dep=true
-Dgst-plugins-bad:d3d11-wgc=enabled -Dgst-plugins-bad:d3d11-wgc=enabled
rules: rules:
# If this matches, it means the pipeline is running against either the main - !reference [.upstream-branch-rules, rules]
# or a stable branch, so make it manual
- if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH'
when: manual
- changes: - changes:
*modules_changes *modules_changes
- changes: - changes:
@ -462,7 +470,7 @@ build fedora clang:
# Renormalize line endings # Renormalize line endings
- git add --renormalize subprojects/packagefiles - git add --renormalize subprojects/packagefiles
- $env:PYTHONUNBUFFERED = '1' - $env:PYTHONUNBUFFERED = '1'
- ci/scripts/handle-subprojects-cache.py subprojects/ - ci/scripts/handle-subprojects-cache.py --cache-dir /subprojects subprojects/
- $env:PYTHONUNBUFFERED = '' - $env:PYTHONUNBUFFERED = ''
- echo $env:MESON_ARGS - echo $env:MESON_ARGS
# We do not pick up any deps with cmake, so speed up dependency checks # We do not pick up any deps with cmake, so speed up dependency checks
@ -543,6 +551,40 @@ build msys2:
# and inherit PATH # and inherit PATH
- C:\msys64\msys2_shell.cmd -ucrt64 -defterm -no-start -here -use-full-path -lc "meson setup build $env:MESON_ARGS && meson compile -C build" - C:\msys64\msys2_shell.cmd -ucrt64 -defterm -no-start -here -use-full-path -lc "meson setup build $env:MESON_ARGS && meson compile -C build"
build macos:
extends:
- '.build'
- '.macos image'
variables:
BUILD_GST_DEBUG: "true"
# gst-libav/ffmpeg throws Wundef errors
GST_WERROR: "false"
MESON_ARGS: "${DEFAULT_MESON_ARGS}"
SUBPROJECTS_CACHE_DIR: "/Users/gst-ci/subprojects"
rules:
- !reference [.upstream-branch-rules, rules]
- changes:
*modules_changes
- changes:
- subprojects/macos-*/*
parallel:
matrix:
- BUILD_TYPE: ['both']
BUILD_GST_DEBUG: ["true"]
# FIXME: We currently don't have pkg-config required by gobject-introspection/pygobject/sharp
# macos doesn't support vaapi
MESON_ARGS: >-
${SIMPLE_BUILD}
-Dintrospection=disabled
-Dvaapi=disabled
-Dsharp=disabled
-Dpython=disabled
-Ddoc=disabled
-Dgst-plugins-base:pango=enabled
-Dgst-plugins-good:cairo=enabled
-Dgst-plugins-good:soup=enabled
-Dgst-plugins-good:soup-lookup-dep=true
# ---- Tests ----- # # ---- Tests ----- #
.test: .test:
@ -554,6 +596,7 @@ build msys2:
variables: variables:
GST_WERROR: "true" GST_WERROR: "true"
MESON_ARGS: "${SIMPLE_BUILD}" MESON_ARGS: "${SIMPLE_BUILD}"
SUBPROJECTS_CACHE_DIR: "/subprojects"
# Disable colored output to avoid weird rendering issues # Disable colored output to avoid weird rendering issues
GST_DEBUG_NO_COLOR: "true" GST_DEBUG_NO_COLOR: "true"
@ -680,6 +723,7 @@ gstreamer-full static build:
BUILD_TYPE: "static" BUILD_TYPE: "static"
MESON_ARGS: >- MESON_ARGS: >-
-Ddoc=disabled -Ddoc=disabled
SUBPROJECTS_CACHE_DIR: "/subprojects"
script: script:
- *build - *build
- meson test -C build -v test-gst-full - meson test -C build -v test-gst-full
@ -703,6 +747,7 @@ gstreamer-full-minimal static build:
-Dgst-full-typefind-functions=typefindfunctions:wav,flv -Dgst-full-typefind-functions=typefindfunctions:wav,flv
-Dgst-full-device-providers=alsa:alsadeviceprovider -Dgst-full-device-providers=alsa:alsadeviceprovider
-Dgst-full-dynamic-types=pbtypes:video_multiview_flagset -Dgst-full-dynamic-types=pbtypes:video_multiview_flagset
SUBPROJECTS_CACHE_DIR: "/subprojects"
script: script:
- *build - *build
@ -827,12 +872,13 @@ valgrind ges:
-Dgst-docs:fatal_warnings=true -Dgst-docs:fatal_warnings=true
# Disable werror for the docs build, we don't need it # Disable werror for the docs build, we don't need it
GST_WERROR: 'false' GST_WERROR: 'false'
SUBPROJECTS_CACHE_DIR: "/subprojects"
CI_ARTIFACTS_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/" CI_ARTIFACTS_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/"
script: script:
- export PATH=/usr/local/cargo/bin/:/usr/local/bin/:$PATH - export PATH=/usr/local/cargo/bin/:/usr/local/bin/:$PATH
- export RUSTUP_HOME='/usr/local/rustup' - export RUSTUP_HOME='/usr/local/rustup'
- ci/scripts/handle-subprojects-cache.py subprojects/ - ci/scripts/handle-subprojects-cache.py --cache-dir /subprojects subprojects/
- echo $MESON_ARGS - echo $MESON_ARGS
- meson build/ $MESON_ARGS - meson build/ $MESON_ARGS
- ccache --show-stats - ccache --show-stats

View file

@ -247,7 +247,7 @@ rustc --version
git clone -b ${GIT_BRANCH} ${GIT_URL} /gstreamer git clone -b ${GIT_BRANCH} ${GIT_URL} /gstreamer
git -C /gstreamer submodule update --init --depth=1 git -C /gstreamer submodule update --init --depth=1
meson subprojects download --sourcedir /gstreamer meson subprojects download --sourcedir /gstreamer
/gstreamer/ci/scripts/handle-subprojects-cache.py --build /gstreamer/subprojects/ /gstreamer/ci/scripts/handle-subprojects-cache.py --build --cache-dir /subprojects /gstreamer/subprojects/
# Run git gc to prune unwanted refs and reduce the size of the image # Run git gc to prune unwanted refs and reduce the size of the image
for i in $(find /subprojects/ -mindepth 1 -maxdepth 1 -type d); for i in $(find /subprojects/ -mindepth 1 -maxdepth 1 -type d);

View file

@ -27,5 +27,5 @@ Write-Host "Downloading subprojects"
meson subprojects download --sourcedir C:\gstreamer meson subprojects download --sourcedir C:\gstreamer
Write-Host "Caching subprojects into /subprojects/" Write-Host "Caching subprojects into /subprojects/"
python C:/gstreamer/ci/scripts/handle-subprojects-cache.py --build C:/gstreamer/subprojects python C:/gstreamer/ci/scripts/handle-subprojects-cache.py --build --cache-dir /subprojects C:/gstreamer/subprojects
Remove-Item -Recurse -Force C:\gstreamer Remove-Item -Recurse -Force C:\gstreamer

View file

@ -10,14 +10,14 @@ import sys
import argparse import argparse
import subprocess import subprocess
DEST = "/subprojects"
PARSER = argparse.ArgumentParser() PARSER = argparse.ArgumentParser()
PARSER.add_argument('subprojects_dir') PARSER.add_argument('subprojects_dir')
PARSER.add_argument('--build', action="store_true", default=False) PARSER.add_argument('--build', action="store_true", default=False)
PARSER.add_argument('--cache-dir', default="/subprojects")
def create_cache_in_image(options): def create_cache_in_image(options):
os.makedirs(DEST, exist_ok=True) os.makedirs(options.cache_dir, exist_ok=True)
print("Creating cache from %s" % options.subprojects_dir) print("Creating cache from %s" % options.subprojects_dir)
for project_name in os.listdir(options.subprojects_dir): for project_name in os.listdir(options.subprojects_dir):
project_path = os.path.join(options.subprojects_dir, project_name) project_path = os.path.join(options.subprojects_dir, project_name)
@ -25,26 +25,26 @@ def create_cache_in_image(options):
if project_name != "packagecache" and not os.path.exists(os.path.join(project_path, '.git')): if project_name != "packagecache" and not os.path.exists(os.path.join(project_path, '.git')):
continue continue
if os.path.exists(os.path.join(DEST, project_name)): if os.path.exists(os.path.join(options.cache_dir, project_name)):
continue continue
print("Copying %s" % project_name) print("Copying %s" % project_name)
shutil.copytree(project_path, os.path.join(DEST, project_name)) shutil.copytree(project_path, os.path.join(options.cache_dir, project_name))
media_path = os.path.join(options.subprojects_dir, '..', '.git', media_path = os.path.join(options.subprojects_dir, '..', '.git',
'modules', 'subprojects', 'gst-integration-testsuites', 'medias') 'modules', 'subprojects', 'gst-integration-testsuites', 'medias')
if os.path.exists(os.path.join(DEST, 'medias.git')): if os.path.exists(os.path.join(options.cache_dir, 'medias.git')):
return return
if os.path.exists(media_path): if os.path.exists(media_path):
print("Creating media cache") print("Creating media cache")
shutil.copytree(media_path, os.path.join(DEST, 'medias.git')) shutil.copytree(media_path, os.path.join(options.cache_dir, 'medias.git'))
else: else:
print("Did not find medias in %s" % media_path) print("Did not find medias in %s" % media_path)
def copy_cache(options): def copy_cache(options):
for path in [DEST, r"C:\gst-build\subprojects"]: for path in [options.cache_dir, r"C:\gst-build\subprojects"]:
if not os.path.exists(path): if not os.path.exists(path):
print("%s doesn't exist." % path) print("%s doesn't exist." % path)
continue continue