include: - project: 'freedesktop/ci-templates' ref: 'master' file: '/templates/fedora.yml' stages: - 'build docker' - 'build' # Use the resulting binaries - 'integrate' variables: # CI_GSTREAMER_* variables are overridden by gstreamer's CI when it triggers cerbero CI. CI_GSTREAMER_REF_NAME: 'main' CI_GSTREAMER_URL: 'https://gitlab.freedesktop.org/gstreamer/gstreamer.git' CI_GSTREAMER_TRIGGERED: 'false' GST_UPSTREAM_BRANCH: 'main' WINDOWS_IMAGE: 'registry.freedesktop.org/gstreamer/gstreamer/amd64/windows:2023-07-14.0-main' DEFAULT_CERBERO_ARGS: > --variants werror --timestamps MESON_COMMIT: description: "Overwrite the meson version installed on the CI images with the specified meson commit" value: "" workflow: # https://docs.gitlab.com/ee/ci/yaml/index.html#switch-between-branch-pipelines-and-merge-request-pipelines rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' variables: GIT_FETCH_EXTRA_FLAGS: '--no-tags' - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push" when: never - if: '$CI_COMMIT_TAG' - if: '$CI_COMMIT_BRANCH' variables: GIT_FETCH_EXTRA_FLAGS: '--no-tags' # # Global CI policy # # This can be used to configure global behaviour our our jobs. # default: retry: max: 2 when: - 'runner_system_failure' - 'stuck_or_timeout_failure' - 'scheduler_failure' - 'api_failure' interruptible: true .fedora image: variables: ### # IMPORTANT # These are the version tags for the docker images the CI runs against. # If you are hacking on them or need a them to rebuild, its enough # to change any part of the string of the image you want. ### FDO_DISTRIBUTION_TAG: '2023-06-08.0' FDO_DISTRIBUTION_VERSION: '37' FDO_DISTRIBUTION_PACKAGES: "sudo git-core lbzip2 rsync wine which python3-distro python3-distro-info" FDO_DISTRIBUTION_EXEC: ci/docker_setup.sh FDO_UPSTREAM_REPO: gstreamer/cerbero .android fedora image: variables: ### # IMPORTANT # These are the version tags for the docker images the CI runs against. # If you are hacking on them or need a them to rebuild, its enough # to change any part of the string of the image you want. ### FDO_DISTRIBUTION_TAG: '2023-05-31.0' FDO_DISTRIBUTION_VERSION: '37' FDO_DISTRIBUTION_PACKAGES: "file git-core java-11-openjdk-devel lbzip2 python3-distro python3-distro-info make pkg-config unzip which xz" FDO_DISTRIBUTION_EXEC: ci/docker_android_setup.sh $ANDROID_HOME $ANDROID_NDK_HOME $GST_UPSTREAM_BRANCH FDO_UPSTREAM_REPO: gstreamer/cerbero FDO_REPO_SUFFIX: android ANDROID_HOME: "/android/sdk" ANDROID_NDK_HOME: "/android/ndk" .manual trigger: rules: # If this pipeline is triggered from gstreamer, trigger the pipeline automatically - if: '$CI_PIPELINE_SOURCE == "pipeline"' # If this pipeline is triggered by a schedule, trigger the pipeline automatically - if: '$CI_PIPELINE_SOURCE == "schedule"' # If this matches, it means the pipeline is running against either the main # or a stable branch, so make it automatic cause they need to update artifacts, # like the docs site or cerbero deps - if: '$CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH' # If the MR is assigned to the Merge bot, trigger the pipeline automatically - if: '$CI_MERGE_REQUEST_ASSIGNEES == "gstreamer-merge-bot"' # When the assignee isn't the merge bot, require an explicit action to trigger the pipeline # to avoid wasting CI resources - if: '$CI_MERGE_REQUEST_ASSIGNEES != "gstreamer-merge-bot"' when: 'manual' fedora image: stage: "build docker" extends: - .manual trigger - .fedora image - .fdo.container-build@fedora variables: GIT_STRATEGY: none android fedora image: stage: "build docker" extends: - .manual trigger - .android fedora image - .fdo.container-build@fedora variables: GIT_STRATEGY: none # Rules for when to use a specific job # Used when a GStreamer MR is used using the triggered pipeline .cerbero mr rules: rules: - if: '$CI_GSTREAMER_TRIGGERED == "true" && $CI_PROJECT_NAMESPACE == "gstreamer"' # Don't interrupt gstreamer MR CI when cerbero main gets pushes interruptible: false # Used when any other usage is encountered, cerbero MR, branch push, etc .cerbero not-mr rules: rules: - if: '$CI_GSTREAMER_TRIGGERED != "true" || $CI_PROJECT_NAMESPACE != "gstreamer"' # Template for all Cerbero GStreamer builds # # Parameters: # CONFIG: The name of the configuration file to use # ARCH: The cerbero _ (used in cache key) # .cerbero: stage: "build" # Ensure that the runners it will be executed on # will have plenty of space for the cache tags: ['gstreamer'] timeout: '3h' variables: CCACHE_COMPILERCHECK: "content" CCACHE_COMPRESS: "true" CCACHE_BASEDIR: "/cache/gstreamer/cerbero/" CCACHE_DIR: "/cache/gstreamer/cerbero/ccache/" # shared across everything really CCACHE_MAXSIZE: "50G" CERBERO_HOME: "cerbero-build" CERBERO_SOURCES: "cerbero-sources" CERBERO_ARGS: "${DEFAULT_CERBERO_ARGS}" CERBERO: "./cerbero-uninstalled -c config/${CONFIG} -c localconf.cbc" CERBERO_PACKAGE_ARGS: "-t" CERBERO_RUN_SUFFIX: "" # '.exe' on cross-winXX CERBERO_BOOTSTRAP_SYSTEM: "no" HAVE_CCACHE: "yes" # used by macos packages as we only ever install to a fixed directory CERBERO_OVERRIDDEN_DIST_DIR: "" # location where the cerbero git repo is stored on the image CERBERO_HOST_DIR: "/" before_script: - echo $CI_PIPELINE_SOURCE # cmake takes forever to bootstrap from source # - test $(uname) = Darwin && pip3 install cmake==3.24.* - ./ci/cerbero_setup.sh cerbero_before_script - test $(uname) = Linux && cat /proc/self/limits cache: key: "${CI_JOB_NAME}" paths: - "${CERBERO_SOURCES}" artifacts: name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}" expire_in: '5 days' when: 'always' paths: - "*/logs" - "*/sources/*/*/_builddir/meson-logs/meson-log.txt" - "*/sources/*/*/_builddir/CMakeFiles/CMakeError.log" - "*/sources/*/*/_builddir/CMakeFiles/CMakeLog.log" - "*.tar.*" .cerbero fedora base: extends: - .fedora image - .fdo.distribution-image@fedora needs: - "fedora image" # Template for Cerbero GStreamer Deps # # This template is used by cerbero/ project to pre-built the GStreamer # dependencies. When available, the .cerbero jobs will download this artifact # in order to speed up the build. # # Parameters: # CONFIG: The name of the configuration file to use # ARCH: The cerbero _ (used in cache key) # # Produce an artifact with the dist/ and .cache along # with the associated build-tools. .cerbero deps: extends: - '.cerbero' - '.cerbero not-mr rules' script: - ./ci/cerbero_setup.sh cerbero_deps_script # Template for Cerbero GStreamer MR Pipelines # # This template is used when a cerbero pipeline is triggered by a merge request # in another project such as gstreamer running inside the GSTreamer namespace # which implies that the default cerbero branch is used. In that case, we fetch # a cache (if available) and use it instead of building from scratch. .cerbero mr: extends: - '.cerbero' - '.cerbero mr rules' script: - ./ci/cerbero_setup.sh cerbero_script # # Cerbero Linux X86_64 build # cerbero deps fedora x86_64: extends: - '.cerbero fedora base' - '.cerbero deps' variables: CONFIG: "linux.config" ARCH: "linux_x86_64" build cerbero fedora x86_64: extends: - '.cerbero fedora base' - '.cerbero mr' variables: CONFIG: "linux.config" # # Cerbero Android Universal build # .cerbero cross-android universal: variables: CONFIG: "cross-android-universal.cbc" ARCH: "android_universal" artifacts: name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}" expire_in: '5 days' when: 'always' paths: - "*/logs" - "*/sources/*/*/*/_builddir/meson-logs/meson-log.txt" - "*/sources/*/*/*/_builddir/CMakeFiles/CMakeError.log" - "*/sources/*/*/*/_builddir/CMakeFiles/CMakeLog.log" - "*[0-9].tar.*" cerbero deps cross-android universal: extends: - '.cerbero fedora base' - '.cerbero deps' - '.cerbero cross-android universal' build cerbero cross-android universal: extends: - '.cerbero fedora base' - '.cerbero mr' - '.cerbero cross-android universal' # # Cerbero Cross Windows builds # .cerbero deps cross-windows: extends: - '.cerbero fedora base' - '.cerbero deps' variables: CERBERO_RUN_SUFFIX: ".exe" CERBERO_PACKAGE_ARGS: "" artifacts: name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}" expire_in: '5 days' when: 'always' paths: - "*/logs" - "*/sources/*/*/_builddir/meson-logs/meson-log.txt" - "*/sources/*/*/_builddir/CMakeFiles/CMakeError.log" - "*/sources/*/*/_builddir/CMakeFiles/CMakeLog.log" - "*.msi" cerbero deps cross-windows x86: extends: '.cerbero deps cross-windows' variables: CONFIG: "cross-win32.cbc" ARCH: "mingw_x86" build cerbero cross win32: extends: - '.cerbero fedora base' - '.cerbero mr' variables: CONFIG: "cross-win32.cbc" CERBERO_RUN_SUFFIX: ".exe" cerbero deps cross-windows x86_64: extends: '.cerbero deps cross-windows' variables: CONFIG: "cross-win64.cbc" ARCH: "mingw_x86_64" build cerbero cross win64: extends: - '.cerbero fedora base' - '.cerbero mr' variables: CONFIG: "cross-win64.cbc" CERBERO_RUN_SUFFIX: ".exe" # # Build an Android App using the android binaries # .cross-android universal examples: # Ensure that the runners it will be executed on # will have plenty of space for the cache tags: ['gstreamer'] extends: - .android fedora image - .fdo.suffixed-image@fedora stage: 'integrate' variables: OUTPUT_DIR: ${CI_PROJECT_DIR}/outputs/ EXAMPLES_HOME: ${CI_PROJECT_DIR}/gstreamer/subprojects GSTREAMER_ROOT_ANDROID: ${CI_PROJECT_DIR}/cerbero-android-universal script: # Clone gstreamer repository to get gst-examples and gst-docs - rm -rf gstreamer - git clone $CI_GSTREAMER_URL -b $CI_GSTREAMER_REF_NAME --depth 1 gstreamer/ - mkdir -p ${OUTPUT_DIR} # extract our binaries - rm -f gstreamer-1.0-android-universal-*-runtime.tar.* - mkdir ${GSTREAMER_ROOT_ANDROID} - time tar -C ${GSTREAMER_ROOT_ANDROID} -xf gstreamer-1.0-android-universal-*.tar.* # gst-examples - player - chmod +x ${EXAMPLES_HOME}/gst-examples/playback/player/android/gradlew - ./ci/run_retry.sh ${EXAMPLES_HOME}/gst-examples/playback/player/android/gradlew --no-daemon --project-dir ${EXAMPLES_HOME}/gst-examples/playback/player/android assembleDebug - cp ${EXAMPLES_HOME}/gst-examples/playback/player/android/app/build/outputs/apk/debug/*.apk ${OUTPUT_DIR} # gst-examples - vulkan - chmod +x ${EXAMPLES_HOME}/gst-examples/vulkan/android/gradlew - ./ci/run_retry.sh ${EXAMPLES_HOME}/gst-examples/vulkan/android/gradlew --no-daemon --project-dir ${EXAMPLES_HOME}/gst-examples/vulkan/android assembleDebug - cp ${EXAMPLES_HOME}/gst-examples/vulkan/android/build/outputs/apk/debug/*.apk ${OUTPUT_DIR} # gst-docs android tutorials - chmod +x ${EXAMPLES_HOME}/gst-docs/examples/tutorials/android/gradlew - ./ci/run_retry.sh ${EXAMPLES_HOME}/gst-docs/examples/tutorials/android/gradlew --no-daemon --project-dir ${EXAMPLES_HOME}/gst-docs/examples/tutorials/android assembleDebug - cp ${EXAMPLES_HOME}/gst-docs/examples/tutorials/android/android-tutorial-*/build/outputs/apk/debug/*.apk ${OUTPUT_DIR} after_script: - rm -rf ${GSTREAMER_ROOT_ANDROID} gstreamer artifacts: name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}" expire_in: '5 days' when: 'always' paths: - "${OUTPUT_DIR}" cross-android universal examples: extends: - '.cross-android universal examples' - '.cerbero mr rules' needs: - "build cerbero cross-android universal" - "android fedora image" cerbero cross-android universal examples: extends: - '.cross-android universal examples' - '.cerbero not-mr rules' needs: - "cerbero deps cross-android universal" - "android fedora image" # # Cerbero macOS Universal build # .cerbero cross-macos universal: variables: ARCH: "darwin_universal" CONFIG: "cross-macos-universal.cbc" CERBERO_PACKAGE_ARGS: "" HAVE_CCACHE: "" CERBERO_HOST_DIR: "/Users/gst-ci/cerbero/" cache: [] artifacts: name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}" expire_in: '5 days' when: 'always' paths: - "*/logs" - "*/sources/*/*/*/_builddir/meson-logs/meson-log.txt" - "*/sources/*/*/*/_builddir/CMakeFiles/CMakeError.log" - "*/sources/*/*/*/_builddir/CMakeFiles/CMakeLog.log" - "gstreamer-1.0-1.*.pkg" - "gstreamer-1.0-devel-1.*.pkg" .cerbero macos arm64 image: image: "registry.freedesktop.org/gstreamer/cerbero/macos-arm64/14-sonoma:2023-10-25.2" tags: - gst-mac-arm cerbero deps cross-macos universal arm64-host: extends: - '.cerbero deps' - '.cerbero cross-macos universal' - '.cerbero macos arm64 image' build cerbero cross-macos universal arm64-host: extends: - '.cerbero mr' - '.cerbero cross-macos universal' - '.cerbero macos arm64 image' cerbero deps cross-macos universal x86_64-host: extends: - '.cerbero deps' - '.cerbero cross-macos universal' tags: - gst-macos-13 when: 'manual' build cerbero cross-macos universal x86_64-host: extends: - '.cerbero mr' - '.cerbero cross-macos universal' tags: - gst-macos-13 when: 'manual' # # Cerbero iOS build # .cerbero cross-ios universal: variables: ARCH: "ios_universal" CONFIG: "cross-ios-universal.cbc" CERBERO_ARGS: "${DEFAULT_CERBERO_ARGS} -v nowerror" CERBERO_PACKAGE_ARGS: "" HAVE_CCACHE: "" CERBERO_HOST_DIR: "/Users/gst-ci/cerbero/" cache: [] artifacts: name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}" expire_in: '5 days' when: 'always' paths: - "*/logs" - "*/sources/*/*/*/_builddir/meson-logs/meson-log.txt" - "*/sources/*/*/*/_builddir/CMakeFiles/CMakeError.log" - "*/sources/*/*/*/_builddir/CMakeFiles/CMakeLog.log" - "gstreamer-1.0-*-ios-universal.pkg" cerbero deps cross-ios universal arm64-host: extends: - '.cerbero deps' - '.cerbero cross-ios universal' - '.cerbero macos arm64 image' build cerbero cross-ios universal arm64-host: extends: - '.cerbero mr' - '.cerbero cross-ios universal' - '.cerbero macos arm64 image' cerbero deps cross-ios universal x86_64-host: extends: - '.cerbero deps' - '.cerbero cross-ios universal' tags: - gst-ios-16 when: 'manual' build cerbero cross-ios universal x86_64-host: extends: - '.cerbero mr' - '.cerbero cross-ios universal' tags: - gst-ios-16 when: 'manual' # # Build an iOS App using the iOS binaries # .cross-ios universal examples: stage: 'integrate' variables: EXAMPLES_HOME: gstreamer/subprojects # disable codesigning so we don't need developer identities on the CI # machines XCODE_BUILD_ARGS: >- CODE_SIGNING_REQUIRED="NO" CODE_SIGN_IDENTITY="" CODE_SIGNING_ALLOWED="NO" CODE_SIGN_ENTITLEMENTS="" script: # install the binaries - installer -pkg gstreamer-1.0-devel-*-ios-universal.pkg -target CurrentUserHomeDirectory -verbose # Clone gstreamer repository to get gst-examples and gst-docs - git clone $CI_GSTREAMER_URL -b $CI_GSTREAMER_REF_NAME --depth 1 gstreamer/ # dump some useful information - xcodebuild -version - xcodebuild -showsdks - echo ${XCODE_BUILD_ARGS} > xcode_buildargs # gst-docs ios tutorials - ./ci/run_retry.sh xcodebuild -showBuildSettings -alltargets -project ${EXAMPLES_HOME}/gst-docs/examples/tutorials/xcode\ iOS/GStreamer\ iOS\ Tutorials.xcodeproj $(cat xcode_buildargs) - ./ci/run_retry.sh xcodebuild -alltargets -destination generic/platform=iOS -project ${EXAMPLES_HOME}/gst-docs/examples/tutorials/xcode\ iOS/GStreamer\ iOS\ Tutorials.xcodeproj $(cat xcode_buildargs) # gst-examples - ./ci/run_retry.sh xcodebuild -showBuildSettings -alltargets -project ${EXAMPLES_HOME}/gst-examples/playback/player/ios/GstPlay.xcodeproj $(cat xcode_buildargs) - ./ci/run_retry.sh xcodebuild -alltargets -destination generic/platform=iOS -project ${EXAMPLES_HOME}/gst-examples/playback/player/ios/GstPlay.xcodeproj $(cat xcode_buildargs) after_script: - rm -rf gstreamer cache: [] cross-ios universal examples x86_64-host: extends: - '.cross-ios universal examples' - '.cerbero mr rules' needs: - "build cerbero cross-ios universal x86_64-host" tags: - gst-ios-16 when: 'manual' cerbero cross-ios universal examples x86_64-host: extends: - '.cross-ios universal examples' - '.cerbero not-mr rules' needs: - "cerbero deps cross-ios universal x86_64-host" tags: - gst-ios-16 when: 'manual' cross-ios universal examples arm64-host: extends: - '.cross-ios universal examples' - '.cerbero macos arm64 image' - '.cerbero mr rules' needs: - "build cerbero cross-ios universal arm64-host" cerbero cross-ios universal examples arm64-host: extends: - '.cross-ios universal examples' - '.cerbero macos arm64 image' - '.cerbero not-mr rules' needs: - "cerbero deps cross-ios universal arm64-host" # # Cerbero Native Windows builds # .cerbero windows native: image: $WINDOWS_IMAGE tags: - 'docker' - 'windows' - 'gstreamer-windows' - '2022' variables: CONFIG: 'win64.cbc' CERBERO_HOST_DIR: "C:/cerbero" CERBERO_ARGS: "${DEFAULT_CERBERO_ARGS} -v nowerror" CERBERO_RUN_SUFFIX: ".exe" CERBERO_BOOTSTRAP_SYSTEM: "no" HAVE_CCACHE: "" before_script: # Test that the powershell script works - ./cerbero-uninstalled --help - C:\msys64\msys2_shell.cmd -ucrt64 -defterm -no-start -here -use-full-path -lc "./ci/cerbero_setup.sh cerbero_before_script" cerbero deps msvc x86_64: extends: ['.cerbero deps', '.cerbero windows native'] variables: ARCH: 'msvc_x86_64' script: - C:\msys64\msys2_shell.cmd -ucrt64 -defterm -no-start -here -use-full-path -lc "./ci/cerbero_setup.sh cerbero_deps_script" rules: # This is an extended rule of .cerbero not-mr rules - if: ($CI_GSTREAMER_TRIGGERED != "true" || $CI_PROJECT_NAMESPACE != "gstreamer") && $CI_PIPELINE_SOURCE != "schedule" # Don't run automatically for scheduled pipeline - if: ($CI_GSTREAMER_TRIGGERED != "true" || $CI_PROJECT_NAMESPACE != "gstreamer") && $CI_PIPELINE_SOURCE == "schedule" when: 'manual' # workaround for gitlab bug where it otherwise blocks the pipeline for manual jobs from rules allow_failure: true cerbero deps mingw x86_64: extends: ['.cerbero deps', '.cerbero windows native'] variables: ARCH: 'mingw_x86_64' CERBERO_ARGS: "${DEFAULT_CERBERO_ARGS} -v nowerror,mingw" script: - C:\msys64\msys2_shell.cmd -ucrt64 -defterm -no-start -here -use-full-path -lc "./ci/cerbero_setup.sh cerbero_deps_script" when: 'manual' cerbero deps msvc x86_64 msi package: extends: ['.cerbero deps', '.cerbero windows native'] variables: CERBERO_PACKAGE_ARGS: "" script: - C:\msys64\msys2_shell.cmd -ucrt64 -defterm -no-start -here -use-full-path -lc "./ci/cerbero_setup.sh cerbero_deps_script" artifacts: name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}" expire_in: '5 days' when: 'always' paths: - "*/logs" - "*/sources/*/*/_builddir/meson-logs/meson-log.txt" - "*/sources/*/*/_builddir/CMakeFiles/CMakeError.log" - "*/sources/*/*/_builddir/CMakeFiles/CMakeLog.log" - "*.msi" rules: # This is an extended rule of .cerbero not-mr rules # Run automatically if it's a scheduled pipeline - if: ($CI_GSTREAMER_TRIGGERED != "true" || $CI_PROJECT_NAMESPACE != "gstreamer") && $CI_PIPELINE_SOURCE == "schedule" # Otherwise require manual trigger - if: ($CI_GSTREAMER_TRIGGERED != "true" || $CI_PROJECT_NAMESPACE != "gstreamer") && $CI_PIPELINE_SOURCE != "schedule" when: 'manual' # workaround for gitlab bug where it otherwise blocks the pipeline for manual jobs from rules allow_failure: true cerbero deps msvc x86 msi package: extends: ['cerbero deps msvc x86_64 msi package'] variables: ARCH: 'msvc_x86' CONFIG: 'win32.cbc' build cerbero msvc x86_64: extends: ['.cerbero mr', '.cerbero windows native'] script: - C:\msys64\msys2_shell.cmd -ucrt64 -defterm -no-start -here -use-full-path -lc "./ci/cerbero_setup.sh cerbero_script" build cerbero mingw x86_64: extends: ['.cerbero mr', '.cerbero windows native'] variables: ARCH: 'mingw_x86_64' CERBERO_ARGS: "${DEFAULT_CERBERO_ARGS} -v nowerror,mingw" script: - C:\msys64\msys2_shell.cmd -ucrt64 -defterm -no-start -here -use-full-path -lc "./ci/cerbero_setup.sh cerbero_script" when: 'manual' # FIXME: UWP build is disabled until build issues with latest GLib version are sorted out cerbero deps uwp universal: extends: ['cerbero deps msvc x86_64'] variables: CONFIG: 'cross-uwp-universal.cbc' ARCH: 'uwp_universal' CERBERO_ARGS: "${DEFAULT_CERBERO_ARGS} -v nowerror" script: - C:\msys64\msys2_shell.cmd -ucrt64 -defterm -no-start -here -use-full-path -lc "./ci/cerbero_setup.sh cerbero_deps_script" - C:\msys64\msys2_shell.cmd -ucrt64 -defterm -no-start -here -use-full-path -lc "CERBERO_ARGS='$CERBERO_ARGS,vscrt=mdd' && ./ci/cerbero_setup.sh cerbero_deps_script" when: 'manual' # FIXME: UWP build is disabled until build issues with latest GLib version are sorted out build cerbero uwp universal: extends: ['build cerbero msvc x86_64'] variables: CONFIG: 'cross-uwp-universal.cbc' ARCH: 'uwp_universal' CERBERO_ARGS: "${DEFAULT_CERBERO_ARGS} -v nowerror" script: - C:\msys64\msys2_shell.cmd -ucrt64 -defterm -no-start -here -use-full-path -lc "./ci/cerbero_setup.sh cerbero_script" - C:\msys64\msys2_shell.cmd -ucrt64 -defterm -no-start -here -use-full-path -lc "CERBERO_ARGS='$CERBERO_ARGS,vscrt=mdd' && ./ci/cerbero_setup.sh cerbero_script" when: 'manual'