1#!/bin/bash
2
3set -eux
4
5
6echo "::group::Prepare repositories"
7
8os=$(cut -d: -f4 /etc/system-release-cpe)
9major_version=$(cut -d: -f5 /etc/system-release-cpe | grep -o "^[0-9]")
10case ${os} in
11  almalinux|centos)
12    case ${major_version} in
13      7)
14        DNF=yum
15        ;;
16      *)
17        DNF="dnf --enablerepo=powertools"
18        ${DNF} module -y disable postgresql
19        ;;
20    esac
21
22    ${DNF} install -y \
23           https://download.postgresql.org/pub/repos/yum/reporpms/EL-${major_version}-x86_64/pgdg-redhat-repo-latest.noarch.rpm \
24           https://packages.groonga.org/${os}/${major_version}/groonga-release-latest.noarch.rpm
25    ;;
26  fedora)
27    DNF="dnf"
28    ;;
29esac
30
31echo "::endgroup::"
32
33
34echo "::group::Install built packages"
35
36repositories_dir=/host/repositories
37${DNF} install -y \
38       ${repositories_dir}/${os}/${major_version}/x86_64/Packages/*.rpm
39
40echo "::endgroup::"
41
42
43echo "::group::Install packages for test"
44
45case ${os} in
46  almalinux|centos)
47    case ${major_version} in
48      7)
49        ${DNF} install -y centos-release-scl
50        ;;
51    esac
52    postgresql_version=$(rpm -qa | \
53                           grep pgroonga | \
54                           grep -E -o '[0-9.]+' |
55                           head -n1)
56    postgresql_package_prefix=$(rpm -qa | \
57                                  grep pgroonga | \
58                                  grep -E -o '^postgresql[0-9.]+' | \
59                                  sed -e 's/\.//g')
60    ${DNF} install -y ${postgresql_package_prefix}-devel
61    pg_config=$(echo /usr/pgsql-*/bin/pg_config)
62    groonga_token_filter_stem_package_name=groonga-token-filter-stem
63    ;;
64  *)
65    ${DNF} install -y \
66           mecab-ipadic \
67           postgresql-devel \
68           postgresql-server-devel
69    pg_config=pg_config
70    groonga_token_filter_stem_package_name=groonga-plugin-token-filters
71    ;;
72esac
73
74${DNF} install -y \
75       ${groonga_token_filter_stem_package_name} \
76       bc \
77       diffutils \
78       groonga-tokenizer-mecab \
79       ruby \
80       sudo
81
82echo "::endgroup::"
83
84
85echo "::group::Prepare test"
86
87data_dir=/tmp/data
88sudo -u postgres -H \
89     $(${pg_config} --bindir)/initdb \
90     --encoding=UTF-8 \
91     --locale=C \
92     --pgdata=${data_dir} \
93     --username=root
94sudo -u postgres -H \
95     $(${pg_config} --bindir)/pg_ctl start \
96     --pgdata=${data_dir}
97
98cp -a \
99   /host/sql \
100   /host/expected \
101   /tmp/
102cd /tmp
103case "${os}" in
104  almalinux|centos)
105    if [ "$(echo "${postgresql_version} < 13" | bc)" = 1 ]; then
106      rm sql/full-text-search/text/single/declarative-partitioning.sql
107    fi
108    ;;
109  fedora)
110    # Require Groonga 10.1.0 or later.
111    rm sql/function/highlight-html/one-keyword.sql
112    rm sql/function/match-positions-byte/one-keyword.sql
113    rm sql/function/match-positions-character/one-keyword.sql
114    ;;
115esac
116ruby /host/test/prepare.rb > schedule
117PG_REGRESS_DIFF_OPTS="-u"
118if diff --help | grep -q color; then
119  PG_REGRESS_DIFF_OPTS="${PG_REGRESS_DIFF_OPTS} --color=always"
120fi
121export PG_REGRESS_DIFF_OPTS
122pg_regress=$(dirname $(${pg_config} --pgxs))/../test/regress/pg_regress
123
124echo "::endgroup::"
125
126
127echo "::group::Run test"
128
129set +e
130${pg_regress} \
131  --launcher=/host/test/short-pgappname \
132  --load-extension=pgroonga \
133  --schedule=schedule
134pg_regress_status=$?
135set -e
136
137echo "::endgroup::"
138
139
140if [ ${pg_regress_status} -ne 0 ]; then
141  echo "::group::Diff"
142  cat regression.diffs
143  echo "::endgroup::"
144  exit ${pg_regress_status}
145fi
146
147echo "::group::Postpare"
148
149sudo -u postgres -H \
150     $(${pg_config} --bindir)/pg_ctl stop \
151     --pgdata=${data_dir}
152
153echo "::endgroup::"
154