-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathbuild_packages
executable file
·99 lines (82 loc) · 3.34 KB
/
build_packages
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
#!/bin/bash
# make bash behave
set -euo pipefail
IFS=$'\n\t'
topdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
packagesdir=${topdir}/packages
buildfilesdir=${topdir}/buildfiles
badusage=64
if [ "$#" -lt 2 ]; then
echo "$0: project and build type required" >&2
exit $badusage
fi
project=$1
buildtype=$2
name=$(git config --get user.name)
email=$(git config --get user.email)
packager="${name} <${email}>"
mkdir -p "${packagesdir}"
for format in deb rpm pgxn; do
buildfilessubdir="${buildfilesdir}/${format}"
mkdir -p "${buildfilessubdir}"
"${topdir}/fetch_build_files" "${project}" "${format}" "${buildfilessubdir}"
done
nprocs="${3:-1}"
declare args
while read -r line; do
IFS=',' read -r os release <<< "$line"
if [ -z "${release}" ]; then
outputdir="${packagesdir}/${os}"
else
outputdir="${packagesdir}/${os}-${release}"
fi
mkdir -p "${outputdir}"
if [[ "${os}" = 'debian' ]] || [[ "${os}" = 'ubuntu' ]]; then
if [[ "${os}" = 'debian' ]] && [[ "${release}" = 'jessie' ]]; then
# Debian Jessie doesn't have pg13 packages yet
# so we dont't have package builder docker image yet.
# So skip building distro package for it.
continue
fi
args+="run --rm -v ${outputdir}:/packages -v ${buildfilesdir}/deb:/buildfiles:ro "
args+="-e GITHUB_TOKEN=${GITHUB_TOKEN} -e DEBFULLNAME='${name}' -e DEBEMAIL='${email}' "
args+="citusdata/packaging:${os}-${release}-all $buildtype\n"
elif [[ "${os}" = 'centos' ]] || [[ "${os}" = 'fedora' ]] || [[ "${os}" = 'oraclelinux' ]]; then
# shellcheck source=/dev/null
source "${buildfilesdir}/rpm/pkgvars"
releasepg="${releasepg:-11,12,13}"
nightlypg="${nightlypg:-${releasepg}}"
if [ "${buildtype}" == 'release' ]; then
pgversions="${releasepg}"
else
pgversions="${nightlypg}"
fi
# redhat variants need to build each PostgreSQL version separately
IFS=','
for pgversion in ${pgversions}; do
if { [[ "${os}" = 'centos' ]] || [[ "${os}" = 'oraclelinux' ]]; } && \
[[ "${release}" = '6' ]] && [[ "${pgversion}" = '13' ]]; then
# CentOS and OracleLinux 6 doesn't have pg13 packages yet
# so we dont't have package builder docker images yet.
# So skip building distro packages for them.
continue
fi
pgshort=${pgversion//./}
args+="run --rm -v ${outputdir}:/packages -v ${buildfilesdir}/rpm:/buildfiles:ro "
args+="-e GITHUB_TOKEN=${GITHUB_TOKEN} -e RPM_PACKAGER='${packager}' "
args+="citusdata/packaging:${os}-${release}-pg${pgshort} $buildtype\n"
done
elif [[ "${os}" = 'pgxn' ]]; then
if [[ "${project}" = 'citus' ]] && [[ "${buildtype}" = 'release' ]]; then
args+="run --rm -v ${outputdir}:/packages -v ${buildfilesdir}/pgxn:/buildfiles:ro "
args+="-e GITHUB_TOKEN=${GITHUB_TOKEN} citusdata/packaging:${os}-all $buildtype\n"
else
echo "skipping PGXN... unsupported for this build" >&2
fi
else
echo "$0: unrecognized OS -- ${os}" >&2
exit $badusage
fi
done <"${topdir}/os-list.csv"
echo -e "${args}" | xargs -t -L1 -P "${nprocs}" docker
rm -r "${buildfilesdir:?}"/*