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