on v0.8.0 help sign in
bat/ci/before_deploy.bash
135 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 cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/"$PROJECT_NAME".bash "$tempdir/$package_name/autocomplete/${PROJECT_NAME}.bash-completion"
44 cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/"$PROJECT_NAME".fish "$tempdir/$package_name/autocomplete"
45 cp target/"$TARGET"/release/build/"$PROJECT_NAME"-*/out/_"$PROJECT_NAME" "$tempdir/$package_name/autocomplete"
47 # archiving
48 pushd "$tempdir"
49 tar czf "$out_dir/$package_name.tar.gz" "$package_name"/*
50 popd
51 rm -r "$tempdir"
54make_deb() {
55 local tempdir
56 local architecture
57 local version
58 local dpkgname
59 local conflictname
60 local gcc_prefix
62 case $TARGET in
63 x86_64*)
64 architecture=amd64
65 gcc_prefix=""
66 ;;
67 i686*)
68 architecture=i386
69 gcc_prefix=""
70 ;;
71 aarch64*)
72 architecture=arm64
73 gcc_prefix="aarch64-linux-gnu-"
74 ;;
75 arm*hf)
76 architecture=armhf
77 gcc_prefix="arm-linux-gnueabihf-"
78 ;;
79 *)
80 echo "make_deb: skipping target '${TARGET}'" >&2
81 return 0
82 ;;
83 esac
84 version=${TRAVIS_TAG#v}
85 if [[ $TARGET = *musl* ]]; then
86 dpkgname=$PROJECT_NAME-musl
87 conflictname=$PROJECT_NAME
88 else
89 dpkgname=$PROJECT_NAME
90 conflictname=$PROJECT_NAME-musl
91 fi
93 tempdir=$(mktemp -d 2>/dev/null || mktemp -d -t tmp)
95 # copy the main binary
96 install -Dm755 "target/$TARGET/release/$PROJECT_NAME" "$tempdir/usr/bin/$PROJECT_NAME"
97 "${gcc_prefix}"strip "$tempdir/usr/bin/$PROJECT_NAME"
99 # manpage
100 install -Dm644 "doc/$PROJECT_NAME.1" "$tempdir/usr/share/man/man1/$PROJECT_NAME.1"
101 gzip --best "$tempdir/usr/share/man/man1/$PROJECT_NAME.1"
103 # readme and license
104 install -Dm644 README.md "$tempdir/usr/share/doc/$PROJECT_NAME/README.md"
105 install -Dm644 LICENSE-MIT "$tempdir/usr/share/doc/$PROJECT_NAME/LICENSE-MIT"
106 install -Dm644 LICENSE-APACHE "$tempdir/usr/share/doc/$PROJECT_NAME/LICENSE-APACHE"
108 # Control file
109 mkdir "$tempdir/DEBIAN"
110 cat > "$tempdir/DEBIAN/control" <<EOF
111Package: $dpkgname
112Version: $version
113Section: utils
114Priority: optional
115Maintainer: David Peter <mail@david-peter.de>
116Architecture: $architecture
117Provides: $PROJECT_NAME
118Conflicts: $conflictname
119Description: A cat(1) clone with wings.
120 A cat(1) clone with syntax highlighting and Git integration.
121EOF
123 fakeroot dpkg-deb --build "$tempdir" "${dpkgname}_${version}_${architecture}.deb"
127main() {
128 build
129 pack
130 if [[ $TARGET = *linux* ]]; then
131 make_deb
132 fi
135main