Skip to content
Snippets Groups Projects
gitlab-ci.yml 15.4 KiB
Newer Older
Marvin Scholz's avatar
Marvin Scholz committed
stages:
    - build

default:
    before_script:
        - set -x
        - export VLC_CONTRIB_SHA="$(extras/ci/get-contrib-sha.sh)"
        - export VLC_PREBUILT_CONTRIBS_URL="https://artifacts.videolan.org/vlc/${CI_JOB_NAME##nightly-}/vlc-contrib-${TRIPLET}-${VLC_CONTRIB_SHA}.tar.bz2"
        - if ! extras/ci/check-url.sh "$VLC_PREBUILT_CONTRIBS_URL"; then unset VLC_PREBUILT_CONTRIBS_URL; fi
    after_script:
        - export VLC_CONTRIB_SHA="$(extras/ci/get-contrib-sha.sh)"
        - mv contrib/vlc-contrib-*.tar.bz2 contrib/vlc-contrib-${TRIPLET}-${VLC_CONTRIB_SHA}.tar.bz2 2>/dev/null || true
        - cd contrib && find . -maxdepth 1 -type f -name "vlc-contrib-*-${VLC_CONTRIB_SHA}.tar.bz2" -exec sh -c 'tar tf "$0" > /dev/null && shasum -a 512 "$0" | tee SHA512SUM' "{}" \;
    interruptible: true
    # Most jobs use docker, so we can default to those tags.
    # macOS base template will overwrite this
    tags:
        - docker
        - amd64
Marvin Scholz's avatar
Marvin Scholz committed

variables:
Niklas Haas's avatar
Niklas Haas committed
    VLC_WIN32_IMAGE: registry.videolan.org/vlc-debian-win32:20220505170026
    VLC_WIN64_IMAGE: registry.videolan.org/vlc-debian-win64:20220505172436
    VLC_WIN_LLVM_IMAGE: registry.videolan.org/vlc-debian-llvm-mingw:20220705072259
    VLC_UWP_LLVM_IMAGE: registry.videolan.org/vlc-debian-llvm-uwp:20220713124227
Liz de Sartiges's avatar
Liz de Sartiges committed
    VLC_DEBIAN_IMAGE: registry.videolan.org/vlc-debian-unstable:20220720135244
    VLC_ANDROID_IMAGE: registry.videolan.org/vlc-debian-android:20220728132611
    VLC_SNAP_IMAGE: registry.videolan.org/vlc-ubuntu-focal:20220810081944
Niklas Haas's avatar
Niklas Haas committed
    VLC_RASPBIAN_IMAGE: registry.videolan.org/vlc-ubuntu-raspberry:20220505175523
    VLC_WASM_EMSCRIPTEN: registry.videolan.org/vlc-debian-wasm-emscripten:20210915101305
Marvin Scholz's avatar
Marvin Scholz committed

.variables-debian: &variables-debian
        HOST_ARCH: x86_64
        TRIPLET: $HOST_ARCH-linux-gnu

Konstantin Pavlov's avatar
Konstantin Pavlov committed
.variables-snap: &variables-snap
        HOST_ARCH: x86_64
        TRIPLET: $HOST_ARCH-linux-gnu

.variables-raspbian-arm: &variables-raspbian-arm
        HOST_ARCH: arm
        TRIPLET: $HOST_ARCH-linux-gnueabihf

Marvin Scholz's avatar
Marvin Scholz committed
.variables-win32: &variables-win32
        SHORTARCH: win32
Marvin Scholz's avatar
Marvin Scholz committed
        HOST_ARCH: i686
        TRIPLET: $HOST_ARCH-w64-mingw32

.variables-win64: &variables-win64
        SHORTARCH: win64
Marvin Scholz's avatar
Marvin Scholz committed
        HOST_ARCH: x86_64
        TRIPLET: $HOST_ARCH-w64-mingw32

.variables-win64-arm: &variables-win64-arm
Martin Finkel's avatar
Martin Finkel committed
        SHORTARCH: arm64
        HOST_ARCH: aarch64
        TRIPLET: $HOST_ARCH-w64-mingw32

.variables-macos-x86_64: &variables-macos-x86_64
Marvin Scholz's avatar
Marvin Scholz committed
        VLC_PATH: /Users/videolanci/sandbox/bin
        VLC_FORCE_KERNELVERSION: 19
        SHORTARCH: intel64
Marvin Scholz's avatar
Marvin Scholz committed
        HOST_ARCH: x86_64
        TRIPLET: $HOST_ARCH-apple-darwin$VLC_FORCE_KERNELVERSION

.variables-macos-arm64: &variables-macos-arm64
        VLC_PATH: /Users/videolanci/sandbox/bin
        VLC_FORCE_KERNELVERSION: 19
        SHORTARCH: arm64
        HOST_ARCH: aarch64
        TRIPLET: $HOST_ARCH-apple-darwin$VLC_FORCE_KERNELVERSION

.variables-ios-arm64: &variables-ios-arm64
Marvin Scholz's avatar
Marvin Scholz committed
        VLC_PATH: /Users/videolanci/sandbox/bin
        HOST_ARCH: arm64
Marvin Scholz's avatar
Marvin Scholz committed
        TRIPLET: $HOST_ARCH-apple-iphoneos
        SDKNAME: iphoneos
Marvin Scholz's avatar
Marvin Scholz committed

.variables-ios-armv7: &variables-ios-armv7
        VLC_PATH: /Users/videolanci/sandbox/bin
        HOST_ARCH: armv7
        TRIPLET: $HOST_ARCH-apple-iphoneos
        SDKNAME: iphoneos
.variables-ios-simulator-x86_64: &variables-ios-simulator-x86_64
        VLC_PATH: /Users/videolanci/sandbox/bin
        HOST_ARCH: x86_64
        TRIPLET: $HOST_ARCH-apple-iphonesimulator
        SDKNAME: iphonesimulator

.variables-tvos-arm64: &variables-tvos-arm64
        VLC_PATH: /Users/videolanci/sandbox/bin
        HOST_ARCH: arm64
        TRIPLET: $HOST_ARCH-apple-appletvos
        SDKNAME: appletvos

Marvin Scholz's avatar
Marvin Scholz committed
.variables-android-arm: &variables-android-arm
        ANDROID_ARCH: arm
        TRIPLET: arm-linux-androideabi

.variables-android-arm64: &variables-android-arm64
        ANDROID_ARCH: arm64
        TRIPLET: aarch64-linux-android

.variables-android-x86: &variables-android-x86
        ANDROID_ARCH: x86
        TRIPLET: i686-linux-android

.variables-android-x86_64: &variables-android-x86_64
        ANDROID_ARCH: x86_64
        TRIPLET: x86_64-linux-android

.variables-emscripten-wasm32: &variables-emscripten-wasm32
        HOST_ARCH: wasm32
        TRIPLET: $HOST_ARCH-unknown-emscripten

# Common rules
.base-template:
Marvin Scholz's avatar
Marvin Scholz committed
    stage: build
        - if: $CI_MERGE_REQUEST_IID
        - if: '$CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_PATH == "videolan/vlc"'
    artifacts:
        paths:
            - contrib/vlc-contrib-${TRIPLET}-*.tar.bz2
            - contrib/SHA512SUM
Marvin Scholz's avatar
Marvin Scholz committed
#
    extends: .base-template
Marvin Scholz's avatar
Marvin Scholz committed
    script: |
        if [ "${CI_JOB_NAME:0:8}" = "nightly-" ]; then
            NIGHTLY_EXTRA_BUILD_FLAGS="-i n -l"
        fi
        if [ -n "$VLC_PREBUILT_CONTRIBS_URL" ]; then
            echo "Building using prebuilt contribs at $VLC_PREBUILT_CONTRIBS_URL"
            extras/package/win32/build.sh -p -a $HOST_ARCH $NIGHTLY_EXTRA_BUILD_FLAGS $LIBVLC_EXTRA_BUILD_FLAGS $UWP_EXTRA_BUILD_FLAGS
            extras/package/win32/build.sh -c -a $HOST_ARCH $NIGHTLY_EXTRA_BUILD_FLAGS $LIBVLC_EXTRA_BUILD_FLAGS $UWP_EXTRA_BUILD_FLAGS
        if [ "${CI_JOB_NAME}" = "win64" ]; then
          cmake -DLIBVLC_SDK_INC:STRING=${CI_PROJECT_DIR}/include -DLIBVLC_SDK_LIB:STRING=${CI_PROJECT_DIR}/${SHORTARCH}/lib/.libs -H${CI_PROJECT_DIR}/doc/libvlc -B${CI_PROJECT_DIR}/doc/libvlc/build \
                -G Ninja -DCMAKE_C_COMPILER=${TRIPLET}-gcc -DCMAKE_CXX_COMPILER=${TRIPLET}-g++ -DCMAKE_SYSTEM_NAME=Windows
          cmake --build ${CI_PROJECT_DIR}/doc/libvlc/build
        fi
Marvin Scholz's avatar
Marvin Scholz committed

win32:
Marvin Scholz's avatar
Marvin Scholz committed
    image:
        name: $VLC_WIN32_IMAGE
    variables: *variables-win32

win64:
Marvin Scholz's avatar
Marvin Scholz committed
    image:
        name: $VLC_WIN64_IMAGE
    variables: *variables-win64

win64-llvm:
Marvin Scholz's avatar
Marvin Scholz committed
    image:
        name: $VLC_WIN_LLVM_IMAGE
    variables: *variables-win64
Marvin Scholz's avatar
Marvin Scholz committed

    extends: .win-common
    image:
        name: $VLC_UWP_LLVM_IMAGE
    variables:
        LIBVLC_EXTRA_BUILD_FLAGS: -z
        UWP_EXTRA_BUILD_FLAGS: -u -w -x -S 0x0A000006
Martin Finkel's avatar
Martin Finkel committed
    extends: .win-common
    image:
        name: $VLC_UWP_LLVM_IMAGE
    variables:
Martin Finkel's avatar
Martin Finkel committed
        LIBVLC_EXTRA_BUILD_FLAGS: -z
        UWP_EXTRA_BUILD_FLAGS: -u -w -x -S 0x0A000006
.nightly-win-common:
    extends: .win-common
    rules:
        - if: '$CI_PIPELINE_SOURCE == "schedule"'
    after_script:
        - mkdir nightlies
        - for ext in 7z zip; do mv ${SHORTARCH}/vlc-*-dev-*-debug.${ext} nightlies/$(basename ${SHORTARCH}/vlc-*-dev-*-debug.${ext} | sed "s/\.${ext}/-${CI_COMMIT_SHORT_SHA}\.${ext}/"); done
        - for ext in exe msi 7z zip; do mv ${SHORTARCH}/vlc-*-dev-*.${ext} nightlies/$(basename ${SHORTARCH}/vlc-*-dev-*.${ext} | sed "s/\.${ext}/-${CI_COMMIT_SHORT_SHA}\.${ext}/"); done
        - cd nightlies && find . -maxdepth 1 -type f -not -name SHA512SUM | xargs shasum -a 512 | tee SHA512SUM
    artifacts:
        paths:
            - nightlies/*

nightly-win32:
    extends: .nightly-win-common
    image:
        name: $VLC_WIN32_IMAGE
    variables: *variables-win32

nightly-win64:
    extends: .nightly-win-common
    image:
        name: $VLC_WIN64_IMAGE
    variables: *variables-win64

nightly-win64-llvm:
    extends: .nightly-win-common
    image:
        name: $VLC_WIN_LLVM_IMAGE
    variables: *variables-win64
nightly-win64-ucrt-llvm:
    extends: .nightly-win-common
    image:
        name: $VLC_UWP_LLVM_IMAGE
    variables:
        <<: *variables-win64
        TRIPLET: $HOST_ARCH-ucrt-w64-mingw32
        UWP_EXTRA_BUILD_FLAGS: -u -x -S 0x0A000006

Marvin Scholz's avatar
Marvin Scholz committed
#
Marvin Scholz's avatar
Marvin Scholz committed
#
debian:
    extends: .base-template
Marvin Scholz's avatar
Marvin Scholz committed
    image:
        name: $VLC_DEBIAN_IMAGE
    script: |
        export NCPU=$(getconf _NPROCESSORS_ONLN)

        # Build tools
        ( cd extras/tools && ./bootstrap && make -j$NCPU --output-sync=recurse )
        export PATH="$(pwd)/extras/tools/build/bin:$PATH"

        # Build contribs
Marvin Scholz's avatar
Marvin Scholz committed
        mkdir -p contrib/contrib-$TRIPLET && cd contrib/contrib-$TRIPLET
        ../bootstrap
        if [ -n "$VLC_PREBUILT_CONTRIBS_URL" ]; then
            echo "Building using prebuilt contribs at $VLC_PREBUILT_CONTRIBS_URL"
            make prebuilt PREBUILT_URL="${VLC_PREBUILT_CONTRIBS_URL}"
            make -j$NCPU --output-sync=recurse tools
            make -j$NCPU --output-sync=recurse fetch
            make -j$NCPU --output-sync=recurse
            make package
        fi
Marvin Scholz's avatar
Marvin Scholz committed
        cd ../../

Marvin Scholz's avatar
Marvin Scholz committed
        ./bootstrap
        ./configure
        make -j$NCPU
Marvin Scholz's avatar
Marvin Scholz committed
        VLC_TEST_TIMEOUT=60 sh -x ./test/make_check_wrapper.sh -j4
        if [ "${CI_JOB_NAME:0:8}" = "nightly-" ]; then
            export XZ_OPT="-T 0"
            make -j$NCPU distcheck
        else
          # Don't run distcheck but dist as it is already tested via
          # make_check_wrapper.sh
          make -j$NCPU dist
Marvin Scholz's avatar
Marvin Scholz committed
    variables: *variables-debian

nightly-debian:
    extends: debian
    rules:
        - if: '$CI_PIPELINE_SOURCE == "schedule"'
    after_script:
    artifacts:

Konstantin Pavlov's avatar
Konstantin Pavlov committed
#
# Snap builds
#
.snap-common:
    extends: .base-template
Konstantin Pavlov's avatar
Konstantin Pavlov committed
    image:
        name: $VLC_SNAP_IMAGE
    script: |
            cd extras/package/snap
            make -f package.mak snap
    after_script:
        - export VLC_CONTRIB_SHA="$(extras/ci/get-contrib-sha.sh)"
        - mv extras/package/snap/parts/vlc/build/contrib/vlc-contrib-*.tar.bz2 contrib/vlc-contrib-${TRIPLET}-${VLC_CONTRIB_SHA}.tar.bz2 2>/dev/null || true
    variables: *variables-snap

snap:
    extends: .snap-common

nightly-snap:
    extends: .snap-common
    rules:
        - if: '$CI_PIPELINE_SOURCE == "schedule"'
    after_script:
        - if [ "$CI_PROJECT_NAMESPACE" = "videolan" ]; then /bin/true; else exit 0; fi
        - mkdir nightlies
        - mv extras/package/snap/vlc_*.snap nightlies/
        - echo $SNAP_LOGIN | base64 --decode | snapcraft login --with -
        - snapcraft push nightlies/vlc_*.snap --release edge
        - snapcraft logout
        - cd nightlies && find . -maxdepth 1 -type f -not -name SHA512SUM | xargs shasum -a 512 | tee SHA512SUM
    artifacts:
        paths:
#
# Raspbian
#
raspbian-arm:
    extends: .base-template
    image:
        name: $VLC_RASPBIAN_IMAGE
    script: |
        if [ -n "$VLC_PREBUILT_CONTRIBS_URL" ]; then
            echo "Building using prebuilt contribs at $VLC_PREBUILT_CONTRIBS_URL"
            extras/package/raspberry/build.sh -p -x -a $HOST_ARCH
        else
            extras/package/raspberry/build.sh -c -x -a $HOST_ARCH
        fi
    variables: *variables-raspbian-arm

Marvin Scholz's avatar
Marvin Scholz committed
#
Marvin Scholz's avatar
Marvin Scholz committed
#
.ccache-common-apple:
  variables:
    CCACHE_BASEDIR: ${CI_PROJECT_DIR}
    CCACHE_DIR: ${CI_PROJECT_DIR}/ccache
    CCACHE_COMPILERCHECK: content
    CCACHE_CPP2: 'true'
    VLC_CCACHE_BINS_PATH: '/Users/videolanci/sandbox/bin/ccache/bin'
  before_script:
    - !reference [default, before_script]
    - |
      if [ -x "${VLC_CCACHE_BINS_PATH}/ccache" ]; then
        ${VLC_CCACHE_BINS_PATH}/ccache --zero-stats
        ${VLC_CCACHE_BINS_PATH}/ccache --show-stats
      else
        echo "No ccache present, disabling caching"
        unset VLC_CCACHE_BINS_PATH
      fi
  after_script:
    - !reference [default, after_script]
    - |
      if [ -x "${VLC_CCACHE_BINS_PATH}/ccache" ]; then
        ${VLC_CCACHE_BINS_PATH}/ccache --show-stats
      fi
  cache:
    key: ${CI_JOB_NAME}
    paths:
      - ccache

.macos-common:
    extends:
        - .base-template
        - .ccache-common-apple
Marvin Scholz's avatar
Marvin Scholz committed
    script: |
        if [ "${CI_JOB_NAME:0:8}" = "nightly-" ]; then
            NIGHTLY_EXTRA_BUILD_FLAGS="-i n"
        else
            EXTRA_BUILD_FLAGS="-i z"
        if [ -n "$VLC_PREBUILT_CONTRIBS_URL" ]; then
            echo "Building using prebuilt contribs at $VLC_PREBUILT_CONTRIBS_URL"
        else
            EXTRA_BUILD_FLAGS="${EXTRA_BUILD_FLAGS} -c -p"
        export PATH="${VLC_PATH}:$PATH"
Marvin Scholz's avatar
Marvin Scholz committed
        mkdir build && cd build
        ../extras/package/macosx/build.sh $EXTRA_BUILD_FLAGS $NIGHTLY_EXTRA_BUILD_FLAGS -a $HOST_ARCH

macos-x86_64:
    extends: .macos-common
    variables: *variables-macos-x86_64

macos-arm64:
    extends: .macos-common
    variables: *variables-macos-arm64
Marvin Scholz's avatar
Marvin Scholz committed

.nightly-macos-common:
    extends: .macos-common
    rules:
        - if: '$CI_PIPELINE_SOURCE == "schedule"'
    after_script:
        - mkdir nightlies
        - mv build/vlc-*.dmg nightlies/$(basename build/vlc-*.dmg | sed "s/\.dmg/-${SHORTARCH}-${CI_COMMIT_SHORT_SHA}\.dmg/")
        - mv build/vlc-*.tar.gz nightlies/$(basename build/vlc-*.tar.gz | sed "s/\.tar\.gz/-${SHORTARCH}-${CI_COMMIT_SHORT_SHA}\.tar\.gz/")
        - cd nightlies && find . -maxdepth 1 -type f -not -name SHA512SUM | xargs shasum -a 512 | tee SHA512SUM
    artifacts:
        paths:
            - nightlies/*

nightly-macos-x86_64:
    extends: .nightly-macos-common
    variables: *variables-macos-x86_64

nightly-macos-arm64:
    extends: .nightly-macos-common
    variables: *variables-macos-arm64

Marvin Scholz's avatar
Marvin Scholz committed
#
Marvin Scholz's avatar
Marvin Scholz committed
#
.apple-os-common:
    extends: .base-template
    tags:
Marvin Scholz's avatar
Marvin Scholz committed
    script: |
        export PATH="${VLC_PATH}:$PATH"
Marvin Scholz's avatar
Marvin Scholz committed
        mkdir build && cd build
        if [ -n "$VLC_PREBUILT_CONTRIBS_URL" ]; then
            ../extras/package/apple/build.sh --sdk=$SDKNAME --arch=$HOST_ARCH \
                --with-prebuilt-contribs
        else
            ../extras/package/apple/build.sh --sdk=$SDKNAME --arch=$HOST_ARCH --package-contribs
    extends: .apple-os-common
    variables: *variables-ios-arm64
Marvin Scholz's avatar
Marvin Scholz committed

ios-armv7:
    extends: .apple-os-common
    variables: *variables-ios-armv7

ios-simulator-x86_64:
    extends: .apple-os-common
    variables: *variables-ios-simulator-x86_64

tvos-arm64:
    extends: .apple-os-common
    variables: *variables-tvos-arm64

Marvin Scholz's avatar
Marvin Scholz committed
#
Marvin Scholz's avatar
Marvin Scholz committed
#
    extends: .base-template
Marvin Scholz's avatar
Marvin Scholz committed
    image:
        name: $VLC_ANDROID_IMAGE
    script: |
        git clone https://code.videolan.org/videolan/libvlcjni.git
        (cd libvlcjni && git checkout 005bcdb4be46509fe9d8428d4ff5bcdc7d8a8d99)
        if [ -n "$VLC_PREBUILT_CONTRIBS_URL" ]; then
Thomas Guillem's avatar
Thomas Guillem committed
            /bin/sh ./libvlcjni/buildsystem/compile-libvlc.sh -a $ANDROID_ARCH --with-prebuilt-contribs
            /bin/sh ./libvlcjni/buildsystem/compile-libvlc.sh -a $ANDROID_ARCH --package-contribs
Marvin Scholz's avatar
Marvin Scholz committed

android-arm:
    extends: .android-common
Marvin Scholz's avatar
Marvin Scholz committed
    variables: *variables-android-arm

android-arm64:
    extends: .android-common
Marvin Scholz's avatar
Marvin Scholz committed
    variables: *variables-android-arm64

android-x86:
    extends: .android-common
Marvin Scholz's avatar
Marvin Scholz committed
    variables: *variables-android-x86

android-x86_64:
    extends: .android-common
Marvin Scholz's avatar
Marvin Scholz committed
    variables: *variables-android-x86_64

#
# Webassembly
#

wasm32-emscripten-build :
    extends: .base-template
    variables: *variables-emscripten-wasm32
    image:
        name: $VLC_WASM_EMSCRIPTEN
    script:
        - source $EMSCRIPTEN_SDK/emsdk_env.sh
        - |
            if [ -n "$VLC_PREBUILT_CONTRIBS_URL" ]; then
                ./extras/package/wasm-emscripten/build.sh --with-prebuilt-contribs
            else
                ./extras/package/wasm-emscripten/build.sh --gen-contrib-archive
            fi

Marvin Scholz's avatar
Marvin Scholz committed
#
# VLC Documentation
#
pages:
    extends: .base-template
Marvin Scholz's avatar
Marvin Scholz committed
    image:
        name: $VLC_DEBIAN_IMAGE
    script:
        - ./bootstrap
        - ./configure
        - make doc
        - mv doc/doxygen/html public
    artifacts:
        paths:
            - public
    rules:
        - if: '$CI_PIPELINE_SOURCE == "schedule"'