forked from PGBuildFarm/client-code
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild-farm.conf.sample
More file actions
517 lines (399 loc) · 16.3 KB
/
build-farm.conf.sample
File metadata and controls
517 lines (399 loc) · 16.3 KB
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
# -*-perl-*- hey - emacs - this is a perl file
=comment
Copyright (c) 2003-2024, Andrew Dunstan
See accompanying License file for license details
=cut
package PGBuild; ## no critic (RequireFilenameMatchesPackage)
use strict;
use warnings FATAL => 'qw';
our (%conf);
# our($VERSION); $VERSION = 'REL_19_1';
my $branch;
{
no warnings 'once';
$branch = $main::branch;
}
# useful for making settings relative to the config file location
# all the clients should have used these two standard packages
my $confdir = File::Spec->rel2abs(File::Basename::dirname(__FILE__));
# to force from-source in the directory where this config file is located,
# uncomment the line below. See also buildroot below
# $PGBuild::Options::from_source = $confdir;
%conf = (
# identity
animal => "CHANGEME",
secret => "CHANGEME",
# source code
scm => 'git', # or 'cvs'
git_keep_mirror => 1, # manage a git mirror in the build root
git_ignore_mirror_failure => 1, # ignore failures in fetching to mirror
git_gc_hours => 7 * 24, # garbage collect once a week, 0/undef to disable
# use symlinked git repo from non-HEAD branches, like git-new-workdir does
# Ony supported on Windows if the user has "Create Symbolic Links"
# privilege. See
# https://github.com/git-for-windows/git/wiki/Symbolic-Links
git_use_workdirs => 1,
# remove work trees between runs, saves disk space
rm_worktrees => 1,
# check if the default git branch name has changed
skip_git_default_check => undef,
scmrepo => undef, # default is community repo for either type
scm_url => undef, # webref for diffs on server - use default for community
# git_reference => undef, # for --reference on git repo
# external commands and control
make => 'make', # or gmake if required. can include path if necessary.
make_jobs => undef, # >1 for parallel "make" and "make check" steps
tar_log_cmd => undef, # default is "tar -z -cf runlogs.tgz *.log"
# replacement must have the same effect
# archive this many copies of the report summary
archive_reports => undef,
# if on, print the whole web request object if there is a web error
show_error_request => undef,
# Only works if the Unix::Uptime module is available
# inhibits a run if > 0 and the load average in last 1 minute or 5 minutes
# has been greater than this
max_load_avg => undef,
# max time in seconds allowed for a single branch run
# undef means default, which is 4 hours. For unlimited specify 0
wait_timeout => undef,
# if true run installcheck-parallel instead of installcheck
use_installcheck_parallel => undef,
# where and how to build
# must be absolute, can be either Unix or Windows style for MSVC
# undef means default, buildroot dir in script directory
# "$confdir/buildroot" means buildroot in the config file's directory,
# which is useful for auto from-source setups
build_root => undef, # or '/path/to/buildroot',
use_vpath => undef, # set true to do vpath builds
# valgrind settings - default is don't use valgrind
# It will use the .supp file in the source code so that's not in the
# options here.
use_valgrind => undef,
valgrind_options => join(
' ', qw{--quiet --trace-children=yes
--track-origins=yes --read-var-info=yes --num-callers=20
--leak-check=no --gen-suppressions=all --error-limit=no}
),
# if true run tests with debug_discard_caches=1, or the equivalent
# on older branches. Do not set CLOBBER_CACHE_ALWAYS if you use this.
use_discard_caches => undef,
# path to directory with auxiliary web script
# if relative, the must be relative to buildroot/branch
# Now only used on older Msys installations
# aux_path => "../..",
# keep recent error builds - they are pruned after they are 10 days old
keep_error_builds => 0, # 0 = none, < 0 = unlimited, > 0 = max to keep
core_file_glob => "*core*", # should work for both Linux and *BSD
# where to report status
target => "https://buildfarm.postgresql.org/cgi-bin/pgstatus.pl",
# where to report change in OS version or compiler version
upgrade_target => "https://buildfarm.postgresql.org/cgi-bin/upgrade.pl",
# change this to a true value if using MSVC, in which case also
# see MSVC section below
using_msvc => undef,
# if force_every is a scalar it will be used on all branches, like this
# for legacy reasons:
# force_every => 336 , # max hours between builds, undef or 0 = unforced
# we now prefer it to be a hash with branch names as the keys, like this
#
# this setting should be kept conservatively high, or not used at all -
# for the most part it's best to let the script decide if something
# has changed that requires a new run for the branch.
#
# an entry with a name of 'default' matches any branch not named
force_every => {
# HEAD => 48,
# default => 168,
},
# alerts are triggered if the server doesn't see a build on a branch after
# this many hours, and then sent out every so often,
alerts => {
# HEAD => { alert_after => 72, alert_every => 24 },
# REL_10_STABLE => { alert_after => 240, alert_every => 48 },
},
# include / exclude patterns for files that trigger a build
# if both are specified then they are both applied as filters
# undef means don't ignore anything.
# exclude qr[^doc/|/README$|\.po$] to ignore changes to docs, po files
# and README files (recommended)
# undef means null filter.
trigger_exclude => qr[^doc/|/README$|\.po$],
trigger_include => undef,
# settings for mail notices - default to notifying nobody
# these lists contain addresses to be notified
# must be complete email addresses, as the email is sent from the server
mail_events => {
all => [], # unconditional
fail => [], # if this build fails
change => [], # if this build causes a state change
green => [], # if this build causes a state change to/from OK
},
# if this flag is set and ccache is used, an unsuccessful run will result
# in the removal of the ccache directory (and you need to make sure that
# its parent is writable). The default is off - ccache should be able to
# handle failures, although there have been suspicions in the past that
# it's not quite as reliable as we'd want, and thus we have this option.
ccache_failure_remove => undef,
# set this if you want to use ccache with the default ccache directory
# location, effectively $buildroot/ccache-$animal.
use_default_ccache_dir => 1,
# set this to allow caching of the configure script's results
use_accache => 1,
# env settings to apply within build/report process
# these settings will be seen by all the processes, including the
# configure process.
build_env => {
# use a dedicated cache for the build farm. this should give us
# very high hit rates and slightly faster cache searching.
#
# only set this if you want to set your own path for the ccache
# directory
# CCACHE_DIR => "/path/to/your/ccache",
### use these settings for Cygwin - adjust dumper path to be correct
## see https://cygwin.org/cygwin-ug-net/using-cygwinenv.html
# CYGWIN => 'error_start=c:\cygwin\bin\dumper.exe -d %1 %2',
## Cygwin is known to choke on many concurrent connections, so
## reign back the regression test parallelism
# MAX_CONNECTIONS => '3',
### set this if you need a proxy setting for the
# outbound web transaction that reports the results
# BF_PROXY => 'http://my.proxy.server:portnum/',
# see below for MSVC settings
# possibly set this to something high if you get pg_ctl failures
# default is 180
# PGCTLTIMEOUT => '180',
# run extra TAP tests if listed here
# These are the ones omitted without the setting
# on a secure single user system it makes sense to enable these
# PG_TEST_EXTRA => "ssl ldap kerberos",
# Where to put port locks. Default is the buildroot
# PG_TEST_PORT_DIR => 'some path',
},
# env settings to pass to configure. These settings will only be seen by
# configure.
config_env => {
# comment out if not using ccache
# ccache is known to cause issues sometimes on msys2
# don't set CC at all if using MSVC, especially with meson
CC => 'ccache gcc',
# If using vpath builds, this makes it use true symbolic links
# on Msys2. Only use if the user has Create Symbolic Links privilege
# See https://github.com/git-for-windows/git/wiki/Symbolic-Links
# MSYS => 'winsymlinks:nativestrict',
# In the rare event that you need to tell configure where the prove
# program lives instead of letting it work it out you do it here.
# Msys is one such case.
# PROVE => '/bin/prove',
# CPPFLAGS can be set here and picked up by configure
# This example makes the regression tests run with extra
# checking of user names created by the tests
# CPPFLAGS => '-DENFORCE_REGRESSION_TEST_NAME_RESTRICTIONS',
# where to find a usable pkg-config or equivalent
# see for example https://github.com/pkgconf/pkgconf
# PKG_CONFIG => 'c:/path/to/pkg-config.exe',
# PATH-style list of extra directories to search for .pc files
# PKG_CONFIG_PATH => 'c:/path/to/libxml/pkgconfig',
},
# settings added to those in config_env if valgrind is being used
valgrind_config_env_extra => {
CFLAGS => "-fno-omit-frame-pointer -O0 -fPIC",
CPPFLAGS => "-DUSE_VALGRIND -DRELCACHE_FORCE_RELEASE",
},
# don't use --prefix or --with-pgport here
# they are set up by the script
# per-branch config can be done here or
# more simply by using the examples below.
# (default ldap flag is below because it's not supported in all branches)
# see below for MSVC config
# set true if running with meson
# will be ignored for branches older than 16
using_meson => undef,
# similar to make_jobs above - how much parallelism do you want for
# meson's build and test stages. undef says use meson's default. (1?)
meson_jobs => undef,
# timeout multiplier for meson test jobs.
# default if value is undefined is 3, 0 means no timeout
meson_test_timeout => undef,
# options used with configure (and not for meson)
config_opts => [
qw(
--enable-cassert
--enable-debug
--enable-nls
--with-perl
--with-python
--with-tcl
--with-gssapi
--with-openssl
--with-ldap
--with-libxml
--with-libxslt
),
# could also add for example --enable-tap-tests
],
# Note, for meson we turn off all the auto options and then selectively
# re-enable them using these options, so zlib, icu, and readline have to be
# explicitly enabled here.
# see meson docs re interaction of buildtype, debug and
# optimization settings. debugoptimised = debug:on + optimisation:2
# Note: debugoptimized is the default, set in postgres' meson.build.
meson_opts => [
qw(
-Dcassert=true
-Dbuildtype=debugoptimized
-Dnls=enabled
-Dplperl=enabled
-Dplpython=enabled
-Dpltcl=enabled
-Dgssapi=enabled
-Dssl=openssl
-Dldap=enabled
-Dlibxml=enabled
-Dlibxslt=enabled
-Dzlib=enabled
-Dreadline=enabled
-Dicu=enabled
),
# could for example add -Dtap_tests=enabled
],
# per-branch contents of extra config for check stages.
# each branch has an array of setting lines (no \n required)
# a DEFAULT entry is used for all branches, before any
# branch-specific settings.
extra_config => {
DEFAULT => [
q(log_line_prefix = '%m [%p:%l] %q%a '),
"log_connections = 'true'",
"log_disconnections = 'true'",
"log_statement = 'all'",
"fsync = off"
],
HEAD => ['debug_parallel_query = regress'],
},
optional_steps => {
# which optional steps to run and when to run them
# valid keys are: branches, dow, min_hours_since, min_hour, max_hour
# find_typedefs => { branches => ['HEAD'], dow => [1,4],
# min_hours_since => 25 },
# build_docs => {min_hours_since => 24},
},
# string list of doc targets to build in addition to html
# could be "man postgres-US.pdf postgres-A4.pdf epub"
# see doc/src/sgml/Makefile for complete list
extra_doc_targets => undef,
# locales to test
locales => [qw( C )],
# port number actually used will be based on this param and the branch,
# so we ensure they don't collide
base_port => 5678,
modules => [qw(TestUpgrade)],
# settings used by run_branches.pl
global => {
branches_to_build => 'ALL',
# or 'OLD' (very old branches we're still kind of interested in)
# or 'HEAD_PLUS_LATEST' or 'HEAD_PLUS_LATEST2'
# or 'STABLE' (i.e. live branches other than HEAD)
# or 'UP_TO_REL_x_STABLE' (just this branch or older)
# or [qw( HEAD RELx_y_STABLE etc )] (explicit list of branches)
# set this if running multiple animals to have them coordinated
# default is this animal's buildroot.
global_lock_dir => undef,
# settings for parallel runs
parallel_lockdir => undef, # default is global_lock_dir
parallel_stagger => undef, # default 60
max_parallel => undef, # default 10
},
my_tap_tests => {
# settings for module TestMyTap:
# branch setting can be missing altogether, in which case 'main' is
# used, or it can be a scalar, in which case that is used for all
# branches, or it can be a hashref, in which case the value used
# corresponds to the pg branch being used. 'default' is specified,
# is for any branch not otherwise specified. If PGBRANCH is mapped,
# then the Postgres branch is used.
#
# testset1 => { url => "git@somewhere.com/testrepo.git",
# branch => 'mymainbranch' # default is 'main'
# },
# testset2 => { url => "git@somewhere-else.com/othertestrepo.git",
# branch => { HEAD => 'main',
# default => 'PGBRANCH' },
# },
},
abi_comp_check => {
# root directory for ABI comparison data.
# If not set, defaults to buildroot/abicheck.$animal_name
# abi_compare_root => '/home/abicheck',
# hash mapping binary names to their relative paths for ABI comparison.
# binaries_rel_path => {
# 'postgres' => 'bin/postgres'
# },
# array of flags to pass to abidw.
# abidw_flags_list => [
# '--drop-undefined-syms'
# ]
# hash mapping branch names to their corresponding tags for ABI comparison.
# Defaults to empty hash which means latest tags for all branches.
# tag_for_branch => {
# REL_17_STABLE => 'REL_17_4',
# REL_16_STABLE => 'REL_16_2'
# }
}
);
# MSVC setup
if ($conf{using_msvc})
{
# get the settings from the VisualStudio installation
require "PGBuild/VSenv.pm"; ## no critic (RequireBarewordIncludes)
# ancestor of vcvarsall.bat script we will use
my $VSdir = "c:/Program Files (x86)/Microsoft Visual Studio/2019";
# the more specific you are here the quicker the search will be
# e.g.
# $VSdir = "$VSdir/BuildTools/VC/Auxiliary/Build";
my $vsenv = PGBuild::VSenv::getenv($VSdir, 'x64');
# add other elements to the PATH, LIB and INCLUDE if needed
$vsenv->{PATH} =
join(';', 'c:/prog/depend/bin', 'c:/other/bin', $vsenv->{PATH});
%{ $conf{build_env} } = (%{ $conf{build_env} }, %$vsenv);
# MSVC non-meson needs a somewhat different style of config opts (why??)
# What we write here will be literally (via Data::Dumper) put into
# the config.pl file for the MSVC build.
# This will be ignored for meson builds, which use meson_opts rather
# than config_opts. See above for meson_opts.
$conf{config_opts} = {
asserts => 1, # --enable-cassert
integer_datetimes => 1, # --enable-integer-datetimes
nls => undef, # --enable-nls=<path>
tcl => 'c:\tcl', # --with-tcl=<path>
perl => 'c:\perl', # --with-perl=<path>
python => 'c:\python25', # --with-python=<path>
krb5 => undef, # --with-krb5=<path>
ldap => 0, # --with-ldap
openssl => undef, # --with-ssl=<path>
xml => undef, # --with-libxml=<path>
xslt => undef, # --with-libxslt=<path>,
iconv => undef, # path to iconv library
zlib => undef, # --with-zlib=<path>
tap_tests => undef, # --enable-tap-tests
};
}
##################################
#
# examples of per branch processing
# tailor as required for your site.
#
##################################
if ($branch eq 'HEAD')
{
# push(@{$conf{config_opts}},"--enable-depend");
# Note that config_opts is a hashref for MSVC, rather than
# an arrayref like elsewhere. That means the right way to set
# semething there is like this:
#
# $conf{config_opts}->{openssl} = 'c:\path\to\openssl\installation';
}
elsif ($branch =~ /^REL7_/)
{
# push(@{$conf{config_opts}},"--without-tk");
}
1;