1dist: bionic 2 3os: 4 - linux 5 6compiler: 7 - gcc 8 9language: c 10 11env: 12 global: 13 DATETIME=$(date +%Y%m%d-%H%M%S) 14 DATE=${DATETIME%%-*} 15 TIME=${DATETIME##*-} 16 17jobs: 18 include: 19 - os: linux 20 env: 21 OS=linux 22 ARCH=amd64 23 EXTENSION= 24 - os: linux 25 env: 26 OS=linux 27 ARCH=i686 28 EXTENSION= 29 - os: linux 30 env: 31 OS=linux 32 ARCH=armhf 33 EXTENSION= 34 - os: linux 35 env: 36 OS=linux 37 ARCH=aarch64 38 EXTENSION= 39 - os: linux 40 env: 41 OS=windows 42 ARCH=x64 43 EXTENSION=.exe 44 addons: 45 apt: 46 packages: 47 - mingw-w64 48 - os: linux 49 env: 50 OS=windows 51 ARCH=x86 52 EXTENSION=.exe 53 addons: 54 apt: 55 packages: 56 - mingw-w64 57 58addons: 59 apt: 60 update: true 61 packages: 62 build-essential 63 python-virtualenv 64 python3-dev 65 python3-pip 66 ninja-build 67 cmake 68 gcc-multilib 69 70before_install: 71 # install cross compiler tools if we are going to compile binares for arm (notice it will remove gcc-multilib and creates a dependency issue if we try to install those packages with the others) 72 - if [ -z "${ARCH##armhf}" ]; then sudo apt-get -y install gcc-arm-linux-gnueabihf libc6-dev-armhf-armel-cross ;fi 73 - if [ -z "${ARCH##aarch64}" ]; then sudo apt-get -y install gcc-aarch64-linux-gnu libc6-dev-arm64-cross ;fi 74 # activate virtualenv with python3, meson requires python3 75 - virtualenv .venv --python=python3 76 - . .venv/bin/activate 77 - pip3 install --upgrade pip 78 # install python packages like meson, ninja etc... 79 - pip3 install -r requirements.txt 80 81before_script: 82 # add current commit ref to include files for debugging ease 83 - sed -i "s/#define GIT_COMMIT.*$/$(git log -n 1 --format=format:"#define GIT_COMMIT \"%h\"" HEAD)/" src/version.h 84 85script: 86 # build binary 87 - meson build --buildtype=release --cross-file tools/cross-compilation/${OS}-${ARCH}.txt 88 - ninja -v -C build 89 90after_success: 91 - export BINARY=mvdsv${EXTENSION} 92 - export CHECKSUM=mvdsv.md5 93 # print basic info about compiled files 94 - file build/${BINARY} 95 # create hash for download verification 96 - md5sum build/${BINARY} > build/${CHECKSUM} 97 # update snapshots links 98 - if [ -z "${TRAVIS_TAG}" ]; then mkdir -p upload/snapshots/${OS}/${ARCH} ;fi 99 - if [ -z "${TRAVIS_TAG}" ]; then mkdir -p upload/snapshots/latest/${OS}/${ARCH} ;fi 100 - if [ -z "${TRAVIS_TAG}" ]; then cp build/${BINARY} upload/snapshots/${OS}/${ARCH}/${DATETIME}_${TRAVIS_COMMIT:0:7}_${BINARY} ;fi 101 - if [ -z "${TRAVIS_TAG}" ]; then cp build/${CHECKSUM} upload/snapshots/${OS}/${ARCH}/${DATETIME}_${TRAVIS_COMMIT:0:7}_${CHECKSUM} ;fi 102 - if [ -z "${TRAVIS_TAG}" ]; then cp build/${BINARY} upload/snapshots/latest/${OS}/${ARCH}/${BINARY} ;fi 103 - if [ -z "${TRAVIS_TAG}" ]; then cp build/${CHECKSUM} upload/snapshots/latest/${OS}/${ARCH}/${CHECKSUM} ;fi 104 # update releases links 105 - if [ -n "${TRAVIS_TAG}" ]; then mkdir -p upload/releases/{latest,${TRAVIS_TAG}}/${OS}/${ARCH} ;fi 106 - if [ -n "${TRAVIS_TAG}" ]; then cp build/${BINARY} upload/releases/${TRAVIS_TAG}/${OS}/${ARCH}/${BINARY} ;fi 107 - if [ -n "${TRAVIS_TAG}" ]; then cp build/${CHECKSUM} upload/releases/${TRAVIS_TAG}/${OS}/${ARCH}/${CHECKSUM} ;fi 108 - if [ -n "${TRAVIS_TAG}" ]; then cp build/${BINARY} upload/releases/latest/${OS}/${ARCH}/${BINARY} ;fi 109 - if [ -n "${TRAVIS_TAG}" ]; then cp build/${CHECKSUM} upload/releases/latest/${OS}/${ARCH}/${CHECKSUM} ;fi 110 # add SFTP authentication key to the build environment 111 - openssl aes-256-cbc -K $encrypted_1e5406d6c11a_key -iv $encrypted_1e5406d6c11a_iv -in mvdsv_builds.key.enc -out mvdsv_builds.key -d 112 # set correct permissions on private key 113 - chmod 600 mvdsv_builds.key 114 # push built items to SFTP storage 115 - sftp -q -i mvdsv_builds.key -rp -o 'StrictHostKeyChecking no' -o 'UserKnownHostsFile /dev/null' -P ${SFTP_PORT} ${SFTP_USERNAME}@${SFTP_HOST}:/ <<< $'put -rp upload/*' 116