You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

514 lines
13 KiB

cache:
paths:
- .gradle/
- gradle-8.13/
- gradle/
- gradlew
variables:
VLC_ANDROID_IMAGE_30: registry.videolan.org/vlc-debian-android-3.0:20230621085943
VLC_ANDROID_IMAGE_40: registry.videolan.org/vlc-debian-android:20250403202200
VLC_WEB_BUILD_IMAGE: registry.videolan.org/videolan-alpine-node:20230523124511
WEBSERVER_DIR: "./application/remote-access-client/remoteaccess"
default:
before_script: |
set -x
interruptible: true
image:
name: $VLC_ANDROID_IMAGE_40
tags:
- amd64
- docker
stages:
- webserver-install-dependencies
- webserver-build
- webserver-audit
- build
- package
.webserver-base:
image:
name: $VLC_WEB_BUILD_IMAGE
rules:
# Explicitely refuse to build anything that would also trigger
# a medialib build
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
- buildsystem/compile-remoteaccess.sh
- if: '$CI_PIPELINE_SOURCE == "schedule"'
- if: '$CI_COMMIT_TAG =~ /^remoteaccess-.*$/'
# This is generating the node_modules folder with the required dependencies
# If/When we want to make it fully offline:
# - the docker image should contain the node_modules files OR the node_modules should be included as a cache entry (see gradle on top of this file)
# - this job should be removed and the ones depending on it should have their rules changed
webserver-install-dependencies:
extends: .webserver-base
stage: webserver-install-dependencies
script:
- ./buildsystem/compile-remoteaccess.sh --init
- cd "$WEBSERVER_DIR"
- npm install
artifacts:
paths:
- application/remote-access-client/remoteaccess/
when: on_success
expire_in: 1h
webserver-build:
extends: .webserver-base
stage: webserver-build
needs:
- job: "webserver-install-dependencies"
script:
- cd "$WEBSERVER_DIR"
- npm run build-android
artifacts:
paths:
- application/remote-access-client/remoteaccess/
when: on_success
expire_in: 1h
webserver-vulnerabilities:
extends: .webserver-base
stage: webserver-build
needs:
- job: "webserver-install-dependencies"
script:
- cd "$WEBSERVER_DIR"
- npx audit-ci@^6 --skip-dev --config ./audit-ci.jsonc
.build-all-base:
stage: build
script:
- mkdir -p ~/.android
- if [ -n "$KEYSTORE_FILE_BASE64" ]; then base64 -d $KEYSTORE_FILE_BASE64 > ~/.android/debug.keystore; fi
- ./buildsystem/compile.sh ${EXTRA_BUILD_PARAM} -a ${ARCH} -t
# Rebuilds libvlc JNI
.build-libvlc-base:
extends: .build-all-base
rules:
# Explicitely refuse to build anything that would also trigger
# a medialib build
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
- medialibrary/**/*
- buildsystem/**/*
when: never
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
- libvlc/**/*
variables:
EXTRA_BUILD_PARAM: -l
# rebuild the medialibrary JNI component
# This implies rebuilding VLC beforehand
.build-ml-base:
extends: .build-all-base
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
- buildsystem/compile-remoteaccess.sh
needs:
- job: "webserver-build"
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
- medialibrary/**/*
- buildsystem/**/*
variables:
EXTRA_BUILD_PARAM: -ml
# vlc-android app only: don't rebuild everything but use a published artifact
continuous-app-build:
extends: .build-all-base
image:
name: $VLC_ANDROID_IMAGE_30
script:
- ./buildsystem/compile.sh --init
- ./gradlew assembleDebug
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
- buildsystem/compile-remoteaccess.sh
needs:
- job: "webserver-build"
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
continuous-app-build-v4:
extends: .build-all-base
script:
- ./buildsystem/compile.sh --init
- ./gradlew assembleDebug -PforceVlc4=true
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
- buildsystem/compile-remoteaccess.sh
needs:
- job: "webserver-build"
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
#################################
# Template config instantiation #
#################################
build-libvlc-arm64:
extends: .build-libvlc-base
image:
name: $VLC_ANDROID_IMAGE_30
variables:
ARCH: arm64
build-libvlc-armv7:
extends: .build-libvlc-base
image:
name: $VLC_ANDROID_IMAGE_30
variables:
ARCH: arm
build-libvlc-x86:
extends: .build-libvlc-base
image:
name: $VLC_ANDROID_IMAGE_30
variables:
ARCH: x86
build-libvlc-x86_64:
extends: .build-libvlc-base
image:
name: $VLC_ANDROID_IMAGE_30
variables:
ARCH: x86_64
build-ml-arm64:
extends: .build-ml-base
image:
name: $VLC_ANDROID_IMAGE_30
variables:
ARCH: arm64
build-ml-armv7:
extends: .build-ml-base
image:
name: $VLC_ANDROID_IMAGE_30
variables:
ARCH: arm
build-ml-x86:
extends: .build-ml-base
image:
name: $VLC_ANDROID_IMAGE_30
variables:
ARCH: x86
build-ml-x86_64:
extends: .build-ml-base
image:
name: $VLC_ANDROID_IMAGE_30
variables:
ARCH: x86_64
build-ml-arm64-v4:
extends: .build-ml-base
variables:
ARCH: arm64
EXTRA_BUILD_PARAM: -ml -vlc4
build-ml-armv7-v4:
extends: .build-ml-base
variables:
ARCH: arm
EXTRA_BUILD_PARAM: -ml -vlc4
build-ml-x86-v4:
extends: .build-ml-base
variables:
ARCH: x86
EXTRA_BUILD_PARAM: -ml -vlc4
build-ml-x86_64-v4:
extends: .build-ml-base
variables:
ARCH: x86_64
EXTRA_BUILD_PARAM: -ml -vlc4
# Nightly builds: build native & app code, and ship the APK as artifact
nightly-arm64:
extends: .build-all-base
image:
name: $VLC_ANDROID_IMAGE_30
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule" && $VLC4 != "true"'
needs:
- job: "webserver-build"
variables:
ARCH: arm64
artifacts:
paths:
- application/app/build/outputs/apk/dev/VLC-Android-*.apk
expire_in: 2 weeks
nightly-armv7:
extends: .build-all-base
image:
name: $VLC_ANDROID_IMAGE_30
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule" && $VLC4 != "true"'
needs:
- job: "webserver-build"
variables:
ARCH: arm
artifacts:
paths:
- application/app/build/outputs/apk/dev/VLC-Android-*.apk
expire_in: 2 weeks
nightly-x86:
extends: .build-all-base
image:
name: $VLC_ANDROID_IMAGE_30
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule" && $VLC4 != "true"'
needs:
- job: "webserver-build"
variables:
ARCH: x86
artifacts:
paths:
- application/app/build/outputs/apk/dev/VLC-Android-*.apk
expire_in: 2 weeks
nightly-x86_64:
extends: .build-all-base
image:
name: $VLC_ANDROID_IMAGE_30
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule" && $VLC4 != "true"'
needs:
- job: "webserver-build"
variables:
ARCH: x86_64
artifacts:
paths:
- application/app/build/outputs/apk/dev/VLC-Android-*.apk
expire_in: 2 weeks
# Weekly builds: build native & app code, and ship the APK as artifact for vlc4
nightly-arm64-v4:
extends: .build-all-base
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule" && $VLC4 == "true"'
needs:
- job: "webserver-build"
variables:
ARCH: arm64
EXTRA_BUILD_PARAM: -vlc4
artifacts:
paths:
- application/app/build/outputs/apk/dev/VLC-Android-*.apk
expire_in: 2 weeks
nightly-armv7-v4:
extends: .build-all-base
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule" && $VLC4 == "true"'
needs:
- job: "webserver-build"
variables:
ARCH: arm
EXTRA_BUILD_PARAM: -vlc4
artifacts:
paths:
- application/app/build/outputs/apk/dev/VLC-Android-*.apk
expire_in: 2 weeks
nightly-x86-v4:
extends: .build-all-base
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule" && $VLC4 == "true"'
needs:
- job: "webserver-build"
variables:
ARCH: x86
EXTRA_BUILD_PARAM: -vlc4
artifacts:
paths:
- application/app/build/outputs/apk/dev/VLC-Android-*.apk
expire_in: 2 weeks
nightly-x86_64-v4:
extends: .build-all-base
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule" && $VLC4 == "true"'
needs:
- job: "webserver-build"
variables:
ARCH: x86_64
EXTRA_BUILD_PARAM: -vlc4
artifacts:
paths:
- application/app/build/outputs/apk/dev/VLC-Android-*.apk
expire_in: 2 weeks
.build-libs-base:
image:
name: $VLC_ANDROID_IMAGE_30
rules:
- if: '$CI_COMMIT_TAG =~ /^libvlc-3.*$/'
stage: build
script:
- mkdir -p $M2_REPO
- ./buildsystem/compile.sh -l -a ${ARCH} -t -m2 $M2_REPO release ${EXTRA_BUILD_PARAM}
- ./buildsystem/compile.sh -ml -a ${ARCH} -t -m2 $M2_REPO release -b ${EXTRA_BUILD_PARAM}
artifacts:
expire_in: 1h
when: on_success
paths:
- $CI_PROJECT_DIR/libvlcjni/libvlc/jni/libs/*
- $CI_PROJECT_DIR/medialibrary/jni/libs/*
- $CI_PROJECT_DIR/.dbg/*
variables:
M2_REPO: "$CI_PROJECT_DIR/aars/repository"
.build-libs-base-v4:
rules:
- if: '$CI_COMMIT_TAG =~ /^libvlc-4.*$/'
stage: build
script:
- mkdir -p $M2_REPO
- ./buildsystem/compile.sh -l -a ${ARCH} -t -m2 $M2_REPO release -vlc4
- ./buildsystem/compile.sh -ml -a ${ARCH} -t -m2 $M2_REPO release -b -vlc4
artifacts:
expire_in: 1h
when: on_success
paths:
- $CI_PROJECT_DIR/libvlcjni/libvlc/jni/libs/*
- $CI_PROJECT_DIR/medialibrary/jni/libs/*
- $CI_PROJECT_DIR/.dbg/*
variables:
M2_REPO: "$CI_PROJECT_DIR/aars/repository"
build-libs-arm64:
extends: .build-libs-base
variables:
ARCH: arm64
build-libs-armv7:
extends: .build-libs-base
variables:
ARCH: arm
build-libs-x86:
extends: .build-libs-base
variables:
ARCH: x86
build-libs-x86_64:
extends: .build-libs-base
variables:
ARCH: x86_64
build-libs-arm64-v4:
extends: .build-libs-base-v4
variables:
ARCH: arm64
EXTRA_BUILD_PARAM: -vlc4
build-libs-armv7-v4:
extends: .build-libs-base-v4
variables:
ARCH: arm
EXTRA_BUILD_PARAM: -vlc4
build-libs-x86-v4:
extends: .build-libs-base-v4
variables:
ARCH: x86
EXTRA_BUILD_PARAM: -vlc4
build-libs-x86_64-v4:
extends: .build-libs-base-v4
variables:
ARCH: x86_64
EXTRA_BUILD_PARAM: -vlc4
publish_libs:
extends: .build-libs-base
stage: package
needs:
- job: "build-libs-arm64"
- job: "build-libs-armv7"
- job: "build-libs-x86"
- job: "build-libs-x86_64"
script:
- mkdir -p $M2_REPO
- git config --global --add safe.directory $CI_PROJECT_DIR/libvlcjni
- ./buildsystem/compile.sh --init -b
- GRADLE_ABI=ALL ./gradlew -Dmaven.repo.local=$M2_REPO -p libvlcjni publishToMavenLocal
- ./gradlew -Dmaven.repo.local=$M2_REPO -p medialibrary publishToMavenLocal
artifacts:
name: "${CI_COMMIT_TAG}.dbg"
paths:
- .dbg/
- $M2_REPO
expire_in: 2 weeks
publish_remote_access_lib:
extends: .build-libs-base
rules:
- if: '$CI_COMMIT_TAG =~ /^remoteaccess-.*$/'
stage: package
needs:
- job: "webserver-build"
script:
- mkdir -p $M2_REPO
- ./buildsystem/compile.sh --init -b
- GRADLE_ABI=ALL ./gradlew -Dmaven.repo.local=$M2_REPO -p application/remote-access-client publishToMavenLocal
artifacts:
name: "${CI_COMMIT_TAG}"
paths:
- $M2_REPO
expire_in: 2 weeks
publish_libs-v4:
extends: .build-libs-base-v4
stage: package
needs:
- job: "build-libs-arm64-v4"
- job: "build-libs-armv7-v4"
- job: "build-libs-x86-v4"
- job: "build-libs-x86_64-v4"
script:
- mkdir -p $M2_REPO
- git config --global --add safe.directory $CI_PROJECT_DIR/libvlcjni
- ./buildsystem/compile.sh --init -b -vlc4
- GRADLE_ABI=ALL ./gradlew -Dmaven.repo.local=$M2_REPO -PforceVlc4=true -p libvlcjni publishToMavenLocal
- ./gradlew -Dmaven.repo.local=$M2_REPO -PforceVlc4=true -p medialibrary publishToMavenLocal
artifacts:
name: "${CI_COMMIT_TAG}.dbg"
paths:
- .dbg/
- $M2_REPO
expire_in: 2 weeks
release:
stage: build
rules:
- if: '$CI_COMMIT_TAG =~ /^(\d+\.)?(\d+\.)?(\*|\d+)/'
script:
- ./buildsystem/compile.sh --init
- ./gradlew assembleRelease
- ./gradlew bundleVlcBundle
- ./gradlew bundleVlcBundleAmazon
artifacts:
name: "${CI_COMMIT_TAG}"
paths:
- application/app/build/outputs/apk/release/VLC-Android-*.apk
- application/app/build/outputs/bundle/vlcBundle/*.aab
- application/app/build/outputs/bundle/vlcBundleAmazon/*.aab
# - application/app/build/outputs/mapping/release/mapping.txt
expire_in: 2 weeks