From: Dave Miller Date: Fri, 22 Mar 2024 02:00:47 +0000 (-0400) Subject: Bug 1886352: docker config for testing PostgreSQL (#114) X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=020b024d9ff94fdcf54ab97a50cbf13eabd07afa;p=thirdparty%2Fbugzilla.git Bug 1886352: docker config for testing PostgreSQL (#114) --- diff --git a/Bugzilla/DaemonControl.pm b/Bugzilla/DaemonControl.pm index 7cf79ffb1..40a1de273 100644 --- a/Bugzilla/DaemonControl.pm +++ b/Bugzilla/DaemonControl.pm @@ -11,7 +11,7 @@ use strict; use warnings; use Bugzilla::Logging; -use Bugzilla::Constants qw(bz_locations); +use Bugzilla::Constants qw(bz_locations DB_MODULE); use Cwd qw(realpath); use English qw(-no_match_vars $PROGRAM_NAME); use File::Spec::Functions qw(catfile catdir); @@ -226,24 +226,27 @@ sub assert_database { my $loop = IO::Async::Loop->new; my $lc = Bugzilla::Install::Localconfig::read_localconfig(); - for my $var (qw(db_name db_host db_user db_pass)) { + for my $var (qw(db_driver db_name db_host db_user db_pass)) { return $loop->new_future->die("$var is not set!") unless $lc->{$var}; } + my ($db_driver) = (DB_MODULE->{$lc->{db_driver}}->{dbd}->{module} =~ m/::([^:]+)$/); - my $dsn = "dbi:mysql:database=$lc->{db_name};host=$lc->{db_host}"; + my $dsn = "dbi:$db_driver:database=$lc->{db_name};host=$lc->{db_host}"; my $repeat = try_repeat_until_success { $loop->delay_future(after => 0.25)->then(sub { my $attrs = {RaiseError => 1, PrintError => 1}; - my ($ssl_ca_file, $ssl_ca_path, $ssl_cert, $ssl_key, $ssl_pubkey) = - @$lc{qw(db_mysql_ssl_ca_file db_mysql_ssl_ca_path - db_mysql_ssl_client_cert db_mysql_ssl_client_key db_mysql_ssl_get_pubkey)}; - if ($ssl_ca_file || $ssl_ca_path || $ssl_cert || $ssl_key || $ssl_pubkey) { - $attrs->{'mysql_ssl'} = 1; - $attrs->{'mysql_ssl_ca_file'} = $ssl_ca_file if $ssl_ca_file; - $attrs->{'mysql_ssl_ca_path'} = $ssl_ca_path if $ssl_ca_path; - $attrs->{'mysql_ssl_client_cert'} = $ssl_cert if $ssl_cert; - $attrs->{'mysql_ssl_client_key'} = $ssl_key if $ssl_key; - $attrs->{'mysql_get_server_pubkey'} = $ssl_pubkey if $ssl_pubkey; + if ($lc->{db_driver} eq 'mysql') { + my ($ssl_ca_file, $ssl_ca_path, $ssl_cert, $ssl_key, $ssl_pubkey) = + @$lc{qw(db_mysql_ssl_ca_file db_mysql_ssl_ca_path + db_mysql_ssl_client_cert db_mysql_ssl_client_key db_mysql_ssl_get_pubkey)}; + if ($ssl_ca_file || $ssl_ca_path || $ssl_cert || $ssl_key || $ssl_pubkey) { + $attrs->{'mysql_ssl'} = 1; + $attrs->{'mysql_ssl_ca_file'} = $ssl_ca_file if $ssl_ca_file; + $attrs->{'mysql_ssl_ca_path'} = $ssl_ca_path if $ssl_ca_path; + $attrs->{'mysql_ssl_client_cert'} = $ssl_cert if $ssl_cert; + $attrs->{'mysql_ssl_client_key'} = $ssl_key if $ssl_key; + $attrs->{'mysql_get_server_pubkey'} = $ssl_pubkey if $ssl_pubkey; + } } my $dbh; eval { diff --git a/Dockerfile b/Dockerfile index 9a39eacc7..202ac9b62 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM bugzilla/bugzilla-perl-slim:20240316.1 +FROM bugzilla/bugzilla-perl-slim:20240320.1 ENV DEBIAN_FRONTEND noninteractive diff --git a/Dockerfile.bmo-slim b/Dockerfile.bmo-slim index b62ad7d16..980b014e7 100644 --- a/Dockerfile.bmo-slim +++ b/Dockerfile.bmo-slim @@ -23,7 +23,7 @@ RUN gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/mysql- && gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/mysql-8.0.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys B7B3B788A8D3785C \ && echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/mysql-8.0.gpg] http://repo.mysql.com/apt/debian/ bookworm mysql-8.0' > /etc/apt/sources.list.d/mysql-8.0.list RUN apt-get update \ - && apt-get install -y libmysqlclient-dev + && apt-get install -y libmysqlclient-dev libpq-dev RUN cpanm --notest --quiet App::cpm Module::CPANfile Carton::Snapshot @@ -64,6 +64,7 @@ RUN apt-get update \ graphviz \ libcap2-bin \ libmysqlclient21 \ + postgresql-client \ rsync \ $(cat /app/PACKAGES) \ && rm -rf /var/cache/apt/* /var/lib/apt/lists/* diff --git a/Dockerfile.cpanfile b/Dockerfile.cpanfile index 66a93aab0..71d4ca1ce 100644 --- a/Dockerfile.cpanfile +++ b/Dockerfile.cpanfile @@ -15,7 +15,7 @@ RUN gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/mysql- && gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/mysql-8.0.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys B7B3B788A8D3785C \ && echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/mysql-8.0.gpg] http://repo.mysql.com/apt/debian/ bookworm mysql-8.0' > /etc/apt/sources.list.d/mysql-8.0.list RUN apt-get update \ - && apt-get install -y libmysqlclient-dev + && apt-get install -y libmysqlclient-dev libpq-dev RUN cpanm --notest --quiet App::cpm Module::CPANfile Carton::Snapshot diff --git a/Makefile.PL b/Makefile.PL index 6a0ca2320..ef465954e 100755 --- a/Makefile.PL +++ b/Makefile.PL @@ -386,7 +386,7 @@ WriteMakefile( sub MY::postamble { return <<"MAKE"; -GEN_CPANFILE_ARGS = -D better_xff -D mysql -D jsonrpc -D xmlrpc -D documentation +GEN_CPANFILE_ARGS = -D better_xff -D mysql -D jsonrpc -D xmlrpc -D documentation -D pg cpanfile: MYMETA.json \t\$(PERLRUN) gen-cpanfile.pl \$(GEN_CPANFILE_ARGS) diff --git a/docker-compose.test-pg.yml b/docker-compose.test-pg.yml new file mode 100644 index 000000000..cfa0576fb --- /dev/null +++ b/docker-compose.test-pg.yml @@ -0,0 +1,69 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +version: '3.6' + +services: + bmo.test: + build: &bmo_build + context: . + dockerfile: Dockerfile + command: dev_httpd + tmpfs: + - /tmp + - /run + environment: + - 'BMO_inbound_proxies=*' + - BMO_db_driver=pg + - BMO_db_host=bmo.db + - BMO_db_name=bugs + - BMO_db_pass=bugs + - BMO_db_user=bugs + - BMO_memcached_namespace=bugzilla + - BMO_memcached_servers=memcached:11211 + - BMO_ses_username=ses@mozilla.bugs + - BMO_ses_password=password123456789! + - BMO_urlbase=AUTOMATIC + - BUGZILLA_ALLOW_INSECURE_HTTP=1 + - BZ_ANSWERS_FILE=/app/conf/checksetup_answers.txt + - BZ_QA_ANSWERS_FILE=/app/.circleci/checksetup_answers.txt + - BZ_QA_CONF_FILE=/app/.circleci/selenium_test.conf + - BZ_QA_CONFIG=1 + - CI=${CI} + - CIRCLE_SHA1=${CIRCLE_SHA1} + - CIRCLE_BUILD_URL=${CIRCLE_BUILD_URL} + - LOCALCONFIG_ENV=1 + - LOG4PERL_CONFIG_FILE=log4perl-test.conf + - LOGGING_PORT=5880 + - PORT=8000 + - TWD_BROWSER=firefox + - TWD_HOST=selenium + - TWD_PORT=4444 + depends_on: + - bmo.db + - memcached + - selenium + + bmo.db: + image: postgres:9.0 + tmpfs: + - /tmp + logging: + driver: "none" + environment: + - POSTGRES_DB=bugs + - POSTGRES_USER=bugs + - POSTGRES_PASSWORD=bugs + + memcached: + image: memcached:latest + + selenium: + image: selenium/standalone-firefox:3.141.59 + shm_size: '512m' + ports: + - "5900:5900" + +volumes: + bmo-pg-db: