on v0.10.0 help sign in
bat/ci/before_deploy.bash
136 lines 3.8 kB history raw
1#!/usr/bin/env bash
2# Building and packaging for release
4set -ex
6build() {
7 cargo build --target "$TARGET" --release --verbose
8}
10pack() {
11 local tempdir
12 local out_dir
13 local package_name
14 local gcc_prefix
16 tempdir=$(mktemp -d 2>/dev/null || mktemp -d -t tmp)
17 out_dir=$(pwd)
18 package_name="$PROJECT_NAME-$TRAVIS_TAG-$TARGET"
20 if [[ $TARGET == "arm-unknown-linux-gnueabihf" ]]; then
21 gcc_prefix="arm-linux-gnueabihf-"
22 elif [[ $TARGET == "aarch64-unknown-linux-gnu" ]]; then
23 gcc_prefix="aarch64-linux-gnu-"
24 else
25 gcc_prefix=""
26 fi
28 # create a "staging" directory
29 mkdir "$tempdir/$package_name"
30 mkdir "$tempdir/$package_name/autocomplete"
32 # copying the main binary
33 cp "target/$TARGET/release/$PROJECT_NAME" "$tempdir/$package_name/"
34 "${gcc_prefix}"strip "$tempdir/$package_name/$PROJECT_NAME"
36 # manpage, readme and license
37 cp "doc/$PROJECT_NAME.1" "$tempdir/$package_name"
38 cp README.md "$tempdir/$package_name"
39 cp LICENSE-MIT "$tempdir/$package_name"
40 cp LICENSE-APACHE "$tempdir/$package_name"
42 # various autocomplete
43 # TODO: disabled for now, see issue #372
44 # cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/"$PROJECT_NAME".bash "$tempdir/$package_name/autocomplete/${PROJECT_NAME}.bash-completion"
45 # cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/"$PROJECT_NAME".fish "$tempdir/$package_name/autocomplete"
46 # cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/_"$PROJECT_NAME" "$tempdir/$package_name/autocomplete"
48 # archiving
49 pushd "$tempdir"
50 tar czf "$out_dir/$package_name.tar.gz" "$package_name"/*
51 popd
52 rm -r "$tempdir"
55make_deb() {
56 local tempdir
57 local architecture
58 local version
59 local dpkgname
60 local conflictname
61 local gcc_prefix
63 case $TARGET in
64 x86_64*)
65 architecture=amd64
66 gcc_prefix=""
67 ;;
68 i686*)
69 architecture=i386
70 gcc_prefix=""
71 ;;
72 aarch64*)
73 architecture=arm64
74 gcc_prefix="aarch64-linux-gnu-"
75 ;;
76 arm*hf)
77 architecture=armhf
78 gcc_prefix="arm-linux-gnueabihf-"
79 ;;
80 *)
81 echo "make_deb: skipping target '${TARGET}'" >&2
82 return 0
83 ;;
84 esac
85 version=${TRAVIS_TAG#v}
86 if [[ $TARGET = *musl* ]]; then
87 dpkgname=$PROJECT_NAME-musl
88 conflictname=$PROJECT_NAME
89 else
90 dpkgname=$PROJECT_NAME
91 conflictname=$PROJECT_NAME-musl
92 fi
94 tempdir=$(mktemp -d 2>/dev/null || mktemp -d -t tmp)
96 # copy the main binary
97 install -Dm755 "target/$TARGET/release/$PROJECT_NAME" "$tempdir/usr/bin/$PROJECT_NAME"
98 "${gcc_prefix}"strip "$tempdir/usr/bin/$PROJECT_NAME"
100 # manpage
101 install -Dm644 "doc/$PROJECT_NAME.1" "$tempdir/usr/share/man/man1/$PROJECT_NAME.1"
102 gzip --best "$tempdir/usr/share/man/man1/$PROJECT_NAME.1"
104 # readme and license
105 install -Dm644 README.md "$tempdir/usr/share/doc/$PROJECT_NAME/README.md"
106 install -Dm644 LICENSE-MIT "$tempdir/usr/share/doc/$PROJECT_NAME/LICENSE-MIT"
107 install -Dm644 LICENSE-APACHE "$tempdir/usr/share/doc/$PROJECT_NAME/LICENSE-APACHE"
109 # Control file
110 mkdir "$tempdir/DEBIAN"
111 cat > "$tempdir/DEBIAN/control" <<EOF
112Package: $dpkgname
113Version: $version
114Section: utils
115Priority: optional
116Maintainer: David Peter <mail@david-peter.de>
117Architecture: $architecture
118Provides: $PROJECT_NAME
119Conflicts: $conflictname
120Description: A cat(1) clone with wings.
121 A cat(1) clone with syntax highlighting and Git integration.
122EOF
124 fakeroot dpkg-deb --build "$tempdir" "${dpkgname}_${version}_${architecture}.deb"
128main() {
129 build
130 pack
131 if [[ $TARGET = *linux* ]]; then
132 make_deb
133 fi
136main