#!/usr/bin/env bash set -e CLEAN=yes DEPLOY_MOBILEVLCKIT=no DEPLOY_TVVLCKIT=no DEPLOY_MACOSVLCKIT=no TEST_MODE=no BUILD_MOBILEVLCKIT="./compileAndBuildVLCKit.sh -vf" CREATE_DISTRIBUTION_PACKAGE="./create-distributable-package.sh" STABLE_UPLOAD_URL="https://download.videolan.org/cocoapods/unstable/" MOBILE_PODSPEC="MobileVLCKit-unstable.podspec" TV_PODSPEC="TVVLCKit-unstable.podspec" MACOS_PODSPEC="VLCKit.podspec" # Note: create-distributable-package script is building VLCKit(s) if not found. # Note: by default, VLCKit will be build if no option is passed. usage() { cat << EOF usage: $0 [options] OPTIONS -d Disable cleaning of build directory -m Deploy MobileVLCKit -t Deploy TVVLCKit -x Deploy VLCKit for macOS -l Start test for build phases EOF } while getopts "hdmtlx" OPTION do case $OPTION in h) usage exit 1 ;; d) CLEAN=no ;; m) DEPLOY_MOBILEVLCKIT=yes ;; t) DEPLOY_TVVLCKIT=yes ;; x) DEPLOY_MACOSVLCKIT=yes ;; l) TEST_MODE=yes ;; \?) usage exit 1 ;; esac done shift "$((OPTIND-1))" VERSION="" VERSION_DELIMITER="3.0.1a" ROOT_DIR="$(dirname "$(pwd)")" UPLOAD_URL="" VLC_HASH="" VLCKIT_HASH="" DISTRIBUTION_PACKAGE="" DISTRIBUTION_PACKAGE_SHA="" TARGET="" ################## # Helper methods # ################## spushd() { pushd $1 2>&1> /dev/null } spopd() { popd 2>&1> /dev/null } log() { local green='\033[1;32m' local orange='\033[1;91m' local red='\033[1;31m' local normal='\033[0m' local color=$green local msgType=$1 if [ "$1" = "Warning" ]; then color=$orange msgType="Warning" elif [ "$1" = "Error" ]; then color=$red msgType="Error" fi echo -e "[${color}${msgType}${normal}] $2" } clean() { log "Info" "Starting cleaning..." if [ -d "build" ]; then rm -rf "$ROOT_DIR/build" else log "Warning" "Build directory not found!" fi log "Info" "Build directory cleaned" } buildMobileVLCKit() { log "Info" "Starting MobileVLCKit build..." local option="$1" if [ "$DEPLOY_MOBILEVLCKIT" = "yes" ]; then option="" fi if ! $BUILD_MOBILEVLCKIT $option; then log "Error" "MobileVLCKit build failed" rm -fr "build/" exit 1 fi log "Info" "MobileVLCKit build finished!" } getVLCHashes() { VLCKIT_HASH=$(git rev-parse --short HEAD) VERSION=$(git describe --tags HEAD) VLC_HASH=`awk -F'"' '/TESTEDHASH=/ {print $2}' compileAndBuildVLCKit.sh` } renamePackage() { if [ "$1" = "-m" ]; then TARGET="MobileVLCKit" elif [ "$1" = "-t" ]; then TARGET="TVVLCKit" elif [ "$1" = "-x" ]; then TARGET="VLCKit" fi getVLCHashes local packageName="${TARGET}-REPLACEWITHVERSION.tar.xz" if [ -f $packageName ]; then DISTRIBUTION_PACKAGE="${TARGET}-${VERSION}-${VLCKIT_HASH}-${VLC_HASH}.tar.xz" mv $packageName "$DISTRIBUTION_PACKAGE" log "Info" "Finished renaming package with name: ${DISTRIBUTION_PACKAGE}" fi } packageBuild() { spushd "Packaging" if ! $CREATE_DISTRIBUTION_PACKAGE "$1"; then log "Error" "Failed to package!" exit 1 fi spopd #Packaging } getSHA() { DISTRIBUTION_PACKAGE_SHA=$(shasum -a 256 "$DISTRIBUTION_PACKAGE" | cut -d " " -f 1) log "Info" "Distribution package checksum: ${DISTRIBUTION_PACKAGE_SHA}" } bumpPodspec() { local podVersion="s.version = '${VERSION}'" local uploadURL=":http => '${UPLOAD_URL}${DISTRIBUTION_PACKAGE}'" local podSHA=":sha256 => '${DISTRIBUTION_PACKAGE_SHA}'" perl -i -pe's#s.version.*#'"${podVersion}"'#g' $1 perl -i -pe's#:http.*#'"${uploadURL},"'#g' $1 perl -i -pe's#:sha256.*#'"${podSHA}"'#g' $1 } gitCommit() { local podspec="$1" git add "$podspec" git commit -m "${podspec}: Update version to ${VERSION}" } startPodTesting() { # Testing on a side even though it ressembles podDeploy() for future tests. log "Info" "Starting local tests..." spushd "Packaging/podspecs" if bumpPodspec $CURRENT_PODSPEC && \ pod spec lint --verbose $CURRENT_PODSPEC ; then log "Info" "Testing succesfull!" else log "Error" "Testing failed." fi git checkout $CURRENT_PODSPEC spopd #Packaging/podspecs rm ${DISTRIBUTION_PACKAGE} rm -rf ${TARGET}-binary log "Warning" "All files generated during tests have been removed." } podDeploy() { log "Info" "Starting podspec operations..." spushd "Packaging/podspecs" if bumpPodspec $CURRENT_PODSPEC && \ pod spec lint --verbose $CURRENT_PODSPEC && \ pod trunk push $CURRENT_PODSPEC && \ gitCommit $CURRENT_PODSPEC; then log "Info" "Podpsec operations successfully finished!" else git checkout $CURRENT_PODSPEC log "Error" "Podspec operations failed." fi spopd #Packaging/podspecs } checkIfExistOnRemote() { if ! curl --head --silent "$1" | head -n 1 | grep -q 404; then return 0 else return 1 fi } uploadPackage() { # handle upload of distribution package. if [ "$DISTRIBUTION_PACKAGE" = "" ]; then log "Error" "Distribution package not found!" exit 1 fi while read -r -n 1 -p "The package is ready please upload it to \"${UPLOAD_URL}\", press a key to continue when uploaded [y,a,r]: " response do printf '\r' case $response in y) log "Info" "Checking for: '${UPLOAD_URL}${DISTRIBUTION_PACKAGE}'..." if checkIfExistOnRemote "${UPLOAD_URL}${DISTRIBUTION_PACKAGE}"; then log "Info" "Package found on ${UPLOAD_URL}!" break fi log "Warning" "Package not found on ${UPLOAD_URL}!" ;; a) log "Warning" "Aborting deployment process!" exit 1 ;; *) ;; esac done } setCurrentPodspec() { # Addded extra precision of target to protect against future targets if [ "$DEPLOY_MOBILEVLCKIT" = "yes" ]; then CURRENT_PODSPEC=$MOBILE_PODSPEC elif [ "$DEPLOY_TVVLCKIT" = "yes" ]; then CURRENT_PODSPEC=$TV_PODSPEC elif [ "DEPLOY_MACOSVLCKIT" = "yes" ]; then CURRENT_PODSPEC=$MACOS_PODSPEC fi } podOperations() { if [ "$TEST_MODE" = "yes" ]; then startPodTesting else podDeploy log "Info" "Removing distribution package ${DISTRIBUTION_PACKAGE} and build directory ${TARGET}-binary." rm ${DISTRIBUTION_PACKAGE} rm -rf ${TARGET}-binary fi } ################## # Command Center # ################## # Currently, mobile and tv cannot be deployed at the same time. if [ "$DEPLOY_MOBILEVLCKIT" = "yes" ] && [ "$DEPLOY_TVVLCKIT" = "yes" ]; then log "Error" "Cannot depoy MobileVLCKit and TVVLCKit at the same time!" exit 1 fi if [ "$CLEAN" = "yes" ]; then clean fi # Used to send parameter to the other scripts. options="" if [ "$DEPLOY_MOBILEVLCKIT" = "yes" ]; then options="-m" elif [ "$DEPLOY_TVVLCKIT" = "yes" ]; then options="-t" elif [ "$DEPLOY_MACOSVLCKIT" = "yes" ]; then options="-x" fi UPLOAD_URL=${STABLE_UPLOAD_URL} spushd "$ROOT_DIR" buildMobileVLCKit $options setCurrentPodspec packageBuild $options renamePackage $options getSHA # Note: Disable uploading and podoperations for now. #uploadPackage #podOperations spopd #ROOT_DIR