.gitlab-ci.yml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. cache:
  2. key: "${CI_JOB_NAME}"
  3. paths:
  4. - .ccache/
  5. variables:
  6. USE_CCACHE: "true"
  7. CCACHE_BASEDIR: "${CI_PROJECT_DIR}"
  8. CCACHE_DIR: "${CI_PROJECT_DIR}/.ccache"
  9. CCACHE_COMPILERCHECK: "content"
  10. DEBIAN_FRONTEND: 'noninteractive'
  11. stages:
  12. - build
  13. - advanced_build
  14. - test
  15. .debian_build: &debian_build
  16. script:
  17. - apt update && apt -y install --no-install-recommends eatmydata
  18. - eatmydata -- apt -y dist-upgrade
  19. - eatmydata -- apt -y install --no-install-recommends ${PACKAGES}
  20. - if [ -n "${EXPERIMENTAL_PACKAGES}" ]; then apt -y install --no-install-recommends -t experimental ${EXPERIMENTAL_PACKAGES}; fi
  21. - eatmydata -- .ci-build/build.sh
  22. debian-stable:
  23. image: debian:latest
  24. stage: build
  25. variables:
  26. SCONSOPTS: 'qt=yes xgps=yes'
  27. PACKAGES: 'build-essential ccache debhelper po-debconf
  28. python3-all-dev python3-all-dbg python-all-dev python-all-dbg xsltproc docbook-xsl docbook-xml asciidoctor libncurses-dev libusb-1.0-0-dev libdbus-1-dev libglib2.0-dev makedev libbluetooth-dev qtbase5-dev libqt5network5 lsb-release bc dpkg-dev scons chrpath dh-buildinfo pps-tools dh-systemd'
  29. <<: *debian_build
  30. debian-unstable:gcc:
  31. image: debian:unstable
  32. stage: advanced_build
  33. variables:
  34. SCONSOPTS: 'qt=yes xgps=yes'
  35. PACKAGES: 'build-essential ccache debhelper po-debconf python3-all-dev python3-all-dbg python-all-dev python-all-dbg xsltproc docbook-xsl docbook-xml asciidoctor libncurses-dev libusb-1.0-0-dev libdbus-1-dev libglib2.0-dev makedev libbluetooth-dev qtbase5-dev libqt5network5 lsb-release bc dpkg-dev scons chrpath dh-buildinfo pps-tools dh-systemd'
  36. <<: *debian_build
  37. debian-experimental:gcc:
  38. allow_failure: true
  39. image: debian:experimental
  40. stage: advanced_build
  41. variables:
  42. SCONSOPTS: 'qt=yes xgps=yes'
  43. PACKAGES: 'build-essential ccache debhelper po-debconf python3-all-dev python3-all-dbg python-all-dev python-all-dbg xsltproc docbook-xsl docbook-xml asciidoctor libncurses-dev libusb-1.0-0-dev libdbus-1-dev libglib2.0-dev makedev libbluetooth-dev qtbase5-dev libqt5network5 lsb-release bc dpkg-dev scons chrpath dh-buildinfo pps-tools dh-systemd'
  44. EXPERIMENTAL_PACKAGES: 'gcc g++'
  45. <<: *debian_build
  46. debian-unstable:clang:
  47. image: debian:unstable
  48. stage: advanced_build
  49. variables:
  50. SCONSOPTS: 'qt=yes xgps=yes'
  51. CC: 'clang'
  52. CXX: 'clang++'
  53. PACKAGES: 'clang build-essential ccache debhelper po-debconf python3-all-dev python3-all-dbg python-all-dev python-all-dbg xsltproc docbook-xsl docbook-xml asciidoctor libncurses-dev libusb-1.0-0-dev libdbus-1-dev libglib2.0-dev makedev libbluetooth-dev qtbase5-dev libqt5network5 lsb-release bc dpkg-dev scons chrpath dh-buildinfo pps-tools dh-systemd'
  54. <<: *debian_build
  55. debian-experimental:clang:
  56. allow_failure: true
  57. image: debian:experimental
  58. stage: advanced_build
  59. variables:
  60. SCONSOPTS: 'qt=yes xgps=yes'
  61. CC: 'clang'
  62. CXX: 'clang++'
  63. PACKAGES: 'build-essential ccache debhelper po-debconf python3-all-dev python3-all-dbg python-all-dev python-all-dbg xsltproc docbook-xsl docbook-xml asciidoctor libncurses-dev libusb-1.0-0-dev libdbus-1-dev libglib2.0-dev makedev libbluetooth-dev qtbase5-dev libqt5network5 lsb-release bc dpkg-dev scons chrpath dh-buildinfo pps-tools dh-systemd'
  64. EXPERIMENTAL_PACKAGES: 'clang'
  65. <<: *debian_build
  66. debian-unstable:minimal:
  67. image: debian:unstable
  68. stage: advanced_build
  69. variables:
  70. SCONSOPTS: 'aivdm=no ashtech=no bluez=no control_socket=no controlsend=no coveraging=no dbus_export=no debug=no earthmate=no evermore=no force_global=no fury=no fv18=no garmin=no garmintxt=no geostar=no gpsclock=no gpsdclients=no greis=no implicit_link=no isync=no itrax=no leapfetch=no libgpsmm=no magic_hat=no manbuild=no minimal=no mtk3301=no navcom=no ncurses=no netfeed=no nmea0183=no nmea2000=no nostrip=no ntrip=no oceanserver=no oncore=no oscillator=no passthrough=no profiling=no python=no qt=no reconfigure=no rtcm104v2=no rtcm104v3=no shared=no shm_export=no sirf=no skytraq=no slow=no socket_export=yes squelch=no superstar2=no systemd=no timeservice=no tnt=no tripmate=no tsip=no ublox=no usb=no xgps=no'
  71. NOCHECK: 'true'
  72. PACKAGES: 'build-essential ccache scons chrpath lsb-release python3-all-dev'
  73. <<: *debian_build
  74. # the latest tag should match the last Ubuntu LTS release.
  75. ubuntu-latest:gcc:
  76. image: ubuntu:latest
  77. stage: advanced_build
  78. variables:
  79. SCONSOPTS: 'qt=yes xgps=yes'
  80. PACKAGES: 'build-essential ccache debhelper po-debconf python3-all-dev python3-all-dbg python-all-dev python-all-dbg xsltproc docbook-xsl docbook-xml asciidoctor libncurses-dev libusb-1.0-0-dev libdbus-1-dev libglib2.0-dev makedev libbluetooth-dev qtbase5-dev libqt5network5 lsb-release bc dpkg-dev scons chrpath dh-buildinfo pps-tools dh-systemd'
  81. before_script:
  82. - apt update && apt -y install scons
  83. - sed -i "s/os.environ.has_key('DH_INTERNAL_OPTIONS')/'DH_INTERNAL_OPTIONS' in os.environ/" /usr/lib/scons/SCons/Script/Main.py
  84. <<: *debian_build
  85. # the "rolling" release
  86. ubuntu-rolling:gcc:
  87. image: ubuntu:rolling
  88. stage: advanced_build
  89. variables:
  90. SCONSOPTS: 'qt=yes xgps=yes'
  91. PACKAGES: 'build-essential ccache debhelper po-debconf python3-all-dev python3-all-dbg python-all-dev python-all-dbg xsltproc docbook-xsl docbook-xml asciidoctor libncurses-dev libusb-1.0-0-dev libdbus-1-dev libglib2.0-dev makedev libbluetooth-dev qtbase5-dev libqt5network5 lsb-release bc dpkg-dev scons chrpath dh-buildinfo pps-tools dh-systemd'
  92. <<: *debian_build
  93. # the devel tag should point to the docker image of the next, upcoming Ubuntu release
  94. ubuntu-devel:gcc:
  95. image: ubuntu:devel
  96. stage: advanced_build
  97. variables:
  98. SCONSOPTS: 'qt=yes xgps=yes'
  99. PACKAGES: 'build-essential ccache debhelper po-debconf python3-all-dev python3-all-dbg python-all-dev python-all-dbg xsltproc docbook-xsl docbook-xml asciidoctor libncurses-dev libusb-1.0-0-dev libdbus-1-dev libglib2.0-dev makedev libbluetooth-dev qtbase5-dev libqt5network5 lsb-release bc dpkg-dev scons chrpath dh-buildinfo pps-tools dh-systemd'
  100. <<: *debian_build
  101. fedora-latest:
  102. image: fedora:latest
  103. stage: advanced_build
  104. variables:
  105. SCONSOPTS: 'qt=yes xgps=yes'
  106. script:
  107. - dnf install -y ccache diffutils bluez-libs-devel chrpath dbus-devel desktop-file-utils gcc-c++ libXaw-devel ncurses-devel python-devel qt5-qtbase-devel scons xmlto pps-tools-devel
  108. - .ci-build/build.sh
  109. centos-7-latest:
  110. allow_failure: true
  111. interruptible: true
  112. when: on_success
  113. image: centos:centos7
  114. stage: advanced_build
  115. variables:
  116. SCONSOPTS: 'qt=yes xgps=yes'
  117. script:
  118. - yum -y update
  119. - yum -y install epel-release
  120. - yum -y install diffutils python2-scons bc gcc gcc-c++ bluez-libs-devel dbus-devel ncurses-devel python-devel pps-tools-devel qt5-qtbase-devel libusbx-devel qt-devel gtk3-devel pyserial pycairo libxslt docbook-style-xsl rubygem-asciidoctor ccache
  121. - .ci-build/build.sh
  122. centos-8-latest:
  123. allow_failure: true
  124. interruptible: true
  125. when: manual
  126. image: centos:centos8
  127. stage: advanced_build
  128. variables:
  129. SCONSOPTS: 'qt=yes xgps=yes'
  130. script:
  131. - dnf -y install dnf-plugins-core epel-release python3
  132. - dnf config-manager --set-enabled PowerTools
  133. - dnf -y update
  134. - dnf -y install diffutils python3-scons bc ncurses-devel qt5-qtbase-devel pps-tools-devel libbsd-devel libnsl2-devel bluez-libs-devel platform-python-devel dbus-devel libusbx-devel gtk3-devel python3-pyserial python3-cairo python3-gobject-base libxslt docbook-style-xsl ccache
  135. - .ci-build/build.sh
  136. # to avoid failed builds on MRs/forks where no builder with the
  137. # tag `freebsd` is available, run this job only if
  138. # $HAVE_FREEBSD == "true"
  139. # set this in your CI environment settings in gitlab.
  140. freebsd:
  141. only:
  142. variables:
  143. - $HAVE_FREEBSD == "true"
  144. stage: advanced_build
  145. variables:
  146. WRITE_PAD: '0.01250'
  147. tags:
  148. - freebsd
  149. script:
  150. - .ci-build/build.sh
  151. # to avoid failed builds on MRs/forks where no builder with the
  152. # tag `sparc64` is available, run this job only if
  153. # $HAVE_SPARC64_LINUX == "true"
  154. # set this in your CI environment settings in gitlab.
  155. sparc64-linux:
  156. only:
  157. variables:
  158. - $HAVE_SPARC64_LINUX == "true"
  159. stage: advanced_build
  160. tags:
  161. - sparc64
  162. - linux
  163. script:
  164. - .ci-build/build.sh
  165. # to avoid failed builds on MRs/forks where no builder with the
  166. # tag `mips64le` is available, run this job only if
  167. # $HAVE_MIPS64LE_LINUX == "true"
  168. # set this in your CI environment settings in gitlab.
  169. mips64le-linux:
  170. only:
  171. variables:
  172. - $HAVE_MIPS64LE_LINUX == "true"
  173. stage: advanced_build
  174. tags:
  175. - mips64le
  176. - linux
  177. script:
  178. - .ci-build/build.sh
  179. scan-build:
  180. allow_failure: true
  181. image: debian:unstable
  182. stage: test
  183. needs: ["debian-unstable:gcc"]
  184. variables:
  185. SCONSOPTS: 'qt=yes xgps=yes'
  186. SCAN_BUILD: 'scan-build -o scan_build'
  187. NOCHECK: 'true'
  188. PACKAGES: 'clang clang-tools build-essential debhelper po-debconf python3-all-dev python3-all-dbg python-all-dev python-all-dbg xsltproc docbook-xsl docbook-xml asciidoctor libncurses-dev libusb-1.0-0-dev libdbus-1-dev libglib2.0-dev makedev libbluetooth-dev qtbase5-dev libqt5network5 lsb-release bc dpkg-dev scons chrpath dh-buildinfo pps-tools dh-systemd'
  189. artifacts:
  190. paths:
  191. - scan_build
  192. expire_in: 1 week
  193. <<: *debian_build
  194. # https://www.synopsys.com/blogs/software-security/integrating-coverity-scan-with-gitlab-ci/
  195. coverity:
  196. allow_failure: true
  197. image: debian:unstable
  198. stage: test
  199. needs: ["debian-unstable:gcc"]
  200. only:
  201. refs:
  202. - master
  203. variables:
  204. - $COVERITY_SCAN_TOKEN != null
  205. variables:
  206. SCONSOPTS: 'qt=yes xgps=yes'
  207. SCAN_BUILD: 'cov-analysis-linux64-*/bin/cov-build --dir cov-int'
  208. NOCHECK: 'true'
  209. PACKAGES: 'clang clang-tools build-essential debhelper po-debconf python3-all-dev python3-all-dbg python-all-dev python-all-dbg xsltproc docbook-xsl docbook-xml asciidoctor libncurses-dev libusb-1.0-0-dev libdbus-1-dev libglib2.0-dev makedev libbluetooth-dev qtbase5-dev libqt5network5 lsb-release bc dpkg-dev scons chrpath dh-buildinfo pps-tools dh-systemd'
  210. before_script:
  211. - apt update && apt -y install curl
  212. - curl -o /tmp/cov-analysis-linux64.tgz https://scan.coverity.com/download/linux64 --form project=$COVERITY_SCAN_PROJECT_NAME --form token=$COVERITY_SCAN_TOKEN
  213. - tar xfz /tmp/cov-analysis-linux64.tgz
  214. after_script:
  215. - tar cfz cov-int.tar.gz cov-int
  216. - curl https://scan.coverity.com/builds?project=$COVERITY_SCAN_PROJECT_NAME
  217. --form token=$COVERITY_SCAN_TOKEN --form email=$COVERITY_USER_EMAIL
  218. --form file=@cov-int.tar.gz --form version="`git describe --tags`"
  219. --form description="`git describe --tags` / $CI_COMMIT_TITLE / $CI_COMMIT_REF_NAME:$CI_PIPELINE_ID "
  220. <<: *debian_build
  221. # as long as sconstruct has so many options, this does not make sense
  222. # needs a better / faster way to test
  223. #
  224. #test-options:
  225. # image: debian:unstable
  226. # stage: test
  227. # needs: ["debian-unstable:gcc"]
  228. # variables:
  229. # DEBIAN_FRONTEND: 'noninteractive'
  230. # when: manual
  231. # script:
  232. # - apt update && apt -y install build-essential debhelper po-debconf python3-all-dev python3-all-dbg python-all-dev python-all-dbg xsltproc docbook-xsl docbook-xml asciidoctor libncurses-dev libusb-1.0-0-dev libdbus-1-dev libglib2.0-dev makedev libbluetooth-dev qtbase5-dev libqt5network5 lsb-release bc dpkg-dev scons chrpath dh-buildinfo pps-tools dh-systemd
  233. # - .ci-build/test_options.sh
  234. #
  235. .changes_pages: &changes_pages
  236. changes:
  237. - 'www/*'
  238. - 'www/*/*'
  239. - '*.adoc'
  240. - 'man/*.xml'
  241. .should_build_pages: &should_build_pages
  242. only:
  243. refs:
  244. - master
  245. <<: *changes_pages
  246. pages:
  247. image: alpine:latest
  248. stage: build
  249. script:
  250. - apk update && apk add python3 xmlto asciidoctor scons rsync musl-dev gcc
  251. - mkdir .pages; WEBSITE=.public scons website=.pages website; mv .public public
  252. - find public -type f -regex '.*\.\(htm\|html\|txt\|text\|js\|css\)$' -exec gzip -f -k {} \;
  253. - ls -lR public
  254. artifacts:
  255. paths:
  256. - public
  257. <<: *should_build_pages
  258. dist-1:
  259. image: alpine
  260. stage: build
  261. script:
  262. - apk update && apk add python3-dev scons xmlto asciidoctor bzip2 xz git linux-headers build-base tar
  263. - scons dist
  264. artifacts:
  265. paths:
  266. - gpsd-*.tar.gz
  267. - packaging/rpm/gpsd.spec
  268. expire_in: 2 weeks
  269. only:
  270. - schedules
  271. - tags
  272. - web
  273. dist-1f:
  274. image: fedora:latest
  275. stage: advanced_build
  276. script:
  277. - dnf install -y gcc-c++ python3-devel scons xmlto asciidoctor bzip2 xz git dnf-plugins-core
  278. - scons dist
  279. - dnf builddep -y packaging/rpm/gpsd.spec
  280. - dnf install -y chrpath fedora-packager rpmdevtools createrepo_c
  281. - echo dnf install -y bluez-libs-devel dbus-devel desktop-file-utils gcc-c++ ncurses-devel python2-devel python3-devel python3-cairo python3-gobject qt-devel scons xmlto pps-tools-devel python3-pyserial gtk3-devel cairo
  282. - rpmdev-setuptree
  283. - cp gpsd-*.tar.gz ~/rpmbuild/SOURCES/
  284. - rpmbuild -ba packaging/rpm/gpsd.spec
  285. - mkdir -pv .pages .public/repos/Fedora/`lsb_release -sr`/gpsd/x86_64/RPMS
  286. - mv -v /root/rpmbuild/RPMS/x86_64/*.rpm .public/repos/Fedora/`lsb_release -sr`/gpsd/x86_64/RPMS
  287. - createrepo_c -v --deltas --retain-old-md 1 .public/repos/Fedora/`lsb_release -sr`/gpsd/x86_64/RPMS
  288. - ls -laR gpsd-* .public/repos/Fedora/`lsb_release -sr`/gpsd/x86_64
  289. artifacts:
  290. paths:
  291. - .repos/Fedora/`lsb_release -sr`/py3/x86_64/RPMS
  292. - gpsd-*.tar.gz
  293. - packaging/rpm/gpsd.spec
  294. expire_in: 2 weeks
  295. only:
  296. - schedules
  297. - tags
  298. - web