forked from mozilla/geckodriver
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathci.sh
119 lines (103 loc) · 2.51 KB
/
ci.sh
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
set -ex
# Add provided target to current Rust toolchain if it is not already
# the default or installed.
rustup_target_add() {
if ! rustup target list | grep -E "$1 \((default|installed)\)"
then
rustup target add $1
fi
}
# Configure rustc target for cross compilation. Provided with a build
# target, this will determine which linker to use for cross compilation.
cargo_config() {
local prefix
case "$TARGET" in
aarch64-unknown-linux-gnu)
prefix=aarch64-linux-gnu
;;
arm*-unknown-linux-gnueabihf)
prefix=arm-linux-gnueabihf
;;
arm-unknown-linux-gnueabi)
prefix=arm-linux-gnueabi
;;
mipsel-unknown-linux-musl)
prefix=mipsel-openwrt-linux
;;
x86_64-pc-windows-gnu)
prefix=x86_64-w64-mingw32
;;
*)
return
;;
esac
mkdir -p ~/.cargo
cat >>~/.cargo/config <<EOF
[target.$TARGET]
linker = "$prefix-gcc"
EOF
}
# Build current crate for given target and print file type information.
# If the second argument is set, a release build will be made.
cargo_build() {
local mode
if [ -z "$2" ]
then
mode=debug
else
mode=release
fi
local modeflag
if [ "$mode" == "release" ]
then
modeflag=--release
fi
cargo build --target $1 $modeflag
file $(get_binary $1 $mode)
}
# Run current crate's tests if the current system supports it.
cargo_test() {
if echo "$1" | grep -E "(i686|x86_64)-unknown-linux-(gnu|musl)|darwin"
then
cargo test --target $1
fi
}
# Returns relative path to binary
# based on build target and type ("release"/"debug").
get_binary() {
local ext
if [[ "$1" =~ "windows" ]]
then
ext=".exe"
fi
echo "target/$1/$2/geckodriver$ext"
}
# Create a compressed archive of the binary
# for the given given git tag, build target, and build type.
package_binary() {
local bin
bin=$(get_binary $2 $4)
cp $bin .
if [[ "$2" =~ "windows" ]]
then
zip geckodriver-$1-$3.zip geckodriver.exe
file geckodriver-$1-$3.zip
else
tar zcvf geckodriver-$1-$3.tar.gz geckodriver
file geckodriver-$1-$3.tar.gz
fi
}
main() {
rustup_target_add $TARGET
cargo_config $TARGET
cargo_build $TARGET
cargo_test $TARGET
# when something is tagged,
# also create a release build and package it
if [ ! -z "$TRAVIS_TAG" ]
then
cargo_build $TARGET 1
package_binary $TRAVIS_TAG $TARGET $NAME "release"
fi
}
main