summarylogtreecommitdiffstats
path: root/.travis.yml
blob: dd6388c80abf08a7472ad6a94e4f802d439768bc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
sudo: required

branches:
  only:
  - master

cache:
  directories:
  - ~/.ccache
  - ~/.pkg-cache
  - AUR-repo
  - LuxCore.git

env:
#   force update every n days
  - update_interval=5

services:
- docker

arch:
  mount:
  - ~/.ccache:~/.ccache
  - ~/.pkg-cache:/var/cache/pacman/pkg
  repos:
  - bartus=https://github.com/bartoszek/AUR-repo/raw/master
  packages:
  - ccache
  - moreutils
  - bc
  script:
# prepare ENV:
#   1. multithreading: 
#   1.1 COMPRESSXZ=(-xz -T0), can't be passed to makepkg as bash dosn't support array in `export` statement.
#   1.2 MAKEFLAGS='-j2'
#   2. override `package-cleanup.hook` to preserve cache for travis.
  - |
     echo 'options+=(ccache)' >> PKGBUILD
     echo 'COMPRESSXZ=(xz -T 0 -c -z -)' >> PKGBUILD
     echo "MAKEFLAGS='-j2'" >> PKGBUILD
     sudo mkdir /etc/pacman.d/hooks/ && sudo ln -s /dev/null /etc/pacman.d/hooks/package-cleanup.hook
# check interval update
  - |
     update_offset=$(. PKGBUILD; sha1sum <<< "$pkgname"|sed -e "s/[a-z -]//g" -e "s/^0*//"|echo `cat`%$update_interval|bc)
     next_update=$(((365-`date +%j`+update_offset)%update_interval))
# check (opt|)depends update
  - |
     build_deps=$(. PKGBUILD; IFS=$'\n'; echo -e "${depends[*]}\n${makedepends[*]}"; )
     build_deps=$(for pkg in $build_deps; do pacman -S --print-format '%n' $pkg|tail -1; done|sort -u;)
     new_deps_ver=$(for pkg in $build_deps; do pacman -S --print-format '%n %v' $pkg|tail -1; done;)
     build_info=$(curl -sL $(. PKGBUILD; pacman -S --print $pkgname|tail -n1)|bsdtar xJOf - .BUILDINFO|grep -Po '^installed = \K.*'|rev|while IFS=$'-' read arch pkgrel pkgver pkgname; do echo $pkgrel-$pkgver $pkgname; done|rev)
     old_deps_ver=$(echo "$build_info"|grep -f <(echo "$build_deps" ))
     printf "%-50s %50s\n" "BUILDINFO dependency versions" "PACMAN dependency versions"
     dep_update=$(diff -y -W 100 --tabsize=4 <(echo "$old_deps_ver"|sort) <(echo "$new_deps_ver"|sort) >&2; echo $?;)
# check version
  - |
     makepkg -od --skipinteg
     new_pkgver=$(. PKGBUILD; [[ -v epoch ]] && echo -n $epoch:; echo $pkgver-$pkgrel)
     old_pkgver=$(. PKGBUILD; pacman -S --print-format %v $pkgname|tail -n1)
# skipp build if:
#   1. cron build
#   2. no new version
#   3. no dependency update
  - |
     [[ "$TRAVIS_EVENT_TYPE" == "cron" && "$new_pkgver" == "$old_pkgver" && $next_update != 0 && $dep_update != 0 ]] && { echo -e "Current version is up to date!\nNext force update in $next_update days!"; exit 0; }
# exit with makepkg return code
  - |
     set -o pipefail
     makepkg -s --noconfirm TRAVIS=1 MAKEFLAGS='-j2' 2>&1 |ts -s '[%.T]'
     makepkg_ret=$?
     ccache -s
     exit $makepkg_ret

script:
- "curl -s https://raw.githubusercontent.com/bartoszek/arch-travis/pacman-pkg-cache/arch-travis.sh |sed 's:mikkeloscar/arch-travis:bartoszek/arch-travis-bartus:'| bash"
- "echo 'pacman pkg cache size: ' $(du -h ~/.pkg-cache|cut -f1) in $(ls ~/.pkg-cache|wc -l) files"

deploy:
  on:
    branch: master
  skip_cleanup: true
  provider: script
  script: bash .travis_deploy.sh