Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
500a5c7101 | ||
|
|
5498682934 | ||
|
|
cdeb18fcbb | ||
|
|
0de635cc4c | ||
|
|
e09af0a0e9 | ||
|
|
ade57d4ec4 | ||
|
|
fc41c795f1 | ||
|
|
7caaf2de82 | ||
|
|
09bc544e83 | ||
|
|
42a47126aa | ||
|
|
db87df8f82 | ||
|
|
15c212a2df | ||
|
|
68627ab44e | ||
|
|
800fdce316 | ||
|
|
a5557b466c | ||
|
|
cad6025ce9 | ||
|
|
f8b894d52b | ||
|
|
9d0ec04667 | ||
|
|
24b4d35565 | ||
|
|
0c8571de9e | ||
|
|
2075dd5270 | ||
|
|
7d0241008b | ||
|
|
ecb652c7c5 | ||
|
|
9b5f0f0f63 | ||
|
|
1eb7c9d3e2 | ||
|
|
a4c5e5683c | ||
|
|
d53a34b8df | ||
|
|
8a4a3814ab | ||
|
|
6aaf47ddb4 | ||
|
|
4d078ab747 | ||
|
|
96de08212a | ||
|
|
2dd27d20c1 | ||
|
|
86c2769221 | ||
|
|
1316a3d7d8 | ||
|
|
9f866b0b27 | ||
|
|
829d6323b8 | ||
|
|
559c6cfa65 | ||
|
|
1f7fbb91f7 | ||
|
|
3b9359945e | ||
|
|
99b822e472 | ||
|
|
b2ec3a5acc | ||
|
|
9eec4f5b8c | ||
|
|
6db0cc5c5d | ||
|
|
a197c85f3a | ||
|
|
aa0a1f676d | ||
|
|
5963593fed | ||
|
|
e0e99ddbb5 | ||
|
|
85510b961f | ||
|
|
bf229c0d79 | ||
|
|
33dcb36db5 | ||
|
|
8a4eb4f8ad | ||
|
|
62eb330423 | ||
|
|
e73d8f4532 | ||
|
|
79aeb5204c | ||
|
|
de48d4ecda | ||
|
|
0d204d0554 | ||
|
|
37bdd22e24 | ||
|
|
2a43d1c939 | ||
|
|
c4f7a18ec5 | ||
|
|
fdc38f75f8 | ||
|
|
56d5cab13e | ||
|
|
bec47845be | ||
|
|
6dc5807192 | ||
|
|
ea085cd009 | ||
|
|
6fdb82dd76 | ||
|
|
a3e1a3672c | ||
|
|
8046c238d8 | ||
|
|
82730da392 | ||
|
|
fe2332f606 | ||
|
|
d26b63fdf5 | ||
|
|
770a0f27af | ||
|
|
ced002a6ad | ||
|
|
3aad58751a | ||
|
|
61a420c9fc | ||
|
|
8c662424b2 | ||
|
|
13ade4c0b2 | ||
|
|
1195f14327 | ||
|
|
65a35ab23d | ||
|
|
b31c8f78c5 | ||
|
|
82e6b57d04 | ||
|
|
1e4e00886a | ||
|
|
0fd7d0dedb | ||
|
|
0ebf78ca61 | ||
|
|
60c8e5fe05 | ||
|
|
1d68074a59 | ||
|
|
8723896da0 | ||
|
|
e4f17e5a6c | ||
|
|
454ba52c88 | ||
|
|
d5c0fac885 | ||
|
|
3f7683854b | ||
|
|
385148cf6e | ||
|
|
f207818afa | ||
|
|
1280cf5108 | ||
|
|
a5714903ac | ||
|
|
dd0c0cd3e1 | ||
|
|
51d3fe54f3 | ||
|
|
7c2b773ad1 | ||
|
|
f3a87de967 | ||
|
|
536191cef6 | ||
|
|
43d70de5bb | ||
|
|
6fab59a13c | ||
|
|
03f18d5242 | ||
|
|
66cddab4a4 | ||
|
|
3e9169b282 | ||
|
|
77fa10304b | ||
|
|
68bd329da9 | ||
|
|
14e40cedca | ||
|
|
6382f31f9a | ||
|
|
44496a300e | ||
|
|
08d250e5ef | ||
|
|
f07eabedbe | ||
|
|
5df2c7686c | ||
|
|
7946ee78f6 | ||
|
|
335a39bc75 | ||
|
|
d50a7dbd1a | ||
|
|
6714bb114c | ||
|
|
cda498f779 | ||
|
|
67c18cb082 | ||
|
|
22fd919220 | ||
|
|
1e0e9c4f7d | ||
|
|
814250aade | ||
|
|
2e072baf72 | ||
|
|
7f22d6135a | ||
|
|
331fd76b42 | ||
|
|
1259d72643 | ||
|
|
cab1bc3cb4 | ||
|
|
4cd331f0ca | ||
|
|
e4e2761fe3 | ||
|
|
45653180ed | ||
|
|
68e559c613 | ||
|
|
c2ef9d06ca | ||
|
|
db5943bd8f | ||
|
|
b6f64c4ba4 | ||
|
|
a3e43e4e97 | ||
|
|
0a2db9bc59 | ||
|
|
12b263c20b | ||
|
|
4a4d4569ae | ||
|
|
3286b4e32f | ||
|
|
63f2c7fe00 | ||
|
|
7504f6216a | ||
|
|
58715daf10 | ||
|
|
1ad8736d72 | ||
|
|
79ec042e0d | ||
|
|
7c74b7cdb7 | ||
|
|
e8826863e0 | ||
|
|
4f79deac0b | ||
|
|
695166bde5 | ||
|
|
9ce0e77e61 | ||
|
|
0b911bf58c | ||
|
|
15ca0ba1b6 | ||
|
|
c6183c9d03 | ||
|
|
dfd896db10 | ||
|
|
ac8f8fb0b0 | ||
|
|
d6ae6b2773 | ||
|
|
a42f789ff0 | ||
|
|
5d8ec6e5b0 | ||
|
|
e711a1bbc6 | ||
|
|
b6e1223e88 | ||
|
|
28921be00f | ||
|
|
4e8f29f328 | ||
|
|
126e1fb53d | ||
|
|
ebf4963758 | ||
|
|
eece396b30 | ||
|
|
abcb5f8830 | ||
|
|
ebb4c9994f | ||
|
|
971eee32ea | ||
|
|
af84d6b1e0 | ||
|
|
2cb69f09b9 | ||
|
|
0403079a4b | ||
|
|
97984eb3ec | ||
|
|
c46fd30446 | ||
|
|
ff8a301f6a | ||
|
|
27bd28ee97 | ||
|
|
fb4d25d907 | ||
|
|
ca6f52e7c7 | ||
|
|
3bdeb9ace1 | ||
|
|
f64b59e735 | ||
|
|
5d78f4a89f | ||
|
|
695f870ce1 | ||
|
|
593b111fdf | ||
|
|
82efd188c4 | ||
|
|
9df7275429 | ||
|
|
829876c2e0 | ||
|
|
41ba6bd1f4 | ||
|
|
aa282711f8 | ||
|
|
5a501603ac | ||
|
|
e7f8cb4ea3 | ||
|
|
78d9aa5b76 | ||
|
|
038029eb2d | ||
|
|
a14cc1bd77 | ||
|
|
33389fc48e | ||
|
|
d468c16ca2 | ||
|
|
fcf7cf5eb2 | ||
|
|
b08e90ea88 | ||
|
|
75dc42cf24 | ||
|
|
ec3d142ad9 | ||
|
|
280f0b0038 | ||
|
|
7307c52250 | ||
|
|
e8cb962890 | ||
|
|
934f17c65e | ||
|
|
55f36912f9 | ||
|
|
7b1ad5fa67 | ||
|
|
7d8a915ee0 | ||
|
|
8b4df8beb1 | ||
|
|
f98a74b526 | ||
|
|
8a0eae2bb0 | ||
|
|
18f47a59c5 | ||
|
|
31b1af2f84 | ||
|
|
4c56e49c66 | ||
|
|
2de2c30545 | ||
|
|
51897dc804 | ||
|
|
bbef00a151 | ||
|
|
627aa5d695 | ||
|
|
0d8b3c4389 | ||
|
|
8031c35160 | ||
|
|
8cf14222ff | ||
|
|
10b15b3986 | ||
|
|
73fefb8603 | ||
|
|
af6c1a24cf | ||
|
|
cfca6f6218 | ||
|
|
c001b7b50a | ||
|
|
bd259cda42 | ||
|
|
75be0bc22d | ||
|
|
1305d9910b | ||
|
|
6a850fff10 | ||
|
|
6b9f002366 | ||
|
|
0eb8d6c8d6 | ||
|
|
8a2a5fda1d | ||
|
|
a2b35b35f3 | ||
|
|
f250f5de5e | ||
|
|
fa60ab0f6a | ||
|
|
1d3e0a4455 | ||
|
|
82c5febde6 | ||
|
|
0914ec24ad | ||
|
|
57d757d4de | ||
|
|
7edaac1da7 | ||
|
|
9ab451e163 | ||
|
|
213be44e29 | ||
|
|
cb597d0acb | ||
|
|
badc6f33bf | ||
|
|
a5993549b8 | ||
|
|
13b44fffc7 | ||
|
|
fc1a1610a3 | ||
|
|
47eca9a19c | ||
|
|
f635df6ccf | ||
|
|
b2669930f5 | ||
|
|
f25cde8c5f | ||
|
|
797bdb8696 | ||
|
|
c80be9b3a3 | ||
|
|
84e2b844e0 | ||
|
|
be534be674 | ||
|
|
846d0eafe6 | ||
|
|
cd179a3e9f | ||
|
|
2d10e95311 | ||
|
|
f9af74529c | ||
|
|
8c9ab2afd9 | ||
|
|
708a570ba0 | ||
|
|
074db05f7a | ||
|
|
73b437c0f5 | ||
|
|
df5dced926 | ||
|
|
1590df8dfd | ||
|
|
5ee33cf162 | ||
|
|
7a25da9b06 | ||
|
|
d7faa85338 | ||
|
|
cf2328d2cd | ||
|
|
4e52a8664c | ||
|
|
7bae1eb663 | ||
|
|
4791897578 | ||
|
|
1cbdb435df | ||
|
|
b59495603a | ||
|
|
58f86a3c32 | ||
|
|
adcf089357 | ||
|
|
636821f2ac | ||
|
|
b983b094a3 | ||
|
|
53077b6c04 | ||
|
|
a0ddfad655 | ||
|
|
39f92ffae4 | ||
|
|
84a5467a5e | ||
|
|
35d6277f00 | ||
|
|
85290d4e61 | ||
|
|
48a26e8979 | ||
|
|
53a8cac7f8 | ||
|
|
96128f6a15 | ||
|
|
e2a80b2465 | ||
|
|
6dd91c8277 | ||
|
|
83ade5dcc2 | ||
|
|
5c257fe1b9 | ||
|
|
740a50680e | ||
|
|
706eec0d5b | ||
|
|
f63190dc93 | ||
|
|
58bb14253e | ||
|
|
eb7c3ef361 | ||
|
|
2c37ff2893 | ||
|
|
a30a722e11 | ||
|
|
650a15beec | ||
|
|
2fc65589c8 | ||
|
|
bf7f8cdd73 | ||
|
|
ae76ea3585 | ||
|
|
0b46bdf901 | ||
|
|
b02e210c68 | ||
|
|
e6d2334753 | ||
|
|
9f4ce1e7d1 | ||
|
|
efd0dd2ac0 | ||
|
|
b90a390d5c | ||
|
|
2f495006ea | ||
|
|
dd09986f71 | ||
|
|
41873de29e | ||
|
|
92c9e59c1f | ||
|
|
d5101b7568 | ||
|
|
e7888c5265 | ||
|
|
ebeb768a53 | ||
|
|
228156d0b6 | ||
|
|
1607875a08 | ||
|
|
707d0372ba | ||
|
|
1317e5a921 | ||
|
|
1e00611792 | ||
|
|
22b7ae6cdc | ||
|
|
684818def1 | ||
|
|
5ee0328063 | ||
|
|
ab98e5f6bb | ||
|
|
84a8a522e3 | ||
|
|
133a59c71b | ||
|
|
168aaa227a | ||
|
|
74e776ba21 | ||
|
|
90eff9a596 | ||
|
|
cd86ce08cf | ||
|
|
7e20bf5b75 | ||
|
|
98f6b1ff12 | ||
|
|
a410b15e30 | ||
|
|
72a3ed9068 | ||
|
|
1be0ff13db | ||
|
|
1216f075ce | ||
|
|
99e1f005fc | ||
|
|
bf69b16f1f | ||
|
|
36df6d5c8a | ||
|
|
a9974b418c | ||
|
|
de6fbe7725 | ||
|
|
172edaa227 | ||
|
|
bac50e10f0 | ||
|
|
b9c7e7e9af | ||
|
|
8c461ffb86 | ||
|
|
1934a75eee | ||
|
|
90cdeeff0a | ||
|
|
6d45dd4491 | ||
|
|
b22bfdf74b | ||
|
|
6dab60d9e4 | ||
|
|
657bf08fb8 | ||
|
|
ff1d9e20d1 | ||
|
|
d03553be7a | ||
|
|
5dc52446f3 | ||
|
|
eb517e6df8 | ||
|
|
621d66fb57 | ||
|
|
964d211260 | ||
|
|
c83d997f2f | ||
|
|
7a9a45b065 | ||
|
|
700ecaef4a | ||
|
|
19c8fcd775 | ||
|
|
bcd6f3f429 | ||
|
|
92e531db02 | ||
|
|
f81c546069 | ||
|
|
68f41dd5c6 | ||
|
|
1be9dd4033 | ||
|
|
0c6776b713 | ||
|
|
9cd8492ec1 | ||
|
|
6df5d14a60 | ||
|
|
91881ad6d3 | ||
|
|
e011ad02a5 | ||
|
|
fdf5d12196 | ||
|
|
8af25ba0c1 | ||
|
|
2ba4f79a46 | ||
|
|
185e0f61e2 | ||
|
|
e84f4cd35b | ||
|
|
eef20dc5a9 | ||
|
|
0b65dcd4ef | ||
|
|
ba58b140d4 | ||
|
|
a0cd6c6a88 | ||
|
|
776e092a89 | ||
|
|
fe6e21a08b | ||
|
|
4e2fd404c0 | ||
|
|
ae9d324f8f | ||
|
|
6f8fb6f49d | ||
|
|
52d6017ce5 | ||
|
|
9e58717321 | ||
|
|
c3a334f8df | ||
|
|
72a4f93e4f | ||
|
|
09e13b2f37 | ||
|
|
60078c37a3 | ||
|
|
1cf9ced260 | ||
|
|
50cf6489b9 | ||
|
|
621a48c642 | ||
|
|
c841c82220 | ||
|
|
22b89265d6 | ||
|
|
e2c20b5022 | ||
|
|
2dd7de73b9 | ||
|
|
bd227e03bd | ||
|
|
413202899f | ||
|
|
bd2a484c2f | ||
|
|
5e8a75cdf9 | ||
|
|
d8ed75dbfd | ||
|
|
4392b83a98 | ||
|
|
256d1e55c8 | ||
|
|
c2dcfdb96f | ||
|
|
46c7562ed2 | ||
|
|
42018e69a5 | ||
|
|
56c6fc6b72 | ||
|
|
c0a6ff3029 | ||
|
|
79f3db5ea5 | ||
|
|
b5327cbe17 | ||
|
|
217e9ed0b1 | ||
|
|
82c7a94023 | ||
|
|
1a1b63f92a | ||
|
|
6810fa6ce6 | ||
|
|
8876c4241f | ||
|
|
190574b3af | ||
|
|
fac1857579 | ||
|
|
acedd38899 | ||
|
|
e3bf110f1f | ||
|
|
638d597061 | ||
|
|
588aa88144 | ||
|
|
c918407eb3 | ||
|
|
f87c981974 | ||
|
|
360ec29963 | ||
|
|
657b0f82ec | ||
|
|
2813d82996 | ||
|
|
b13dd2abc2 | ||
|
|
a5a5503821 | ||
|
|
cd2f48aeb1 | ||
|
|
88e515093c | ||
|
|
9ef5a53790 | ||
|
|
da530824d6 | ||
|
|
ea693396b8 | ||
|
|
f4cba74bf6 | ||
|
|
8b68ea6465 | ||
|
|
69046a9429 | ||
|
|
f3f8c1b7e8 | ||
|
|
042888f5d7 | ||
|
|
ec197c68b8 | ||
|
|
026c0d2389 | ||
|
|
032583e280 | ||
|
|
57b3771450 | ||
|
|
4dbfdd8740 | ||
|
|
f23fe38e0b | ||
|
|
321366489d | ||
|
|
6d5b1673e6 | ||
|
|
8be65ceb7b | ||
|
|
a8384a8826 | ||
|
|
9645bb3911 | ||
|
|
847059b717 | ||
|
|
08c776e308 | ||
|
|
716ef2f0db | ||
|
|
c5d5fbdafd | ||
|
|
9a8d520abd | ||
|
|
296befc881 | ||
|
|
00d3aaa1fd | ||
|
|
64399901ad | ||
|
|
0aba9703cd | ||
|
|
f8192b82b8 | ||
|
|
040e988323 | ||
|
|
849cd65bb7 | ||
|
|
382a35c25e | ||
|
|
0c22b78cf9 | ||
|
|
7d1a08f22f | ||
|
|
bce53e02e5 | ||
|
|
606b5287be | ||
|
|
b278265005 | ||
|
|
f9d881ffa6 | ||
|
|
6fcc4ae6a2 | ||
|
|
67d3f14c3d | ||
|
|
947dbf6d0a | ||
|
|
173cfb72b2 | ||
|
|
2e61eb0990 | ||
|
|
3417186df7 | ||
|
|
772c6ecd84 | ||
|
|
efe7f1de6a | ||
|
|
b51eef12b7 | ||
|
|
6cb71c9ae4 | ||
|
|
2e098c487a | ||
|
|
e592dfde2a | ||
|
|
7168499521 | ||
|
|
f5f79a516a | ||
|
|
44dc78f4df | ||
|
|
25c3142586 | ||
|
|
a44424d5fa | ||
|
|
bb4777578a | ||
|
|
2f4cae35bd | ||
|
|
a9bfa8a71d | ||
|
|
9e3f5f53cc | ||
|
|
8b354aec1d | ||
|
|
6101e72552 | ||
|
|
898c7b27df | ||
|
|
4d7fc8be52 | ||
|
|
f819841430 | ||
|
|
5d008f0525 | ||
|
|
b0d4200aa0 | ||
|
|
167bbe100e | ||
|
|
4e7422ed4b | ||
|
|
867b2a5149 | ||
|
|
2cc8f5f272 | ||
|
|
9be0fef470 | ||
|
|
b4759e776e | ||
|
|
1d8dfc110e | ||
|
|
6ed615a1fc | ||
|
|
7d12dc3b80 | ||
|
|
72a102aac8 | ||
|
|
17883fbd84 | ||
|
|
7a7782a350 | ||
|
|
b649094d36 | ||
|
|
8c45dea975 | ||
|
|
509c696aa3 | ||
|
|
866db40f48 | ||
|
|
9169d3d4bf | ||
|
|
f1e48b719d | ||
|
|
081bebaf80 | ||
|
|
1fe840fcac | ||
|
|
6cccb5da31 | ||
|
|
6c3f0a4606 | ||
|
|
d736f4266c | ||
|
|
33c88ceb68 | ||
|
|
a1f8e010b7 | ||
|
|
d924a7fb8d | ||
|
|
95905cfd5b | ||
|
|
c0122a72c8 | ||
|
|
ff838e43df | ||
|
|
c6d7a0a8da | ||
|
|
485c654c6e | ||
|
|
265bf61adf | ||
|
|
0bcabd59d3 | ||
|
|
6bda0d4891 | ||
|
|
97ddab93af | ||
|
|
6322674d98 | ||
|
|
f8fb78be11 | ||
|
|
15c37b620e | ||
|
|
28eb2c0b4b | ||
|
|
535c7eeef8 | ||
|
|
f0ecc95ca9 | ||
|
|
0e63914ab3 | ||
|
|
9b64acb3d2 | ||
|
|
0ab5e0d4ef | ||
|
|
4cb0f87dfd | ||
|
|
fa64e8b38f | ||
|
|
fb6cca415d | ||
|
|
b757d26933 | ||
|
|
9f64f5b8db | ||
|
|
a0aa185518 | ||
|
|
1f53baee8f | ||
|
|
6a79d0a195 | ||
|
|
8fd5efaa84 | ||
|
|
53cdc80df2 | ||
|
|
38d4728333 | ||
|
|
b0cd028ff8 | ||
|
|
100f59f78b | ||
|
|
23ea201325 | ||
|
|
441cc57bb8 | ||
|
|
a361fd94ff | ||
|
|
acb0eb2141 | ||
|
|
315d1a40a4 | ||
|
|
92dd13e72a | ||
|
|
0d39e791c9 | ||
|
|
53760dbf59 | ||
|
|
dd6f6cf1af | ||
|
|
5e96f0fd61 | ||
|
|
98d703645c | ||
|
|
cead7b0a6f | ||
|
|
139d9e21da | ||
|
|
d81bd595aa | ||
|
|
ed211a2bbb | ||
|
|
e21911b1c6 | ||
|
|
d3d1eb3355 | ||
|
|
d8381918a7 | ||
|
|
e9af0c3226 | ||
|
|
e5012ea9c6 | ||
|
|
306269af5d | ||
|
|
6563067892 | ||
|
|
8bae604129 | ||
|
|
f451f89d38 | ||
|
|
61413c1902 | ||
|
|
f88ca891fa | ||
|
|
445e89576b | ||
|
|
1a1734cf5c | ||
|
|
a0f7d0d50f | ||
|
|
c4dc839d7c | ||
|
|
f5c1cd9df8 | ||
|
|
177653370a | ||
|
|
6bf522da0f | ||
|
|
922603975f | ||
|
|
7284f98c79 | ||
|
|
8bbc6ecdb8 | ||
|
|
7cbde91140 | ||
|
|
5bdff56b8d | ||
|
|
96ce010635 | ||
|
|
47fcf87ae4 | ||
|
|
1257ec9969 | ||
|
|
cda7d7de90 | ||
|
|
e7981c7f11 | ||
|
|
ba87cbecfd | ||
|
|
bf6b963c45 | ||
|
|
9f8acfc51d | ||
|
|
8cf316b853 | ||
|
|
55817f685f | ||
|
|
35d585251a | ||
|
|
242dd48cbd | ||
|
|
30134800f3 | ||
|
|
e517fdf6bc | ||
|
|
b00ea3cd99 | ||
|
|
c0b6c8726e | ||
|
|
52c550e3fe | ||
|
|
57e72ce598 | ||
|
|
ba3deb5b9b | ||
|
|
fb0022923a | ||
|
|
ccaea82341 | ||
|
|
1a143c9e2c | ||
|
|
23d15bde8b | ||
|
|
49c55b41a2 | ||
|
|
4f822c8021 | ||
|
|
c3801165a5 | ||
|
|
fdf58f2d85 | ||
|
|
9a3b3530a6 | ||
|
|
b280c91013 | ||
|
|
95f6a63c70 | ||
|
|
96965797f6 | ||
|
|
7b5d96c5a6 | ||
|
|
00e2480b7b | ||
|
|
f98e3fa1fd | ||
|
|
81d8ea56f8 | ||
|
|
654dc0e2d7 | ||
|
|
b4e4b9d498 | ||
|
|
52af8d3e49 | ||
|
|
546806c40c | ||
|
|
ca7e93cc2c | ||
|
|
4ee76ba8c9 | ||
|
|
5d7ec14076 | ||
|
|
88f033e2a8 | ||
|
|
2e878a3fb2 | ||
|
|
c6e7ce03cc | ||
|
|
c45fb47b08 | ||
|
|
d39fe78239 | ||
|
|
0399d0be15 | ||
|
|
19237fe247 | ||
|
|
729c370125 | ||
|
|
636c224bd0 | ||
|
|
ab25238f17 | ||
|
|
b9ffbf73e0 | ||
|
|
23cad47f8d | ||
|
|
5fd308aafc | ||
|
|
88bee071e5 | ||
|
|
1fcb1f0228 | ||
|
|
9544ce1d18 | ||
|
|
8cf15ea17c | ||
|
|
bc10fa5c03 | ||
|
|
1d5f5a2067 | ||
|
|
70a7c42be1 | ||
|
|
d0e6090761 | ||
|
|
87ba177ff3 | ||
|
|
0511554db9 | ||
|
|
026292f07b | ||
|
|
18d507780d | ||
|
|
3aedae1436 | ||
|
|
9cbb9a3d24 | ||
|
|
b173fda116 | ||
|
|
d9ccef94a2 | ||
|
|
eff63931f2 | ||
|
|
3ec676194b | ||
|
|
8030bc708b | ||
|
|
fd78faf0cc | ||
|
|
bfcdcdc4f1 | ||
|
|
a75273a714 | ||
|
|
c9cc5257c7 | ||
|
|
3b4fa40253 | ||
|
|
9ee896aac4 | ||
|
|
01cb1839f8 | ||
|
|
1eb07608e9 | ||
|
|
8e16e000c3 | ||
|
|
64d7c2c62d | ||
|
|
e028ebc152 | ||
|
|
30051f3257 | ||
|
|
c4a52687b6 | ||
|
|
a06c13623d | ||
|
|
b303693ae8 | ||
|
|
6b012193e3 | ||
|
|
cd6ff48cc0 | ||
|
|
dbdea181a9 | ||
|
|
721a5da895 | ||
|
|
8578acd915 | ||
|
|
f3c95d9643 | ||
|
|
5c5b61c4db | ||
|
|
760e38293c | ||
|
|
dcfef154ce | ||
|
|
10b2e91e29 | ||
|
|
4f415f9768 | ||
|
|
93b5bc6bf8 | ||
|
|
60c2d0e23b | ||
|
|
c44710c9d7 | ||
|
|
37e034b3ef | ||
|
|
adb8fdb096 | ||
|
|
22cdb86aab | ||
|
|
576dc55615 | ||
|
|
f8fa1cf6d6 | ||
|
|
3bb9f0ba8c | ||
|
|
91eb60a363 | ||
|
|
4457a6a6a1 | ||
|
|
6f8cde67a6 | ||
|
|
391db5131d | ||
|
|
62a61b403e | ||
|
|
e8f108154d | ||
|
|
ccd84b7c2a | ||
|
|
522f3458f6 | ||
|
|
7efed95ac3 | ||
|
|
754cd223c1 | ||
|
|
a0b7dcca64 | ||
|
|
8876183981 | ||
|
|
feb3093c6d | ||
|
|
6f96f67655 | ||
|
|
3be2221948 | ||
|
|
7d0bbf30ec | ||
|
|
9933a9a9e5 | ||
|
|
227f047810 | ||
|
|
95ce9e976e | ||
|
|
4a645343a9 | ||
|
|
3d107ea618 | ||
|
|
19f5e41b09 | ||
|
|
f7eeefa3a9 | ||
|
|
a8f0f5bb4f | ||
|
|
44d40f0785 | ||
|
|
d0b2752fea | ||
|
|
8e0c080faf | ||
|
|
6410ae5f69 | ||
|
|
a60cbf00c8 | ||
|
|
3e7a220225 | ||
|
|
9026f46220 | ||
|
|
fedbe550db | ||
|
|
2b45a1f7d5 | ||
|
|
31a91409a0 | ||
|
|
9279393dcd | ||
|
|
20caa63508 | ||
|
|
6984e97f8d | ||
|
|
95ffd1b9a1 | ||
|
|
4c5639bee6 | ||
|
|
d4b72e2d89 | ||
|
|
0452828cc7 | ||
|
|
007c4840c2 | ||
|
|
2b04f3ca1d | ||
|
|
3706c3126a | ||
|
|
1ba9f005a7 | ||
|
|
c3d6f8887a | ||
|
|
439d6cb28f | ||
|
|
b0e7847962 | ||
|
|
a946c70869 | ||
|
|
5866da8194 | ||
|
|
ad34ee2699 | ||
|
|
e03d65d547 | ||
|
|
b5c8692f34 | ||
|
|
f96977733f | ||
|
|
33bd02d337 | ||
|
|
ab01dde2ba | ||
|
|
dea5335ce5 | ||
|
|
288fd7ed12 | ||
|
|
c98cea2ea9 | ||
|
|
056aff4742 | ||
|
|
6357672387 | ||
|
|
bdadc77235 | ||
|
|
0cb75bdcab | ||
|
|
bc3052ed1b | ||
|
|
df2f3460f0 | ||
|
|
bdf4f39b2b | ||
|
|
fff192eb95 | ||
|
|
c47390e643 | ||
|
|
fd944280f1 | ||
|
|
fa71b06874 | ||
|
|
591308fbe8 | ||
|
|
a03b513389 | ||
|
|
8857f0d179 | ||
|
|
2d2aa45ec5 | ||
|
|
ba5b66ff4f | ||
|
|
285e3afeee | ||
|
|
b3cf9ce185 | ||
|
|
18deb16e36 | ||
|
|
1a1266a5d6 | ||
|
|
7cdcaa0533 | ||
|
|
d5f6802e5f | ||
|
|
bc1a2a0b4d | ||
|
|
7cb1d74c05 | ||
|
|
02dbb20b41 | ||
|
|
6b9e3f5d1c | ||
|
|
5f4db94179 | ||
|
|
de712b0805 | ||
|
|
fdfd6c7792 | ||
|
|
c6739ebd6b | ||
|
|
f673e68677 | ||
|
|
85d4473af4 | ||
|
|
45cafd2cff | ||
|
|
d5ac441ab7 | ||
|
|
8e372f194c | ||
|
|
55ad67ac52 | ||
|
|
cc999ae5a5 | ||
|
|
f66bd4bcfb | ||
|
|
dfaea944f0 | ||
|
|
ff287f32c5 | ||
|
|
a46f99d360 | ||
|
|
d98ee76b8d | ||
|
|
29a526626f | ||
|
|
6509e45b6f | ||
|
|
2fb5b26adb | ||
|
|
24aefd2c7a | ||
|
|
b5b0538fe3 | ||
|
|
2ab2d6b57c | ||
|
|
bc83955418 | ||
|
|
8f8f8ec79a | ||
|
|
6690b16f8a | ||
|
|
16b9b103a2 | ||
|
|
b1f70b02ff | ||
|
|
2a1394ce1f | ||
|
|
908d7e88b6 | ||
|
|
4e3ec91d23 | ||
|
|
36a71dc7fa | ||
|
|
6179638fee | ||
|
|
57e1dfa7ec | ||
|
|
2aa881d143 | ||
|
|
e9f3747969 | ||
|
|
5c30695d66 | ||
|
|
301920747d | ||
|
|
7c5554ea31 | ||
|
|
6c7bc1c815 | ||
|
|
dd45f06d50 | ||
|
|
d6a9f8a06c | ||
|
|
9647482791 | ||
|
|
ad5bb0b190 | ||
|
|
b9088b0afa | ||
|
|
5edeee8017 | ||
|
|
95466b9d6c | ||
|
|
1c44cfb714 | ||
|
|
f833cea0dd | ||
|
|
2dcaf0b4ed | ||
|
|
0e786c519e | ||
|
|
3b20cad5bb | ||
|
|
afc28d95cf | ||
|
|
9edc1d225e | ||
|
|
e5f2506663 | ||
|
|
5ec6faff13 | ||
|
|
3e6bd29198 | ||
|
|
f2036164d0 | ||
|
|
1c458b82cd | ||
|
|
b85d8c1446 | ||
|
|
0ac006fde1 | ||
|
|
1e6fab92b0 | ||
|
|
099577959b | ||
|
|
c2b7e521d3 | ||
|
|
36aaf38379 | ||
|
|
99c688f894 | ||
|
|
f4761f55f7 | ||
|
|
e18a8bf620 | ||
|
|
7c6fdcb12e | ||
|
|
f88c89f3eb | ||
|
|
5949696ded | ||
|
|
f724578463 | ||
|
|
2324337149 | ||
|
|
2dd009eb7c | ||
|
|
92bb931b0a | ||
|
|
eeee45e57c | ||
|
|
10ba029980 | ||
|
|
fd65f1b644 | ||
|
|
9f6ddd3cf9 | ||
|
|
673b5ea5a1 | ||
|
|
84c024f6fa | ||
|
|
3e0ade5a59 | ||
|
|
db23330939 | ||
|
|
bb24c445e6 | ||
|
|
b44b06591b | ||
|
|
b475be93fa | ||
|
|
3e47abed8f | ||
|
|
f0185fbe7f | ||
|
|
5f689a56dd | ||
|
|
0d1e3f36e1 | ||
|
|
29ccdb3242 | ||
|
|
0546e79aed | ||
|
|
5ee403fec7 | ||
|
|
5a3fa59741 | ||
|
|
60497df04b | ||
|
|
f143aa05a3 | ||
|
|
ee0687ecd3 | ||
|
|
e612140473 | ||
|
|
e384c9665a | ||
|
|
30d2d1b23e | ||
|
|
ed2a73f7ff | ||
|
|
b5e5f8ac4c | ||
|
|
102e0a9839 | ||
|
|
edec9adbfb | ||
|
|
c9345ad618 | ||
|
|
fc4b419987 | ||
|
|
475e3689f7 | ||
|
|
c90508cece | ||
|
|
a85d907351 | ||
|
|
9f31ec115a | ||
|
|
fbbbfe22dd | ||
|
|
26b279cc8a | ||
|
|
3ac271e702 | ||
|
|
4ae9132b59 | ||
|
|
3fa48f26b8 | ||
|
|
00e17ef152 | ||
|
|
ace73ebb60 | ||
|
|
5931162556 | ||
|
|
053b1e3d69 | ||
|
|
082fb165d3 | ||
|
|
a02ebe192b | ||
|
|
8ab78dc40d | ||
|
|
6ecd7b20f7 | ||
|
|
48a86f6c38 | ||
|
|
b742487dc3 | ||
|
|
089f890f2e | ||
|
|
1f0a2fd150 | ||
|
|
715839d295 | ||
|
|
1bcf343ceb | ||
|
|
e99fc02f9e | ||
|
|
c0a1429664 | ||
|
|
cc1ce09b73 | ||
|
|
25074e46b4 | ||
|
|
cee0945a78 | ||
|
|
24b0c2e919 | ||
|
|
c56aef335b | ||
|
|
097b630738 | ||
|
|
f351b10ed0 | ||
|
|
1a02d13a28 | ||
|
|
bece59d4b3 | ||
|
|
30398219f4 | ||
|
|
8545d846c0 | ||
|
|
6d8c4bdb82 | ||
|
|
496acf5598 | ||
|
|
36228fece7 | ||
|
|
794c7cb335 | ||
|
|
9c9766ca0a | ||
|
|
7374997425 | ||
|
|
134e651989 | ||
|
|
8b130b3351 | ||
|
|
d26182d178 | ||
|
|
8ddcdbf499 | ||
|
|
4e49d752fb | ||
|
|
0cbb5324bf | ||
|
|
1e90245650 | ||
|
|
3425bc0349 | ||
|
|
7593bb98c1 | ||
|
|
d8c007f644 | ||
|
|
0ea51861c7 | ||
|
|
cfbf4d8452 | ||
|
|
af88851228 | ||
|
|
864f23c60d | ||
|
|
8dffcf842f | ||
|
|
6971d8c3a1 | ||
|
|
43f4cc4e17 | ||
|
|
a5530f59f7 | ||
|
|
e272552780 | ||
|
|
dfbbc3b1a1 | ||
|
|
a8ab714606 | ||
|
|
2ab419c8a5 | ||
|
|
29e85a6b06 | ||
|
|
125d36e7d2 | ||
|
|
16406f88a7 | ||
|
|
dee1a2ae6b | ||
|
|
1f879b3e87 | ||
|
|
b5bd236387 | ||
|
|
41812c9fde | ||
|
|
4faf2a3c6d | ||
|
|
d3ede3151a | ||
|
|
721290b1e9 | ||
|
|
10929157b4 | ||
|
|
5a74022e8a | ||
|
|
a74b0232f9 | ||
|
|
e81a036850 | ||
|
|
389896411a | ||
|
|
6adae46a4c | ||
|
|
96ed38292f | ||
|
|
47b2bc8a83 | ||
|
|
9ad223c41c | ||
|
|
d09833744a | ||
|
|
c92e9c2953 | ||
|
|
af1f4b3aa7 | ||
|
|
4b40aac89f | ||
|
|
0ff34ab6ae | ||
|
|
9462296d33 | ||
|
|
0904adaed0 | ||
|
|
f7045b58d4 | ||
|
|
459121566c | ||
|
|
e12e8bc9cf | ||
|
|
956401015d | ||
|
|
1ac385be27 | ||
|
|
8145e042a6 | ||
|
|
cdf49d6300 | ||
|
|
028b70203c | ||
|
|
e23ef5d9df | ||
|
|
711181c752 | ||
|
|
3de19f66f2 | ||
|
|
4c5324bd99 | ||
|
|
639a28fbfc | ||
|
|
41fe1db884 | ||
|
|
cafe69c235 | ||
|
|
d55c35c0e8 | ||
|
|
0e0cbc40b8 | ||
|
|
47aa070cc3 | ||
|
|
4fe47b8e92 | ||
|
|
e80e82cd7f | ||
|
|
29f13f8832 | ||
|
|
81fccc87b5 | ||
|
|
93d25eea0b | ||
|
|
a166f8dc89 | ||
|
|
d26c167c76 | ||
|
|
60983a25d2 | ||
|
|
2d08b0dd13 | ||
|
|
b28df5874e | ||
|
|
ad0567bd85 | ||
|
|
701085adaf | ||
|
|
5240e8ccf8 | ||
|
|
4ce65ea770 | ||
|
|
19b8d05e65 | ||
|
|
f5ba42bec8 | ||
|
|
26ec59ab5f | ||
|
|
30509d1bc1 | ||
|
|
5e710f7ee3 | ||
|
|
ec5ea7e207 | ||
|
|
9b5dc28bac | ||
|
|
db727381b1 | ||
|
|
fdaedacf40 | ||
|
|
4d74f84d80 | ||
|
|
fcfe7cfb7c | ||
|
|
5248055a01 | ||
|
|
740ce15bd7 | ||
|
|
2621050066 | ||
|
|
2b736c18ab | ||
|
|
3fa4e82af9 | ||
|
|
fd8af4034a | ||
|
|
e837de5e8f | ||
|
|
01a118d495 | ||
|
|
ec12dc5288 | ||
|
|
a4e9f04a2e | ||
|
|
6d399f4fd7 | ||
|
|
cede5cf899 | ||
|
|
41a62c8082 | ||
|
|
8c06d93303 | ||
|
|
9ccdaf73cd | ||
|
|
09b83e54a2 | ||
|
|
c8d6ff8a6d | ||
|
|
c85a9be621 | ||
|
|
0d287df6dd | ||
|
|
a973c9c62c | ||
|
|
2d60bc2800 | ||
|
|
a22b2a6074 | ||
|
|
04580652ab | ||
|
|
4db13facf7 | ||
|
|
adab656a79 | ||
|
|
92549af3d4 | ||
|
|
9379df2543 | ||
|
|
4490b623f8 | ||
|
|
371bec7f19 | ||
|
|
a01b0973fc | ||
|
|
75a1b4b17e | ||
|
|
51b02ae6d4 | ||
|
|
e207a82dbb | ||
|
|
9cf3288934 | ||
|
|
e64f4f632d | ||
|
|
4b71519b80 | ||
|
|
4e2aa82ddd | ||
|
|
444f3a3189 | ||
|
|
2b2ff0d260 | ||
|
|
f2876cabe8 | ||
|
|
16d1df2a1b | ||
|
|
fd1a0753bc | ||
|
|
c84f38ac0f | ||
|
|
f3fb76f669 | ||
|
|
377216caec | ||
|
|
c9590b2d62 | ||
|
|
1622211b39 | ||
|
|
523eca5a95 | ||
|
|
1bebddfc7d | ||
|
|
37362541bf | ||
|
|
412375af3c | ||
|
|
3bd2dec663 | ||
|
|
222e8cc1f8 | ||
|
|
85255b65b1 | ||
|
|
338bb64a55 | ||
|
|
a9ca7a2fd4 | ||
|
|
b51df0e5fd | ||
|
|
e66cb54a58 | ||
|
|
361ae458d4 | ||
|
|
115208c8d8 | ||
|
|
9611e06dcf | ||
|
|
22b386165d | ||
|
|
19cbe8c39f | ||
|
|
d8bcc11a95 | ||
|
|
9f203cf7d7 | ||
|
|
06a612481f | ||
|
|
682d6597e4 | ||
|
|
a59372cbe3 | ||
|
|
101f6fc103 | ||
|
|
23c618e1c9 | ||
|
|
0bc044fa67 | ||
|
|
5bdccb6e63 | ||
|
|
6d7338e64d | ||
|
|
0358298090 | ||
|
|
0e3dc74bb4 | ||
|
|
302e1acabd | ||
|
|
c9db4a0d16 | ||
|
|
cc239149ba | ||
|
|
c4a5f8d707 | ||
|
|
75a2d880f6 | ||
|
|
e5cba59a02 | ||
|
|
0e8868a650 | ||
|
|
7f49b891df | ||
|
|
0ac471d160 | ||
|
|
370cb611d7 | ||
|
|
d4b57edede | ||
|
|
85dd1e92ad | ||
|
|
ef0b30b1ca | ||
|
|
0d8adf9ced | ||
|
|
695c008245 | ||
|
|
96fccd28a9 | ||
|
|
5f3965ff0a | ||
|
|
6062084128 | ||
|
|
01d1e6f706 | ||
|
|
9eb7c1cbea | ||
|
|
5d70803d6d | ||
|
|
53b5b59f56 | ||
|
|
17acce3e7b | ||
|
|
d3dd5c0b56 | ||
|
|
71e7a7c481 | ||
|
|
0b707be615 | ||
|
|
179332ed5a | ||
|
|
a8a7574e69 | ||
|
|
e30d2eca90 | ||
|
|
4bc6dcca67 | ||
|
|
46a8c1ad6a | ||
|
|
3e575e2f43 | ||
|
|
b11b2a2f50 | ||
|
|
1bfd8d7f3c | ||
|
|
f1da4f5de8 | ||
|
|
5a7583654f | ||
|
|
cfa7bef407 | ||
|
|
8997f616a2 | ||
|
|
f50f799b88 | ||
|
|
3bcac26ff9 | ||
|
|
c5f4a56c0c | ||
|
|
d74320f06e | ||
|
|
b003f76903 | ||
|
|
ebc3460fce | ||
|
|
ed51fe475e | ||
|
|
f2bd3933c6 | ||
|
|
862f101772 | ||
|
|
6d555645e9 | ||
|
|
e587ef404c | ||
|
|
fe753bd272 | ||
|
|
c07c153f15 | ||
|
|
3416184236 | ||
|
|
6e3ee1c607 | ||
|
|
b512404c85 | ||
|
|
5bb6e9133f | ||
|
|
344c236d72 | ||
|
|
b4b2a4ff67 | ||
|
|
205a661922 | ||
|
|
eead9b77e7 | ||
|
|
47e734dbf2 | ||
|
|
ce372a73bf | ||
|
|
10c5d25735 | ||
|
|
81dcc91747 | ||
|
|
3a62fc5a2a | ||
|
|
10adb6a11b | ||
|
|
82fade7645 | ||
|
|
37dced23f0 | ||
|
|
6f857bdbcb | ||
|
|
6ba9c192ce | ||
|
|
221af6caa6 | ||
|
|
e22492ad51 | ||
|
|
2b8efc6361 | ||
|
|
73430a2062 | ||
|
|
fc411bfc49 | ||
|
|
4450145d31 | ||
|
|
cd84200135 | ||
|
|
6997d0149e | ||
|
|
5981f4bd13 | ||
|
|
5113fda7a6 | ||
|
|
7ce07f7dcf | ||
|
|
078a959e3d | ||
|
|
b4f517f7ff | ||
|
|
36dc2e9d2a | ||
|
|
858c85adbe | ||
|
|
2cd86449d0 | ||
|
|
c37fb061bd | ||
|
|
dc9cc3730b | ||
|
|
872b60de5c | ||
|
|
5d2ce142dd | ||
|
|
9666bd6c8d | ||
|
|
0b3c79865e | ||
|
|
9c903f944c | ||
|
|
541d9dfcb4 | ||
|
|
b9d3006915 | ||
|
|
68b7ddb592 | ||
|
|
4309aa3ba7 | ||
|
|
f9bbadfc6a | ||
|
|
c6f8918983 | ||
|
|
16c95d21a7 | ||
|
|
bae912fa40 | ||
|
|
ca3ec76db6 | ||
|
|
4050545f7c | ||
|
|
975bcd9fb0 | ||
|
|
3cd547f879 | ||
|
|
5736e173ea | ||
|
|
5a26cad588 | ||
|
|
3b616b2fb1 | ||
|
|
35f05e49b3 | ||
|
|
61fa8b16c9 | ||
|
|
3258851425 | ||
|
|
0f5450c6d2 | ||
|
|
07f18a1b05 | ||
|
|
02ecc82e73 | ||
|
|
0d111e0fb6 | ||
|
|
7af597eca2 | ||
|
|
64c71becc6 | ||
|
|
ffec77d50b | ||
|
|
d69b4282c8 | ||
|
|
aa973fc8ae | ||
|
|
8c91d40932 | ||
|
|
2f5fb6a996 | ||
|
|
cfc338c5f0 | ||
|
|
32403920fe | ||
|
|
e9384615dc | ||
|
|
07d965ea46 | ||
|
|
a43b70e360 | ||
|
|
095e11247d | ||
|
|
88162c683e | ||
|
|
cf3c696f7e | ||
|
|
02eaf787e9 | ||
|
|
e5c249e81c | ||
|
|
c0b868b53b | ||
|
|
39a14920e3 | ||
|
|
5cf9dea9a8 | ||
|
|
0b7eafaca0 | ||
|
|
ed8aeed818 | ||
|
|
0b91244f91 | ||
|
|
46c67a2f4e | ||
|
|
c87e925991 | ||
|
|
5fb80af90e | ||
|
|
77467209c2 | ||
|
|
cd613ded0a | ||
|
|
e8283173ba | ||
|
|
c08953b9b3 | ||
|
|
779749a515 | ||
|
|
7f5433b307 | ||
|
|
93525a6196 | ||
|
|
eee7e1ae53 | ||
|
|
e2f32c0984 | ||
|
|
edd1783353 | ||
|
|
1adde6084f | ||
|
|
34f160cec7 | ||
|
|
33b2b82ba9 | ||
|
|
2c81b33925 | ||
|
|
a9799f25a2 | ||
|
|
0e0eb3c2d5 | ||
|
|
98fd51b38b | ||
|
|
3c43aa12af | ||
|
|
e80d55e968 | ||
|
|
7fcfea2214 | ||
|
|
e06d39b70c | ||
|
|
b2eb23eb8d | ||
|
|
da71c0c746 | ||
|
|
0b24a8f39a | ||
|
|
8afa17d692 | ||
|
|
c72e2f159d | ||
|
|
f399b30605 | ||
|
|
b55164c454 | ||
|
|
27c7ea2ff1 | ||
|
|
ac50b4d80b | ||
|
|
2c4b479f50 | ||
|
|
00011b387a | ||
|
|
b01a93544f | ||
|
|
48bfc66048 | ||
|
|
1a7a23de3f | ||
|
|
59c4a00134 | ||
|
|
c873217cf1 | ||
|
|
ce146b679c | ||
|
|
e8fdf04e97 | ||
|
|
0f86b78d87 | ||
|
|
31fddaf10b | ||
|
|
30a0fb1cb3 | ||
|
|
3ba73ab1d9 | ||
|
|
7d7b8a71c1 | ||
|
|
4920d25479 | ||
|
|
a1c7265c41 | ||
|
|
2aea5b41ad | ||
|
|
9ab36b0269 | ||
|
|
b4e6d8c6d7 | ||
|
|
5c2d242ff8 | ||
|
|
a460644ae8 | ||
|
|
e177344ae1 | ||
|
|
8651a1ed45 | ||
|
|
8ec5fca4a0 | ||
|
|
52643a5c9b | ||
|
|
a7f06eea0b | ||
|
|
a5cb9b5679 | ||
|
|
538c1aa622 | ||
|
|
5f86088cfe | ||
|
|
fc1cd179ee | ||
|
|
69dec1bdf9 | ||
|
|
39d70a94a6 | ||
|
|
dab5e592e2 | ||
|
|
a3c3d91515 | ||
|
|
25e05de27d | ||
|
|
9f35728c6a | ||
|
|
76b0f80893 | ||
|
|
d17d291e07 | ||
|
|
b4991a49a2 | ||
|
|
d3753ee132 | ||
|
|
d98ce3864f | ||
|
|
038ab5eb90 | ||
|
|
4676961fc4 | ||
|
|
de7eb73867 | ||
|
|
58cd21686b | ||
|
|
be1bdbcd14 | ||
|
|
75d14565e4 | ||
|
|
bd4e14da89 | ||
|
|
8dd8d1d03a | ||
|
|
715fa47eb6 | ||
|
|
45b1794941 | ||
|
|
940d190bc8 | ||
|
|
ab0b1dd40c | ||
|
|
ac5be70c60 | ||
|
|
def1f31ba8 | ||
|
|
20ad30abc1 | ||
|
|
fbf25f861b | ||
|
|
2fb68bf7fc | ||
|
|
21b81f7999 | ||
|
|
8744b29edf | ||
|
|
ecf29c5be9 | ||
|
|
fbb43f8c3e | ||
|
|
613002c417 | ||
|
|
16a0950f63 | ||
|
|
a08714cd65 | ||
|
|
7686280cb2 | ||
|
|
115d4afd9e | ||
|
|
a6b8b7bfa9 | ||
|
|
cb7fd7106c | ||
|
|
62056cab14 | ||
|
|
9aa116bf3f | ||
|
|
70d356d0f4 | ||
|
|
bccdb131ee | ||
|
|
dd92196c40 | ||
|
|
c12f229c64 | ||
|
|
6b232ba7e8 | ||
|
|
d09c3b6b21 | ||
|
|
326dc2bbcc | ||
|
|
cba689dcd9 | ||
|
|
8f6d016df0 | ||
|
|
8724fe5619 | ||
|
|
d6cddd8c29 | ||
|
|
732bcc2b4d | ||
|
|
8600a41185 | ||
|
|
944b614431 | ||
|
|
cbeacf890d | ||
|
|
0687c52fdc | ||
|
|
dcca55a200 | ||
|
|
d655d0437d | ||
|
|
8dc79e73bd | ||
|
|
39359dd2f1 | ||
|
|
64c48ad237 | ||
|
|
ee0cfef31a | ||
|
|
5a22876176 | ||
|
|
ca01116700 | ||
|
|
c93000a6e2 | ||
|
|
058da752a1 | ||
|
|
4b477aed5d | ||
|
|
f7bc826262 | ||
|
|
5a701b7c61 | ||
|
|
78db1e3c36 | ||
|
|
1184752540 | ||
|
|
7c6e83c6fe | ||
|
|
0d926d4c7f | ||
|
|
595a0dfc55 | ||
|
|
466e969776 | ||
|
|
878c14dec0 | ||
|
|
4490f6f838 | ||
|
|
4746fbd346 | ||
|
|
5d619fd455 | ||
|
|
c5cbb33a06 | ||
|
|
a9ae7ca099 | ||
|
|
d21e1eb17e | ||
|
|
bb570a50ae | ||
|
|
36949aef99 | ||
|
|
557f33c4f9 | ||
|
|
eef295f9d8 | ||
|
|
b8377be1b5 | ||
|
|
789f169135 | ||
|
|
64446790d2 | ||
|
|
be4db5ce04 | ||
|
|
c90f831493 | ||
|
|
251bf05692 | ||
|
|
3e713cf58b | ||
|
|
78c098c9ea | ||
|
|
6bf2733628 | ||
|
|
a1608900ed | ||
|
|
745a91393c | ||
|
|
f4ea95da12 | ||
|
|
22f2ac0507 | ||
|
|
15ea450abe | ||
|
|
923168833c | ||
|
|
e385aec7f7 | ||
|
|
c42e00a090 | ||
|
|
e20e862c22 | ||
|
|
a5b5ede8fd | ||
|
|
07fa09f3c7 | ||
|
|
7e3a932890 | ||
|
|
3b9eef3bb7 | ||
|
|
90630e386b | ||
|
|
c1a7984e1f | ||
|
|
aa7720f226 | ||
|
|
8e58bcc4c0 | ||
|
|
caad254fca | ||
|
|
c649fcca94 | ||
|
|
f04fecb6c7 | ||
|
|
c69315bb43 | ||
|
|
4bddb5c36c | ||
|
|
9a793a30b3 | ||
|
|
f6275688e7 | ||
|
|
10077f13c4 | ||
|
|
1afcc5c835 | ||
|
|
149e093c88 | ||
|
|
99d1c99963 | ||
|
|
b5af4ead0d | ||
|
|
9b85e0a4cd | ||
|
|
0be4fb937f | ||
|
|
05eb956aab | ||
|
|
36cb8e8428 | ||
|
|
28b1f68750 | ||
|
|
0b58bfe6bf | ||
|
|
7dfcc73e95 | ||
|
|
cbb89b09b1 | ||
|
|
7d0ba9448b | ||
|
|
05b595d32d | ||
|
|
396a22b6be | ||
|
|
7be7d3a024 | ||
|
|
8ba7cea2f1 | ||
|
|
e3aa616edd | ||
|
|
dc8832192d | ||
|
|
72794f9524 | ||
|
|
b337b64eb1 | ||
|
|
67ef438730 | ||
|
|
29053098fc | ||
|
|
b9a3178b43 | ||
|
|
7d068130a4 | ||
|
|
cb070fc365 | ||
|
|
396f6c9d73 | ||
|
|
8b7eeca545 | ||
|
|
702bc8c8ce | ||
|
|
cba3dc9457 | ||
|
|
4baaff4566 | ||
|
|
bdcf1f986f | ||
|
|
7609038a16 | ||
|
|
619680e71f | ||
|
|
fec63c6cf3 | ||
|
|
3e031ad334 | ||
|
|
75cbf9165e | ||
|
|
b6924a84d6 | ||
|
|
96f3ac8a53 | ||
|
|
dd4639d602 | ||
|
|
bfa859e9ce | ||
|
|
b1eba4fc4c | ||
|
|
4b183f7988 | ||
|
|
fb3b2a4635 | ||
|
|
db3d0c6e21 | ||
|
|
cedfd12f6a | ||
|
|
c9013a39b8 | ||
|
|
e04f5a0938 | ||
|
|
48dd32f0e4 | ||
|
|
87c1023c4f | ||
|
|
7ab096d87f | ||
|
|
736879567f | ||
|
|
e2b27da2ef | ||
|
|
4baae7512b | ||
|
|
6949b41fb9 | ||
|
|
4fd1e16bb4 | ||
|
|
c0c9034326 | ||
|
|
6c7f5d1a6b | ||
|
|
c9920063dd | ||
|
|
40b916dc2e | ||
|
|
16e8df8f78 | ||
|
|
b9f9ad8027 | ||
|
|
30107e38f3 | ||
|
|
8ea3346a9d | ||
|
|
c067289012 | ||
|
|
cad4c6b8af | ||
|
|
2ec460bf8f | ||
|
|
acf5eb7a26 | ||
|
|
0431cf7fc1 | ||
|
|
259a534a71 | ||
|
|
2a22cf077c | ||
|
|
1f2f405057 | ||
|
|
5483f70d4b | ||
|
|
af1c70f192 | ||
|
|
d8e00e6586 | ||
|
|
eb1c36bf5b | ||
|
|
377bf554b6 | ||
|
|
1d27cb9251 | ||
|
|
5c57fd0170 | ||
|
|
d6f01b552a | ||
|
|
4fbfcdfee9 | ||
|
|
cba42ef277 | ||
|
|
4fc49390ed | ||
|
|
a73f58160f | ||
|
|
14f617681f | ||
|
|
52829d6f31 | ||
|
|
b2864add54 | ||
|
|
1219dcb1d8 | ||
|
|
39401469fd | ||
|
|
8a6a6624ae | ||
|
|
7aec8bd9d7 | ||
|
|
a5a2a7c52f | ||
|
|
2836285ba2 | ||
|
|
b9686fcb00 | ||
|
|
edb74a0839 | ||
|
|
1ccdbf27e2 | ||
|
|
5fbf0b9fe5 | ||
|
|
8428df97ca | ||
|
|
978979c39f | ||
|
|
0e0d0c7c2e | ||
|
|
f4b910bffc | ||
|
|
e20e75aeba | ||
|
|
46a9d4a69d | ||
|
|
35cbe968f4 | ||
|
|
23eaa47fea | ||
|
|
861c66d180 | ||
|
|
1d7d6561f6 | ||
|
|
6d1e918c78 | ||
|
|
1e7517dc98 | ||
|
|
60265b306f | ||
|
|
f12d6336cf | ||
|
|
05938fa6e1 | ||
|
|
cc9297327b | ||
|
|
3ac789f615 | ||
|
|
4c2ae44e4c | ||
|
|
32fb3f3c1f | ||
|
|
625508e32a | ||
|
|
39a0f46159 | ||
|
|
62baa0dccb | ||
|
|
1f17051bec | ||
|
|
ad9a67d6d1 | ||
|
|
0ccfa7900c | ||
|
|
d98f411ea9 | ||
|
|
c19fc3628c | ||
|
|
20132f8daa | ||
|
|
7e2add8db1 | ||
|
|
d6ecc531e0 | ||
|
|
ed941b5b95 | ||
|
|
41e4f3eed9 | ||
|
|
bd3eeb7111 | ||
|
|
f1e7782ca2 | ||
|
|
4ede084b8f | ||
|
|
a6faa77e5b | ||
|
|
e2c5d9a916 | ||
|
|
26f79bafc6 | ||
|
|
47a0009d32 | ||
|
|
e33468e661 | ||
|
|
e24bd7c0e8 | ||
|
|
569bf4d5a2 | ||
|
|
f65d856d13 | ||
|
|
1daf4b08e5 | ||
|
|
80df33c179 | ||
|
|
1fd9353d4d | ||
|
|
62921600bd | ||
|
|
686f52f636 | ||
|
|
947630e0f0 | ||
|
|
64d5457e2b | ||
|
|
ec19fc2b01 | ||
|
|
993e1eb1b6 | ||
|
|
1131e0f742 | ||
|
|
d92a836647 | ||
|
|
288ba1d1f9 | ||
|
|
9587d2bb3b | ||
|
|
c2a54f3524 | ||
|
|
097080ba97 | ||
|
|
6ab102fcbc | ||
|
|
290e160e13 | ||
|
|
af13d6da16 | ||
|
|
6b31fc4552 | ||
|
|
660a75a582 | ||
|
|
15914fe5e3 | ||
|
|
96450fee63 | ||
|
|
b79b2b1265 | ||
|
|
a93c0c8d94 | ||
|
|
644575415e | ||
|
|
b14834b06c | ||
|
|
0987c955f5 | ||
|
|
bdb43f84e8 | ||
|
|
401358568a | ||
|
|
6969d5c16f | ||
|
|
2d024fd7e6 | ||
|
|
94bba36713 | ||
|
|
c08ec7a1bd | ||
|
|
fa29ba9163 | ||
|
|
c1a022c40c | ||
|
|
a18d469c90 | ||
|
|
fdf7a459eb | ||
|
|
abea2c7172 | ||
|
|
6027fdc10c | ||
|
|
ca088e83f7 | ||
|
|
e334b87b4c | ||
|
|
53b9fe1c86 | ||
|
|
415e9c0ac5 | ||
|
|
dfa367a127 | ||
|
|
bc5e710d49 | ||
|
|
c80f760d07 | ||
|
|
3eac4ba59e | ||
|
|
287c53cd5a | ||
|
|
6710969143 | ||
|
|
6c7116a20c | ||
|
|
17a4faeb6b | ||
|
|
4df23bd576 | ||
|
|
33953e9119 | ||
|
|
94051a0991 | ||
|
|
f334b132d9 | ||
|
|
b47c9039d7 | ||
|
|
659316d3cb | ||
|
|
21cbc6e9e5 | ||
|
|
50391ae3fd | ||
|
|
ce637ecd4b | ||
|
|
5a870a102e | ||
|
|
3f5aafd263 | ||
|
|
c47876e9ce | ||
|
|
c638b2a500 | ||
|
|
78a48bbe7e | ||
|
|
57fbeced39 | ||
|
|
d3d1f92102 | ||
|
|
222de66a83 | ||
|
|
374941bfab | ||
|
|
d9fff8c480 | ||
|
|
fb6e59bab8 | ||
|
|
01ef5c664f | ||
|
|
da937e2618 | ||
|
|
e7bea6686b | ||
|
|
b780339abb | ||
|
|
bbc46c0990 | ||
|
|
1527daede8 | ||
|
|
5330121b36 | ||
|
|
3f78cfa092 | ||
|
|
8d1bf6f735 | ||
|
|
cc4dfaf951 | ||
|
|
d3f058cf1f | ||
|
|
87985e9e45 | ||
|
|
b056fa5914 | ||
|
|
fc7edd76e1 | ||
|
|
a705a37999 | ||
|
|
7ee68d98d6 | ||
|
|
ac4827c33b | ||
|
|
140494454a | ||
|
|
43449be18c | ||
|
|
b37c5ff8c7 | ||
|
|
150a438a77 | ||
|
|
fb91ec1b75 | ||
|
|
9556e64c54 | ||
|
|
150b91f195 | ||
|
|
af7f58b4d2 | ||
|
|
0f525c8401 | ||
|
|
b7b94da285 | ||
|
|
1780973bb3 | ||
|
|
85bb7bf772 | ||
|
|
2f42481346 | ||
|
|
f5e2157658 | ||
|
|
48839983fd | ||
|
|
36d18ba5cb | ||
|
|
a607ab2d94 | ||
|
|
ec33c3e7ec | ||
|
|
9924fae378 | ||
|
|
05f3efbc97 | ||
|
|
e797eb17eb | ||
|
|
fc0e36b313 | ||
|
|
c78904501d | ||
|
|
501bff6f7a | ||
|
|
12f82820c9 | ||
|
|
66cb4e3bcf | ||
|
|
51c22608b2 | ||
|
|
034e96f713 | ||
|
|
97bd417ea8 | ||
|
|
7ce03f3bea | ||
|
|
636ab5cbab | ||
|
|
eef7461ae6 | ||
|
|
49b5ab71c2 | ||
|
|
bf25fcc919 | ||
|
|
b429a38176 | ||
|
|
c8945883c1 | ||
|
|
40013fb26c | ||
|
|
58aca506fe | ||
|
|
8700a17dad | ||
|
|
1d01b5a8a2 | ||
|
|
207812582d | ||
|
|
f1aa82ad36 | ||
|
|
5cb64f7602 | ||
|
|
70b2ead852 | ||
|
|
7e8cc539dc | ||
|
|
fb448bcecc | ||
|
|
e4eeba2aa7 | ||
|
|
8b815d4aac | ||
|
|
e046101305 | ||
|
|
88fc8772d1 | ||
|
|
4549abb6b3 | ||
|
|
13a3b153e5 | ||
|
|
2353702f0b | ||
|
|
0e38d1b82b | ||
|
|
e03676f138 | ||
|
|
faab0c3896 | ||
|
|
bf38a0caa8 | ||
|
|
319701dbbd | ||
|
|
a026353df8 | ||
|
|
c5e1e74757 | ||
|
|
a66dfff39d | ||
|
|
38f0809858 | ||
|
|
f3ee014cbd | ||
|
|
64ddfc0eb7 | ||
|
|
8fbe2fb8f2 | ||
|
|
ff5b92aaeb | ||
|
|
1b327d1997 | ||
|
|
eba306618c | ||
|
|
b923f5fcfa | ||
|
|
64aa739224 | ||
|
|
366dd3a973 | ||
|
|
f43b3b0ce5 | ||
|
|
3ca7bb854f | ||
|
|
97d3b6c7db | ||
|
|
28e1e34407 | ||
|
|
5a0731587a | ||
|
|
4577acae71 | ||
|
|
f9fee9103b | ||
|
|
6c12829cd4 | ||
|
|
a9399030f4 | ||
|
|
e6e49091b6 | ||
|
|
3ce1589681 | ||
|
|
42ac0d577d | ||
|
|
37c0de5d7d | ||
|
|
7b18ce10fe | ||
|
|
89c8a7f907 | ||
|
|
3de2e625b5 | ||
|
|
8c8be6461c | ||
|
|
292d76b39e | ||
|
|
294282c7ca | ||
|
|
0a543d0e95 | ||
|
|
48f2e2744c | ||
|
|
e408049bae | ||
|
|
d053742ca4 | ||
|
|
59edf50c02 | ||
|
|
fea1b9cf82 | ||
|
|
f72f4aa359 | ||
|
|
e32019882e | ||
|
|
63c7d14638 | ||
|
|
6ab43e4582 | ||
|
|
ec32099d2f | ||
|
|
66c4b9d05a | ||
|
|
fead2b25be | ||
|
|
3c56c0e4b7 | ||
|
|
c63442732b | ||
|
|
4d5c915144 | ||
|
|
323fcad8a7 | ||
|
|
31818bb67a | ||
|
|
6bd0ea7a02 | ||
|
|
53f460ca7d | ||
|
|
79de2ad571 | ||
|
|
17f18e795f | ||
|
|
ca33283930 | ||
|
|
262d1a1c95 | ||
|
|
9da8a188fa | ||
|
|
c35d449d7e | ||
|
|
9b7a38ac52 | ||
|
|
948feeb11f | ||
|
|
740164fbd0 | ||
|
|
5abb748c3e | ||
|
|
ff3555cf1d | ||
|
|
89a2e427f3 | ||
|
|
ff25afb88e | ||
|
|
55b917f24b | ||
|
|
a008f9ba79 | ||
|
|
1c0b826d23 | ||
|
|
59b47847d7 | ||
|
|
486e68b8be | ||
|
|
b640df5bdd | ||
|
|
9abbd30790 | ||
|
|
cf28d7df32 | ||
|
|
f404fdcf8a | ||
|
|
08062e67ca | ||
|
|
8967a510c9 | ||
|
|
e56a1f3e2d | ||
|
|
b1e6eaad61 | ||
|
|
b9cbf08b51 | ||
|
|
aeb4867bdf | ||
|
|
5f52bb59dd | ||
|
|
a0b8676f61 | ||
|
|
5e0daccf76 | ||
|
|
7a4951f211 | ||
|
|
d8c5bc4320 | ||
|
|
5303a36ff4 | ||
|
|
e70f115b48 | ||
|
|
8388f1e7ba | ||
|
|
f623d563b1 | ||
|
|
0fd1e0963e | ||
|
|
026334a71a | ||
|
|
83ec0f3d90 | ||
|
|
ed2b8ea1de | ||
|
|
be72cee6be | ||
|
|
ff877d6e91 | ||
|
|
b0846908da | ||
|
|
428e432732 | ||
|
|
ff6f0825b8 | ||
|
|
713ddb5f62 | ||
|
|
1806866bf5 | ||
|
|
696cb0fa05 | ||
|
|
cf948603cf | ||
|
|
426cc683eb | ||
|
|
027f23bc47 | ||
|
|
6833fdd731 | ||
|
|
4a3bcfa202 | ||
|
|
f3bb4776e4 | ||
|
|
c2acaa2fc8 | ||
|
|
4c34781b15 | ||
|
|
a3202ccb2d | ||
|
|
ca43f938bd | ||
|
|
b3a3b8beab | ||
|
|
cdc1248794 | ||
|
|
adc7155fe9 | ||
|
|
e247867abf | ||
|
|
aa6c199e98 | ||
|
|
932dcd9666 | ||
|
|
103cf0eba5 | ||
|
|
ff4a409e27 | ||
|
|
b02f81505b | ||
|
|
ec86152396 | ||
|
|
cdcc4e7314 | ||
|
|
d206b1c403 | ||
|
|
7a18ceab64 | ||
|
|
ea3dffe78d | ||
|
|
fd1c26408b | ||
|
|
7dc0c1d05c | ||
|
|
a7cf698d09 | ||
|
|
91049445dd | ||
|
|
6ae91592d1 | ||
|
|
22cc658dca | ||
|
|
10c6a4f8dc | ||
|
|
9c4573fd80 | ||
|
|
a48828e7a3 | ||
|
|
e0a3420cd9 | ||
|
|
1a64af2743 | ||
|
|
53ae657cc9 | ||
|
|
e0b670f229 | ||
|
|
36be50993e | ||
|
|
73fe22be79 | ||
|
|
9dc27c44e6 | ||
|
|
8b236e7bc8 | ||
|
|
83b207e7da | ||
|
|
fbd2f969a2 | ||
|
|
42220b1cb2 | ||
|
|
1c705cf9be | ||
|
|
2a86afc64c | ||
|
|
9ff015e73c | ||
|
|
3515e74204 | ||
|
|
9fd949335b | ||
|
|
9d307cf9ba | ||
|
|
c53c966222 | ||
|
|
895feeb4ad | ||
|
|
9e231641f2 | ||
|
|
ec1678abdc | ||
|
|
a8724b9764 | ||
|
|
af2fc30b95 | ||
|
|
0a7d9a69f7 | ||
|
|
25b6a0a1cf | ||
|
|
287f8d12de | ||
|
|
014ae2ea3f | ||
|
|
6814ad9e95 | ||
|
|
9c61670c9f | ||
|
|
3841bc5253 | ||
|
|
e987b3074d | ||
|
|
a562e73d34 | ||
|
|
81e2657bed | ||
|
|
706019d639 | ||
|
|
33aea87dea | ||
|
|
18a7e85c6a | ||
|
|
d1a9406bff | ||
|
|
98184e5835 | ||
|
|
622e8b7d21 | ||
|
|
67bc0c23ef | ||
|
|
34e409f313 | ||
|
|
5c34c10d4e | ||
|
|
64af035ce9 | ||
|
|
acc26744e3 | ||
|
|
94d6b85d72 | ||
|
|
628b37dc4d | ||
|
|
ff9daec5ec | ||
|
|
d5e6786bc7 | ||
|
|
d2e00282e2 | ||
|
|
5d9bcde50d | ||
|
|
046b56bab1 | ||
|
|
4021107124 | ||
|
|
8e18e0b536 | ||
|
|
213c9d683f | ||
|
|
b3413c85e3 | ||
|
|
8e1b0c459f | ||
|
|
4d95bc0365 | ||
|
|
ffcf7ccbf9 | ||
|
|
1d4e7e2642 | ||
|
|
181ed62ec2 | ||
|
|
cbea043ca1 | ||
|
|
45aa274a9e | ||
|
|
8ecdfb4298 | ||
|
|
c07053bce5 | ||
|
|
6eec5c3842 | ||
|
|
cc9d519fac | ||
|
|
3f0eee4c39 | ||
|
|
799b6d8f7c | ||
|
|
d9fba3a186 | ||
|
|
1fabf7f494 | ||
|
|
030a771b87 | ||
|
|
bb07d36963 | ||
|
|
a5af64b907 | ||
|
|
2e2fd34dde | ||
|
|
35997a07e7 | ||
|
|
4c64124588 | ||
|
|
953fb31e14 | ||
|
|
d7eb9f723f | ||
|
|
c752183199 | ||
|
|
adfef8e2bb | ||
|
|
cc0d467927 | ||
|
|
8f5a58a163 | ||
|
|
c42a90db8a | ||
|
|
b172cd6a16 | ||
|
|
822593d761 | ||
|
|
582c480611 | ||
|
|
4cfcda5d2f | ||
|
|
2480d08e0f | ||
|
|
cddb24bc50 | ||
|
|
5465842af0 | ||
|
|
14d29c7a92 | ||
|
|
d3f5e6e931 | ||
|
|
87d255ca91 | ||
|
|
2fca1033a0 | ||
|
|
be011a4f3d | ||
|
|
4ab06b4a2a | ||
|
|
0e6d8ed030 | ||
|
|
87487e6cdb | ||
|
|
9e078c0fa8 | ||
|
|
c2637be03f | ||
|
|
461849c276 | ||
|
|
a824d9dd59 | ||
|
|
7b96bf857c | ||
|
|
83bfdf9b3c | ||
|
|
7710d5e21c | ||
|
|
13bbaf9e4f | ||
|
|
77aae3c456 | ||
|
|
a737d1167c | ||
|
|
a954f22fe8 | ||
|
|
f828951fc4 | ||
|
|
bbaf2ac46d | ||
|
|
789c8e971f | ||
|
|
d3d666d773 | ||
|
|
d636b46460 | ||
|
|
2531385f1a | ||
|
|
081fab7466 | ||
|
|
a305c03238 | ||
|
|
6442854fb5 | ||
|
|
9d3654bd69 | ||
|
|
d2c3ab8844 | ||
|
|
d48a2ce870 | ||
|
|
8d74de09cc | ||
|
|
5dca51637c | ||
|
|
41508f7f67 | ||
|
|
02362d8aa4 | ||
|
|
500e59a3cf | ||
|
|
7db655c0c1 | ||
|
|
a483734190 | ||
|
|
ec56cb9d28 | ||
|
|
2ab5d2b647 | ||
|
|
749138791a | ||
|
|
6d881fa34e | ||
|
|
2a7b5a572f | ||
|
|
0c2a7e21c4 | ||
|
|
aa4f992e30 | ||
|
|
669a3a7673 | ||
|
|
c5e9aa6357 | ||
|
|
998c0cb7b3 | ||
|
|
e701da7390 | ||
|
|
19cd831225 | ||
|
|
56ac25155b | ||
|
|
94902e7aad | ||
|
|
c8666f0029 | ||
|
|
e770065277 | ||
|
|
8d33987f1c | ||
|
|
49fe54bc16 | ||
|
|
d93c701cf6 | ||
|
|
a8b3042b49 | ||
|
|
24ba9d8e8c | ||
|
|
af32e3c296 | ||
|
|
beb43c69dc | ||
|
|
bcf31d2317 | ||
|
|
b673a0d896 | ||
|
|
398675597a | ||
|
|
6bc5808c53 | ||
|
|
c38face9fc | ||
|
|
5219c25189 | ||
|
|
6122e3bb54 | ||
|
|
3a04f64545 | ||
|
|
5f911ed0d8 | ||
|
|
fc8eb888e4 | ||
|
|
d2ad900bc5 | ||
|
|
c5e856c4b8 | ||
|
|
1979ea53c7 | ||
|
|
16e28bb998 | ||
|
|
368d71b6ce | ||
|
|
8667af879c | ||
|
|
4bcf0637f9 | ||
|
|
5e98bf96bc | ||
|
|
201a27e4b3 | ||
|
|
ad871694cc | ||
|
|
bf62b9ccb7 | ||
|
|
1647fc54e1 | ||
|
|
0384f55de1 | ||
|
|
964c7b1d28 | ||
|
|
db5e181b4f | ||
|
|
abfc30db8b | ||
|
|
4925c6ce50 | ||
|
|
cc6ee1ddd2 | ||
|
|
80f897a513 | ||
|
|
b4fcb61d64 | ||
|
|
dd25bb0fff | ||
|
|
e17c50d304 | ||
|
|
d50e9f7fc2 | ||
|
|
0a3a90b400 | ||
|
|
4fc0f288c7 | ||
|
|
8ef3f232ab | ||
|
|
3d0078c73d | ||
|
|
51c7551d3f | ||
|
|
a62fc2fbff | ||
|
|
25be215180 | ||
|
|
0da2382c7d | ||
|
|
1d3be06cb5 | ||
|
|
ff095fc7c4 | ||
|
|
1904a64e42 | ||
|
|
8a76122949 | ||
|
|
ae82a4b279 | ||
|
|
3c52139ce5 | ||
|
|
794cbed57c | ||
|
|
5b09122676 | ||
|
|
19f96799df | ||
|
|
b100df3160 | ||
|
|
176ea5949b | ||
|
|
f79844e926 | ||
|
|
2d0f09144d | ||
|
|
e3a172e0e8 | ||
|
|
b519af280b | ||
|
|
64d9fd0a0b | ||
|
|
9002961e5d | ||
|
|
7e51a2f517 | ||
|
|
bb78d91d1b | ||
|
|
b086e1fd83 | ||
|
|
cc55c8db89 | ||
|
|
8875d8b741 | ||
|
|
af97ed78ef | ||
|
|
992dff64af | ||
|
|
b8ec021a07 | ||
|
|
406119d96c | ||
|
|
869b90121c | ||
|
|
bedfad002d | ||
|
|
9acc59d099 | ||
|
|
d13ee8db29 | ||
|
|
9817a9b20f | ||
|
|
56fb24c24a | ||
|
|
5d4bac85e5 | ||
|
|
545c76a411 | ||
|
|
e3e0e3db19 | ||
|
|
5fbb8b6204 | ||
|
|
1b11a6cd4b | ||
|
|
add5404f5e | ||
|
|
0b6b2e733a | ||
|
|
fc8d6d6e90 | ||
|
|
ffe2fea81c | ||
|
|
c80db7933c | ||
|
|
2b5514a944 | ||
|
|
61361dd2b8 | ||
|
|
01848e7d5b | ||
|
|
bc08512327 | ||
|
|
f64b572150 | ||
|
|
04d779c741 | ||
|
|
45a1dee9f1 | ||
|
|
f052ecffc0 | ||
|
|
9a6516a8b3 | ||
|
|
98c50afe8e | ||
|
|
94ca48674a | ||
|
|
d147b41d19 | ||
|
|
9ed3be335e | ||
|
|
ed1184fcf8 | ||
|
|
0203bbc7ef | ||
|
|
3765131d21 | ||
|
|
033ee23eba | ||
|
|
83e2ee04d1 | ||
|
|
6d1283f92d | ||
|
|
8459a45d72 | ||
|
|
4d9dfe7d04 | ||
|
|
2b00480605 | ||
|
|
a2a18d4b4a | ||
|
|
e2b00dda1b | ||
|
|
bfabcea6e9 | ||
|
|
05d3633cdf | ||
|
|
5a5da5f720 | ||
|
|
a87c07df93 | ||
|
|
d38d0ce805 | ||
|
|
04b1e26041 | ||
|
|
769f58970e | ||
|
|
9ac233f244 | ||
|
|
985546fff6 | ||
|
|
01a9a41bd9 | ||
|
|
0cb00c7b4f | ||
|
|
40e0175ee5 | ||
|
|
16bcb7d4a2 | ||
|
|
2de965d710 | ||
|
|
ab5d53f3b1 | ||
|
|
eb60b3892d | ||
|
|
703cefd9ae | ||
|
|
1bff94d0ea | ||
|
|
93f5fbc797 | ||
|
|
76a6feb2e7 | ||
|
|
ca8b5c68fd | ||
|
|
b128ba2f57 | ||
|
|
43022b7aa2 | ||
|
|
cbf5886430 | ||
|
|
d967d5046d | ||
|
|
3b95a416ca | ||
|
|
ec47a2aa66 | ||
|
|
b73aa6d000 | ||
|
|
b8f63adf41 | ||
|
|
7086719640 | ||
|
|
603ce21d24 | ||
|
|
0c9c57e608 | ||
|
|
18b77f15dd | ||
|
|
e1942d8c9e | ||
|
|
ad59380676 | ||
|
|
0f46f070ed | ||
|
|
1d0ac0f7dc | ||
|
|
71c962f51c | ||
|
|
7c729d5f0e | ||
|
|
317a17337d | ||
|
|
9a317f3ba6 | ||
|
|
5625fe0969 | ||
|
|
72f819ec67 | ||
|
|
e58b9c767b | ||
|
|
71a4b20d90 | ||
|
|
af1e9210b9 | ||
|
|
fe0577be5f | ||
|
|
37082a955b | ||
|
|
92741680b5 | ||
|
|
bbef9acaf6 | ||
|
|
f48a3c7dcb | ||
|
|
a84118823e | ||
|
|
78757564c8 | ||
|
|
41a3345101 | ||
|
|
6b6efd1c4d | ||
|
|
d53f2b69f2 | ||
|
|
5c04f1aa2e | ||
|
|
2de89dcaaf | ||
|
|
f2cc897f2f | ||
|
|
56e2c9db97 | ||
|
|
8ca8cb9409 | ||
|
|
0d518a5cb6 | ||
|
|
0f53fc8511 | ||
|
|
d7307fd334 | ||
|
|
ee1f97d124 | ||
|
|
09e2c0eac0 | ||
|
|
f873ab5374 | ||
|
|
8bcd1e4e60 | ||
|
|
e455114441 | ||
|
|
306b184e11 | ||
|
|
c8ef4733d0 | ||
|
|
71647c886d | ||
|
|
3583b094d0 | ||
|
|
da927f4897 | ||
|
|
f771d3a4bb | ||
|
|
d4fdd4601e | ||
|
|
b12c1f8740 | ||
|
|
ef91207669 | ||
|
|
d45072fae5 | ||
|
|
ff4c5392d6 | ||
|
|
485265979e | ||
|
|
88a443f73d | ||
|
|
2d27a97b8c | ||
|
|
06d454473c | ||
|
|
ae5254e8a9 | ||
|
|
1e94c3bd81 | ||
|
|
6179b216c5 | ||
|
|
76f581289c | ||
|
|
7bd0d55c83 | ||
|
|
084203debc | ||
|
|
b34078c6d2 | ||
|
|
b6765e00eb | ||
|
|
2567ed5784 | ||
|
|
3cffcc8f5b | ||
|
|
b4e5717bde | ||
|
|
9a7859c5cb | ||
|
|
e1fa1b0396 | ||
|
|
c2b23465cc | ||
|
|
271b6d91fc | ||
|
|
3766fa7f0b | ||
|
|
626681c5ba | ||
|
|
9c9fb293da | ||
|
|
2bc60c9142 | ||
|
|
0f11033989 | ||
|
|
c0c4524ec3 | ||
|
|
8b7ce2c276 | ||
|
|
5e4d3cc535 | ||
|
|
f6e7221359 | ||
|
|
d7ad375232 | ||
|
|
9c418188ee | ||
|
|
b69af1341b | ||
|
|
233652c3f1 | ||
|
|
923f2fc7c4 | ||
|
|
f5793e9a7a | ||
|
|
f96653e9af | ||
|
|
8c24d28740 | ||
|
|
d1c94ac73d | ||
|
|
fa6b77b42c | ||
|
|
4c6e7d4f4f | ||
|
|
53887c32bf | ||
|
|
060d7ba46b | ||
|
|
5877b49f64 | ||
|
|
352eb15dc7 | ||
|
|
66a1123268 | ||
|
|
95312f2d14 | ||
|
|
6145dc76fc | ||
|
|
526ee51485 | ||
|
|
1dab98c6a0 | ||
|
|
7e46e46080 | ||
|
|
81b0d1138b | ||
|
|
81f52a82c8 | ||
|
|
a7fd7d67b3 | ||
|
|
96c360e728 | ||
|
|
3e3f06c55d | ||
|
|
1745aaaa0a | ||
|
|
c67ed7d7d2 | ||
|
|
f6d8f9f5c5 | ||
|
|
a4c12555cb | ||
|
|
8d1868305d | ||
|
|
2cdee919c1 | ||
|
|
3f8c36789f | ||
|
|
631a08189a | ||
|
|
4808df5e95 | ||
|
|
4585597388 | ||
|
|
8f73956d1e | ||
|
|
8f2bda2309 | ||
|
|
9dde195af4 | ||
|
|
9468c80a78 | ||
|
|
1fecf70123 | ||
|
|
a11f42b3e0 | ||
|
|
683528b81c | ||
|
|
02b0f35442 | ||
|
|
1a5e60c44f | ||
|
|
a16e3523bd | ||
|
|
50c930f5fa | ||
|
|
9cdcad7a88 | ||
|
|
59f5c0d955 | ||
|
|
64e6700228 | ||
|
|
7414394ceb | ||
|
|
8b62cd1f04 | ||
|
|
239e3bb6f1 | ||
|
|
b283c0ba18 | ||
|
|
e59471d87d | ||
|
|
6bebce7015 | ||
|
|
eb65ab6b4b | ||
|
|
3a69d50458 | ||
|
|
9c45a62b53 | ||
|
|
ed59584fe4 | ||
|
|
bf7de8e7a5 | ||
|
|
9c745db413 | ||
|
|
7d0ed90796 | ||
|
|
b0681f55e9 | ||
|
|
86b30b3c83 | ||
|
|
b92e2fcfc9 | ||
|
|
b1f6664292 | ||
|
|
cb635f6706 | ||
|
|
e46468321d | ||
|
|
4ad2fbf7bb | ||
|
|
64e1e004ae | ||
|
|
524626b895 | ||
|
|
b804f7db03 | ||
|
|
d4657dcd32 | ||
|
|
f905dc07cf | ||
|
|
76dd163f0e | ||
|
|
659009c1de | ||
|
|
35fb3bb38f | ||
|
|
6da3a07bc0 | ||
|
|
65da59c7f6 | ||
|
|
c16837538e | ||
|
|
3e0d8d1920 | ||
|
|
b743b21840 | ||
|
|
36eea6bdda | ||
|
|
45adff6087 | ||
|
|
837e3e5e83 | ||
|
|
23869cd61f | ||
|
|
e95eb14651 | ||
|
|
2556771c32 | ||
|
|
1b9d219988 | ||
|
|
ceb29547e2 | ||
|
|
95f63f6af8 | ||
|
|
74f7fee8b5 | ||
|
|
d90b2621da | ||
|
|
93bc1f3c57 | ||
|
|
41ceda01d0 | ||
|
|
e8f0454b39 | ||
|
|
f97e294c80 | ||
|
|
4e3783c544 | ||
|
|
2adca6bbc4 | ||
|
|
7e1e068370 | ||
|
|
99c7a50fd6 | ||
|
|
3297546e0a | ||
|
|
48336fd7f4 | ||
|
|
fbf7b4aec3 | ||
|
|
db7d72cca8 | ||
|
|
3381516013 | ||
|
|
628e609e6a | ||
|
|
5c1493bd7e | ||
|
|
725726f083 | ||
|
|
ea3203f466 | ||
|
|
f615ef30f9 | ||
|
|
fd1f71587f | ||
|
|
e1c5a06bf0 | ||
|
|
3bc373fff0 | ||
|
|
20bc17eb6f | ||
|
|
4a17ad312f | ||
|
|
7066841467 | ||
|
|
c0c9543323 | ||
|
|
4c50940634 | ||
|
|
f7836b67af | ||
|
|
e3225b6565 | ||
|
|
0bbe35a7f6 | ||
|
|
662d0d5699 | ||
|
|
8f72beb9d6 | ||
|
|
b507eb8857 | ||
|
|
aaab5c51a7 | ||
|
|
955bb22cd1 | ||
|
|
37b19e0be2 | ||
|
|
a5ad956088 | ||
|
|
1e1e1f027a | ||
|
|
2c013c9f0f | ||
|
|
c5ca45c461 | ||
|
|
04fa7dee68 | ||
|
|
efe613d13e | ||
|
|
befd4b1fa8 | ||
|
|
6d26d5833f | ||
|
|
345cfd7c60 | ||
|
|
c956f730e9 | ||
|
|
5f81d2b4b1 | ||
|
|
8f020c1ee6 | ||
|
|
4f7bcc2919 | ||
|
|
50b1ba5c80 | ||
|
|
11cfea3860 | ||
|
|
5e0dfff42a | ||
|
|
53bd2c2dc6 | ||
|
|
6820b85902 | ||
|
|
b36004b702 | ||
|
|
6465dc951c | ||
|
|
2d8aff6ca0 | ||
|
|
fbe7b56054 | ||
|
|
cb05d2924f | ||
|
|
ae0624ae8a | ||
|
|
44f9ba4a57 | ||
|
|
7686c33cbd | ||
|
|
ca8e14455f | ||
|
|
31be1ae026 | ||
|
|
598ff0eecd | ||
|
|
2906cde6d2 | ||
|
|
1135821870 | ||
|
|
5ebc9d7d2e | ||
|
|
227a4dd8d0 | ||
|
|
7360533bc8 | ||
|
|
64ffed0ddb | ||
|
|
4c2e309bdc | ||
|
|
c56fe813a5 | ||
|
|
7b66777600 | ||
|
|
a0c85431dc | ||
|
|
38f642d361 | ||
|
|
bd799ea51a | ||
|
|
7c61017f57 | ||
|
|
6e2ee9a21f | ||
|
|
a86a8c6a34 | ||
|
|
f725cc2307 | ||
|
|
1bee39a67e | ||
|
|
7d91cca14d | ||
|
|
5677b1e5f8 | ||
|
|
0795b22ae6 | ||
|
|
3d1a9624c1 | ||
|
|
4f9eaf850d | ||
|
|
25b89f7624 | ||
|
|
c5ca394cec | ||
|
|
faff8d1fb3 | ||
|
|
ab8e9a8ea5 | ||
|
|
f28e8126af | ||
|
|
d336cade85 | ||
|
|
e5ef6a7b21 | ||
|
|
9470c68c18 | ||
|
|
828235dd9b | ||
|
|
1ac13a2788 | ||
|
|
58e4f766d8 | ||
|
|
9c30d983bd | ||
|
|
74e3f976c1 | ||
|
|
131ff4de48 | ||
|
|
7b0a6e7377 | ||
|
|
0b7bde2775 | ||
|
|
86a3696ab4 | ||
|
|
3a4ff2677e | ||
|
|
7d979fb196 | ||
|
|
a91762fb30 | ||
|
|
0c823455a0 | ||
|
|
bf974e73ce | ||
|
|
9dfa5ea77d | ||
|
|
c2f1a7bdc5 | ||
|
|
efa971edb4 | ||
|
|
0747329575 | ||
|
|
70be075dcd | ||
|
|
b5b9ee46a1 | ||
|
|
bf8e569bde | ||
|
|
b38847680b | ||
|
|
3b35398925 | ||
|
|
7c6d34408c | ||
|
|
ce5f63291e | ||
|
|
8ce7ccb031 | ||
|
|
8f8adcf71b | ||
|
|
953a9d7fd1 | ||
|
|
56a4263a5c | ||
|
|
4fff26c571 | ||
|
|
cc5cfa0997 | ||
|
|
74719f2805 | ||
|
|
b397ba7787 | ||
|
|
c4d61f5a55 | ||
|
|
38278c179e | ||
|
|
ae7059aec1 | ||
|
|
5809710149 | ||
|
|
07527ba69b | ||
|
|
20c23ff6d8 | ||
|
|
0d9757d438 | ||
|
|
0133b750ee | ||
|
|
fe416c838b | ||
|
|
143ae19b8d | ||
|
|
b2b14051c3 | ||
|
|
e6821a610b | ||
|
|
74c620e478 | ||
|
|
cb052f1988 | ||
|
|
931a399890 | ||
|
|
02e799c917 | ||
|
|
0957670d4e | ||
|
|
08e00ccebc | ||
|
|
38b69c91a1 | ||
|
|
63c9aaea35 | ||
|
|
7f2ff5af5c | ||
|
|
7ecc0169df | ||
|
|
903b300b9e | ||
|
|
9f992a9e5d | ||
|
|
d548a5bc50 | ||
|
|
826d2d913c | ||
|
|
04d0ab4adf | ||
|
|
0b4a874f30 | ||
|
|
473afd950c | ||
|
|
7f2e87b27d | ||
|
|
2f37f0ca51 | ||
|
|
1711834229 | ||
|
|
9e0998c4d5 | ||
|
|
ba027e992e | ||
|
|
e7dc6df723 | ||
|
|
74e794b416 | ||
|
|
3299b0c1b0 | ||
|
|
08880ebd2e | ||
|
|
ed90045deb | ||
|
|
609c41154f | ||
|
|
7b6469bd35 | ||
|
|
dfb66b427c | ||
|
|
39bfb575da | ||
|
|
901e3ede39 | ||
|
|
e89f205aa6 | ||
|
|
dccd4f0bba | ||
|
|
99c6b171e4 | ||
|
|
0f5d4cd7b7 | ||
|
|
e256f734df | ||
|
|
9ed2506062 |
No files matched your search
@@ -1,4 +1,3 @@
|
||||
.git
|
||||
web/node_modules
|
||||
web/*.log
|
||||
web/regression
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve pgAdmin
|
||||
title: ''
|
||||
labels: Bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**_Please note that security bugs or issues should be reported to security@pgadmin.org._**
|
||||
|
||||
**Describe the bug**
|
||||
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. See the error
|
||||
|
||||
**Expected behavior**
|
||||
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Error message**
|
||||
|
||||
If possible, include the full, unedited text of any error messages displayed.
|
||||
|
||||
**Screenshots**
|
||||
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Desktop (please complete the following information):**
|
||||
- OS: [e.g. Windows 10, OSX monterey]
|
||||
- pgAdmin version: [e.g. 6.15]
|
||||
- Mode: [e.g Desktop or Server]
|
||||
- Browser (if running in server mode): [e.g. chrome, safari]
|
||||
- Package type: [e.g. RPM, DEB, Python, Container, etc.]
|
||||
|
||||
**Additional context**
|
||||
|
||||
Add any other context about the problem here.
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea or new feature for pgAdmin
|
||||
title: ''
|
||||
labels: Feature
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the solution you'd like**
|
||||
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
|
||||
Add any other context or screenshots about the feature request here.
|
||||
@@ -0,0 +1,55 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "docker"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- "Dependencies"
|
||||
commit-message:
|
||||
prefix: "Docker dependency"
|
||||
|
||||
- package-ecosystem: "pip"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- "Dependencies"
|
||||
commit-message:
|
||||
prefix: "Python dependency"
|
||||
|
||||
- package-ecosystem: "pip"
|
||||
directory: "/tools"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- "Dependencies"
|
||||
commit-message:
|
||||
prefix: "Python dependency"
|
||||
|
||||
- package-ecosystem: "pip"
|
||||
directory: "/web/regression"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- "Dependencies"
|
||||
commit-message:
|
||||
prefix: "Python dependency"
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/runtime"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- "Dependencies"
|
||||
commit-message:
|
||||
prefix: "Javascript dependency"
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/web"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- "Dependencies"
|
||||
commit-message:
|
||||
prefix: "Javascript dependency"
|
||||
@@ -0,0 +1,28 @@
|
||||
name: Check container build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build-container:
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Build the container
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
push: false
|
||||
context: .
|
||||
@@ -0,0 +1,61 @@
|
||||
name: Check documentation builds
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build-docs:
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install platform dependencies
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev latexmk texlive-latex-recommended tex-gyre texlive-latex-extra
|
||||
|
||||
- name: Install Python dependencies
|
||||
run: make install-python
|
||||
|
||||
- name: Check the HTML build
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
make docs
|
||||
|
||||
- name: Archive HTML
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: pgadmin4-html-build-output
|
||||
path: docs/en_US/_build/html/*
|
||||
|
||||
- name: Check the ePub build
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
make docs-epub
|
||||
|
||||
- name: Archive ePub
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: pgadmin4-epub-build-output
|
||||
path: docs/en_US/_build/epub/pgAdmin4.epub
|
||||
|
||||
- name: Check the PDF build
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
make docs-pdf
|
||||
|
||||
- name: Archive PDF
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: pgadmin4-pdf-build-output
|
||||
path: docs/en_US/_build/latex/pgadmin4.pdf
|
||||
@@ -0,0 +1,35 @@
|
||||
name: Check Javascript style
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
check-javascript-style:
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Upgrade yarn
|
||||
run: |
|
||||
yarn set version berry
|
||||
yarn set version 4
|
||||
|
||||
- name: Install Node modules
|
||||
run: |
|
||||
cd web
|
||||
yarn install
|
||||
|
||||
- name: Run the linter
|
||||
run: |
|
||||
cd web
|
||||
yarn run linter
|
||||
@@ -0,0 +1,39 @@
|
||||
name: Check Python build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build-python-package:
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install platform dependencies
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev
|
||||
|
||||
- name: Install Python dependencies
|
||||
run: make install-python
|
||||
|
||||
- name: Check the Python wheel build
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
make pip
|
||||
|
||||
- name: Archive Python wheel
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: pgadmin4-python-build-output
|
||||
path: dist/*
|
||||
@@ -0,0 +1,37 @@
|
||||
name: Check Python style
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
check-python-style:
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install Python dependencies
|
||||
run: |
|
||||
sudo pip install --upgrade pip
|
||||
sudo pip install pycodestyle
|
||||
|
||||
- name: Check the documentation
|
||||
run: pycodestyle --config=.pycodestyle docs/
|
||||
|
||||
- name: Check the packaging
|
||||
run: pycodestyle --config=.pycodestyle pkg/
|
||||
|
||||
- name: Check the application
|
||||
run: pycodestyle --config=.pycodestyle web/
|
||||
|
||||
- name: Check the tools
|
||||
run: pycodestyle --config=.pycodestyle tools/
|
||||
@@ -0,0 +1,39 @@
|
||||
name: Check tarball build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build-tarball:
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install platform dependencies
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev
|
||||
|
||||
- name: Install Python dependencies
|
||||
run: make install-python
|
||||
|
||||
- name: Check the tarball build
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
make src
|
||||
|
||||
- name: Archive source tarball
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: pgadmin4-tarball-build-output
|
||||
path: dist/*
|
||||
@@ -0,0 +1,34 @@
|
||||
name: Check translations
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
check-translations:
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install platform dependencies
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y python3-babel python3-jinja2
|
||||
|
||||
- name: Check we can extract messages
|
||||
run: make msg-extract
|
||||
|
||||
- name: Check we can update the catalogs
|
||||
run: make msg-update
|
||||
|
||||
- name: Check the catalogs will compile
|
||||
run: make msg-compile
|
||||
@@ -0,0 +1,183 @@
|
||||
name: Run feature tests on EPAS
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
run-feature-tests-epas:
|
||||
# Only run if the tests are enabled
|
||||
# TODO: Figure out a way to test for the presence of the secrets instead
|
||||
if: vars.ENABLE_EPAS_TESTS == 'true'
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
pgver: [13, 14, 15, 16, 17]
|
||||
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup the EDB APT repo on Linux
|
||||
run: |
|
||||
curl -1sLf 'https://downloads.enterprisedb.com/${{ secrets.CLOUDSMITH_TOKEN }}/enterprise/setup.deb.sh' | sudo -E bash
|
||||
|
||||
- name: Install platform dependencies
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev edb-as${{ matrix.pgver }}-server edb-as${{ matrix.pgver }}-server-pldebugger
|
||||
|
||||
- name: Install pgagent on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver <= 16 }}
|
||||
run: |
|
||||
sudo apt install -y edb-as${{ matrix.pgver }}-pgagent
|
||||
|
||||
- name: Create the tablespace directory
|
||||
run: |
|
||||
sudo mkdir -p /var/lib/edb-as/tablespaces/${{ matrix.pgver }}
|
||||
sudo chown enterprisedb:enterprisedb /var/lib/edb-as/tablespaces/${{ matrix.pgver }}
|
||||
|
||||
- name: Start EDB PostgreSQL
|
||||
run: |
|
||||
# Note: we use a custom port for PostgreSQL as the runner may already have a version of PostgreSQL installed
|
||||
sudo su -c "echo local all all trust > /etc/edb-as/${{ matrix.pgver }}/main/pg_hba.conf"
|
||||
sudo sed -i "s/port = 544[0-9]/port = 58${{ matrix.pgver }}/g" /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf
|
||||
sudo sed -i "s/shared_preload_libraries = '/shared_preload_libraries = '\$libdir\/plugin_debugger,/g" /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf
|
||||
sudo su - enterprisedb -c "mkdir -p /var/run/edb-as/${{ matrix.pgver }}-main.epas_stat_tmp"
|
||||
sudo systemctl restart edb-as@${{ matrix.pgver }}-main
|
||||
|
||||
until sudo runuser -l enterprisedb -c "/usr/lib/edb-as/${{ matrix.pgver }}/bin/pg_isready -p 58${{ matrix.pgver }}" 2>/dev/null; do
|
||||
>&2 echo "EPAS is unavailable - sleeping for 2 seconds"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
- name: Create pgagent extension on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver <= 16 }}
|
||||
run: psql -U enterprisedb -d postgres -p 58${{ matrix.pgver }} -c 'CREATE EXTENSION IF NOT EXISTS pgagent;'
|
||||
|
||||
- name: Install Python dependencies
|
||||
run: make install-python-testing
|
||||
|
||||
- name: Create the test configuration
|
||||
run: |
|
||||
cat <<EOF > web/config_local.py
|
||||
from config import *
|
||||
|
||||
# Debug mode
|
||||
DEBUG = True
|
||||
|
||||
# App mode
|
||||
SERVER_MODE = False
|
||||
|
||||
# Log
|
||||
CONSOLE_LOG_LEVEL = DEBUG
|
||||
FILE_LOG_LEVEL = DEBUG
|
||||
|
||||
DEFAULT_SERVER = '127.0.0.1'
|
||||
|
||||
UPGRADE_CHECK_ENABLED = False
|
||||
|
||||
LOG_FILE = "$(pwd)/var/pgadmin4.log"
|
||||
SESSION_DB_PATH = "$(pwd)/var/sessions"
|
||||
STORAGE_DIR = "$(pwd)/var/storage"
|
||||
SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
|
||||
TEST_SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
|
||||
AZURE_CREDENTIAL_CACHE_DIR = "$(pwd)/var/azurecredentialcache"
|
||||
EOF
|
||||
|
||||
cat <<EOF > web/regression/test_config.json
|
||||
{
|
||||
"headless_chrome": false,
|
||||
"default_browser": "Chrome",
|
||||
"pgAdmin4_login_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER@EXAMPLE.COM"
|
||||
},
|
||||
"pgAdmin4_test_user_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER2@EXAMPLE.COM"
|
||||
},
|
||||
"pgAdmin4_test_non_admin_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER@EXAMPLE.COM"
|
||||
},
|
||||
"server_group": 1,
|
||||
"server_credentials": [
|
||||
{
|
||||
"name": "EPAS ${{ matrix.pgver }}",
|
||||
"comment": "EPAS ${{ matrix.pgver }} Server",
|
||||
"db_username": "enterprisedb",
|
||||
"host": "/var/run/edb-as",
|
||||
"db_password": "",
|
||||
"db_port": 58${{ matrix.pgver }},
|
||||
"maintenance_db": "postgres",
|
||||
"sslmode": "prefer",
|
||||
"tablespace_path": "/var/lib/edb-as/tablespaces/${{ matrix.pgver }}",
|
||||
"enabled": true,
|
||||
"default_binary_paths": {
|
||||
"pg": "",
|
||||
"ppas": "/usr/lib/edb-as/${{ matrix.pgver }}/bin"
|
||||
}
|
||||
}
|
||||
],
|
||||
"server_update_data": [
|
||||
{
|
||||
"comment": "This is test update comment"
|
||||
}
|
||||
]
|
||||
}
|
||||
EOF
|
||||
|
||||
- name: Upgrade yarn
|
||||
run: |
|
||||
yarn set version berry
|
||||
yarn set version 4
|
||||
|
||||
- name: Build the JS bundle
|
||||
run: |
|
||||
cd web
|
||||
yarn install
|
||||
yarn run bundle
|
||||
|
||||
- name: Run the tests
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 &
|
||||
export DISPLAY=:99
|
||||
cd web
|
||||
python regression/runtests.py --pkg feature_tests
|
||||
|
||||
- name: Archive server log
|
||||
if: success() || failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: server-log-pg${{ matrix.pgver }}
|
||||
path: var/pgadmin4.log
|
||||
|
||||
- name: Archive regression log
|
||||
if: success() || failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: regression-log-pg${{ matrix.pgver }}
|
||||
path: web/regression/regression.log
|
||||
|
||||
- name: Archive screenshots
|
||||
if: success() || failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: screenshots-pg${{ matrix.pgver }}
|
||||
path: web/regression/screenshots
|
||||
if-no-files-found: ignore
|
||||
@@ -0,0 +1,193 @@
|
||||
name: Run feature tests on PostgreSQL
|
||||
|
||||
# Note: we use a custom port for PostgreSQL as the runners may already have
|
||||
# a version installed.
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
run-feature-tests-pg:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
pgver: [13, 14, 15, 16, 17]
|
||||
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup the PGDG APT repo
|
||||
run: |
|
||||
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
|
||||
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
|
||||
|
||||
- name: Uninstall PostgreSQL if already present
|
||||
run: |
|
||||
if [ -n "$(ls /etc/postgresql/*/*/postgresql.conf 2>/dev/null)" ]; then
|
||||
# Extract the major version from pg_config
|
||||
installed_pg_version=$( pg_config --version | cut -d ' ' -f 2 | cut -d '.' -f 1 )
|
||||
echo "Installed PostgreSQL version: $installed_pg_version"
|
||||
if [ $installed_pg_version != ${{ matrix.pgver }} ]; then
|
||||
sudo pg_dropcluster $installed_pg_version main --stop
|
||||
sudo apt-get -y remove "postgresql-${installed_pg_version}"
|
||||
fi
|
||||
fi
|
||||
|
||||
- name: Install platform dependencies
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev postgresql-${{ matrix.pgver }} postgresql-${{ matrix.pgver }}-pldebugger pgagent
|
||||
|
||||
- name: Create the tablespace directory
|
||||
run: |
|
||||
sudo mkdir -p /var/lib/postgresql/tablespaces/${{ matrix.pgver }}
|
||||
sudo chown postgres:postgres /var/lib/postgresql/tablespaces/${{ matrix.pgver }}
|
||||
|
||||
- name: Re-create stats directory, just in case
|
||||
run: |
|
||||
sudo rm -rf /var/run/postgresql/${{ matrix.pgver }}-main.pg_stat_tmp/
|
||||
sudo mkdir -p /var/run/postgresql/${{ matrix.pgver }}-main.pg_stat_tmp/
|
||||
sudo chown postgres:postgres /var/run/postgresql/${{ matrix.pgver }}-main.pg_stat_tmp/
|
||||
|
||||
- name: Start PostgreSQL
|
||||
run: |
|
||||
sudo su -c "echo local all all trust > /etc/postgresql/${{ matrix.pgver }}/main/pg_hba.conf"
|
||||
sudo sed -i "s/port = 543[0-9]/port = 59${{ matrix.pgver }}/g" /etc/postgresql/${{ matrix.pgver }}/main/postgresql.conf
|
||||
sudo sed -i "s/#shared_preload_libraries = ''/shared_preload_libraries = '\$libdir\/plugin_debugger'/g" /etc/postgresql/${{ matrix.pgver }}/main/postgresql.conf
|
||||
sudo su - postgres -c "/usr/lib/postgresql/${{ matrix.pgver }}/bin/postgres -D /var/lib/postgresql/${{ matrix.pgver }}/main -c config_file=/etc/postgresql/${{ matrix.pgver }}/main/postgresql.conf &"
|
||||
|
||||
until sudo runuser -l postgres -c "pg_isready -p 59${{ matrix.pgver }}" 2>/dev/null; do
|
||||
>&2 echo "Postgres is unavailable - sleeping for 2 seconds"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
psql -U postgres -p 59${{ matrix.pgver }} -c 'CREATE EXTENSION pgagent;'
|
||||
psql -U postgres -p 59${{ matrix.pgver }} -c 'CREATE EXTENSION pldbgapi;'
|
||||
|
||||
- name: Install Python dependencies
|
||||
run: make install-python-testing
|
||||
|
||||
- name: Create the test configuration
|
||||
run: |
|
||||
cat <<EOF > web/config_local.py
|
||||
from config import *
|
||||
|
||||
# Debug mode
|
||||
DEBUG = True
|
||||
|
||||
# App mode
|
||||
SERVER_MODE = False
|
||||
|
||||
# Log
|
||||
CONSOLE_LOG_LEVEL = DEBUG
|
||||
FILE_LOG_LEVEL = DEBUG
|
||||
|
||||
DEFAULT_SERVER = '127.0.0.1'
|
||||
|
||||
UPGRADE_CHECK_ENABLED = False
|
||||
|
||||
LOG_FILE = "$(pwd)/var/pgadmin4.log"
|
||||
SESSION_DB_PATH = "$(pwd)/var/sessions"
|
||||
STORAGE_DIR = "$(pwd)/var/storage"
|
||||
SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
|
||||
TEST_SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
|
||||
AZURE_CREDENTIAL_CACHE_DIR = "$(pwd)/var/azurecredentialcache"
|
||||
EOF
|
||||
|
||||
cat <<EOF > web/regression/test_config.json
|
||||
{
|
||||
"headless_chrome": false,
|
||||
"default_browser": "Chrome",
|
||||
"pgAdmin4_login_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER@EXAMPLE.COM"
|
||||
},
|
||||
"pgAdmin4_test_user_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER2@EXAMPLE.COM"
|
||||
},
|
||||
"pgAdmin4_test_non_admin_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER@EXAMPLE.COM"
|
||||
},
|
||||
"server_group": 1,
|
||||
"server_credentials": [
|
||||
{
|
||||
"name": "PostgreSQL ${{ matrix.pgver }}",
|
||||
"comment": "PostgreSQL ${{ matrix.pgver }} Server",
|
||||
"db_username": "postgres",
|
||||
"host": "/var/run/postgresql",
|
||||
"db_password": "",
|
||||
"db_port": 59${{ matrix.pgver }},
|
||||
"maintenance_db": "postgres",
|
||||
"sslmode": "prefer",
|
||||
"tablespace_path": "/var/lib/postgresql/tablespaces/${{ matrix.pgver }}",
|
||||
"enabled": true,
|
||||
"default_binary_paths": {
|
||||
"pg": "/usr/lib/postgresql/${{ matrix.pgver }}/bin",
|
||||
"ppas": ""
|
||||
}
|
||||
}
|
||||
],
|
||||
"server_update_data": [
|
||||
{
|
||||
"comment": "This is test update comment"
|
||||
}
|
||||
]
|
||||
}
|
||||
EOF
|
||||
|
||||
- name: Upgrade yarn
|
||||
run: |
|
||||
yarn set version berry
|
||||
yarn set version 4
|
||||
|
||||
- name: Build the JS bundle
|
||||
run: |
|
||||
cd web
|
||||
yarn install
|
||||
yarn run bundle
|
||||
|
||||
- name: Run the tests
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 &
|
||||
export DISPLAY=:99
|
||||
cd web
|
||||
python regression/runtests.py --pkg feature_tests
|
||||
|
||||
- name: Archive server log
|
||||
if: success() || failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: server-log-pg${{ matrix.pgver }}
|
||||
path: var/pgadmin4.log
|
||||
|
||||
- name: Archive regression log
|
||||
if: success() || failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: regression-log-pg${{ matrix.pgver }}
|
||||
path: web/regression/regression.log
|
||||
|
||||
- name: Archive screenshots
|
||||
if: success() || failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: screenshots-pg${{ matrix.pgver }}
|
||||
path: web/regression/screenshots
|
||||
if-no-files-found: ignore
|
||||
@@ -0,0 +1,44 @@
|
||||
name: Run Javascript tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
run-javascript-tests:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-22.04, windows-latest]
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20.x'
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Upgrade yarn
|
||||
run: |
|
||||
yarn set version berry
|
||||
yarn set version 4
|
||||
|
||||
- name: Install Node modules
|
||||
run: |
|
||||
cd web
|
||||
yarn install
|
||||
|
||||
- name: Run the tests
|
||||
run: |
|
||||
cd web
|
||||
yarn run test:js-once
|
||||
@@ -0,0 +1,305 @@
|
||||
# This workflow requires the following configuration in Github
|
||||
#
|
||||
# Vars:
|
||||
# ENABLE_EPAS_TESTS - Set to true to enable this test
|
||||
#
|
||||
# Secrets:
|
||||
# EDB_REPO_USERNAME - Username for accessing EDB Repos 1.0
|
||||
# EDB_REPO_PASSWORD - Password for accessing EDB Repos 1.0
|
||||
# EDB_SBP_URL - URL to the EDB StackBuilder Plus catalog
|
||||
|
||||
name: Run Python tests on EPAS
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
run-python-tests-epas:
|
||||
# Only run if the tests are enabled
|
||||
# TODO: Figure out a way to test for the presence of the secrets instead
|
||||
if: vars.ENABLE_EPAS_TESTS == 'true'
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-22.04, windows-latest]
|
||||
pgver: [13, 14, 15, 16, 17]
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Update python version
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.10'
|
||||
|
||||
- name: Setup the EDB APT repo on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
curl -1sLf 'https://downloads.enterprisedb.com/${{ secrets.CLOUDSMITH_TOKEN }}/enterprise/setup.deb.sh' | sudo -E bash
|
||||
|
||||
- name: Install platform dependencies on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev edb-as${{ matrix.pgver }}-server edb-as${{ matrix.pgver }}-server-pldebugger edb-as${{ matrix.pgver }}-postgis34
|
||||
|
||||
- name: Install pgagent on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver <= 16 }}
|
||||
run: |
|
||||
sudo apt install -y edb-as${{ matrix.pgver }}-pgagent
|
||||
|
||||
- name: Install platform dependencies on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
FOR /f "delims=" %%F IN ('python tools\get_sb_package.py "${{ secrets.EDB_SBP_URL }}" "edb_as${{ matrix.pgver }}_dbserver" "windows-x64"') DO SET INSTALLER_EXE=%%F
|
||||
ECHO Running %INSTALLER_EXE%...
|
||||
%INSTALLER_EXE% --prefix C:\EPAS\${{ matrix.pgver }} --datadir C:\EPAS\${{ matrix.pgver }}\data --serverport 58${{ matrix.pgver }} --superpassword enterprisedb --create_samples no --install_runtimes 0 --mode unattended --unattendedmodeui none --disable-components stackbuilderplus${{ matrix.pgver < 15 && ',pgadmin4' || '' }}
|
||||
|
||||
choco install -y mitkerberos
|
||||
|
||||
REM Ignore error 3010 (reboot required)
|
||||
IF %ERRORLEVEL% EQU 3010 cmd /c "exit /b 0"
|
||||
shell: cmd
|
||||
|
||||
- name: Create the tablespace directory on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
sudo mkdir -p /var/lib/edb-as/tablespaces/${{ matrix.pgver }}
|
||||
sudo chown enterprisedb:enterprisedb /var/lib/edb-as/tablespaces/${{ matrix.pgver }}
|
||||
|
||||
- name: Create the tablespace directory on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
mkdir "C:\EPAS\${{ matrix.pgver }}\tablespaces"
|
||||
icacls "C:\EPAS\${{ matrix.pgver }}\tablespaces" /grant "NETWORK SERVICE":(OI)(CI)F /T
|
||||
shell: cmd
|
||||
|
||||
- name: Add edb_job_scheduler into config file.
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver >= 16 }}
|
||||
run: |
|
||||
sudo sed -i "s/shared_preload_libraries = '/shared_preload_libraries = '\$libdir\/edb_job_scheduler,/g" /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf
|
||||
sudo su -c "echo \"edb_job_scheduler.database_list = 'test_dbms_job_scheduler'\" >> /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf"
|
||||
|
||||
- name: Start PostgreSQL on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
# Note: we use a custom port for PostgreSQL as the runner may already have a version of PostgreSQL installed
|
||||
sudo su -c "echo local all all trust > /etc/edb-as/${{ matrix.pgver }}/main/pg_hba.conf"
|
||||
sudo sed -i "s/port = 544[0-9]/port = 58${{ matrix.pgver }}/g" /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf
|
||||
sudo sed -i "s/shared_preload_libraries = '/shared_preload_libraries = '\$libdir\/plugin_debugger,/g" /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf
|
||||
sudo su - enterprisedb -c "mkdir -p /var/run/edb-as/${{ matrix.pgver }}-main.epas_stat_tmp"
|
||||
sudo systemctl restart edb-as@${{ matrix.pgver }}-main
|
||||
|
||||
until sudo runuser -l enterprisedb -c "/usr/lib/edb-as/${{ matrix.pgver }}/bin/pg_isready -p 58${{ matrix.pgver }}" 2>/dev/null; do
|
||||
>&2 echo "EPAS is unavailable - sleeping for 2 seconds"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
- name: Create pgagent extension on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver <= 16 }}
|
||||
run: psql -U enterprisedb -d postgres -p 58${{ matrix.pgver }} -c 'CREATE EXTENSION IF NOT EXISTS pgagent;'
|
||||
|
||||
- name: Create postgis extension on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: psql -U enterprisedb -d postgres -p 58${{ matrix.pgver }} -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
|
||||
|
||||
- name: Install Python dependencies on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: make install-python-testing
|
||||
|
||||
- name: Install Python dependencies on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
SET LIB=C:\EPAS\${{ matrix.pgver }}\lib;%LIB%
|
||||
SET INCLUDE=C:\EPAS\${{ matrix.pgver }}\include;%INCLUDE%
|
||||
python -m venv venv
|
||||
call venv\Scripts\activate.bat
|
||||
python -m pip install --upgrade pip
|
||||
pip install wheel sphinx sphinxcontrib-youtube -r web\regression\requirements.txt
|
||||
shell: cmd
|
||||
|
||||
- name: Create the test configuration on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
cat <<EOF > web/config_local.py
|
||||
from config import *
|
||||
|
||||
# Debug mode
|
||||
DEBUG = True
|
||||
|
||||
# App mode
|
||||
SERVER_MODE = False
|
||||
|
||||
# Log
|
||||
CONSOLE_LOG_LEVEL = DEBUG
|
||||
FILE_LOG_LEVEL = DEBUG
|
||||
|
||||
DEFAULT_SERVER = '127.0.0.1'
|
||||
|
||||
UPGRADE_CHECK_ENABLED = False
|
||||
|
||||
LOG_FILE = "$(pwd)/var/pgadmin4.log"
|
||||
SESSION_DB_PATH = "$(pwd)/var/sessions"
|
||||
STORAGE_DIR = "$(pwd)/var/storage"
|
||||
SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
|
||||
TEST_SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
|
||||
AZURE_CREDENTIAL_CACHE_DIR = "$(pwd)/var/azurecredentialcache"
|
||||
EOF
|
||||
|
||||
cat <<EOF > web/regression/test_config.json
|
||||
{
|
||||
"pgAdmin4_login_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER@EXAMPLE.COM"
|
||||
},
|
||||
"pgAdmin4_test_user_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER2@EXAMPLE.COM"
|
||||
},
|
||||
"pgAdmin4_test_non_admin_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER@EXAMPLE.COM"
|
||||
},
|
||||
"server_group": 1,
|
||||
"server_credentials": [
|
||||
{
|
||||
"name": "EPAS ${{ matrix.pgver }}",
|
||||
"comment": "EPAS ${{ matrix.pgver }} Server",
|
||||
"db_username": "enterprisedb",
|
||||
"host": "/var/run/edb-as",
|
||||
"db_password": "",
|
||||
"db_port": 58${{ matrix.pgver }},
|
||||
"maintenance_db": "postgres",
|
||||
"sslmode": "prefer",
|
||||
"tablespace_path": "/var/lib/edb-as/tablespaces/${{ matrix.pgver }}",
|
||||
"enabled": true,
|
||||
"default_binary_paths": {
|
||||
"pg": "",
|
||||
"ppas": "/usr/lib/edb-as/${{ matrix.pgver }}/bin"
|
||||
}
|
||||
}
|
||||
],
|
||||
"server_update_data": [
|
||||
{
|
||||
"comment": "This is test update comment"
|
||||
}
|
||||
]
|
||||
}
|
||||
EOF
|
||||
|
||||
- name: Create the test configuration on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
FOR /f "delims=" %%D IN ('python -c "import os; print(os.getcwd().replace('\\', '\\\\'))"') DO SET WORKING_DIR=%%D
|
||||
|
||||
> web\config_local.py (
|
||||
@echo.from config import *
|
||||
@echo.
|
||||
@echo.# Debug mode
|
||||
@echo.DEBUG = True
|
||||
@echo.
|
||||
@echo.# App mode
|
||||
@echo.SERVER_MODE = False
|
||||
@echo.
|
||||
@echo.# Log
|
||||
@echo.CONSOLE_LOG_LEVEL = DEBUG
|
||||
@echo.FILE_LOG_LEVEL = DEBUG
|
||||
@echo.
|
||||
@echo.DEFAULT_SERVER = '127.0.0.1'
|
||||
@echo.
|
||||
@echo.UPGRADE_CHECK_ENABLED = False
|
||||
@echo.
|
||||
@echo.LOG_FILE = "%WORKING_DIR%\\var\\pgadmin4.log"
|
||||
@echo.SESSION_DB_PATH = "%WORKING_DIR%\\var\\sessions"
|
||||
@echo.STORAGE_DIR = "%WORKING_DIR%\\var\\storage"
|
||||
@echo.SQLITE_PATH = "%WORKING_DIR%\\var\\pgadmin4.db"
|
||||
@echo.TEST_SQLITE_PATH = "%WORKING_DIR%\\var\\test_pgadmin4.db"
|
||||
@echo.AZURE_CREDENTIAL_CACHE_DIR = "%WORKING_DIR%\\var\\azurecredentialcache"
|
||||
)
|
||||
|
||||
> web\regression\test_config.json (
|
||||
@echo.{
|
||||
@echo. "pgAdmin4_login_credentials": {
|
||||
@echo. "new_password": "NEWPASSWORD",
|
||||
@echo. "login_password": "PASSWORD",
|
||||
@echo. "login_username": "USER@EXAMPLE.COM"
|
||||
@echo. },
|
||||
@echo. "pgAdmin4_test_user_credentials": {
|
||||
@echo. "new_password": "NEWPASSWORD",
|
||||
@echo. "login_password": "PASSWORD",
|
||||
@echo. "login_username": "USER2@EXAMPLE.COM"
|
||||
@echo. },
|
||||
@echo. "pgAdmin4_test_non_admin_credentials": {
|
||||
@echo. "new_password": "NEWPASSWORD",
|
||||
@echo. "login_password": "PASSWORD",
|
||||
@echo. "login_username": "USER@EXAMPLE.COM"
|
||||
@echo. },
|
||||
@echo. "server_group": 1,
|
||||
@echo. "server_credentials": [
|
||||
@echo. {
|
||||
@echo. "name": "EPAS ${{ matrix.pgver }}",
|
||||
@echo. "comment": "EPAS ${{ matrix.pgver }} Server",
|
||||
@echo. "db_username": "enterprisedb",
|
||||
@echo. "host": "127.0.0.1",
|
||||
@echo. "db_password": "enterprisedb",
|
||||
@echo. "db_port": 58${{ matrix.pgver }},
|
||||
@echo. "maintenance_db": "postgres",
|
||||
@echo. "sslmode": "prefer",
|
||||
@echo. "tablespace_path": "C:\\EPAS\\${{ matrix.pgver }}\\tablespaces",
|
||||
@echo. "enabled": true,
|
||||
@echo. "default_binary_paths": {
|
||||
@echo. "pg": "",
|
||||
@echo. "ppas": "C:\\EPAS\\${{ matrix.pgver }}\\bin"
|
||||
@echo. }
|
||||
@echo. }
|
||||
@echo. ],
|
||||
@echo. "server_update_data": [
|
||||
@echo. {
|
||||
@echo. "comment": "This is test update comment"
|
||||
@echo. }
|
||||
@echo. ]
|
||||
@echo.}
|
||||
)
|
||||
shell: cmd
|
||||
|
||||
- name: Run the tests on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
make check-python
|
||||
|
||||
- name: Run the tests on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
call venv\Scripts\activate.bat
|
||||
python web\regression\runtests.py --exclude feature_tests
|
||||
shell: cmd
|
||||
|
||||
- name: Archive server log
|
||||
if: success() || failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: server-log-epas-${{ matrix.os }}-pg${{ matrix.pgver }}
|
||||
path: var/pgadmin4.log
|
||||
|
||||
- name: Archive regression log
|
||||
if: success() || failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: regression-log-epas-${{ matrix.os }}-pg${{ matrix.pgver }}
|
||||
path: web/regression/regression.log
|
||||
@@ -0,0 +1,326 @@
|
||||
name: Run Python tests on PostgreSQL
|
||||
|
||||
# Note: we use a custom port (and installation directory on Windows) for
|
||||
# PostgreSQL as the runners may already have a version installed.
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
run-python-tests-pg:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-22.04, windows-latest]
|
||||
pgver: [13, 14, 15, 16, 17]
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Update python version
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.10'
|
||||
|
||||
- name: Setup the PGDG APT repo on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
|
||||
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
|
||||
|
||||
- name: Uninstall PostgreSQL if already present on linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
if [ -n "$(ls /etc/postgresql/*/*/postgresql.conf 2>/dev/null)" ]; then
|
||||
# Extract the major version from pg_config
|
||||
installed_pg_version=$( pg_config --version | cut -d ' ' -f 2 | cut -d '.' -f 1 )
|
||||
echo "Installed PostgreSQL version: $installed_pg_version"
|
||||
if [ $installed_pg_version != ${{ matrix.pgver }} ]; then
|
||||
sudo pg_dropcluster $installed_pg_version main --stop
|
||||
sudo apt-get -y remove "postgresql-${installed_pg_version}"
|
||||
fi
|
||||
fi
|
||||
|
||||
- name: Install platform dependencies on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev postgresql-${{ matrix.pgver }} postgresql-${{ matrix.pgver }}-pldebugger pgagent postgresql-${{ matrix.pgver }}-postgis-3
|
||||
|
||||
- name: Install platform dependencies on macOS
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
run: |
|
||||
brew install postgresql@${{ matrix.pgver }}
|
||||
echo "/opt/homebrew/opt/postgresql@${{ matrix.pgver }}/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Uninstall PostgreSQL if already present on windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
if exist "C:\Program Files\PostgreSQL\{{ matrix.pgver }}\uninstall-postgresql.exe" (
|
||||
"C:\Program Files\PostgreSQL\{{ matrix.pgver }}\uninstall-postgresql.exe" --mode unattended
|
||||
)
|
||||
reg delete "HKLM\SOFTWARE\PostgreSQL" /f
|
||||
shell: cmd
|
||||
|
||||
- name: Install platform dependencies on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
FOR /f "delims=" %%F IN ('python tools\get_sb_package.py "https://www.postgresql.org/applications-v2.xml" "postgresql_${{ matrix.pgver }}" "windows-x64"') DO SET INSTALLER_EXE=%%F
|
||||
ECHO Running %INSTALLER_EXE%...
|
||||
%INSTALLER_EXE% --prefix C:\PostgreSQL\${{ matrix.pgver }} --datadir C:\PostgreSQL\${{ matrix.pgver }}\data --serverport 59${{ matrix.pgver }} --superpassword postgres --install_runtimes 0 --mode unattended --unattendedmodeui none --disable-components pgAdmin,stackbuilder --enable-components server,commandlinetools"
|
||||
choco install -y mitkerberos
|
||||
|
||||
REM Ignore error 3010 (reboot required)
|
||||
IF %ERRORLEVEL% EQU 3010 cmd /c "exit /b 0"
|
||||
shell: cmd
|
||||
|
||||
- name: Create the tablespace directory on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
sudo mkdir -p /var/lib/postgresql/tablespaces/${{ matrix.pgver }}
|
||||
sudo chown postgres:postgres /var/lib/postgresql/tablespaces/${{ matrix.pgver }}
|
||||
|
||||
- name: Create the tablespace directory on macOS
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
run: |
|
||||
mkdir -p /opt/homebrew/var/tablespaces/${{ matrix.pgver }}
|
||||
|
||||
- name: Create the tablespace directory on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
mkdir "C:\PostgreSQL\${{ matrix.pgver }}\tablespaces"
|
||||
icacls "C:\PostgreSQL\${{ matrix.pgver }}\tablespaces" /grant "NETWORK SERVICE":(OI)(CI)F /T
|
||||
shell: cmd
|
||||
|
||||
- name: Start PostgreSQL on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
sudo su -c "echo local all all trust > /etc/postgresql/${{ matrix.pgver }}/main/pg_hba.conf"
|
||||
sudo sed -i "s/port = 543[0-9]/port = 59${{ matrix.pgver }}/g" /etc/postgresql/${{ matrix.pgver }}/main/postgresql.conf
|
||||
sudo sed -i "s/#shared_preload_libraries = ''/shared_preload_libraries = '\$libdir\/plugin_debugger'/g" /etc/postgresql/${{ matrix.pgver }}/main/postgresql.conf
|
||||
sudo su - postgres -c "/usr/lib/postgresql/${{ matrix.pgver }}/bin/postgres -D /var/lib/postgresql/${{ matrix.pgver }}/main -c config_file=/etc/postgresql/${{ matrix.pgver }}/main/postgresql.conf &"
|
||||
|
||||
until sudo runuser -l postgres -c "pg_isready -p 59${{ matrix.pgver }}" 2>/dev/null; do
|
||||
>&2 echo "Postgres is unavailable - sleeping for 2 seconds"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
psql -U postgres -p 59${{ matrix.pgver }} -c 'CREATE EXTENSION pgagent;'
|
||||
psql -U postgres -p 59${{ matrix.pgver }} -c 'CREATE EXTENSION pldbgapi;'
|
||||
psql -U postgres -p 59${{ matrix.pgver }} -c 'CREATE EXTENSION postgis;'
|
||||
|
||||
- name: Start PostgreSQL on macOS
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
run: |
|
||||
echo local all all trust > /opt/homebrew/var/postgresql@${{ matrix.pgver }}/pg_hba.conf
|
||||
sed -i '' "s/#port = 543[0-9]/port = 59${{ matrix.pgver }}/g" /opt/homebrew/var/postgresql@${{ matrix.pgver }}/postgresql.conf
|
||||
brew services restart postgresql@${{ matrix.pgver }}
|
||||
|
||||
until /opt/homebrew/opt/postgresql@${{ matrix.pgver }}/bin/pg_isready -p 59${{ matrix.pgver }} 2>/dev/null; do
|
||||
>&2 echo "Postgres is unavailable - sleeping for 2 seconds"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
psql postgres -p 59${{ matrix.pgver }} -c 'CREATE ROLE postgres SUPERUSER LOGIN;'
|
||||
|
||||
- name: Install Python dependencies on Linux and macOS
|
||||
if: ${{ matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04' }}
|
||||
run: make install-python-testing
|
||||
|
||||
- name: Install Python dependencies on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
SET LIB=C:\PostgreSQL\${{ matrix.pgver }}\lib;%LIB%
|
||||
SET INCLUDE=C:\PostgreSQL\${{ matrix.pgver }}\include;%INCLUDE%
|
||||
python -m venv venv
|
||||
call venv\Scripts\activate.bat
|
||||
python -m pip install --upgrade pip
|
||||
pip install wheel sphinx sphinxcontrib-youtube -r web\regression\requirements.txt
|
||||
shell: cmd
|
||||
|
||||
- name: Create the test configuration on Linux and macOS
|
||||
if: ${{ matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
cat <<EOF > web/config_local.py
|
||||
from config import *
|
||||
|
||||
# Debug mode
|
||||
DEBUG = True
|
||||
|
||||
# App mode
|
||||
SERVER_MODE = False
|
||||
|
||||
# Log
|
||||
CONSOLE_LOG_LEVEL = DEBUG
|
||||
FILE_LOG_LEVEL = DEBUG
|
||||
|
||||
DEFAULT_SERVER = '127.0.0.1'
|
||||
|
||||
UPGRADE_CHECK_ENABLED = False
|
||||
|
||||
LOG_FILE = "$(pwd)/var/pgadmin4.log"
|
||||
SESSION_DB_PATH = "$(pwd)/var/sessions"
|
||||
STORAGE_DIR = "$(pwd)/var/storage"
|
||||
SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
|
||||
TEST_SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
|
||||
AZURE_CREDENTIAL_CACHE_DIR = "$(pwd)/var/azurecredentialcache"
|
||||
EOF
|
||||
|
||||
cat <<EOF > web/regression/test_config.json
|
||||
{
|
||||
"pgAdmin4_login_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER@EXAMPLE.COM"
|
||||
},
|
||||
"pgAdmin4_test_user_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER2@EXAMPLE.COM"
|
||||
},
|
||||
"pgAdmin4_test_non_admin_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER@EXAMPLE.COM"
|
||||
},
|
||||
"server_group": 1,
|
||||
"server_credentials": [
|
||||
{
|
||||
"name": "PostgreSQL ${{ matrix.pgver }}",
|
||||
"comment": "PostgreSQL ${{ matrix.pgver }} Server",
|
||||
"db_username": "postgres",
|
||||
"host": "${{ matrix.os == 'macos-latest' && '/tmp' || matrix.os == 'ubuntu-22.04' && '/var/run/postgresql' || '127.0.0.1' }}",
|
||||
"db_password": "postgres",
|
||||
"db_port": 59${{ matrix.pgver }},
|
||||
"maintenance_db": "postgres",
|
||||
"sslmode": "prefer",
|
||||
"tablespace_path": "${{ matrix.os == 'macos-latest' && format('/opt/homebrew/var/tablespaces/{0}', matrix.pgver) || format('/var/lib/postgresql/tablespaces/{0}', matrix.pgver) }}",
|
||||
"enabled": true,
|
||||
"default_binary_paths": {
|
||||
"pg": "${{ matrix.os == 'macos-latest' && format('/opt/homebrew/opt/postgresql@{0}/bin', matrix.pgver) || format('/usr/lib/postgresql/{0}/bin', matrix.pgver) }}",
|
||||
"ppas": ""
|
||||
}
|
||||
}
|
||||
],
|
||||
"server_update_data": [
|
||||
{
|
||||
"comment": "This is test update comment"
|
||||
}
|
||||
]
|
||||
}
|
||||
EOF
|
||||
|
||||
- name: Create the test configuration on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
FOR /f "delims=" %%D IN ('python -c "import os; print(os.getcwd().replace('\\', '\\\\'))"') DO SET WORKING_DIR=%%D
|
||||
|
||||
> web\config_local.py (
|
||||
@echo.from config import *
|
||||
@echo.
|
||||
@echo.# Debug mode
|
||||
@echo.DEBUG = True
|
||||
@echo.
|
||||
@echo.# App mode
|
||||
@echo.SERVER_MODE = False
|
||||
@echo.
|
||||
@echo.# Log
|
||||
@echo.CONSOLE_LOG_LEVEL = DEBUG
|
||||
@echo.FILE_LOG_LEVEL = DEBUG
|
||||
@echo.
|
||||
@echo.DEFAULT_SERVER = '127.0.0.1'
|
||||
@echo.
|
||||
@echo.UPGRADE_CHECK_ENABLED = False
|
||||
@echo.
|
||||
@echo.LOG_FILE = "%WORKING_DIR%\\var\\pgadmin4.log"
|
||||
@echo.SESSION_DB_PATH = "%WORKING_DIR%\\var\\sessions"
|
||||
@echo.STORAGE_DIR = "%WORKING_DIR%\\var\\storage"
|
||||
@echo.SQLITE_PATH = "%WORKING_DIR%\\var\\pgadmin4.db"
|
||||
@echo.TEST_SQLITE_PATH = "%WORKING_DIR%\\var\\test_pgadmin4.db"
|
||||
@echo.AZURE_CREDENTIAL_CACHE_DIR = "%WORKING_DIR%\\var\\azurecredentialcache"
|
||||
)
|
||||
|
||||
> web\regression\test_config.json (
|
||||
@echo.{
|
||||
@echo. "pgAdmin4_login_credentials": {
|
||||
@echo. "new_password": "NEWPASSWORD",
|
||||
@echo. "login_password": "PASSWORD",
|
||||
@echo. "login_username": "USER@EXAMPLE.COM"
|
||||
@echo. },
|
||||
@echo. "pgAdmin4_test_user_credentials": {
|
||||
@echo. "new_password": "NEWPASSWORD",
|
||||
@echo. "login_password": "PASSWORD",
|
||||
@echo. "login_username": "USER2@EXAMPLE.COM"
|
||||
@echo. },
|
||||
@echo. "pgAdmin4_test_non_admin_credentials": {
|
||||
@echo. "new_password": "NEWPASSWORD",
|
||||
@echo. "login_password": "PASSWORD",
|
||||
@echo. "login_username": "USER@EXAMPLE.COM"
|
||||
@echo. },
|
||||
@echo. "server_group": 1,
|
||||
@echo. "server_credentials": [
|
||||
@echo. {
|
||||
@echo. "name": "PostgreSQL ${{ matrix.pgver }}",
|
||||
@echo. "comment": "PostgreSQL ${{ matrix.pgver }} Server",
|
||||
@echo. "db_username": "postgres",
|
||||
@echo. "host": "127.0.0.1",
|
||||
@echo. "db_password": "postgres",
|
||||
@echo. "db_port": 59${{ matrix.pgver }},
|
||||
@echo. "maintenance_db": "postgres",
|
||||
@echo. "sslmode": "prefer",
|
||||
@echo. "tablespace_path": "C:\\PostgreSQL\\${{ matrix.pgver }}\\tablespaces",
|
||||
@echo. "enabled": true,
|
||||
@echo. "default_binary_paths": {
|
||||
@echo. "pg": "C:\\PostgreSQL\\${{ matrix.pgver }}\\bin",
|
||||
@echo. "ppas": ""
|
||||
@echo. }
|
||||
@echo. }
|
||||
@echo. ],
|
||||
@echo. "server_update_data": [
|
||||
@echo. {
|
||||
@echo. "comment": "This is test update comment"
|
||||
@echo. }
|
||||
@echo. ]
|
||||
@echo.}
|
||||
)
|
||||
shell: cmd
|
||||
|
||||
- name: Run the tests on Linux and macOS
|
||||
if: ${{ matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
make check-python
|
||||
|
||||
- name: Run the tests on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
call venv\Scripts\activate.bat
|
||||
python web\regression\runtests.py --exclude feature_tests
|
||||
shell: cmd
|
||||
|
||||
- name: Archive server log
|
||||
if: success() || failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: server-log-${{ matrix.os }}-pg${{ matrix.pgver }}
|
||||
path: var/pgadmin4.log
|
||||
|
||||
- name: Archive regression log
|
||||
if: success() || failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: regression-log-${{ matrix.os }}-pg${{ matrix.pgver }}
|
||||
path: web/regression/regression.log
|
||||
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
# This workflow requires the following configuration in Github
|
||||
#
|
||||
# Variables:
|
||||
# SONARQUBE_PROJECT_KEY - The project key in SonarQube
|
||||
#
|
||||
# Secrets:
|
||||
# SONARQUBE_TOKEN - SonarQube API token
|
||||
# SONARQUBE_HOST - The URL of the SonarQube host
|
||||
|
||||
name: SonarQube scan
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
|
||||
concurrency:
|
||||
group: sonarqube
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
run-sonarqube-scan:
|
||||
# Only run if the project key is set
|
||||
if: vars.SONARQUBE_PROJECT_KEY != null
|
||||
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Create the scan properties file
|
||||
run: |
|
||||
cat <<EOF > sonar-project.properties
|
||||
sonar.projectKey=${{ vars.SONARQUBE_PROJECT_KEY }}
|
||||
sonar.projectName=pgAdmin 4
|
||||
sonar.projectVersion=%VERSION%
|
||||
|
||||
# Ignore templates and SQL scripts as they confuse the scanner
|
||||
sonar.exclusions=**/templates/**/*, **/*.sql
|
||||
|
||||
# Let SonarQube know where tests can be found
|
||||
sonar.test.inclusions=**/tests/**, web/regression
|
||||
|
||||
# Python compatibility
|
||||
sonar.python.version=3.7, 3.8, 3.9, 3.10, 3.11
|
||||
EOF
|
||||
|
||||
APP_RELEASE=`grep "^APP_RELEASE" web/config.py | cut -d"=" -f2 | sed 's/ //g'`
|
||||
APP_REVISION=`grep "^APP_REVISION" web/config.py | cut -d"=" -f2 | sed 's/ //g'`
|
||||
APP_LONG_VERSION=${APP_RELEASE}.${APP_REVISION}
|
||||
sed -i "s/%VERSION%/${APP_LONG_VERSION}/g" sonar-project.properties
|
||||
|
||||
- name: SonarQube Scan
|
||||
uses: sonarsource/sonarqube-scan-action@master
|
||||
env:
|
||||
SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }}
|
||||
SONAR_HOST_URL: ${{ secrets.SONARQUBE_HOST }}
|
||||
@@ -9,6 +9,8 @@
|
||||
.DS_Store
|
||||
.idea
|
||||
.vscode
|
||||
.sonarlint
|
||||
.yarn
|
||||
/*.diff
|
||||
/*.patch
|
||||
/dist
|
||||
@@ -37,6 +39,7 @@ runtime/pgAdmin4.app/
|
||||
runtime/pgAdmin4.pro.user*
|
||||
runtime/pgAdmin4_resource.rc
|
||||
runtime/release/
|
||||
runtime/dev_config.json
|
||||
runtime/ui_BrowserWindow.h
|
||||
web/config_local.py
|
||||
web/pgadmin/misc/themes/pgadmin.themes.json
|
||||
@@ -47,6 +50,7 @@ node_modules/
|
||||
web/pgAdmin/static/js/generated
|
||||
web/pgadmin/static/js/generated
|
||||
web/yarn-error.log
|
||||
web/commit_hash
|
||||
/web/cacert.pem
|
||||
auditjs.html
|
||||
auditpy.txt
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
[pycodestyle]
|
||||
ignore = E402,W504,W605
|
||||
ignore = E402,W504,E231
|
||||
max-line-length = 79
|
||||
statistics = True
|
||||
show-source = False
|
||||
show-pep8 = False
|
||||
count = True
|
||||
format = pylint
|
||||
exclude = migrations,node_modules,config_local.py,config_distro.py
|
||||
exclude = node_modules,config_local.py,config_distro.py
|
||||
@@ -1,518 +0,0 @@
|
||||
pgAdmin 4 Dependency Inventory
|
||||
==============================
|
||||
|
||||
pgAdmin 4 is built on Python, Javascript and NW.js (node-webkit), and is
|
||||
dependent on various third party libraries. These are automatically compiled
|
||||
from the system, requirements.txt and packages.json and listed below.
|
||||
|
||||
Runtime Dependencies
|
||||
====================
|
||||
|
||||
Name Version Licence URL
|
||||
---- ------- ------- ---
|
||||
Python 3.6+ PSF https://www.python.org/
|
||||
nw 0.50.2 MIT git://github.com/nwjs/npm-installer.git
|
||||
axios 0.21.0 MIT https://github.com/axios/axios.git
|
||||
bootstrap 4.5.3 MIT git+https://github.com/twbs/bootstrap.git
|
||||
follow-redirects 1.13.1 MIT git@github.com:follow-redirects/follow-redirects.git
|
||||
|
||||
5 dependencies listed.
|
||||
|
||||
Python Dependencies
|
||||
===================
|
||||
|
||||
Name Version Licence URL
|
||||
---- ------- ------- ---
|
||||
Flask 2.0.2 BSD-3-Clause https://palletsprojects.com/p/flask
|
||||
Flask-Gravatar 0.5.0 BSD https://github.com/zzzsochi/Flask-Gravatar/
|
||||
Flask-Login 0.5.0 MIT https://github.com/maxcountryman/flask-login
|
||||
Flask-Mail 0.9.1 BSD https://github.com/rduplain/flask-mail
|
||||
Flask-Migrate 3.1.0 UNKNOWN https://github.com/miguelgrinberg/flask-migrate
|
||||
Flask-SQLAlchemy 2.5.1 BSD-3-Clause https://github.com/pallets/flask-sqlalchemy
|
||||
Flask-WTF 1.0.0 BSD-3-Clause https://github.com/wtforms/flask-wtf/
|
||||
Flask-Compress 1.10.1 MIT https://github.com/colour-science/flask-compress
|
||||
Flask-Paranoid 0.2.0 MIT http://github.com/miguelgrinberg/flask-paranoid/
|
||||
Flask-Babel 2.0.0 BSD http://github.com/python-babel/flask-babel
|
||||
Flask-Security-Too 4.1.2 MIT https://github.com/Flask-Middleware/flask-security
|
||||
Flask-SocketIO 5.1.1 UNKNOWN https://github.com/miguelgrinberg/flask-socketio
|
||||
WTForms 3.0.1 BSD-3-Clause https://wtforms.readthedocs.io/
|
||||
passlib 1.7.4 BSD https://passlib.readthedocs.io
|
||||
pytz 2021.3 MIT http://pythonhosted.org/pytz
|
||||
simplejson 3.17.6 MIT License https://github.com/simplejson/simplejson
|
||||
six 1.16.0 MIT https://github.com/benjaminp/six
|
||||
speaklater3 1.4 UNKNOWN https://github.com/ThomasWaldmann/speaklater
|
||||
sqlparse 0.4.2 BSD-3-Clause https://github.com/andialbrecht/sqlparse
|
||||
psutil 5.9.0 BSD https://github.com/giampaolo/psutil
|
||||
psycopg2 2.9.3 LGPL with exceptions https://psycopg.org/
|
||||
python-dateutil 2.8.2 Dual License https://github.com/dateutil/dateutil
|
||||
SQLAlchemy 1.4.31 MIT https://www.sqlalchemy.org
|
||||
bcrypt 3.2.0 Apache License, Version 2.0 https://github.com/pyca/bcrypt/
|
||||
cryptography 3.4.8 BSD or Apache License, Version 2.0 https://github.com/pyca/cryptography
|
||||
sshtunnel 0.4.0 MIT https://github.com/pahaz/sshtunnel
|
||||
ldap3 2.9.1 LGPL v3 https://github.com/cannatag/ldap3
|
||||
gssapi 1.7.2 LICENSE.txt https://github.com/pythongssapi/python-gssapi
|
||||
eventlet 0.33.0 UNKNOWN http://eventlet.net
|
||||
httpagentparser 1.9.2 http://www.opensource.org/licenses/mit-license.php https://github.com/shon/httpagentparser
|
||||
user-agents 2.2.0 MIT https://github.com/selwin/python-user-agents
|
||||
pywinpty 1.1.* Unknown Unknown
|
||||
Authlib 0.15.5 BSD-3-Clause https://authlib.org/
|
||||
requests 2.25.1 Apache 2.0 https://requests.readthedocs.io
|
||||
pyotp 2.6.0 MIT License https://github.com/pyotp/pyotp
|
||||
qrcode 7.3.1 BSD https://github.com/lincolnloop/python-qrcode
|
||||
Pillow 9.0.1 HPND https://python-pillow.org
|
||||
boto3 1.20.54 Apache License 2.0 https://github.com/boto/boto3
|
||||
botocore 1.23.54 Apache License 2.0 https://github.com/boto/botocore
|
||||
urllib3 1.26.8 MIT https://urllib3.readthedocs.io/
|
||||
|
||||
NOTE: This report was generated using Python 3.10. Full information may not be
|
||||
shown for Python modules that are not required with this version.
|
||||
|
||||
40 dependencies listed.
|
||||
|
||||
Javascript Dependencies
|
||||
=======================
|
||||
|
||||
Name Version Licence URL
|
||||
---- ------- ------- ---
|
||||
@babel/code-frame 7.14.5 MIT https://github.com/babel/babel.git
|
||||
@babel/code-frame 7.12.13 MIT https://github.com/babel/babel.git
|
||||
@babel/compat-data 7.14.7 MIT https://github.com/babel/babel.git
|
||||
@babel/core 7.13.8 MIT https://github.com/babel/babel.git
|
||||
@babel/generator 7.14.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-annotate-as-pure 7.14.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-compilation-targets 7.14.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-create-class-features-plugin 7.14.6 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-function-name 7.14.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-get-function-arity 7.14.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-hoist-variables 7.14.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-member-expression-to-functions 7.14.7 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-module-imports 7.13.12 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-module-transforms 7.13.0 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-optimise-call-expression 7.14.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-plugin-utils 7.14.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-replace-supers 7.14.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-simple-access 7.13.12 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-split-export-declaration 7.14.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-validator-identifier 7.14.9 MIT https://github.com/babel/babel.git
|
||||
@babel/helper-validator-option 7.14.5 MIT https://github.com/babel/babel.git
|
||||
@babel/helpers 7.13.0 MIT https://github.com/babel/babel.git
|
||||
@babel/highlight 7.14.5 MIT https://github.com/babel/babel.git
|
||||
@babel/parser 7.14.7 MIT https://github.com/babel/babel.git
|
||||
@babel/plugin-proposal-class-properties 7.13.0 MIT https://github.com/babel/babel.git
|
||||
@babel/plugin-syntax-jsx 7.12.13 MIT https://github.com/babel/babel.git
|
||||
@babel/plugin-transform-react-display-name 7.14.2 MIT https://github.com/babel/babel.git
|
||||
@babel/plugin-transform-react-jsx 7.13.12 MIT https://github.com/babel/babel.git
|
||||
@babel/plugin-transform-react-jsx-development 7.12.17 MIT https://github.com/babel/babel.git
|
||||
@babel/plugin-transform-react-pure-annotations 7.12.1 MIT https://github.com/babel/babel.git
|
||||
@babel/preset-react 7.13.13 MIT https://github.com/babel/babel.git
|
||||
@babel/runtime 7.14.0 MIT https://github.com/babel/babel.git
|
||||
@babel/runtime 7.17.0 MIT https://github.com/babel/babel.git
|
||||
@babel/template 7.14.5 MIT https://github.com/babel/babel.git
|
||||
@babel/traverse 7.14.7 MIT https://github.com/babel/babel.git
|
||||
@babel/types 7.15.4 MIT https://github.com/babel/babel.git
|
||||
@date-io/core 1.3.13 MIT https://github.com/dmtrKovalenko/date-io
|
||||
@date-io/date-fns 1.3.13 MIT https://github.com/dmtrKovalenko/date-io
|
||||
@emotion/cache 11.4.0 MIT https://github.com/emotion-js/emotion/tree/main/packages/cache
|
||||
@emotion/hash 0.8.0 MIT https://github.com/emotion-js/emotion/tree/master/packages/hash
|
||||
@emotion/is-prop-valid 0.8.8 MIT https://github.com/emotion-js/emotion/tree/master/packages/is-prop-valid
|
||||
@emotion/memoize 0.7.5 MIT https://github.com/emotion-js/emotion/tree/master/packages/memoize
|
||||
@emotion/memoize 0.7.4 MIT https://github.com/emotion-js/emotion/tree/master/packages/memoize
|
||||
@emotion/react 11.4.0 MIT https://github.com/emotion-js/emotion/tree/main/packages/react
|
||||
@emotion/serialize 1.0.2 MIT https://github.com/emotion-js/emotion/tree/main/packages/serialize
|
||||
@emotion/sheet 1.0.1 MIT https://github.com/emotion-js/emotion/tree/master/packages/sheet
|
||||
@emotion/stylis 0.8.5 MIT https://github.com/emotion-js/emotion/tree/master/packages/stylis
|
||||
@emotion/unitless 0.7.5 MIT https://github.com/emotion-js/emotion/tree/master/packages/unitless
|
||||
@emotion/utils 1.0.0 MIT https://github.com/emotion-js/emotion/tree/master/packages/utils
|
||||
@emotion/weak-memoize 0.2.5 MIT https://github.com/emotion-js/emotion/tree/master/packages/weak-memoize
|
||||
@istanbuljs/schema 0.1.3 MIT git+https://github.com/istanbuljs/schema.git
|
||||
@material-ui/core 4.11.0 MIT https://github.com/mui-org/material-ui.git
|
||||
@material-ui/icons 4.11.2 MIT https://github.com/mui-org/material-ui.git
|
||||
@material-ui/lab 4.0.0-alpha.58 MIT https://github.com/mui-org/material-ui.git
|
||||
@material-ui/pickers 3.2.10 MIT https://github.com/mui-org/material-ui-pickers
|
||||
@material-ui/styles 4.11.4 MIT https://github.com/mui-org/material-ui.git
|
||||
@material-ui/system 4.12.1 MIT https://github.com/mui-org/material-ui.git
|
||||
@material-ui/types 5.1.0 MIT https://github.com/mui-org/material-ui.git
|
||||
@material-ui/utils 4.11.2 MIT https://github.com/mui-org/material-ui.git
|
||||
@popperjs/core 2.9.0 MIT https://github.com/popperjs/popper-core.git
|
||||
@projectstorm/geometry 6.6.1 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@projectstorm/react-canvas-core 6.6.1 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@projectstorm/react-diagrams 6.6.1 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@projectstorm/react-diagrams-core 6.6.1 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@projectstorm/react-diagrams-defaults 6.6.1 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@projectstorm/react-diagrams-routing 6.6.1 MIT https://github.com/projectstorm/react-diagrams.git
|
||||
@simonwep/pickr 1.8.1 MIT https://github.com/Simonwep/pickr.git
|
||||
@sindresorhus/is 0.7.0 MIT https://github.com/sindresorhus/is.git
|
||||
@szhsin/react-menu 2.3.3 MIT https://github.com/szhsin/react-menu.git
|
||||
@tippyjs/react 4.2.3 MIT git+https://github.com/atomiks/tippyjs-react.git
|
||||
@types/classnames 2.3.1 MIT Unknown
|
||||
@types/component-emitter 1.2.10 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/json-schema 7.0.7 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/node 14.14.32 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/parse-json 4.0.0 MIT https://www.github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/prop-types 15.7.3 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/react 16.14.10 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/react 16.14.18 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/react-dom 16.9.14 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/react-transition-group 4.4.1 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/scheduler 0.16.1 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/styled-jsx 2.2.8 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
acitree 4.5.0-rc.7 MIT https://github.com/imsurinder90/jquery-aciTree.git
|
||||
ajv 8.9.0 MIT https://github.com/ajv-validator/ajv.git
|
||||
ajv 6.12.6 MIT https://github.com/ajv-validator/ajv.git
|
||||
ajv-errors 1.0.1 MIT git+https://github.com/epoberezkin/ajv-errors.git
|
||||
ajv-keywords 3.5.2 MIT git+https://github.com/epoberezkin/ajv-keywords.git
|
||||
alertifyjs 1.7.1 MIT git@github.com:MohammadYounes/AlertifyJS.git
|
||||
alphanum-sort 1.0.2 MIT https://github.com/TrySound/alphanum-sort.git
|
||||
ansi-styles 3.2.1 MIT https://github.com/chalk/ansi-styles.git
|
||||
aspen-core 1.0.4 MIT git+https://github.com/neeksandhu/aspen-core.git
|
||||
aspen-decorations 1.1.1 MIT git+https://github.com/neeksandhu/aspen-decorations.git
|
||||
aspen-tree-model 1.0.5 MIT git+https://github.com/neeksandhu/aspen-tree-model.git
|
||||
async 2.6.3 MIT https://github.com/caolan/async.git
|
||||
axios 0.21.4 MIT https://github.com/axios/axios.git
|
||||
babel-plugin-styled-components 1.12.0 MIT https://github.com/styled-components/babel-plugin-styled-components.git
|
||||
babel-plugin-syntax-jsx 6.18.0 MIT https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-jsx
|
||||
babelify 10.0.0 MIT https://github.com/babel/babelify.git
|
||||
backbone 1.4.0 MIT https://github.com/jashkenas/backbone.git
|
||||
backbone 1.2.3 MIT https://github.com/jashkenas/backbone.git
|
||||
backbone 1.3.3 MIT https://github.com/jashkenas/backbone.git
|
||||
backform 0.2.0 MIT https://github.com/AmiliaApp/backform
|
||||
backgrid 0.3.8 MIT http://github.com/cloudflare/backgrid
|
||||
backgrid-filter 0.3.7 MIT git://github.com/wyuenho/backgrid-text-cell.git
|
||||
backgrid-select-all 0.3.5 MIT git://github.com/wyuenho/backgrid-select-all.git
|
||||
backo2 1.0.2 MIT https://github.com/mokesmokes/backo.git
|
||||
balanced-match 1.0.2 MIT git://github.com/juliangruber/balanced-match.git
|
||||
base64-arraybuffer 0.2.0 MIT https://github.com/niklasvh/base64-arraybuffer
|
||||
base64-arraybuffer 0.1.4 MIT https://github.com/niklasvh/base64-arraybuffer
|
||||
big.js 5.2.2 MIT https://github.com/MikeMcl/big.js.git
|
||||
bignumber.js 9.0.1 MIT https://github.com/MikeMcl/bignumber.js.git
|
||||
bignumber.js 7.2.1 MIT https://github.com/MikeMcl/bignumber.js.git
|
||||
bootstrap 4.6.0 MIT git+https://github.com/twbs/bootstrap.git
|
||||
bootstrap4-toggle 3.6.1 MIT https://github.com/gitbrent/bootstrap4-toggle.git
|
||||
bowser 2.11.0 MIT git+https://github.com/lancedikson/bowser.git
|
||||
brace 0.11.1 MIT git://github.com/thlorenz/brace.git
|
||||
brace-expansion 1.1.11 MIT git://github.com/juliangruber/brace-expansion.git
|
||||
browserfs 1.4.3 MIT https://github.com/jvilk/BrowserFS.git
|
||||
browserslist 4.16.6 MIT https://github.com/browserslist/browserslist.git
|
||||
callsites 3.1.0 MIT https://github.com/sindresorhus/callsites.git
|
||||
camelcase 6.2.0 MIT https://github.com/sindresorhus/camelcase.git
|
||||
camelize 1.0.0 MIT git://github.com/substack/camelize.git
|
||||
caniuse-api 3.0.0 MIT https://github.com/nyalab/caniuse-api.git
|
||||
chalk 2.4.2 MIT https://github.com/chalk/chalk.git
|
||||
chart.js 2.9.4 MIT https://github.com/chartjs/Chart.js.git
|
||||
chartjs-color 2.4.1 MIT https://github.com/chartjs/chartjs-color.git
|
||||
chartjs-color-string 0.6.0 MIT https://github.com/chartjs/chartjs-color-string.git
|
||||
classnames 2.3.1 MIT https://github.com/JedWatson/classnames.git
|
||||
closest 0.0.1 MIT https://github.com/ForbesLindesay/closest.git
|
||||
clsx 1.1.1 MIT https://github.com/lukeed/clsx.git
|
||||
codemirror 5.59.4 MIT https://github.com/codemirror/CodeMirror.git
|
||||
color-convert 1.9.3 MIT https://github.com/Qix-/color-convert.git
|
||||
color-name 1.1.3 MIT git@github.com:dfcreative/color-name.git
|
||||
color-name 1.1.4 MIT git@github.com:colorjs/color-name.git
|
||||
colord 2.0.0 MIT https://github.com/omgovich/colord.git
|
||||
colorette 1.2.2 MIT https://github.com/jorgebucaran/colorette.git
|
||||
commander 7.2.0 MIT https://github.com/tj/commander.js.git
|
||||
component-emitter 1.3.0 MIT https://github.com/component/emitter.git
|
||||
concat-map 0.0.1 MIT git://github.com/substack/node-concat-map.git
|
||||
context-menu 2.0.0 MIT https://github.com/chipto/context-menu.git
|
||||
convert-source-map 1.8.0 MIT git://github.com/thlorenz/convert-source-map.git
|
||||
copy-to-clipboard 3.3.1 MIT git+https://github.com/sudodoki/copy-to-clipboard
|
||||
core-js 3.12.1 MIT https://github.com/zloirock/core-js.git
|
||||
cosmiconfig 7.0.0 MIT git+https://github.com/davidtheclark/cosmiconfig.git
|
||||
css-color-names 1.0.1 MIT git://github.com/bahamas10/css-color-names.git
|
||||
css-color-names 0.0.4 MIT git://github.com/bahamas10/css-color-names.git
|
||||
css-line-break 1.1.1 MIT git+ssh://git@github.com/niklasvh/css-line-break.git
|
||||
css-loader 5.1.1 MIT https://github.com/webpack-contrib/css-loader.git
|
||||
css-to-react-native 3.0.0 MIT git+https://github.com/styled-components/css-to-react-native.git
|
||||
css-tree 1.1.3 MIT https://github.com/csstree/csstree.git
|
||||
css-vendor 2.0.8 MIT git@github.com:cssinjs/css-vendor.git
|
||||
cssesc 3.0.0 MIT https://github.com/mathiasbynens/cssesc.git
|
||||
cssnano 5.0.4 MIT https://github.com/cssnano/cssnano.git
|
||||
cssnano-preset-default 5.1.1 MIT https://github.com/cssnano/cssnano.git
|
||||
cssnano-utils 2.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
csso 4.2.0 MIT https://github.com/css/csso.git
|
||||
csstype 2.6.16 MIT https://github.com/frenic/csstype
|
||||
csstype 3.0.8 MIT https://github.com/frenic/csstype
|
||||
dagre 0.8.5 MIT https://github.com/dagrejs/dagre.git
|
||||
date-fns 2.24.0 MIT https://github.com/date-fns/date-fns
|
||||
debug 4.3.1 MIT git://github.com/visionmedia/debug.git
|
||||
deep-diff 1.0.2 MIT git://github.com/flitbit/diff.git
|
||||
diff-arrays-of-objects 1.1.8 MIT git+https://github.com/malcolmvr/diff-arrays-of-objects.git
|
||||
dom-align 1.12.2 MIT git@github.com:yiminghe/dom-align.git
|
||||
dom-helpers 5.2.0 MIT git+https://github.com/react-bootstrap/dom-helpers.git
|
||||
dom-serializer 1.3.2 MIT git://github.com/cheeriojs/dom-renderer.git
|
||||
dropzone 5.9.3 MIT https://github.com/dropzone/dropzone.git
|
||||
emojis-list 3.0.0 MIT git+https://github.com/kikobeats/emojis-list.git
|
||||
engine.io-client 5.1.1 MIT https://github.com/socketio/engine.io-client.git
|
||||
engine.io-parser 4.0.2 MIT git@github.com:socketio/engine.io-parser.git
|
||||
error-ex 1.3.2 MIT https://github.com/qix-/node-error-ex.git
|
||||
escalade 3.1.1 MIT https://github.com/lukeed/escalade.git
|
||||
escape-string-regexp 1.0.5 MIT https://github.com/sindresorhus/escape-string-regexp.git
|
||||
fast-deep-equal 3.1.3 MIT git+https://github.com/epoberezkin/fast-deep-equal.git
|
||||
fast-json-stable-stringify 2.1.0 MIT git://github.com/epoberezkin/fast-json-stable-stringify.git
|
||||
filename-reserved-regex 2.0.0 MIT https://github.com/sindresorhus/filename-reserved-regex.git
|
||||
follow-redirects 1.14.8 MIT git@github.com:follow-redirects/follow-redirects.git
|
||||
gensync 1.0.0-beta.2 MIT https://github.com/loganfsmyth/gensync.git
|
||||
globals 11.12.0 MIT https://github.com/sindresorhus/globals.git
|
||||
graphlib 2.1.8 MIT https://github.com/dagrejs/graphlib.git
|
||||
has-cors 1.1.0 MIT git://github.com/component/has-cors.git
|
||||
has-flag 3.0.0 MIT https://github.com/sindresorhus/has-flag.git
|
||||
has-flag 4.0.0 MIT https://github.com/sindresorhus/has-flag.git
|
||||
hex-color-regex 1.1.0 MIT https://github.com/regexps/hex-color-regex.git
|
||||
hsl-regex 1.0.0 MIT https://github.com/regexps/hsl-regex.git
|
||||
hsla-regex 1.0.0 MIT https://github.com/regexps/hsla-regex.git
|
||||
html-escaper 2.0.2 MIT https://github.com/WebReflection/html-escaper.git
|
||||
html2canvas 1.0.0-rc.7 MIT git@github.com:niklasvh/html2canvas.git
|
||||
immutability-helper 3.1.1 MIT git+https://github.com/kolodny/immutability-helper.git
|
||||
import-fresh 3.3.0 MIT https://github.com/sindresorhus/import-fresh.git
|
||||
imports-loader 2.0.0 MIT https://github.com/webpack-contrib/imports-loader.git
|
||||
insert-if 1.2.0 MIT git+https://github.com/chipto/insert-if.git
|
||||
ip-address 7.1.0 MIT git://github.com/beaugunderson/ip-address.git
|
||||
is-absolute-url 3.0.3 MIT https://github.com/sindresorhus/is-absolute-url.git
|
||||
is-any-array 1.0.0 MIT https://github.com/cheminfo-js/is-any-array.git
|
||||
is-arrayish 0.2.1 MIT https://github.com/qix-/node-is-arrayish.git
|
||||
is-color-stop 1.1.0 MIT git+https://github.com/pigcan/is-color-stop.git
|
||||
is-in-browser 1.1.3 MIT git+https://github.com/tuxsudo/is-in-browser.git
|
||||
is-relative 1.0.0 MIT https://github.com/jonschlinkert/is-relative.git
|
||||
is-unc-path 1.0.0 MIT https://github.com/jonschlinkert/is-unc-path.git
|
||||
javascript-natural-sort 0.7.1 MIT https://github.com/Bill4Time/javascript-natural-sort.git
|
||||
jquery 3.6.0 MIT https://github.com/jquery/jquery.git
|
||||
jquery-contextmenu 2.9.2 MIT git://github.com/swisnl/jQuery-contextMenu.git
|
||||
jquery-ui 1.13.0 MIT git://github.com/jquery/jquery-ui.git
|
||||
js-tokens 4.0.0 MIT https://github.com/lydell/js-tokens.git
|
||||
jsbn 1.1.0 MIT https://github.com/andyperlitch/jsbn.git
|
||||
jsesc 2.5.2 MIT https://github.com/mathiasbynens/jsesc.git
|
||||
json-bignumber 1.0.2 MIT git@github.com:wbuss/JSONBigNumber.git
|
||||
json-parse-even-better-errors 2.3.1 MIT https://github.com/npm/json-parse-even-better-errors
|
||||
json-schema-traverse 1.0.0 MIT git+https://github.com/epoberezkin/json-schema-traverse.git
|
||||
json-schema-traverse 0.4.1 MIT git+https://github.com/epoberezkin/json-schema-traverse.git
|
||||
json-source-map 0.6.1 MIT git+https://github.com/epoberezkin/json-source-map.git
|
||||
json5 2.2.0 MIT git+https://github.com/json5/json5.git
|
||||
json5 1.0.1 MIT git+https://github.com/json5/json5.git
|
||||
jsoneditor-react 3.1.2 MIT git+https://github.com/vankop/jsoneditor-react.git
|
||||
jss 10.5.1 MIT https://github.com/cssinjs/jss
|
||||
jss-plugin-camel-case 10.5.1 MIT https://github.com/cssinjs/jss
|
||||
jss-plugin-default-unit 10.5.1 MIT https://github.com/cssinjs/jss
|
||||
jss-plugin-global 10.5.1 MIT https://github.com/cssinjs/jss
|
||||
jss-plugin-nested 10.5.1 MIT https://github.com/cssinjs/jss
|
||||
jss-plugin-props-sort 10.5.1 MIT https://github.com/cssinjs/jss
|
||||
jss-plugin-rule-value-function 10.5.1 MIT https://github.com/cssinjs/jss
|
||||
jss-plugin-vendor-prefixer 10.5.1 MIT https://github.com/cssinjs/jss
|
||||
karma-coverage 2.0.3 MIT git://github.com/karma-runner/karma-coverage.git
|
||||
lines-and-columns 1.1.6 MIT https://github.com/eventualbuddha/lines-and-columns.git
|
||||
loader-utils 2.0.0 MIT https://github.com/webpack/loader-utils.git
|
||||
loader-utils 1.4.0 MIT https://github.com/webpack/loader-utils.git
|
||||
lodash 4.17.21 MIT https://github.com/lodash/lodash.git
|
||||
lodash.memoize 4.1.2 MIT https://github.com/lodash/lodash.git
|
||||
lodash.uniq 4.5.0 MIT https://github.com/lodash/lodash.git
|
||||
loose-envify 1.4.0 MIT git://github.com/zertosh/loose-envify.git
|
||||
lunr 0.7.2 MIT https://github.com/olivernn/lunr.js.git
|
||||
make-dir 3.1.0 MIT https://github.com/sindresorhus/make-dir.git
|
||||
matches-selector 0.0.1 MIT https://github.com/ForbesLindesay/matches-selector.git
|
||||
memoize-one 5.2.1 MIT https://github.com/alexreardon/memoize-one.git
|
||||
mime 2.5.2 MIT https://github.com/broofa/mime
|
||||
minimist 1.2.5 MIT git://github.com/substack/minimist.git
|
||||
ml-array-max 1.2.3 MIT git+https://github.com/mljs/array.git
|
||||
ml-array-min 1.2.2 MIT git+https://github.com/mljs/array.git
|
||||
ml-array-rescale 1.3.5 MIT git+https://github.com/mljs/array.git
|
||||
ml-matrix 6.8.0 MIT https://github.com/mljs/matrix.git
|
||||
mobius1-selectr 2.4.13 MIT git+https://github.com/Mobius1/Selectr.git
|
||||
moment 2.29.1 MIT https://github.com/moment/moment.git
|
||||
moment 2.24.0 MIT https://github.com/moment/moment.git
|
||||
moment-timezone 0.5.33 MIT https://github.com/moment/moment-timezone.git
|
||||
ms 2.1.2 MIT https://github.com/zeit/ms.git
|
||||
nanocolors 0.1.12 MIT https://github.com/ai/nanocolors.git
|
||||
nanoid 3.2.0 MIT https://github.com/ai/nanoid.git
|
||||
nanopop 2.1.0 MIT https://github.com/Simonwep/nanopop.git
|
||||
node-releases 1.1.72 MIT git+https://github.com/chicoxyzzy/node-releases.git
|
||||
normalize-url 4.5.1 MIT https://github.com/sindresorhus/normalize-url.git
|
||||
notificar 1.0.1 MIT git+https://github.com/neeksandhu/notificar.git
|
||||
notistack 1.0.10 MIT git+https://github.com/iamhosseindhv/notistack.git
|
||||
object-assign 4.1.1 MIT https://github.com/sindresorhus/object-assign.git
|
||||
p-reduce 1.0.0 MIT https://github.com/sindresorhus/p-reduce.git
|
||||
p-series 1.1.0 MIT https://github.com/sindresorhus/p-series.git
|
||||
parent-module 1.0.1 MIT https://github.com/sindresorhus/parent-module.git
|
||||
parse-json 5.2.0 MIT https://github.com/sindresorhus/parse-json.git
|
||||
parseqs 0.0.6 MIT https://github.com/get/querystring.git
|
||||
parseuri 0.0.6 MIT https://github.com/get/parseuri.git
|
||||
path-fx 2.1.1 MIT git+https://github.com/NeekSandhu/path-fx.git
|
||||
path-type 4.0.0 MIT https://github.com/sindresorhus/path-type.git
|
||||
pathfinding 0.4.18 MIT git://github.com/qiao/PathFinding.js.git
|
||||
performance-now 2.1.0 MIT git://github.com/braveg1rl/performance-now.git
|
||||
pgadmin4-tree 1.0.0 MIT Unknown
|
||||
picomodal 3.0.0 MIT https://github.com/Nycto/PicoModal.git
|
||||
popper.js 1.16.1-lts MIT git+https://github.com/FezVrasta/popper.js.git
|
||||
popper.js 1.16.1 MIT git+https://github.com/FezVrasta/popper.js.git
|
||||
postcss 8.2.15 MIT https://github.com/postcss/postcss.git
|
||||
postcss-calc 8.0.0 MIT https://github.com/postcss/postcss-calc.git
|
||||
postcss-colormin 5.1.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-convert-values 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-discard-comments 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-discard-duplicates 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-discard-empty 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-discard-overridden 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-merge-longhand 5.0.2 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-merge-rules 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-minify-font-values 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-minify-gradients 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-minify-params 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-minify-selectors 5.1.0 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-modules-local-by-default 4.0.0 MIT https://github.com/css-modules/postcss-modules-local-by-default.git
|
||||
postcss-normalize-charset 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-normalize-display-values 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-normalize-positions 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-normalize-repeat-style 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-normalize-string 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-normalize-timing-functions 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-normalize-unicode 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-normalize-url 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-normalize-whitespace 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-ordered-values 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-reduce-initial 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-reduce-transforms 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-selector-parser 6.0.6 MIT https://github.com/postcss/postcss-selector-parser.git
|
||||
postcss-svgo 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-unique-selectors 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
postcss-value-parser 4.1.0 MIT https://github.com/TrySound/postcss-value-parser.git
|
||||
prop-types 15.7.2 MIT https://github.com/facebook/prop-types.git
|
||||
punycode 2.1.1 MIT https://github.com/bestiejs/punycode.js.git
|
||||
raf 3.4.1 MIT git://github.com/chrisdickinson/raf.git
|
||||
rc-align 4.0.11 MIT git@github.com:react-component/align.git
|
||||
rc-dropdown 3.3.0 MIT git@github.com:react-component/dropdown.git
|
||||
rc-menu 9.3.2 MIT git@github.com:react-component/menu.git
|
||||
rc-motion 2.4.4 MIT git@github.com:react-component/motion.git
|
||||
rc-overflow 1.2.2 MIT git@github.com:react-component/overflow.git
|
||||
rc-resize-observer 1.2.0 MIT git@github.com:react-component/resize-observer.git
|
||||
rc-tabs 11.10.5 MIT git@github.com:react-component/tabs.git
|
||||
rc-trigger 5.2.10 MIT https://github.com/react-component/trigger.git
|
||||
rc-util 5.17.0 MIT git@github.com:react-component/util.git
|
||||
react 16.14.0 MIT git+https://github.com/facebook/react.git
|
||||
react 17.0.2 MIT https://github.com/facebook/react.git
|
||||
react-aspen 1.1.1 MIT https://github.com/neeksandhu/react-aspen.git
|
||||
react-checkbox-tree 1.7.2 MIT https://github.com/jakezatecky/react-checkbox-tree
|
||||
react-dom 16.14.0 MIT git+https://github.com/facebook/react.git
|
||||
react-dom 17.0.2 MIT https://github.com/facebook/react.git
|
||||
react-draggable 4.4.4 MIT https://github.com/react-grid-layout/react-draggable.git
|
||||
react-input-autosize 3.0.0 MIT https://github.com/JedWatson/react-input-autosize.git
|
||||
react-is 16.13.1 MIT https://github.com/facebook/react.git
|
||||
react-is 17.0.2 MIT https://github.com/facebook/react.git
|
||||
react-select 4.3.1 MIT https://github.com/JedWatson/react-select/tree/master/packages/react-select
|
||||
react-table 7.7.0 MIT https://github.com/tannerlinsley/react-table
|
||||
react-transition-state 1.1.3 MIT https://github.com/szhsin/react-transition-state.git
|
||||
react-virtualized-auto-sizer 1.0.6 MIT https://github.com/bvaughn/react-virtualized-auto-sizer.git
|
||||
react-window 1.8.6 MIT https://github.com/bvaughn/react-window.git
|
||||
regenerator-runtime 0.13.7 MIT https://github.com/facebook/regenerator/tree/master/packages/regenerator-runtime
|
||||
require-from-string 2.0.2 MIT https://github.com/floatdrop/require-from-string.git
|
||||
resize-observer-polyfill 1.5.1 MIT https://github.com/que-etc/resize-observer-polyfill.git
|
||||
resolve-from 4.0.0 MIT https://github.com/sindresorhus/resolve-from.git
|
||||
rgb-regex 1.0.1 MIT https://github.com/regexps/rgb-regex.git
|
||||
rgba-regex 1.0.0 MIT https://github.com/johnotander/rgba-regex.git
|
||||
rifm 0.7.0 MIT https://github.com/istarkov/rifm.git
|
||||
safe-buffer 5.1.2 MIT git://github.com/feross/safe-buffer.git
|
||||
scheduler 0.19.1 MIT https://github.com/facebook/react.git
|
||||
scheduler 0.20.2 MIT https://github.com/facebook/react.git
|
||||
schema-utils 3.0.0 MIT https://github.com/webpack/schema-utils.git
|
||||
schema-utils 1.0.0 MIT https://github.com/webpack-contrib/schema-utils
|
||||
select2 4.0.13 MIT git://github.com/select2/select2.git
|
||||
shallowequal 1.1.0 MIT https://github.com/dashed/shallowequal.git
|
||||
shim-loader 1.0.1 MIT https://github.com/zinserjan/shim-loader
|
||||
slickgrid 2.3.16 MIT git+https://github.com/6pac/SlickGrid.git
|
||||
snapsvg-cjs 0.0.6 MIT git+https://github.com/geelen/Snap.svg-cjs.git
|
||||
socket.io-client 4.1.2 MIT https://github.com/socketio/socket.io-client.git
|
||||
socket.io-parser 4.0.4 MIT https://github.com/socketio/socket.io-parser.git
|
||||
source-list-map 1.1.2 MIT https://github.com/webpack/source-list-map.git
|
||||
split.js 1.6.4 MIT https://github.com/nathancahill/split
|
||||
stable 0.1.8 MIT https://github.com/Two-Screen/stable.git
|
||||
strip-comments 2.0.1 MIT https://github.com/jonschlinkert/strip-comments.git
|
||||
styled-components 5.2.1 MIT git+https://github.com/styled-components/styled-components.git
|
||||
stylehacks 5.0.1 MIT https://github.com/cssnano/cssnano.git
|
||||
stylis 4.0.10 MIT https://github.com/thysultan/stylis.js
|
||||
supports-color 5.5.0 MIT https://github.com/chalk/supports-color.git
|
||||
supports-color 7.2.0 MIT https://github.com/chalk/supports-color.git
|
||||
svgo 2.7.0 MIT git://github.com/svg/svgo.git
|
||||
symbol-observable 1.2.0 MIT https://github.com/blesh/symbol-observable.git
|
||||
tempusdominus-bootstrap-4 5.39.0 MIT https://github.com/tempusdominus/bootstrap-4.git
|
||||
tempusdominus-core 5.19.0 MIT https://github.com/tempusdominus/core.git
|
||||
timsort 0.3.0 MIT https://github.com/mziccard/node-timsort.git
|
||||
tiny-emitter 2.1.0 MIT https://github.com/scottcorgan/tiny-emitter.git
|
||||
tiny-warning 1.0.3 MIT https://github.com/alexreardon/tiny-warning.git
|
||||
tippy.js 6.3.1 MIT git+https://github.com/atomiks/tippyjs.git
|
||||
to-fast-properties 2.0.0 MIT https://github.com/sindresorhus/to-fast-properties.git
|
||||
toggle-selection 1.0.6 MIT git+https://github.com/sudodoki/toggle-selection
|
||||
unc-path-regex 0.1.2 MIT https://github.com/regexhq/unc-path-regex.git
|
||||
underscore 1.13.1 MIT git://github.com/jashkenas/underscore.git
|
||||
uniqs 2.0.0 MIT git://github.com/fgnass/uniqs.git
|
||||
url-loader 1.1.2 MIT https://github.com/webpack-contrib/url-loader.git
|
||||
util-deprecate 1.0.2 MIT git://github.com/TooTallNate/util-deprecate.git
|
||||
valid-filename 2.0.1 MIT https://github.com/sindresorhus/valid-filename.git
|
||||
vendors 1.0.4 MIT https://github.com/wooorm/vendors.git
|
||||
webpack-sources 0.2.3 MIT git+https://github.com/webpack/webpack-sources.git
|
||||
wkx 0.5.0 MIT http://github.com/cschwarz/wkx.git
|
||||
ws 7.4.6 MIT https://github.com/websockets/ws.git
|
||||
xterm 4.12.0 MIT https://github.com/xtermjs/xterm.js
|
||||
xterm-addon-fit 0.5.0 MIT https://github.com/xtermjs/xterm.js
|
||||
xterm-addon-search 0.8.0 MIT https://github.com/xtermjs/xterm.js
|
||||
xterm-addon-web-links 0.4.0 MIT https://github.com/xtermjs/xterm.js
|
||||
yeast 0.1.2 MIT https://github.com/unshiftio/yeast.git
|
||||
@fortawesome/fontawesome-free 5.15.4 (CC-BY-4.0 AND OFL-1.1 AND MIT) https://github.com/FortAwesome/Font-Awesome
|
||||
@sphinxxxx/color-conversion 2.2.2 ISC git+https://github.com/Sphinxxxx/color-conversion.git
|
||||
@trysound/sax 0.2.0 ISC git://github.com/svg/sax.git
|
||||
boolbase 1.0.0 ISC https://github.com/fb55/boolbase
|
||||
css-color-keywords 1.0.0 ISC https://github.com/sonicdoe/css-color-keywords.git
|
||||
css-declaration-sorter 6.0.3 ISC https://github.com/Siilwyn/css-declaration-sorter.git
|
||||
electron-to-chromium 1.3.740 ISC https://github.com/kilian/electron-to-chromium/
|
||||
icss-utils 5.1.0 ISC git+https://github.com/css-modules/icss-utils.git
|
||||
is-resolvable 1.1.0 ISC https://github.com/shinnn/is-resolvable.git
|
||||
jsonrepair 2.2.1 ISC https://github.com/josdejong/jsonrepair.git
|
||||
lru-cache 6.0.0 ISC git://github.com/isaacs/node-lru-cache.git
|
||||
minimatch 3.0.4 ISC git://github.com/isaacs/minimatch.git
|
||||
postcss-modules-extract-imports 3.0.0 ISC https://github.com/css-modules/postcss-modules-extract-imports.git
|
||||
postcss-modules-scope 3.0.0 ISC https://github.com/css-modules/postcss-modules-scope.git
|
||||
postcss-modules-values 4.0.0 ISC git+https://github.com/css-modules/postcss-modules-values.git
|
||||
react-timer-hook 3.0.5 ISC git+https://github.com/amrlabib/react-timer-hook.git
|
||||
semver 7.3.4 ISC https://github.com/npm/node-semver
|
||||
semver 6.3.0 ISC https://github.com/npm/node-semver
|
||||
vanilla-picker 2.11.2 ISC https://github.com/Sphinxxxx/vanilla-picker.git
|
||||
yallist 4.0.0 ISC git+https://github.com/isaacs/yallist.git
|
||||
yaml 1.10.2 ISC https://github.com/eemeli/yaml.git
|
||||
ace-builds 1.4.12 BSD-3-Clause https://github.com/ajaxorg/ace-builds.git
|
||||
hoist-non-react-statics 3.3.2 BSD-3-Clause git://github.com/mridgway/hoist-non-react-statics.git
|
||||
hyphenate-style-name 1.0.4 BSD-3-Clause git+ssh://git@github.com/rexxars/hyphenate-style-name.git
|
||||
istanbul-lib-coverage 3.0.0 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
|
||||
istanbul-lib-instrument 4.0.3 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
|
||||
istanbul-lib-report 3.0.0 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
|
||||
istanbul-lib-source-maps 4.0.0 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
|
||||
istanbul-reports 3.0.2 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
|
||||
react-transition-group 4.4.1 BSD-3-Clause https://github.com/reactjs/react-transition-group.git
|
||||
source-map 0.5.7 BSD-3-Clause http://github.com/mozilla/source-map.git
|
||||
source-map 0.6.1 BSD-3-Clause http://github.com/mozilla/source-map.git
|
||||
sprintf-js 1.1.2 BSD-3-Clause https://github.com/alexei/sprintf.js.git
|
||||
bootstrap-datepicker 1.9.0 Apache-2.0 https://github.com/uxsolutions/bootstrap-datepicker.git
|
||||
eve 0.5.4 Apache-2.0 git@github.com:adobe-webplatform/eve.git
|
||||
indefinite-observable 2.0.1 Apache-2.0 git@github.com:material-motion/indefinite-observable-js.git
|
||||
jmespath 0.15.0 Apache-2.0 git://github.com/jmespath/jmespath.js
|
||||
jsoneditor 9.5.6 Apache-2.0 https://github.com/josdejong/jsoneditor.git
|
||||
paths-js 0.4.11 Apache-2.0 https://github.com/andreaferretti/paths-js.git
|
||||
rc-dock 3.2.10 Apache-2.0 https://github.com/ticlo/rc-dock.git
|
||||
rc-new-window 0.1.13 Apache-2.0 https://github.com/ticlo/rc-new-window.git
|
||||
snapsvg 0.5.1 Apache-2.0 git@github.com:adobe-webplatform/Snap.svg.git
|
||||
caniuse-lite 1.0.30001309 CC-BY-4.0 https://github.com/browserslist/caniuse-lite.git
|
||||
css-select 4.1.3 BSD-2-Clause git://github.com/fb55/css-select.git
|
||||
css-what 5.1.0 BSD-2-Clause https://github.com/fb55/css-what
|
||||
domelementtype 2.2.0 BSD-2-Clause git://github.com/fb55/domelementtype.git
|
||||
domhandler 4.2.0 BSD-2-Clause git://github.com/fb55/domhandler.git
|
||||
domutils 2.6.0 BSD-2-Clause git://github.com/fb55/domutils.git
|
||||
entities 2.2.0 BSD-2-Clause git://github.com/fb55/entities.git
|
||||
leaflet 1.7.1 BSD-2-Clause git://github.com/Leaflet/Leaflet.git
|
||||
nth-check 2.0.1 BSD-2-Clause https://github.com/fb55/nth-check
|
||||
uri-js 4.4.1 BSD-2-Clause http://github.com/garycourt/uri-js
|
||||
FileSaver 0.10.0 UNKNOWN Unknown
|
||||
heap 0.2.5 UNKNOWN git://github.com/qiao/heap.js.git
|
||||
mdn-data 2.0.14 CC0-1.0 https://github.com/mdn/data.git
|
||||
mousetrap 1.6.5 Apache-2.0 WITH LLVM-exception git://github.com/ccampbell/mousetrap.git
|
||||
pako 1.0.11 (MIT AND Zlib) https://github.com/nodeca/pako.git
|
||||
precond 0.2.3 MIT* https://github.com/MathieuTurcotte/node-precond.git
|
||||
webcabin-docker 2.2.5 MIT* Unknown
|
||||
tablesorter 2.31.3 (MIT OR GPL-2.0) git://github.com/Mottie/tablesorter.git
|
||||
|
||||
439 dependencies listed.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2018, The pgAdmin Development Team
|
||||
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
#########################################################################
|
||||
@@ -12,7 +12,7 @@
|
||||
# and clean up the web/ source code
|
||||
#########################################################################
|
||||
|
||||
FROM alpine:3.15 AS app-builder
|
||||
FROM alpine:latest AS app-builder
|
||||
|
||||
RUN apk add --no-cache \
|
||||
autoconf \
|
||||
@@ -27,9 +27,11 @@ RUN apk add --no-cache \
|
||||
make \
|
||||
nasm \
|
||||
nodejs \
|
||||
npm \
|
||||
yarn \
|
||||
zlib-dev
|
||||
|
||||
COPY .git .git
|
||||
# Create the /pgadmin4 directory and copy the source into it. Explicitly
|
||||
# remove the node_modules directory as we'll recreate a clean version, as well
|
||||
# as various other files we don't want
|
||||
@@ -45,6 +47,10 @@ WORKDIR /pgadmin4/web
|
||||
|
||||
# Build the JS vendor code in the app-builder, and then remove the vendor source.
|
||||
RUN export CPPFLAGS="-DPNG_ARM_NEON_OPT=0" && \
|
||||
npm install -g corepack && \
|
||||
corepack enable && \
|
||||
yarn set version berry && \
|
||||
yarn set version 4 && \
|
||||
yarn install && \
|
||||
yarn run bundle && \
|
||||
rm -rf node_modules \
|
||||
@@ -53,18 +59,20 @@ RUN export CPPFLAGS="-DPNG_ARM_NEON_OPT=0" && \
|
||||
.[^.]* \
|
||||
babel.cfg \
|
||||
webpack.* \
|
||||
karma.conf.js \
|
||||
./pgadmin/static/js/generated/.cache
|
||||
jest.config.js \
|
||||
babel.* \
|
||||
./pgadmin/static/js/generated/.cache \
|
||||
/pgadmin4/.git
|
||||
|
||||
#########################################################################
|
||||
# Next, create the base environment for Python
|
||||
#########################################################################
|
||||
|
||||
FROM alpine:3.15 as env-builder
|
||||
FROM alpine:latest AS env-builder
|
||||
|
||||
# Install dependencies
|
||||
COPY requirements.txt /
|
||||
RUN apk add --no-cache \
|
||||
RUN apk add --no-cache \
|
||||
make \
|
||||
python3 \
|
||||
py3-pip && \
|
||||
@@ -88,10 +96,11 @@ RUN apk add --no-cache \
|
||||
# Now, create a documentation build container for the Sphinx docs
|
||||
#########################################################################
|
||||
|
||||
FROM env-builder as docs-builder
|
||||
FROM env-builder AS docs-builder
|
||||
|
||||
# Install Sphinx
|
||||
RUN /venv/bin/python3 -m pip install --no-cache-dir sphinx
|
||||
RUN /venv/bin/python3 -m pip install --no-cache-dir sphinxcontrib-youtube
|
||||
|
||||
# Copy the docs from the local tree. Explicitly remove any existing builds that
|
||||
# may be present
|
||||
@@ -111,25 +120,16 @@ RUN rm -rf /pgadmin4/docs/en_US/_build/html/_static/*.png
|
||||
# Create additional builders to get all of the PostgreSQL utilities
|
||||
#########################################################################
|
||||
|
||||
FROM postgres:10-alpine as pg10-builder
|
||||
FROM postgres:11-alpine as pg11-builder
|
||||
FROM postgres:12-alpine as pg12-builder
|
||||
FROM postgres:13-alpine as pg13-builder
|
||||
FROM postgres:14-alpine as pg14-builder
|
||||
FROM postgres:12-alpine AS pg12-builder
|
||||
FROM postgres:13-alpine AS pg13-builder
|
||||
FROM postgres:14-alpine AS pg14-builder
|
||||
FROM postgres:15-alpine AS pg15-builder
|
||||
FROM postgres:16-alpine AS pg16-builder
|
||||
FROM postgres:17-alpine AS pg17-builder
|
||||
|
||||
FROM alpine:3.15 as tool-builder
|
||||
FROM alpine:latest AS tool-builder
|
||||
|
||||
# Copy the PG binaries
|
||||
COPY --from=pg10-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-10/
|
||||
COPY --from=pg10-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-10/
|
||||
COPY --from=pg10-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-10/
|
||||
COPY --from=pg10-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-10/
|
||||
|
||||
COPY --from=pg11-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-11/
|
||||
COPY --from=pg11-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-11/
|
||||
COPY --from=pg11-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-11/
|
||||
COPY --from=pg11-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-11/
|
||||
|
||||
COPY --from=pg12-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-12/
|
||||
COPY --from=pg12-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-12/
|
||||
COPY --from=pg12-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-12/
|
||||
@@ -145,20 +145,40 @@ COPY --from=pg14-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-14/
|
||||
COPY --from=pg14-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-14/
|
||||
COPY --from=pg14-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-14/
|
||||
|
||||
COPY --from=pg15-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-15/
|
||||
COPY --from=pg15-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-15/
|
||||
COPY --from=pg15-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-15/
|
||||
COPY --from=pg15-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-15/
|
||||
|
||||
COPY --from=pg16-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-16/
|
||||
COPY --from=pg16-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-16/
|
||||
COPY --from=pg16-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-16/
|
||||
COPY --from=pg16-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-16/
|
||||
|
||||
COPY --from=pg17-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-17/
|
||||
COPY --from=pg17-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-17/
|
||||
COPY --from=pg17-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-17/
|
||||
COPY --from=pg17-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-17/
|
||||
|
||||
#########################################################################
|
||||
# Assemble everything into the final container.
|
||||
#########################################################################
|
||||
|
||||
FROM alpine:3.15
|
||||
FROM alpine:latest
|
||||
|
||||
# Copy in the Python packages
|
||||
COPY --from=env-builder /venv /venv
|
||||
|
||||
# Copy in the tools
|
||||
COPY --from=tool-builder /usr/local/pgsql /usr/local/
|
||||
COPY --from=pg14-builder /usr/local/lib/libpq.so.5.14 /usr/lib/
|
||||
RUN ln -s libpq.so.5.14 /usr/lib/libpq.so.5 && \
|
||||
ln -s libpq.so.5.14 /usr/lib/libpq.so
|
||||
COPY --from=pg17-builder /usr/local/lib/libpq.so.5.17 /usr/lib/
|
||||
COPY --from=pg17-builder /usr/lib/libzstd.so.1.5.7 /usr/lib/
|
||||
COPY --from=pg17-builder /usr/lib/liblz4.so.1.10.0 /usr/lib/
|
||||
|
||||
RUN ln -s libpq.so.5.17 /usr/lib/libpq.so.5 && \
|
||||
ln -s libpq.so.5.17 /usr/lib/libpq.so && \
|
||||
ln -s libzstd.so.1.5.7 /usr/lib/libzstd.so.1 && \
|
||||
ln -s liblz4.so.1.10.0 /usr/lib/liblz4.so.1
|
||||
|
||||
WORKDIR /pgadmin4
|
||||
ENV PYTHONPATH=/pgadmin4
|
||||
@@ -172,32 +192,36 @@ COPY pkg/docker/entrypoint.sh /entrypoint.sh
|
||||
|
||||
# License files
|
||||
COPY LICENSE /pgadmin4/LICENSE
|
||||
COPY DEPENDENCIES /pgadmin4/DEPENDENCIES
|
||||
|
||||
# Install runtime dependencies and configure everything in one RUN step
|
||||
RUN apk add \
|
||||
RUN apk add --no-cache \
|
||||
python3 \
|
||||
bash \
|
||||
py3-pip \
|
||||
postfix \
|
||||
krb5-libs \
|
||||
libjpeg-turbo \
|
||||
shadow \
|
||||
sudo \
|
||||
tzdata \
|
||||
libedit \
|
||||
libldap \
|
||||
libcap && \
|
||||
/venv/bin/python3 -m pip install --no-cache-dir gunicorn && \
|
||||
/venv/bin/python3 -m pip install --no-cache-dir gunicorn==23.0.0 && \
|
||||
find / -type d -name '__pycache__' -exec rm -rf {} + && \
|
||||
groupadd -g 5050 pgadmin && \
|
||||
useradd -r -u 5050 -g pgadmin pgadmin && \
|
||||
mkdir -p /var/lib/pgadmin && \
|
||||
chown pgadmin:pgadmin /var/lib/pgadmin && \
|
||||
useradd -r -u 5050 -g root -s /sbin/nologin pgadmin && \
|
||||
mkdir -p /run/pgadmin /var/lib/pgadmin && \
|
||||
chown pgadmin:root /run/pgadmin /var/lib/pgadmin && \
|
||||
chmod g=u /var/lib/pgadmin && \
|
||||
touch /pgadmin4/config_distro.py && \
|
||||
chown pgadmin:pgadmin /pgadmin4/config_distro.py && \
|
||||
setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/python3.9 && \
|
||||
echo "pgadmin ALL = NOPASSWD: /usr/sbin/postfix start" > /etc/sudoers.d/postfix
|
||||
chown pgadmin:root /pgadmin4/config_distro.py && \
|
||||
chmod g=u /pgadmin4/config_distro.py && \
|
||||
chmod g=u /etc/passwd && \
|
||||
setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/python3.12 && \
|
||||
echo "pgadmin ALL = NOPASSWD: /usr/sbin/postfix start" > /etc/sudoers.d/postfix && \
|
||||
echo "pgadminr ALL = NOPASSWD: /usr/sbin/postfix start" >> /etc/sudoers.d/postfix
|
||||
|
||||
USER pgadmin
|
||||
USER 5050
|
||||
|
||||
# Finish up
|
||||
VOLUME /var/lib/pgadmin
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
pgAdmin 4
|
||||
=========
|
||||
|
||||
Copyright (C) 2013 - 2022, The pgAdmin Development Team
|
||||
This software is released under the PostgreSQL licence.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
|
||||
Permission to use, copy, modify, and distribute this software and its
|
||||
documentation for any purpose, without fee, and without a written agreement is
|
||||
|
||||
@@ -26,8 +26,9 @@ CALL :CLEAN || EXIT /B 1
|
||||
CALL :CREATE_VIRTUAL_ENV || EXIT /B 1
|
||||
CALL :CREATE_PYTHON_ENV || EXIT /B 1
|
||||
CALL :CREATE_RUNTIME_ENV || EXIT /B 1
|
||||
CALL :GENERATE_SBOM || EXIT /B 1
|
||||
CALL :CREATE_INSTALLER || EXIT /B 1
|
||||
CALL :SIGN_INSTALLER || EXIT /B 1
|
||||
CALL :VERIFY_SIGNATURE || EXIT /B 1
|
||||
|
||||
EXIT /B %ERRORLEVEL%
|
||||
REM Main build sequence Ends
|
||||
@@ -51,24 +52,22 @@ REM Main build sequence Ends
|
||||
|
||||
:SET_ENVIRONMENT
|
||||
ECHO Configuring the environment...
|
||||
IF "%PGADMIN_PYTHON_DIR%" == "" SET "PGADMIN_PYTHON_DIR=C:\Python38"
|
||||
IF "%PGADMIN_PYTHON_DIR%" == "" SET "PGADMIN_PYTHON_DIR=C:\Python313"
|
||||
IF "%PGADMIN_KRB5_DIR%" == "" SET "PGADMIN_KRB5_DIR=C:\Program Files\MIT\Kerberos"
|
||||
IF "%PGADMIN_POSTGRES_DIR%" == "" SET "PGADMIN_POSTGRES_DIR=C:\Program Files (x86)\PostgreSQL\12"
|
||||
IF "%PGADMIN_POSTGRES_DIR%" == "" SET "PGADMIN_POSTGRES_DIR=C:\Program Files\PostgreSQL\17"
|
||||
IF "%PGADMIN_INNOTOOL_DIR%" == "" SET "PGADMIN_INNOTOOL_DIR=C:\Program Files (x86)\Inno Setup 6"
|
||||
IF "%PGADMIN_VCREDIST_DIR%" == "" SET "PGADMIN_VCREDIST_DIR=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Redist\MSVC\14.16.27012"
|
||||
IF "%PGADMIN_SIGNTOOL_DIR%" == "" SET "PGADMIN_SIGNTOOL_DIR=C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64"
|
||||
|
||||
REM Set REDIST_NAME (the filename)
|
||||
set "VCREDIST_FILE=vcredist_x64.exe"
|
||||
IF "%PGADMIN_VCREDIST_DIR%" == "" SET "PGADMIN_VCREDIST_DIR=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Redist\MSVC\14.40.33807"
|
||||
IF "%PGADMIN_VCREDIST_FILE%" == "" SET "PGADMIN_VCREDIST_FILE=vc_redist.x64.exe"
|
||||
IF "%PGADMIN_SIGNTOOL_DIR%" == "" SET "PGADMIN_SIGNTOOL_DIR=C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64"
|
||||
|
||||
REM Set additional variables we need
|
||||
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_RELEASE =" %WD%\web\config.py') DO SET APP_MAJOR=%%a
|
||||
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_REVISION =" %WD%\web\config.py') DO SET APP_MINOR=%%a
|
||||
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_SUFFIX =" %WD%\web\config.py') DO SET APP_VERSION_SUFFIX=%%a
|
||||
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_RELEASE =" %WD%\web\version.py') DO SET APP_MAJOR=%%a
|
||||
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_REVISION =" %WD%\web\version.py') DO SET APP_MINOR=%%a
|
||||
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_SUFFIX =" %WD%\web\version.py') DO SET APP_VERSION_SUFFIX=%%a
|
||||
REM remove single quote from the string
|
||||
SET APP_VERSION_SUFFIX=%APP_VERSION_SUFFIX:'=%
|
||||
SET APP_NAME=""
|
||||
FOR /F "tokens=2* DELims='" %%a IN ('findstr /C:"APP_NAME =" web\config.py') DO SET APP_NAME=%%a
|
||||
FOR /F "tokens=2* DELims='" %%a IN ('findstr /C:"APP_NAME =" web\branding.py') DO SET APP_NAME=%%a
|
||||
FOR /f "tokens=1 DELims=." %%G IN ('%PGADMIN_PYTHON_DIR%/python.exe -c "print('%APP_NAME%'.lower().replace(' ', ''))"') DO SET APP_SHORTNAME=%%G
|
||||
SET APP_VERSION=%APP_MAJOR%.%APP_MINOR%
|
||||
SET INSTALLERNAME=%APP_SHORTNAME%-%APP_MAJOR%.%APP_MINOR%-%APP_VERSION_SUFFIX%-x64.exe
|
||||
@@ -97,7 +96,7 @@ REM Main build sequence Ends
|
||||
ECHO PostgreSQL directory: %PGADMIN_POSTGRES_DIR%
|
||||
ECHO.
|
||||
ECHO VC++ redist directory: %PGADMIN_VCREDIST_DIR%
|
||||
ECHO VC++ redist file: %VCREDIST_FILE%
|
||||
ECHO VC++ redist file: %PGADMIN_VCREDIST_FILE%
|
||||
ECHO InnoTool directory: %PGADMIN_INNOTOOL_DIR%
|
||||
ECHO signtool directory: %PGADMIN_SIGNTOOL_DIR%
|
||||
ECHO.
|
||||
@@ -216,7 +215,10 @@ REM Main build sequence Ends
|
||||
|
||||
ECHO Installing javascript dependencies...
|
||||
CD "%BUILDROOT%\web"
|
||||
CALL yarn set version berry || EXIT /B 1
|
||||
CALL yarn set version 4 || EXIT /B 1
|
||||
CALL yarn install || EXIT /B 1
|
||||
CALL npm rebuild || EXIT /B 1
|
||||
|
||||
ECHO Bundling javascript...
|
||||
CALL yarn run bundle || EXIT /B 1
|
||||
@@ -229,13 +231,14 @@ REM Main build sequence Ends
|
||||
RD /Q /S "%BUILDROOT%\web\regression" 1> nul 2>&1
|
||||
ECHO Removing tools...
|
||||
RD /Q /S "%BUILDROOT%\web\tools" 1> nul 2>&1
|
||||
ECHO Removing yarn cache...
|
||||
RD /Q /S "%BUILDROOT%\web\.yarn" 1> nul 2>&1
|
||||
ECHO Removing any existing configurations...
|
||||
DEL /q "%BUILDROOT%\web\pgadmin4.db" 1> nul 2>&1
|
||||
DEL /q "%BUILDROOT%\web\config_local.py" 1> nul 2>&1
|
||||
|
||||
ECHO Staging license files...
|
||||
COPY "%WD%\LICENSE" "%BUILDROOT%\" > nul || EXIT /B 1
|
||||
COPY "%WD%\DEPENDENCIES" "%BUILDROOT%\" > nul || EXIT /B 1
|
||||
|
||||
ECHO Creating config_distro.py
|
||||
ECHO SERVER_MODE = False > "%BUILDROOT%\web\config_distro.py"
|
||||
@@ -247,6 +250,7 @@ REM Main build sequence Ends
|
||||
|
||||
ECHO Building docs...
|
||||
CALL pip install sphinx || EXIT /B 1
|
||||
CALL pip install sphinxcontrib-youtube || EXIT /B 1
|
||||
MKDIR "%BUILDROOT%\docs\en_US\html"
|
||||
CD "%WD%\docs\en_US"
|
||||
CALL "%TMPDIR%\venv\Scripts\python.exe" build_code_snippet.py || EXIT /B 1
|
||||
@@ -257,51 +261,70 @@ REM Main build sequence Ends
|
||||
RD /Q /S "%BUILDROOT%\docs\en_US\html\_sources" 1> nul 2>&1
|
||||
|
||||
ECHO Staging runtime components...
|
||||
XCOPY /S /I /E /H /Y "%WD%\runtime\assets" "%BUILDROOT%\runtime\assets" > nul || EXIT /B 1
|
||||
XCOPY /S /I /E /H /Y "%WD%\runtime\src" "%BUILDROOT%\runtime\src" > nul || EXIT /B 1
|
||||
MKDIR "%BUILDROOT%\runtime\resources\app"
|
||||
XCOPY /S /I /E /H /Y "%WD%\runtime\assets" "%BUILDROOT%\runtime\resources\app\assets" > nul || EXIT /B 1
|
||||
XCOPY /S /I /E /H /Y "%WD%\runtime\src" "%BUILDROOT%\runtime\resources\app\src" > nul || EXIT /B 1
|
||||
|
||||
COPY "%WD%\runtime\package.json" "%BUILDROOT%\runtime\" > nul || EXIT /B 1
|
||||
CD "%BUILDROOT%\runtime\"
|
||||
CALL yarn install --production=true || EXIT /B 1
|
||||
COPY "%WD%\runtime\package.json" "%BUILDROOT%\runtime\resources\app\" > nul || EXIT /B 1
|
||||
COPY "%WD%\runtime\.yarnrc.yml" "%BUILDROOT%\runtime\resources\app\" > nul || EXIT /B 1
|
||||
|
||||
ECHO Downloading NWjs to %TMPDIR%...
|
||||
REM Get a fresh copy of nwjs.
|
||||
REM NOTE: The nw download servers seem to be very unreliable, so at the moment we're using wget which retries
|
||||
CD "%BUILDROOT%\runtime\resources\app\"
|
||||
|
||||
REM YARN
|
||||
REM CALL yarn --cwd "%TMPDIR%" add nw || EXIT /B
|
||||
REM YARN END
|
||||
CALL yarn set version berry || EXIT /B 1
|
||||
CALL yarn set version 4 || EXIT /B 1
|
||||
CALL yarn workspaces focus --production || EXIT /B 1
|
||||
|
||||
ECHO Removing yarn cache...
|
||||
RD /Q /S "%BUILDROOT%\runtime\resources\app\.yarn" 1> nul 2>&1
|
||||
|
||||
ECHO Downloading Electron to %TMPDIR%...
|
||||
REM Get a fresh copy of electron.
|
||||
|
||||
REM WGET
|
||||
FOR /f "tokens=2 delims='" %%i IN ('yarn info nw ^| findstr "latest: "') DO SET "NW_VERSION=%%i"
|
||||
FOR /f "tokens=*" %%i IN ('npm info electron version') DO SET "ELECTRON_VERSION=%%i"
|
||||
|
||||
:GET_NW
|
||||
wget https://dl.nwjs.io/v%NW_VERSION%/nwjs-v%NW_VERSION%-win-x64.zip -O "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip"
|
||||
wget https://github.com/electron/electron/releases/download/v%ELECTRON_VERSION%/electron-v%ELECTRON_VERSION%-win32-x64.zip -O "%TMPDIR%\electron-v%ELECTRON_VERSION%-win32-x64.zip"
|
||||
IF %ERRORLEVEL% NEQ 0 GOTO GET_NW
|
||||
|
||||
tar -C "%TMPDIR%" -xvf "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip" || EXIT /B 1
|
||||
MKDIR "%TMPDIR%\electron-v%ELECTRON_VERSION%-win32-x64" || EXIT /B 1
|
||||
tar -C "%TMPDIR%\electron-v%ELECTRON_VERSION%-win32-x64" -xvf "%TMPDIR%\electron-v%ELECTRON_VERSION%-win32-x64.zip" || EXIT /B 1
|
||||
REM WGET END
|
||||
|
||||
REM YARN
|
||||
REM XCOPY /S /I /E /H /Y "%TMPDIR%\node_modules\nw\nwjs\*" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
REM YARN END
|
||||
REM XCOPY
|
||||
XCOPY /S /I /E /H /Y "%TMPDIR%\electron-v%ELECTRON_VERSION%-win32-x64\*" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
REM XCOPY END
|
||||
|
||||
REM WGET
|
||||
XCOPY /S /I /E /H /Y "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64\*" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
REM WGET END
|
||||
MOVE "%BUILDROOT%\runtime\electron.exe" "%BUILDROOT%\runtime\pgAdmin4.exe"
|
||||
|
||||
MOVE "%BUILDROOT%\runtime\nw.exe" "%BUILDROOT%\runtime\pgAdmin4.exe"
|
||||
ECHO Downloading rcedit.exe...
|
||||
wget https://github.com/electron/rcedit/releases/download/v2.0.0/rcedit-x64.exe -O "%TMPDIR%\rcedit-x64.exe"
|
||||
|
||||
ECHO Replacing executable icon...
|
||||
CALL yarn --cwd "%TMPDIR%" add winresourcer || EXIT /B
|
||||
"%TMPDIR%\node_modules\winresourcer\bin\Resourcer.exe" -op:upd -src:"%BUILDROOT%\runtime\pgAdmin4.exe" -type:Icongroup -name:IDR_MAINFRAME -file:"%WD%\pkg\win32\Resources\pgAdmin4.ico"
|
||||
ECHO Replacing executable icon, description, version...
|
||||
%TMPDIR%\rcedit-x64.exe "%BUILDROOT%\runtime\pgAdmin4.exe" --set-icon "%WD%\pkg\win32\Resources\pgAdmin4.ico"
|
||||
%TMPDIR%\rcedit-x64.exe "%BUILDROOT%\runtime\pgAdmin4.exe" --set-version-string "FileDescription" "%APP_NAME%"
|
||||
%TMPDIR%\rcedit-x64.exe "%BUILDROOT%\runtime\pgAdmin4.exe" --set-version-string "ProductName" "%APP_NAME%"
|
||||
%TMPDIR%\rcedit-x64.exe "%BUILDROOT%\runtime\pgAdmin4.exe" --set-product-version "%APP_VERSION%""
|
||||
|
||||
ECHO Attempting to sign the pgAdmin4.exe...
|
||||
CALL "%PGADMIN_SIGNTOOL_DIR%\signtool.exe" sign /fd certHash /tr http://timestamp.digicert.com /td SHA256 "%BUILDROOT%\runtime\pgAdmin4.exe"
|
||||
IF %ERRORLEVEL% NEQ 0 (
|
||||
ECHO.
|
||||
ECHO ************************************************************
|
||||
ECHO * Failed to sign the pgAdmin4.exe
|
||||
ECHO ************************************************************
|
||||
PAUSE
|
||||
)
|
||||
|
||||
ECHO Staging PostgreSQL components...
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libpq.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libcrypto-1_1-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libssl-1_1-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libcrypto-*-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libssl-*-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%PGADMIN_POSTGRES_DIR%\bin\libintl-*.dll" COPY "%PGADMIN_POSTGRES_DIR%\bin\libintl-*.dll" "%BUILDROOT%\runtime" > nul
|
||||
IF EXIST "%PGADMIN_POSTGRES_DIR%\bin\libiconv-*.dll" COPY "%PGADMIN_POSTGRES_DIR%\bin\libiconv-*.dll" "%BUILDROOT%\runtime" > nul
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\zlib.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%PGADMIN_POSTGRES_DIR%\bin\liblz4.dll" COPY "%PGADMIN_POSTGRES_DIR%\bin\liblz4.dll" "%BUILDROOT%\runtime" > nul
|
||||
IF EXIST "%PGADMIN_POSTGRES_DIR%\bin\libzstd.dll" COPY "%PGADMIN_POSTGRES_DIR%\bin\libzstd.dll" "%BUILDROOT%\runtime" > nul
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\zlib1.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\pg_dump.exe" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\pg_dumpall.exe" "%BUILDROOT%\runtime" > nul || EXIT /B 1L%
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\pg_restore.exe" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
@@ -309,7 +332,7 @@ REM Main build sequence Ends
|
||||
|
||||
ECHO Staging VC++ runtime...
|
||||
MKDIR "%BUILDROOT%\installer" || EXIT /B 1
|
||||
COPY "%PGADMIN_VCREDIST_DIR%\%VCREDIST_FILE%" "%BUILDROOT%\installer" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_VCREDIST_DIR%\%PGADMIN_VCREDIST_FILE%" "%BUILDROOT%\installer" > nul || EXIT /B 1
|
||||
|
||||
CD %WD%
|
||||
EXIT /B 0
|
||||
@@ -327,13 +350,13 @@ REM Main build sequence Ends
|
||||
ECHO Processing installer configuration script...
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in" "-o" "%WD%\pkg\win32\installer.iss.in_stage1" "-s" MYAPP_FULLVERSION -r """%APP_VERSION%"""
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage1" "-o" "%WD%\pkg\win32\installer.iss.in_stage2" "-s" MYAPP_VERSION -r """v%APP_MAJOR%"""
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage2" "-o" "%WD%\pkg\win32\installer.iss" "-s" MYAPP_VCDIST -r """%PGADMIN_VCREDIST_DIRNAME%\%VCREDIST_FILE%"""
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage2" "-o" "%WD%\pkg\win32\installer.iss" "-s" MYAPP_VCDIST -r """%PGADMIN_VCREDIST_DIRNAME%\%PGADMIN_VCREDIST_FILE%"""
|
||||
|
||||
ECHO Cleaning up...
|
||||
DEL /s "%WD%\pkg\win32\installer.iss.in_stage*" > nul
|
||||
|
||||
ECHO Creating windows installer using INNO tool...
|
||||
CALL "%PGADMIN_INNOTOOL_DIR%\ISCC.exe" /q "%WD%\pkg\win32\installer.iss" || EXIT /B 1
|
||||
CALL "%PGADMIN_INNOTOOL_DIR%\ISCC.exe" "%WD%\pkg\win32\installer.iss" "/SpgAdminSigntool=%PGADMIN_SIGNTOOL_DIR%\signtool.exe sign /fd certHash /tr http://timestamp.digicert.com /td SHA256 $f" || EXIT /B 1
|
||||
|
||||
ECHO Renaming installer...
|
||||
MOVE "%WD%\pkg\win32\Output\pgadmin4-setup.exe" "%DISTROOT%\%INSTALLERNAME%" > nul || EXIT /B 1
|
||||
@@ -344,14 +367,20 @@ REM Main build sequence Ends
|
||||
CD %WD%
|
||||
EXIT /B 0
|
||||
|
||||
:GENERATE_SBOM
|
||||
ECHO Generating SBOM...
|
||||
CALL syft "%BUILDROOT%" -o cyclonedx-json > "%BUILDROOT%\sbom.json"
|
||||
|
||||
:SIGN_INSTALLER
|
||||
ECHO Attempting to sign the installer...
|
||||
CALL "%PGADMIN_SIGNTOOL_DIR%\signtool.exe" sign /t http://time.certum.pl "%DISTROOT%\%INSTALLERNAME%"
|
||||
EXIT /B 0
|
||||
|
||||
:VERIFY_SIGNATURE
|
||||
ECHO Verifying the installer signature...
|
||||
|
||||
CALL "%PGADMIN_SIGNTOOL_DIR%\signtool.exe" verify /pa /v "%DISTROOT%\%INSTALLERNAME%"
|
||||
IF %ERRORLEVEL% NEQ 0 (
|
||||
ECHO.
|
||||
ECHO ************************************************************
|
||||
ECHO * Failed to sign the installer
|
||||
ECHO * Failed to verify signature of the installer
|
||||
ECHO ************************************************************
|
||||
PAUSE
|
||||
)
|
||||
|
||||
@@ -2,30 +2,37 @@
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2018, The pgAdmin Development Team
|
||||
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
#########################################################################
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
APP_NAME := $(shell grep ^APP_NAME web/config.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]' | tr -d "'" | awk '{print tolower($$0)}')
|
||||
APP_RELEASE := $(shell grep ^APP_RELEASE web/config.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]')
|
||||
APP_REVISION := $(shell grep ^APP_REVISION web/config.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]')
|
||||
APP_NAME := $(shell grep ^APP_NAME web/branding.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]' | tr -d "'" | awk '{print tolower($$0)}')
|
||||
APP_RELEASE := $(shell grep ^APP_RELEASE web/version.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]')
|
||||
APP_REVISION := $(shell grep ^APP_REVISION web/version.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]')
|
||||
|
||||
#########################################################################
|
||||
# High-level targets
|
||||
#########################################################################
|
||||
|
||||
# Include only platform-independent builds in all
|
||||
all: docs pip src runtime
|
||||
all: docs pip src
|
||||
|
||||
# Add BUILD_OPTS variable to pass arguments
|
||||
appbundle:
|
||||
./pkg/mac/build.sh
|
||||
./pkg/mac/build.sh $(BUILD_OPTS)
|
||||
|
||||
install-node:
|
||||
cd web && yarn install
|
||||
|
||||
install-python:
|
||||
./tools/setup-python-env.sh
|
||||
|
||||
install-python-testing:
|
||||
./tools/setup-python-env.sh --test
|
||||
|
||||
bundle:
|
||||
cd web && yarn run bundle
|
||||
|
||||
@@ -36,7 +43,7 @@ linter:
|
||||
cd web && yarn run linter
|
||||
|
||||
check: install-node bundle linter check-pep8
|
||||
cd web && yarn run karma start --single-run && python regression/runtests.py
|
||||
cd web && yarn run test:js-once && python regression/runtests.py
|
||||
|
||||
check-audit:
|
||||
cd web && yarn run audit
|
||||
@@ -71,28 +78,18 @@ check-feature: install-node bundle
|
||||
cd web && python regression/runtests.py --pkg feature_tests
|
||||
|
||||
check-js: install-node linter
|
||||
cd web && yarn run karma start --single-run
|
||||
cd web && yarn run test:js-once
|
||||
|
||||
check-js-coverage:
|
||||
cd web && yarn run test:karma-coverage
|
||||
|
||||
runtime-debug:
|
||||
cd runtime && qmake CONFIG+=debug && make
|
||||
|
||||
runtime:
|
||||
cd runtime && qmake CONFIG+=release && make
|
||||
cd web && yarn run test:js-coverage
|
||||
|
||||
# Include all clean sub-targets in clean
|
||||
clean: clean-appbundle clean-debian clean-dist clean-docs clean-node clean-pip clean-redhat clean-src clean-runtime
|
||||
clean: clean-appbundle clean-debian clean-dist clean-docs clean-node clean-pip clean-redhat clean-src
|
||||
rm -rf web/pgadmin/static/js/generated/*
|
||||
rm -rf web/pgadmin/static/js/generated/.cache
|
||||
rm -rf web/pgadmin/static/css/generated/*
|
||||
rm -rf web/pgadmin/static/css/generated/.cache
|
||||
|
||||
clean-runtime:
|
||||
if [ -f runtime/Makefile ]; then (cd runtime && make clean); fi;
|
||||
rm -rf build-*
|
||||
|
||||
clean-appbundle:
|
||||
rm -rf mac-build/
|
||||
|
||||
@@ -122,7 +119,8 @@ debian:
|
||||
|
||||
docker:
|
||||
echo $(APP_NAME)
|
||||
docker build -t ${APP_NAME} -t $(APP_NAME):latest -t $(APP_NAME):$(APP_RELEASE) -t $(APP_NAME):$(APP_RELEASE).$(APP_REVISION) .
|
||||
git checkout HEAD
|
||||
docker build --pull -t ${APP_NAME} -t $(APP_NAME):latest -t $(APP_NAME):$(APP_RELEASE) -t $(APP_NAME):$(APP_RELEASE).$(APP_REVISION) .
|
||||
|
||||
docs:
|
||||
LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 $(MAKE) -C docs/en_US -f Makefile.sphinx html
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# pgAdmin 4
|
||||
# pgAdmin 4
|
||||
|
||||
pgAdmin 4 is a rewrite of the popular pgAdmin3 management tool for the
|
||||
PostgreSQL (http://www.postgresql.org) database.
|
||||
PostgreSQL (http://www.postgresql.org) database.
|
||||
|
||||
In the following documentation and examples, *$PGADMIN4_SRC/* is used to denote
|
||||
the top-level directory of a copy of the pgAdmin source tree, either from a
|
||||
@@ -9,156 +9,30 @@ tarball or a git checkout.
|
||||
|
||||
## Architecture
|
||||
|
||||
pgAdmin 4 is written as a web application in Python, using jQuery and Bootstrap
|
||||
for the client side processing and UI. On the server side, Flask is being
|
||||
utilised.
|
||||
pgAdmin 4 is written as a web application with Python(Flask) on the server side
|
||||
and ReactJS, HTML5 with CSS for the client side processing and UI.
|
||||
|
||||
Although developed using web technologies, pgAdmin 4 can be deployed either on
|
||||
a web server using a browser, or standalone on a workstation. The runtime/
|
||||
subdirectory contains an NWjs based runtime application intended to allow this,
|
||||
which will execute the Python server and display the UI.
|
||||
subdirectory contains an Electron based runtime application intended to allow this,
|
||||
which will fork a Python server process and display the UI.
|
||||
|
||||
## Building the Runtime
|
||||
|
||||
To build the runtime, the following packages must be installed:
|
||||
|
||||
* NodeJS 12+
|
||||
* Yarn
|
||||
|
||||
Change into the runtime directory, and run *yarn install*. This will install the
|
||||
dependencies required.
|
||||
|
||||
In order to use the runtime in a development environment, you'll need to copy
|
||||
*dev_config.json.in* file to *dev_config.json*, and edit the paths to the Python
|
||||
executable and *pgAdmin.py* file, otherwise the runtime will use the default
|
||||
paths it would expect to find in the standard package for your platform.
|
||||
|
||||
You can then execute the runtime by running something like:
|
||||
## Prerequisites
|
||||
1. Install Node.js 20 and above (https://nodejs.org/en/download)
|
||||
2. yarn (https://yarnpkg.com/getting-started/install)
|
||||
3. Python 3.9 and above (https://www.python.org/downloads/)
|
||||
4. PostgreSQL server (https://www.postgresql.org/download)
|
||||
|
||||
Start by enabling Corepack, if it isn't already;
|
||||
this will add the yarn binary to your PATH:
|
||||
```bash
|
||||
node_modules/nw/nwjs/nw .
|
||||
corepack enable
|
||||
```
|
||||
|
||||
or on macOS:
|
||||
|
||||
```bash
|
||||
node_modules/nw/nwjs/nwjs.app/Contents/MacOS/nwjs .
|
||||
```
|
||||
|
||||
# Configuring the Python Environment
|
||||
|
||||
In order to run the Python code, a suitable runtime environment is required.
|
||||
Python version 3.6 and later are currently supported. It is recommended that a
|
||||
Python Virtual Environment is setup for this purpose, rather than using the
|
||||
system Python environment. On Linux and Mac systems, the process is fairly
|
||||
simple - adapt as required for your distribution:
|
||||
|
||||
1. Create a virtual environment in an appropriate directory. The last argument is
|
||||
the name of the environment; that can be changed as desired:
|
||||
|
||||
```bash
|
||||
$ python3 -m venv venv
|
||||
```
|
||||
|
||||
2. Now activate the virtual environment:
|
||||
|
||||
```bash
|
||||
$ source venv/bin/activate
|
||||
```
|
||||
|
||||
3. Some of the components used by pgAdmin require a very recent version of *pip*,
|
||||
so update that to the latest:
|
||||
|
||||
```bash
|
||||
$ pip install --upgrade pip
|
||||
```
|
||||
|
||||
4. Ensure that a PostgreSQL installation's bin/ directory is in the path (so
|
||||
pg_config can be found for building psycopg2), and install the required
|
||||
packages:
|
||||
|
||||
```bash
|
||||
(venv) $ PATH=$PATH:/usr/local/pgsql/bin pip install -r $PGADMIN4_SRC/requirements.txt
|
||||
```
|
||||
|
||||
If you are planning to run the regression tests, you also need to install
|
||||
additional requirements from web/regression/requirements.txt:
|
||||
|
||||
```bash
|
||||
(venv) $ pip install -r $PGADMIN4_SRC/web/regression/requirements.txt
|
||||
```
|
||||
|
||||
5. Create a local configuration file for pgAdmin. Edit
|
||||
$PGADMIN4_SRC/web/config_local.py and add any desired configuration options
|
||||
(use the config.py file as a reference - any settings duplicated in
|
||||
config_local.py will override those in config.py). A typical development
|
||||
configuration may look like:
|
||||
|
||||
```python
|
||||
from config import *
|
||||
|
||||
# Debug mode
|
||||
DEBUG = True
|
||||
|
||||
# App mode
|
||||
SERVER_MODE = True
|
||||
|
||||
# Enable the test module
|
||||
MODULE_BLACKLIST.remove('test')
|
||||
|
||||
# Log
|
||||
CONSOLE_LOG_LEVEL = DEBUG
|
||||
FILE_LOG_LEVEL = DEBUG
|
||||
|
||||
DEFAULT_SERVER = '127.0.0.1'
|
||||
|
||||
UPGRADE_CHECK_ENABLED = True
|
||||
|
||||
# Use a different config DB for each server mode.
|
||||
if SERVER_MODE == False:
|
||||
SQLITE_PATH = os.path.join(
|
||||
DATA_DIR,
|
||||
'pgadmin4-desktop.db'
|
||||
)
|
||||
else:
|
||||
SQLITE_PATH = os.path.join(
|
||||
DATA_DIR,
|
||||
'pgadmin4-server.db'
|
||||
)
|
||||
```
|
||||
|
||||
This configuration allows easy switching between server and desktop modes
|
||||
for testing.
|
||||
|
||||
6. The initial setup of the configuration database is interactive in server
|
||||
mode, and non-interactive in desktop mode. You can run it either by
|
||||
running:
|
||||
|
||||
```bash
|
||||
(venv) $ python3 $PGADMIN4_SRC/web/setup.py
|
||||
```
|
||||
|
||||
or by starting pgAdmin 4:
|
||||
|
||||
```bash
|
||||
(venv) $ python3 $PGADMIN4_SRC/web/pgAdmin4.py
|
||||
```
|
||||
|
||||
Whilst it is possible to automatically run setup in desktop mode by running
|
||||
the runtime, that will not work in server mode as the runtime doesn't allow
|
||||
command line interaction with the setup program.
|
||||
|
||||
At this point you will be able to run pgAdmin 4 from the command line in either
|
||||
server or desktop mode, and access it from a web browser using the URL shown in
|
||||
the terminal once pgAdmin has started up.
|
||||
|
||||
Setup of an environment on Windows is somewhat more complicated unfortunately,
|
||||
please see *pkg/win32/README.txt* for complete details.
|
||||
|
||||
# Building the Web Assets
|
||||
|
||||
pgAdmin is dependent on a number of third party Javascript libraries. These,
|
||||
along with it's own Javascript code, SCSS/CSS code and images must be
|
||||
along with it's own Javascript code, CSS code and images must be
|
||||
compiled into a "bundle" which is transferred to the browser for execution
|
||||
and rendering. This is far more efficient than simply requesting each
|
||||
asset as it's needed by the client.
|
||||
@@ -168,9 +42,9 @@ installed. Then, you can run the following commands on a *nix system to
|
||||
download the required packages and build the bundle:
|
||||
|
||||
```bash
|
||||
(venv) $ cd $PGADMIN4_SRC
|
||||
(venv) $ make install-node
|
||||
(venv) $ make bundle
|
||||
$ cd $PGADMIN4_SRC
|
||||
$ make install-node
|
||||
$ make bundle
|
||||
```
|
||||
|
||||
On Windows systems (where "make" is not available), the following commands
|
||||
@@ -182,21 +56,123 @@ C:\$PGADMIN4_SRC\web> yarn install
|
||||
C:\$PGADMIN4_SRC\web> yarn run bundle
|
||||
```
|
||||
|
||||
# Creating pgAdmin themes
|
||||
# Configuring the Python Environment
|
||||
|
||||
To create a pgAdmin theme, you need to create a directory under
|
||||
*web/pgadmin/static/scss/resources*.
|
||||
Copy the sample file *_theme.variables.scss.sample* to the new directory and
|
||||
rename it to *_theme.variables.scss*. Change the desired hexadecimal values of
|
||||
the colors and bundle pgAdmin. You can also add a preview image in the theme
|
||||
directory with the name as *\<dir name>_preview.png*. It is recommended that the
|
||||
preview image should not be larger in size as it may take time to load on slow
|
||||
networks. Run the *yarn run bundle* and you're good to go. No other changes are
|
||||
required, pgAdmin bundle will read the directory and create other required
|
||||
entries to make them available in preferences.
|
||||
In order to run the Python code, a suitable runtime environment is required.
|
||||
Python version 3.9 and later are currently supported. It is recommended that a
|
||||
Python Virtual Environment is setup for this purpose, rather than using the
|
||||
system Python environment. On Linux and Mac systems, the process is fairly
|
||||
simple - adapt as required for your distribution:
|
||||
|
||||
The name of the theme is derived from the directory name. Underscores (_) and
|
||||
hyphens (-) will be replaced with spaces and the result will be camel cased.
|
||||
1. Create a virtual environment in an appropriate directory. The last argument is
|
||||
the name of the environment; that can be changed as desired:
|
||||
|
||||
```bash
|
||||
$ python3 -m venv venv
|
||||
```
|
||||
|
||||
2. Now activate the virtual environment:
|
||||
|
||||
```bash
|
||||
$ source venv/bin/activate
|
||||
```
|
||||
|
||||
3. Some of the components used by pgAdmin require a very recent version of *pip*,
|
||||
so update that to the latest:
|
||||
|
||||
```bash
|
||||
(venv) $ pip install --upgrade pip
|
||||
```
|
||||
|
||||
4. Ensure that a PostgreSQL installation's bin/ directory is in the path (so
|
||||
pg_config can be found for building psycopg3), and install the required
|
||||
packages:
|
||||
|
||||
```bash
|
||||
(venv) $ PATH=$PATH:/usr/local/pgsql/bin pip install -r $PGADMIN4_SRC/requirements.txt
|
||||
```
|
||||
|
||||
If you are planning to run the regression tests, you also need to install
|
||||
additional requirements from web/regression/requirements.txt:
|
||||
|
||||
```bash
|
||||
(venv) $ pip install -r $PGADMIN4_SRC/web/regression/requirements.txt
|
||||
```
|
||||
|
||||
5. Create a local configuration file for pgAdmin. Edit
|
||||
$PGADMIN4_SRC/web/config_local.py and add any desired configuration options
|
||||
(use the config.py file as a reference - any settings duplicated in
|
||||
config_local.py will override those in config.py). A typical development
|
||||
configuration may look like:
|
||||
|
||||
```python
|
||||
import os
|
||||
import logging
|
||||
|
||||
# Change pgAdmin data directory
|
||||
DATA_DIR = '/Users/myuser/.pgadmin_dev'
|
||||
|
||||
#Change pgAdmin server and port
|
||||
DEFAULT_SERVER = '127.0.0.1'
|
||||
DEFAULT_SERVER_PORT = 5051
|
||||
|
||||
# Switch between server and desktop mode
|
||||
SERVER_MODE = True
|
||||
|
||||
#Change pgAdmin config DB path in case external DB is used.
|
||||
CONFIG_DATABASE_URI="postgresql://postgres:postgres@localhost:5436/pgadmin"
|
||||
|
||||
#Setup SMTP
|
||||
MAIL_SERVER = 'smtp.gmail.com'
|
||||
MAIL_PORT = 465
|
||||
MAIL_USE_SSL = True
|
||||
MAIL_USERNAME = 'user@gmail.com'
|
||||
MAIL_PASSWORD = 'xxxxxxxxxx'
|
||||
|
||||
# Change log level
|
||||
CONSOLE_LOG_LEVEL = logging.INFO
|
||||
FILE_LOG_LEVEL = logging.INFO
|
||||
|
||||
# Use a different config DB for each server mode.
|
||||
if SERVER_MODE == False:
|
||||
SQLITE_PATH = os.path.join(
|
||||
DATA_DIR,
|
||||
'pgadmin4-desktop.db'
|
||||
)
|
||||
else:
|
||||
SQLITE_PATH = os.path.join(
|
||||
DATA_DIR,
|
||||
'pgadmin4-server.db'
|
||||
)
|
||||
```
|
||||
|
||||
This configuration allows easy switching between server and desktop modes
|
||||
for testing.
|
||||
|
||||
6. The initial setup of the configuration database is interactive in server
|
||||
mode, and non-interactive in desktop mode. You can run it either by
|
||||
running:
|
||||
|
||||
```bash
|
||||
(venv) $ python3 $PGADMIN4_SRC/web/setup.py
|
||||
```
|
||||
|
||||
or by starting pgAdmin 4:
|
||||
|
||||
```bash
|
||||
(venv) $ python3 $PGADMIN4_SRC/web/pgAdmin4.py
|
||||
```
|
||||
|
||||
Whilst it is possible to automatically run setup in desktop mode by running
|
||||
the runtime, that will not work in server mode as the runtime doesn't allow
|
||||
command line interaction with the setup program.
|
||||
|
||||
At this point you will be able to run pgAdmin 4 from the command line in either
|
||||
server or desktop mode, and access it from a web browser using the URL shown in
|
||||
the terminal once pgAdmin has started up.
|
||||
|
||||
Setup of an environment on Windows is somewhat more complicated unfortunately,
|
||||
please see *pkg/win32/README.txt* for complete details.
|
||||
|
||||
# Building the documentation
|
||||
|
||||
@@ -206,6 +182,7 @@ virtual environment. This can be installed with the pip package manager:
|
||||
```bash
|
||||
$ source venv/bin/activate
|
||||
(venv) $ pip install Sphinx
|
||||
(venv) $ pip install sphinxcontrib-youtube
|
||||
```
|
||||
|
||||
The docs can then be built using the Makefile in *$PGADMIN4_SRC*, e.g.
|
||||
@@ -216,6 +193,21 @@ The docs can then be built using the Makefile in *$PGADMIN4_SRC*, e.g.
|
||||
|
||||
The output can be found in *$PGADMIN4_SRC/docs/en_US/_build/html/index.html*
|
||||
|
||||
## Building the Runtime
|
||||
Change into the runtime directory, and run *yarn install*. This will install the
|
||||
dependencies required.
|
||||
|
||||
In order to use the runtime in a development environment, you'll need to copy
|
||||
*dev_config.json.in* file to *dev_config.json*, and edit the paths to the Python
|
||||
executable and *pgAdmin.py* file, otherwise the runtime will use the default
|
||||
paths it would expect to find in the standard package for your platform.
|
||||
|
||||
You can then execute the runtime by running something like:
|
||||
|
||||
```bash
|
||||
yarn run start
|
||||
```
|
||||
|
||||
# Building packages
|
||||
|
||||
Most packages can be built using the Makefile in $PGADMIN4_SRC, provided all
|
||||
@@ -227,7 +219,7 @@ To build a source tarball:
|
||||
(venv) $ make src
|
||||
```
|
||||
|
||||
To build a PIP Wheel, activate either a Python 3 virtual environment, configured
|
||||
To build a PIP Wheel, activate either a Python 3 virtual environment, configured
|
||||
with all the required packages, and then run:
|
||||
|
||||
```bash
|
||||
@@ -261,17 +253,23 @@ There is no need to increment the SETTINGS_SCHEMA_VERSION.
|
||||
|
||||
See https://www.pgadmin.org/support/ for support options.
|
||||
|
||||
# Security Issues
|
||||
|
||||
If you would like to report a security issue with pgAdmin, please email
|
||||
**security (at) pgadmin (dot) org**.
|
||||
|
||||
Note that this address should only be used for reporting security issues
|
||||
that you believe you've found in the design or code of pgAdmin, pgAgent,
|
||||
and the pgAdmin website. It should not be used to ask security questions.
|
||||
|
||||
# Project info
|
||||
|
||||
The source code repository can be found here:
|
||||
A GitHub project for pgAdmin 4 can be found at the address below:
|
||||
|
||||
http://git.postgresql.org/gitweb/?p=pgadmin4.git;a=summary
|
||||
https://github.com/pgadmin-org/pgadmin4
|
||||
|
||||
A Redmine project for pgAdmin 4 can be found at the address below. A PostgreSQL
|
||||
community account is required to access this site. Please note that at present
|
||||
only project developers can log bug and feature requests:
|
||||
|
||||
https://redmine.postgresql.org/projects/pgadmin4
|
||||
Please submit any changes as Pull Requests against the *master* branch of the
|
||||
*pgadmin-org/pgadmin4* repository.
|
||||
|
||||
If you wish to discuss pgAdmin 4, or contribute to the project, please use the
|
||||
pgAdmin Hackers mailing list:
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
Only the latest version receives security updates. Users are encouraged to upgrade to the latest stable release.
|
||||
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
We take security seriously and appreciate your efforts to responsibly disclose vulnerabilities. If you believe you have found a vulnerability, please follow the guidelines below to submit a report.
|
||||
|
||||
### **What to Include in Your Report**
|
||||
To help us quickly understand and address the issue, please include the following sections in your report:
|
||||
|
||||
#### 1. **Summary**
|
||||
- A brief description of the vulnerability.
|
||||
|
||||
#### 2. **Affected Versions**
|
||||
- The version(s) of the project affected by the vulnerability.
|
||||
- Example: "Affects versions 3.4.0 to 3.6.23."
|
||||
|
||||
#### 3. **Details**
|
||||
- A detailed explanation of the vulnerability, including:
|
||||
- How to reproduce the issue (step-by-step instructions).
|
||||
- The code or component where the vulnerability exists.
|
||||
- The expected vs. actual behavior.
|
||||
|
||||
#### 4. **Proof of Concept (PoC)**
|
||||
- Provide a proof of concept to demonstrate the vulnerability. This could be:
|
||||
- Code snippets.
|
||||
- Screenshots or videos.
|
||||
- A minimal reproducible example.
|
||||
|
||||
#### 5. **Patches (if applicable)**
|
||||
- If you have a suggested fix or patch, include it in your report.
|
||||
- Example: "Sanitize user input using `DOMPurify`."
|
||||
|
||||
#### 6. **Impact**
|
||||
- Describe the potential impact of the vulnerability, such as:
|
||||
- Remote Code Execution.
|
||||
- CSRF.
|
||||
- Data exposure.
|
||||
- Denial of service.
|
||||
|
||||
|
||||
|
||||
### **What to Expect**
|
||||
- **Acknowledgement**: You will receive an acknowledgement of your report within **48 hours**.
|
||||
- **Timeline**: We will provide a timeline for investigating and addressing the issue.
|
||||
- **Updates**: You will receive regular updates on the progress of the vulnerability resolution.
|
||||
- **CVE ID**: If the vulnerability is confirmed, we will request a CVE ID to acknowledge the issue officially and include it in the release notes.
|
||||
|
||||
|
||||
### **Out of Scope**
|
||||
The following issues are considered out of scope for security reports:
|
||||
- Vulnerabilities in outdated or unsupported versions.
|
||||
- Issues related to non-security-impacting bugs or feature requests.
|
||||
- Vulnerabilities requiring physical access to the device or social engineering.
|
||||
|
||||
|
||||
|
||||
## Security Updates
|
||||
|
||||
We are committed to providing timely security updates for supported versions. Here’s our process:
|
||||
1. **Assessment**:
|
||||
- All reported vulnerabilities are assessed for severity and impact.
|
||||
2. **Patch Development**:
|
||||
- Patches are developed and tested in a private repository to prevent premature disclosure.
|
||||
3. **Release**:
|
||||
- Security patches are released as soon as possible, along with a detailed advisory.
|
||||
|
||||
|
||||
|
||||
## Acknowledgments
|
||||
|
||||
We deeply appreciate the efforts of security researchers and users who help us improve the security of our project.
|
||||
|
||||
|
||||
|
||||
## Contact
|
||||
|
||||
For any questions or concerns regarding security, please contact us at `security@pgadmin.org`.
|
||||
@@ -19,7 +19,7 @@ the restore point to add* to provide a descriptive name for the restore point.
|
||||
|
||||
For more information about using a restore point as a recovery target, please
|
||||
see the
|
||||
`PostgreSQL documentation <https://www.postgresql.org/docs/current/recovery-target-settings.html#RECOVERY-TARGET-NAME>`_.
|
||||
`PostgreSQL documentation <https://www.postgresql.org/docs/current/runtime-config-wal.html#RUNTIME-CONFIG-WAL-RECOVERY-TARGET>`_.
|
||||
|
||||
* Click the *OK* button to save the restore point.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
@@ -0,0 +1,96 @@
|
||||
Auto-Update of pgAdmin 4 Desktop Application
|
||||
********************************************
|
||||
|
||||
pgAdmin 4's desktop application includes an automated update system built using
|
||||
Electron's ``autoUpdater`` module. This feature enables users to receive and install
|
||||
updates seamlessly, ensuring they always have access to the latest features and security fixes.
|
||||
|
||||
Supported Platforms
|
||||
===================
|
||||
|
||||
- **macOS:** Fully supported with automatic updates enabled by default
|
||||
- **Windows:** Not supported
|
||||
- **Linux:** Not supported
|
||||
|
||||
Update Process Overview
|
||||
=======================
|
||||
|
||||
1. **Check for Updates:**
|
||||
|
||||
- Automatic check on application startup
|
||||
- Manual check available via pgAdmin 4 menu > Check for Updates
|
||||
- Uses Electron's ``autoUpdater`` API to query update server
|
||||
|
||||
2. **Download Process:**
|
||||
|
||||
- Updates download automatically when detected
|
||||
- Progress shown via notifications
|
||||
- Background download prevents interruption of work
|
||||
|
||||
3. **Installation Flow:**
|
||||
|
||||
- User prompted to Install & Restart or Restart Later when update ready
|
||||
- Update applied during application restart
|
||||
|
||||
The flow chart for the update process is as follows:
|
||||
|
||||
.. image:: images/auto_update_desktop_app.png
|
||||
:alt: Auto-update Desktop App
|
||||
:align: center
|
||||
|
||||
User Interface Components
|
||||
=========================
|
||||
|
||||
1. **Notification Types:**
|
||||
|
||||
- Update available
|
||||
- Download progress
|
||||
- Update ready to install
|
||||
- Error notifications
|
||||
|
||||
2. **Menu Integration:**
|
||||
|
||||
- Check for Updates option in pgAdmin 4 menu
|
||||
- Restart to Update option when update available
|
||||
|
||||
Error Handling
|
||||
==============
|
||||
|
||||
The system includes comprehensive error handling:
|
||||
|
||||
1. **Network Errors:**
|
||||
|
||||
- Connection timeouts
|
||||
- Download failures
|
||||
- Server unavailability
|
||||
|
||||
2. **Installation Errors:**
|
||||
|
||||
- Corrupted downloads
|
||||
|
||||
3. **Recovery Mechanisms:**
|
||||
|
||||
- Fallback to manual update
|
||||
- Error reporting to logs
|
||||
|
||||
Security Considerations
|
||||
=======================
|
||||
|
||||
The update system implements below security measures:
|
||||
|
||||
1. **Secure Communication:**
|
||||
|
||||
- Protected update metadata
|
||||
|
||||
Platform-Specific Notes
|
||||
=======================
|
||||
|
||||
1. **macOS:**
|
||||
|
||||
- Uses native update mechanisms
|
||||
- Requires signed packages
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
- `Electron autoUpdater API Documentation <https://www.electronjs.org/docs/latest/api/auto-updater>`_
|
||||
@@ -67,7 +67,7 @@ Use the fields in the *General* tab to specify parameters for the backup:
|
||||
* Use the dropdown listbox next to *Rolename* to specify the role that owns the
|
||||
backup.
|
||||
|
||||
Click the *Data/Objects* tab to continue. Use the fields in the *Data/Objects*
|
||||
Click the *Data Options* tab to continue. Use the fields in the *Data Options*
|
||||
tab to provide options related to data or pgAdmin objects that correspond to *pg_dump*.
|
||||
|
||||
.. image:: images/backup_sections.png
|
||||
@@ -97,7 +97,7 @@ tab to provide options related to data or pgAdmin objects that correspond to *pg
|
||||
* Move the switch next to *Only data* towards right position to limit the back
|
||||
up to data.
|
||||
|
||||
* Move the switch next to *Only schema* to limit the back up to schema-level
|
||||
* Move the switch next to *Only schemas* to limit the back up to schema-level
|
||||
database objects.
|
||||
|
||||
* Move the switch next to *Blobs* towards left position to exclude large
|
||||
@@ -113,10 +113,10 @@ tab to provide options related to data or pgAdmin objects that correspond to *pg
|
||||
* Move the switch next to *Owner* towards right position to exclude commands
|
||||
that set object ownership.
|
||||
|
||||
* Move the switch next to *Privilege* towards right position to exclude
|
||||
* Move the switch next to *Privileges* towards right position to exclude
|
||||
commands that create access privileges.
|
||||
|
||||
* Move the switch next to *Tablespace* towards right position to exclude
|
||||
* Move the switch next to *Tablespaces* towards right position to exclude
|
||||
tablespaces.
|
||||
|
||||
* Move the switch next to *Unlogged table data* towards right position to
|
||||
@@ -126,25 +126,45 @@ tab to provide options related to data or pgAdmin objects that correspond to *pg
|
||||
commands that set the comments. **Note:** This option is visible only for
|
||||
database server greater than or equal to 11.
|
||||
|
||||
Click the *Options* tab to continue. Use these additional fields to specify
|
||||
options like including ddl statements, verbose message or using set session
|
||||
authorization corresponding to *pg_dump* options.
|
||||
* Move the switch next to *Publications* towards right position to exclude
|
||||
publications.
|
||||
|
||||
* Move the switch next to *Subscriptions* towards right position to exclude
|
||||
subscriptions.
|
||||
|
||||
* Move the switch next to *Security labels* towards right position to exclude
|
||||
Security labels.
|
||||
|
||||
* Move the switch next to *Toast compressions* towards right position to exclude
|
||||
Toast compressions. **Note:** This option is visible only for
|
||||
database server greater than or equal to 14.
|
||||
|
||||
* Move the switch next to *Table access methods* towards right position to exclude
|
||||
Table access methods. **Note:** This option is visible only for
|
||||
database server greater than or equal to 15.
|
||||
|
||||
.. image:: images/backup_queries.png
|
||||
:alt: Queries option on backup dialog
|
||||
:align: center
|
||||
|
||||
* Move switches in the **Queries** field box to specify the type of statements
|
||||
that should be included in the backup.
|
||||
Click the *Query Options* tab to continue. Use these additional fields to specify
|
||||
the type of statements that should be included in the backup.
|
||||
|
||||
* Move the switch next to *Use Column Inserts* towards right position to dump
|
||||
the data in the form of INSERT statements and include explicit column
|
||||
names. Please note: this may make restoration from backup slow.
|
||||
|
||||
* Move the switch next to *Use Insert commands* towards right position to
|
||||
* Move the switch next to *Use INSERT commands* towards right position to
|
||||
dump the data in the form of INSERT statements rather than using a COPY
|
||||
command. Please note: this may make restoration from backup slow.
|
||||
|
||||
* Use the *Maximum rows per INSERT command* field to controls the maximum
|
||||
number of rows per INSERT command. **Note:** This option is visible only for
|
||||
database server greater than or equal to 12.
|
||||
|
||||
* Move the switch next to *On conflict do nothing to INSERT command* towards
|
||||
right position to add ON CONFLICT DO NOTHING to INSERT command.
|
||||
This option is not valid unless *Use INSERT commands*, *Use Column INSERTS*
|
||||
or *Maximum rows per INSERT command* is also specified.
|
||||
**Note:** This option is visible only for database server greater than or
|
||||
equal to 12.
|
||||
|
||||
* Move the switch next to *Include CREATE DATABASE statement* towards right
|
||||
position to include a command in the backup that creates a new database
|
||||
when restoring the backup.
|
||||
@@ -154,12 +174,59 @@ authorization corresponding to *pg_dump* options.
|
||||
database object with the same name before recreating the object during a
|
||||
backup.
|
||||
|
||||
* Move the switch next to *Load Via Partition Root* towards right position,
|
||||
* Move the switch next to *Include IF EXISTS clause* towards right
|
||||
position to add an IF EXISTS clause to drop databases and other objects.
|
||||
This option is not valid unless *Include DROP DATABASE statement* is also set.
|
||||
|
||||
.. image:: images/backup_table.png
|
||||
:alt: Backup dialog tables section
|
||||
:align: center
|
||||
|
||||
Click the *Table Options* tab to continue. Use the fields in the *Table Options*
|
||||
tab related to tables that should be included in the backup.
|
||||
|
||||
* Move the switch next to *Use Column INSERTS* towards right position to dump
|
||||
the data in the form of INSERT statements and include explicit column
|
||||
names. Please note: this may make restoration from backup slow.
|
||||
|
||||
* Move the switch next to *Load via partition root* towards right position,
|
||||
so when dumping a COPY or INSERT statement for a partitioned table, target
|
||||
the root of the partitioning hierarchy which contains it rather than the
|
||||
partition itself. **Note:** This option is visible only for database server
|
||||
greater than or equal to 11.
|
||||
|
||||
* Move the switch next to *Enable row security* towards right position to
|
||||
set row_security to on instead, allowing the user to dump the parts of the
|
||||
contents of the table that they have access to. This option is relevant
|
||||
only when dumping the contents of a table which has row security.
|
||||
|
||||
* Use the *Include table(s) and Children* field to dump the tables and any partitions
|
||||
or inheritance child tables of the tables matching the pattern.
|
||||
**Note:** This option is visible only for database server greater than or
|
||||
equal to 16.
|
||||
|
||||
* The Exclude patterns field is utilized to exclude patterns in the following manner:
|
||||
|
||||
* Use the *Table(s)* field to not dump the tables matching the
|
||||
pattern. Multiple patterns can be given separated by space.
|
||||
|
||||
* Use the *Table(s) data* field to not dump data for any tables
|
||||
matching the pattern. Multiple patterns can be given separated by
|
||||
spaces.
|
||||
|
||||
* Use the *Table(s) and children* field to not dump the tables and any
|
||||
partitions or inheritance child tables of the tables matching the pattern.
|
||||
**Note:** This option is visible only for database server greater than or
|
||||
equal to 16.
|
||||
|
||||
* Use the *Table(s) data and children* field to not dump data for the
|
||||
tables and any partitions or inheritance child tables of the tables matching
|
||||
the table pattern. **Note:** This option is visible only for database server
|
||||
greater than or equal to 16.
|
||||
|
||||
Click the *Options* tab to continue. Use the fields in the *Options*
|
||||
tab to provide other backup options.
|
||||
|
||||
.. image:: images/backup_disable.png
|
||||
:alt: Disable option on backup dialog
|
||||
:align: center
|
||||
@@ -167,7 +234,7 @@ authorization corresponding to *pg_dump* options.
|
||||
* Move switches in the **Disable** field box to specify the type of statements
|
||||
that should be excluded from the backup.
|
||||
|
||||
* Move the switch next to *Trigger* (active when creating a data-only backup)
|
||||
* Move the switch next to *Triggers* (active when creating a data-only backup)
|
||||
towards right position to include commands that will disable triggers on the
|
||||
target table while the data is being loaded.
|
||||
|
||||
@@ -182,9 +249,6 @@ authorization corresponding to *pg_dump* options.
|
||||
* Move switches in the **Miscellaneous** field box to specify miscellaneous
|
||||
backup options.
|
||||
|
||||
* Move the switch next to *With OIDs* towards right position to include object
|
||||
identifiers as part of the table data for each table.
|
||||
|
||||
* Move the switch next to *Verbose messages* towards left position to instruct
|
||||
*pg_dump* to exclude verbose messages.
|
||||
|
||||
@@ -195,6 +259,26 @@ authorization corresponding to *pg_dump* options.
|
||||
position to include a statement that will use a SET SESSION AUTHORIZATION
|
||||
command to determine object ownership (instead of an ALTER OWNER command).
|
||||
|
||||
* Use the *Exclude schema* field to not dump schemas whose name matches
|
||||
pattern.
|
||||
|
||||
* Use the *Extra float digits* field to use the specified value when dumping
|
||||
floating-point data, instead of the maximum available precision.
|
||||
|
||||
* Use the *Lock wait timeout* field to do not wait forever to acquire shared
|
||||
table locks at the beginning of the dump. Instead, fail if unable to lock a
|
||||
table within the specified timeout.
|
||||
|
||||
Click the *Objects* tab to continue.
|
||||
|
||||
.. image:: images/backup_object_selection.png
|
||||
:alt: Select objects in backup dialog
|
||||
:align: center
|
||||
|
||||
* Select the objects from tree to take backup of selected objects only.
|
||||
* If Schema is selected then it will take the backup of that selected schema only.
|
||||
* If any Table, View, Materialized View, Sequences, or Foreign Table is selected then it will take the backup of those selected objects.
|
||||
|
||||
When you’ve specified the details that will be incorporated into the pg_dump
|
||||
command:
|
||||
|
||||
@@ -203,21 +287,6 @@ command:
|
||||
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
|
||||
.. image:: images/backup_messages.png
|
||||
:alt: Backup success notification popup
|
||||
:align: center
|
||||
|
||||
Use the **Stop Process** button to stop the Backup process.
|
||||
|
||||
If the backup is successful, a popup window will confirm success. Click *More details* on the popup window to launch the *Process Watcher*. The *Process Watcher* logs all the activity associated with the backup and provides additional information for troubleshooting.
|
||||
|
||||
.. image:: images/backup_process_watcher.png
|
||||
:alt: Backup process watcher
|
||||
:align: center
|
||||
|
||||
If the backup is unsuccessful, you can review the error messages returned by the
|
||||
backup command on the *Process Watcher*.
|
||||
|
||||
.. note:: If you are running *pgAdmin* in *Server Mode* you can click on the |sm_icon| icon in the process watcher window to open the file location in the Storage Manager. You can use the :ref:`Storage Manager <storage_manager>` to download the backup file on the client machine .
|
||||
|
||||
.. |sm_icon| image:: images/sm_icon.png
|
||||
pgAdmin will run the backup process in background. You can view all the background
|
||||
process with there running status and logs on the :ref:`Processes <processes>`
|
||||
tab
|
||||
@@ -34,24 +34,6 @@ statements that should be included in the backup.
|
||||
Click the *Backup* button to build and execute a command based on your
|
||||
selections; click the *Cancel* button to exit without saving work.
|
||||
|
||||
.. image:: images/backup_globals_messages.png
|
||||
:alt: Backup globals success notification popup
|
||||
:align: center
|
||||
|
||||
Use the **Stop Process** button to stop the Backup process.
|
||||
|
||||
If the backup is successful, a popup window will confirm success. Click *Click
|
||||
here for details* on the popup window to launch the *Process Watcher*. The
|
||||
*Process Watcher* logs all the activity associated with the backup and provides
|
||||
additional information for troubleshooting.
|
||||
|
||||
.. image:: images/backup_globals_process_watcher.png
|
||||
:alt: Backup globals process watcher
|
||||
:align: center
|
||||
|
||||
If the backup is unsuccessful, review the error message returned by the
|
||||
*Process Watcher* to resolve any issue.
|
||||
|
||||
.. note:: If you are running *pgAdmin* in *Server Mode* you can click on the |sm_icon| icon in the process watcher window to open the file location in the Storage Manager. You can use the :ref:`Storage Manager <storage_manager>` to download the backup file on the client machine .
|
||||
|
||||
.. |sm_icon| image:: images/sm_icon.png
|
||||
pgAdmin will run the backup process in background. You can view all the background
|
||||
process with there running status and logs on the :ref:`Processes <processes>`
|
||||
tab
|
||||
@@ -24,22 +24,27 @@ Use the fields in the *General* tab to specify the following:
|
||||
connection privileges on the selected server. The role will be used for
|
||||
authentication during the backup.
|
||||
|
||||
Click the *Data Options* tab to continue. Use the fields in the *Data Options*
|
||||
tab to provide options related to data or pgAdmin objects that correspond to *pg_dumpall*.
|
||||
|
||||
.. image:: images/backup_server_objects.png
|
||||
:alt: Type of objects option on backup server dialog
|
||||
:align: center
|
||||
|
||||
Click the *Data/Objects* tab to continue. Use the fields in the *Data/Objects*
|
||||
tab to provide options related to data or pgAdmin objects that correspond to *pg_dump*.
|
||||
|
||||
* Move switches in the **Type of objects** field box to specify details about
|
||||
the type of objects that will be backed up.
|
||||
|
||||
* Move the switch next to *Only data* towards right position to limit the back
|
||||
up to data.
|
||||
|
||||
* Move the switch next to *Only schema* to limit the back up to schema-level
|
||||
* Move the switch next to *Only schemas* to limit the back up to schema-level
|
||||
database objects.
|
||||
|
||||
* Move the switch next to *Only tablespaces* to limit the back
|
||||
up to tablespaces only.
|
||||
|
||||
* Move the switch next to *Only roles* to limit the back up to roles only.
|
||||
|
||||
.. image:: images/backup_server_do_not_save.png
|
||||
:alt: Do not save option on backup server dialog
|
||||
:align: center
|
||||
@@ -50,10 +55,13 @@ tab to provide options related to data or pgAdmin objects that correspond to *pg
|
||||
* Move the switch next to *Owner* towards right position to exclude commands
|
||||
that set object ownership.
|
||||
|
||||
* Move the switch next to *Privilege* towards right position to exclude
|
||||
* Move the switch next to *Role passwords* towards right position to exclude
|
||||
passwords for roles.
|
||||
|
||||
* Move the switch next to *Privileges* towards right position to exclude
|
||||
commands that create access privileges.
|
||||
|
||||
* Move the switch next to *Tablespace* towards right position to exclude
|
||||
* Move the switch next to *Tablespaces* towards right position to exclude
|
||||
tablespaces.
|
||||
|
||||
* Move the switch next to *Unlogged table data* towards right position to
|
||||
@@ -63,26 +71,73 @@ tab to provide options related to data or pgAdmin objects that correspond to *pg
|
||||
commands that set the comments. **Note:** This option is visible only for
|
||||
database server greater than or equal to 11.
|
||||
|
||||
* Move the switch next to *Publications* towards right position to exclude
|
||||
publications.
|
||||
|
||||
* Move the switch next to *Subscriptions* towards right position to exclude
|
||||
subscriptions.
|
||||
|
||||
* Move the switch next to *Security labels* towards right position to exclude
|
||||
Security labels.
|
||||
|
||||
* Move the switch next to *Toast compressions* towards right position to exclude
|
||||
Toast compressions. **Note:** This option is visible only for
|
||||
database server greater than or equal to 14.
|
||||
|
||||
* Move the switch next to *Table access methods* towards right position to exclude
|
||||
Table access methods. **Note:** This option is visible only for
|
||||
database server greater than or equal to 15.
|
||||
|
||||
.. image:: images/backup_server_queries.png
|
||||
:alt: Queries option on backup server dialog
|
||||
:align: center
|
||||
|
||||
* Move switches in the **Queries** field box to specify the type of statements
|
||||
that should be included in the backup.
|
||||
Click the *Query Options* tab to continue. Use these additional fields to specify
|
||||
the type of statements that should be included in the backup.
|
||||
|
||||
* Move the switch next to *Use Column Inserts* towards right position to dump
|
||||
the data in the form of INSERT statements and include explicit column
|
||||
names. Please note: this may make restoration from backup slow.
|
||||
* Move the switch next to *Use INSERT commands* towards right position to
|
||||
dump the data in the form of INSERT statements rather than using a COPY
|
||||
command. Please note: this may make restoration from backup slow.
|
||||
|
||||
* Move the switch next to *Use Insert commands* towards right position to dump
|
||||
the data in the form of INSERT statements rather than using a COPY command.
|
||||
Please note: this may make restoration from backup slow.
|
||||
* Use the *Maximum rows per INSERT command* field to controls the maximum
|
||||
number of rows per INSERT command. **Note:** This option is visible only for
|
||||
database server greater than or equal to 12.
|
||||
|
||||
* Move the switch next to *On conflict do nothing to INSERT command* towards
|
||||
right position to add ON CONFLICT DO NOTHING to INSERT command.
|
||||
This option is not valid unless *Use INSERT commands*, *Use Column INSERTS*
|
||||
or *Maximum rows per INSERT command* is also specified.
|
||||
**Note:** This option is visible only for database server greater than or
|
||||
equal to 12.
|
||||
|
||||
* Move the switch next to *Include DROP DATABASE statement* towards right
|
||||
position to include a command in the backup that will drop any existing
|
||||
database object with the same name before recreating the object during a
|
||||
backup.
|
||||
|
||||
* Move the switch next to *Include IF EXISTS clause* towards right
|
||||
position to add an IF EXISTS clause to drop databases and other objects.
|
||||
This option is not valid unless *Include DROP DATABASE statement* is also set.
|
||||
|
||||
.. image:: images/backup_server_table.png
|
||||
:alt: Backup dialog tables section
|
||||
:align: center
|
||||
|
||||
Click the *Table Options* tab to continue. Use the fields in the *Table Options*
|
||||
tab related to tables that should be included in the backup.
|
||||
|
||||
* Move the switch next to *Use Column INSERTS* towards right position to dump
|
||||
the data in the form of INSERT statements and include explicit column
|
||||
names. Please note: this may make restoration from backup slow.
|
||||
|
||||
* Move the switch next to *Load via partition root* towards right position,
|
||||
so when dumping a COPY or INSERT statement for a partitioned table, target
|
||||
the root of the partitioning hierarchy which contains it rather than the
|
||||
partition itself. **Note:** This option is visible only for database server
|
||||
greater than or equal to 11.
|
||||
|
||||
Click the *Options* tab to continue. Use the fields in the *Options*
|
||||
tab to provide other backup options.
|
||||
|
||||
.. image:: images/backup_server_disable.png
|
||||
:alt: Disable option on backup server dialog
|
||||
@@ -91,7 +146,7 @@ tab to provide options related to data or pgAdmin objects that correspond to *pg
|
||||
* Move switches in the **Disable** field box to specify the type of statements
|
||||
that should be excluded from the backup.
|
||||
|
||||
* Move the switch next to *Trigger* (active when creating a data-only backup)
|
||||
* Move the switch next to *Triggers* (active when creating a data-only backup)
|
||||
towards right position to include commands that will disable triggers on the
|
||||
target table while the data is being loaded.
|
||||
|
||||
@@ -106,11 +161,8 @@ tab to provide options related to data or pgAdmin objects that correspond to *pg
|
||||
* Move switches in the **Miscellaneous** field box to specify miscellaneous
|
||||
backup options.
|
||||
|
||||
* Move the switch next to *With OIDs* towards right position to include object
|
||||
identifiers as part of the table data for each table.
|
||||
|
||||
* Move the switch next to *Verbose messages* towards left position to instruct
|
||||
*pg_dump* to exclude verbose messages.
|
||||
*pg_dumpall* to exclude verbose messages.
|
||||
|
||||
* Move the switch next to *Force double quotes on identifiers* towards right
|
||||
position to force the quoting of all identifiers.
|
||||
@@ -119,27 +171,24 @@ tab to provide options related to data or pgAdmin objects that correspond to *pg
|
||||
position to include a statement that will use a SET SESSION AUTHORIZATION
|
||||
command to determine object ownership (instead of an ALTER OWNER command).
|
||||
|
||||
Click the *Backup* button to build and execute a command based on your
|
||||
selections; click the *Cancel* button to exit without saving work.
|
||||
* Use the *Exclude database* field to not dump databases whose name matches
|
||||
pattern.
|
||||
|
||||
.. image:: images/backup_server_messages.png
|
||||
:alt: Backup server success notification popup
|
||||
:align: center
|
||||
* Use the *Extra float digits* field to use the specified value when dumping
|
||||
floating-point data, instead of the maximum available precision.
|
||||
|
||||
Use the **Stop Process** button to stop the Backup process.
|
||||
* Use the *Lock wait timeout* field to do not wait forever to acquire shared
|
||||
table locks at the beginning of the dump. Instead, fail if unable to lock a
|
||||
table within the specified timeout.
|
||||
|
||||
If the backup is successful, a popup window will confirm success. Click *Click
|
||||
here for details* on the popup window to launch the *Process Watcher*. The
|
||||
*Process Watcher* logs all the activity associated with the backup and provides
|
||||
additional information for troubleshooting.
|
||||
When you’ve specified the details that will be incorporated into the pg_dumpall
|
||||
command:
|
||||
|
||||
.. image:: images/backup_server_process_watcher.png
|
||||
:alt: Backup server process watcher
|
||||
:align: center
|
||||
* Click the *Backup* button to build and execute a command that builds a backup
|
||||
based on your selections on the *Backup Server* dialog.
|
||||
|
||||
If the backup is unsuccessful, review the error message returned by the
|
||||
*Process Watcher* to resolve any issue.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
|
||||
.. note:: If you are running *pgAdmin* in *Server Mode* you can click on the |sm_icon| icon in the process watcher window to open the file location in the Storage Manager. You can use the :ref:`Storage Manager <storage_manager>` to download the backup file on the client machine .
|
||||
|
||||
.. |sm_icon| image:: images/sm_icon.png
|
||||
pgAdmin will run the backup process in background. You can view all the background
|
||||
process with there running status and logs on the :ref:`Processes <processes>`
|
||||
tab
|
||||
@@ -14,7 +14,7 @@ root = os.path.realpath(
|
||||
|
||||
if sys.path[0] != root:
|
||||
sys.path.insert(0, root)
|
||||
|
||||
import config
|
||||
from pgadmin.utils import PgAdminModule
|
||||
|
||||
target = open('code_snippets.rst', 'w')
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
.. _change_ownership:
|
||||
|
||||
************************************
|
||||
`Change Ownership Dialog`:index:
|
||||
************************************
|
||||
|
||||
Use the *Change Ownership* dialog to change the ownership of the shared servers.
|
||||
This dialog will appear if a user has been deleted from
|
||||
:ref:`User Management <user_management>` and owned some shared servers.
|
||||
|
||||
Choose the user who will own the shared servers from the drop-down.
|
||||
|
||||
.. image:: images/change_ownership.png
|
||||
:alt: Change ownership dialog
|
||||
:align: center
|
||||
|
||||
Click the *Change* button to change the ownership.
|
||||
|
||||
The shared servers owned by the user will be deleted if the user is not
|
||||
selected from the drop-down.
|
||||
|
||||
.. image:: images/change_ownership_info.png
|
||||
:alt: Change ownership dialog
|
||||
:align: center
|
||||
|
||||
Click the *Change* button to change the ownership; click *Close* to
|
||||
exit the dialog.
|
||||
@@ -13,6 +13,9 @@ Please consider the following guidelines when selecting a password:
|
||||
|
||||
* Ensure that your password is an adequate length; 6 characters should be the
|
||||
absolute minimum number of characters in the password.
|
||||
* The minimum password length is set by default to six characters. This value
|
||||
can be changed by setting the *PASSWORD_LENGTH_MIN* option to desired length
|
||||
in pgAdmin configuration; see :ref:`config_py` for more information.
|
||||
* Ensure that your password is not open to dictionary attacks. Use a mixture of
|
||||
upper and lower case letters and numerics, and avoid words or names. Consider
|
||||
using the first letter from each word in a phrase that you will remember
|
||||
@@ -36,5 +39,8 @@ Use the *Change Password* dialog to change your password:
|
||||
* Enter the desired password for in the *New Password* field.
|
||||
* Re-enter the new password in the *Confirm Password* field.
|
||||
|
||||
Click the *OK* button to change your password; click *Cancel* to exit the dialog
|
||||
without changing your password.
|
||||
Click the *Save* button to change your password.
|
||||
|
||||
Click the *Close* button to exit without changing your password.
|
||||
|
||||
Click the *Reset* button to reset the values.
|
||||
@@ -13,6 +13,9 @@ Please consider the following guidelines when selecting a password:
|
||||
|
||||
* Ensure that your password is an adequate length; 6 characters should be the
|
||||
absolute minimum number of characters in the password.
|
||||
* The minimum password length is set by default to six characters. This value
|
||||
can be changed by setting the *PASSWORD_LENGTH_MIN* option to desired length
|
||||
in pgAdmin configuration; see :ref:`config_py` for more information.
|
||||
* Ensure that your password is not open to dictionary attacks. Use a mixture of
|
||||
upper and lower case letters and numerics, and avoid words or names. Consider
|
||||
using the first letter from each word in a phrase that you will remember
|
||||
|
||||
@@ -8,6 +8,7 @@ Use *Clear Saved Password* functionality to clear the saved password for the
|
||||
database server.
|
||||
|
||||
.. image:: images/clear_saved_password.png
|
||||
:alt: Clear saved password
|
||||
:align: center
|
||||
|
||||
*Clear Saved Password* shows in the context menu for the selected server as well
|
||||
@@ -17,6 +18,7 @@ Use *Clear SSH Tunnel Password* functionality to clear the saved password of SSH
|
||||
Tunnel to connect to the database server.
|
||||
|
||||
.. image:: images/clear_tunnel_password.png
|
||||
:alt: Clear SSH tunnel password
|
||||
:align: center
|
||||
|
||||
*Clear SSH Tunnel Password* shows in the context menu for the selected server as
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
.. _cloud_aws_rds:
|
||||
|
||||
******************************************
|
||||
`Amazon RDS Cloud Deployment`:index:
|
||||
******************************************
|
||||
|
||||
To deploy a PostgreSQL server on the Amazon cloud, follow the below steps.
|
||||
|
||||
.. image:: images/cloud_provider_for_postgresql.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Once you launch the tool, select the Amazon RDS option.
|
||||
Click on the *Next* button to proceed further.
|
||||
|
||||
.. image:: images/cloud_aws_credentials.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
In the Credentials dialog, provide the region in which you want to deploy the
|
||||
instance along with the *AWS access key* and *AWS secret access key*.
|
||||
Provide *AWS session token* only if your AWS session is temporary.
|
||||
|
||||
To proceed further, click on the next button. Before going further, pgAdmin
|
||||
will validate your credentials.
|
||||
|
||||
.. image:: images/cloud_aws_instance.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Use the fields from the Instance Specification tab to specify the Instance
|
||||
details.
|
||||
|
||||
* Use the *Instance name* field to add an instance name for the PostgreSQL
|
||||
server; the name specified will be displayed in the *Object Explorer* too.
|
||||
|
||||
* Use the *Public IP* field to specify the IP Address range for permitting the
|
||||
inbound traffic.
|
||||
|
||||
* Use the *Database version* field to specify the PostgreSQL version to deploy.
|
||||
|
||||
* Use the *Instance class* field to allocate the computational, network, and
|
||||
memory capacity required by planned workload of this DB instance.
|
||||
|
||||
* Use the *Instance type* field to select the instance type.
|
||||
|
||||
* Use the *Storage type* field to select the instance storage type. Three
|
||||
options are available. General Purpose (SSD) storage, Provisioned IOPS (SSD)
|
||||
and Magnetic storage.
|
||||
|
||||
* Use the *Allocated storage* field to specify the storage capacity in GiB.
|
||||
|
||||
* Use the *Provisioned IOPS* in case of Provisioned IOPS (SSD) storage type.
|
||||
|
||||
* Use the *High Availability* option to specify High Availability
|
||||
option. This option creates a standby in a different Availability Zone(AZ).
|
||||
|
||||
.. image:: images/cloud_aws_database.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Use the fields from the Database Details tab to specify the Instance details.
|
||||
|
||||
* Use the drop-down list box in the *Server group* field to select the parent
|
||||
node for the server; the server will be displayed in the *Object Explorer*
|
||||
within the specified group.
|
||||
|
||||
* Use the *Database name* field to add the database name for the PostgreSQL
|
||||
server.
|
||||
|
||||
* Use the *Username* field to specify the name of a role that will be used when
|
||||
authenticating with the server.
|
||||
|
||||
* Use the *Password* field to provide a password that will be supplied when
|
||||
authenticating with the server.
|
||||
|
||||
* Use the *Confirm password* field to repeat the password.
|
||||
|
||||
* Enter the listener port number of the server host in the *Port* field.
|
||||
|
||||
.. image:: images/cloud_aws_review.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
At the end, review the Instance details that you provided. Click on Finish
|
||||
button to deploy the instance on Amazon RDS.
|
||||
|
||||
.. image:: images/cloud_deployment_tree.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Once you click on the finish, one background process will start which will
|
||||
deploy the instance in the cloud and monitor the progress of the deployment.
|
||||
You can view all the background process with there running status and logs
|
||||
on the :ref:`Processes <processes>` tab
|
||||
|
||||
The Server will be added to the tree with the cloud deployment icon. Once the
|
||||
deployment is done, the server details will be updated.
|
||||
@@ -0,0 +1,122 @@
|
||||
.. cloud_azure_database:
|
||||
|
||||
******************************************
|
||||
`Azure Database Cloud Deployment`:index:
|
||||
******************************************
|
||||
|
||||
To deploy a PostgreSQL server on the Azure Database, follow the below steps.
|
||||
|
||||
.. image:: images/cloud_provider_for_postgresql.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
Once you launch the tool, select the Azure Database option.
|
||||
Click on the *Next* button to proceed further.
|
||||
|
||||
|
||||
.. image:: images/cloud_azure_credentials.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
In the Credentials dialog, select authentication method either interactive
|
||||
browser or Azure CLI. Azure CLI will use the currently logged in identity
|
||||
through the Azure CLI on the local machine. Interactive Browser will
|
||||
open a browser window to authenticate a user interactively.
|
||||
|
||||
Use the *Azure tenant* id to specify Azure tenant ID against which user
|
||||
is authenticated.
|
||||
|
||||
Clicking the *Click here to authenticate yourself to Microsoft Azure*
|
||||
button, user will be redirected to the Microsoft Azure authentication page in a
|
||||
new browser tab if the Interactive Browser option is selected.
|
||||
Azure CLI authentication can be used only in Desktop mode.
|
||||
|
||||
Once authentication is completed, click on the next button to proceed.
|
||||
|
||||
.. image:: images/cloud_azure_instance.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
Use the fields from the Instance Specification tab to specify the Instance
|
||||
details.
|
||||
|
||||
* Use the *Cluster name* field to add a name for the PostgreSQL
|
||||
server; the name specified will be displayed in the *Object Explorer* too.
|
||||
|
||||
* Select a subscription from the *Subscription* options which are populated based
|
||||
on user access levels in Azure portal.
|
||||
|
||||
* Select the resource group from *Resource Group* dropdown under which the
|
||||
PostgreSQL instance will be created.
|
||||
|
||||
* Select the location to deploy PostgreSQL instance from *Location*
|
||||
options.
|
||||
|
||||
* Select the availability zone in specified region to deploy PostgreSQL
|
||||
instance from *Availability zone* options.
|
||||
|
||||
* Use *Database version* options to specify PostgreSQL database version.
|
||||
|
||||
* Use the *Instance class* field to allocate the computational, network, and
|
||||
memory capacity required by planned workload of this DB instance.
|
||||
|
||||
* Use the *Instance type* field to select the instance type.
|
||||
|
||||
* Use the *Storage size* option to specify the storage capacity.
|
||||
|
||||
.. image:: images/cloud_azure_network.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
* Use the *Public IP* field to specify the List of IP Addresses or range of
|
||||
IP Addresses (start IP Address - end IP address) from which inbound traffic
|
||||
should be accepted. Add multiple IP addresses/ranges separated with commas,
|
||||
for example: "192.168.0.50, 192.168.0.100 - 192.168.0.200"
|
||||
|
||||
* Use *Zone redundant high availability* option to specify High Availability
|
||||
option. Zone redundant high availability deploys a standby replica in a
|
||||
different zone.
|
||||
The Burstable instance type does not support high availability.
|
||||
|
||||
.. image:: images/cloud_azure_database.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
Use the fields from the Database Details tab to specify the PostgreSQL database details.
|
||||
|
||||
* Use the drop-down list in the *pgAdmin server group* field to select the parent
|
||||
node for the server; the server will be displayed in the *Object Explorer*
|
||||
within the specified group.
|
||||
|
||||
* Use the *Admin username* field to add the database name for the PostgreSQL
|
||||
server.
|
||||
|
||||
* Use the *Password* field to provide a password that will be supplied when
|
||||
authenticating with the server.
|
||||
|
||||
* Use the *Confirm password* field to repeat the password.
|
||||
|
||||
Click on the next button to proceed.
|
||||
|
||||
.. image:: images/cloud_azure_review.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
At the end, review the instance details that you provided. Click on Finish
|
||||
button to deploy the instance on Azure Database.
|
||||
|
||||
Once you click on the finish, one background process will start which will
|
||||
deploy the instance in the cloud and monitor the progress of the deployment.
|
||||
You can view all the background process with there running status and logs
|
||||
on the :ref:`Processes <processes>` tab
|
||||
|
||||
.. image:: images/cloud_azure_bg_process_watcher.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
The Server will be added to the tree with the cloud deployment icon. Once the
|
||||
deployment is done, the server details will be updated.
|
||||
|
||||
.. image:: images/cloud_deployment_tree.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
After Width: | Height: | Size: 97 KiB |
@@ -1,87 +1,21 @@
|
||||
.. _cloud_deployment:
|
||||
|
||||
******************************
|
||||
`Cloud Deployment`:index:
|
||||
******************************
|
||||
*************************************
|
||||
`PostgreSQL Cloud Deployment`:index:
|
||||
*************************************
|
||||
|
||||
The PostgreSQL server can be deployed on the Amazon AWS cloud using this module.
|
||||
Currently only RDS is available, but in the future more cloud options will be available.
|
||||
A PostgreSQL server can be deployed on the Amazon, EDB BigAnimal, Azure,
|
||||
Google cloud using this module. In future more cloud provider options will
|
||||
be available.
|
||||
|
||||
To launch the *Cloud Deployment...* tool, right click on the *Server Group* or *Server* of the tree control, and select
|
||||
*Deploy a Cloud Instance* from the *Register* menu.
|
||||
To launch the *Cloud Deployment...* tool, right click on the *Server Group* or
|
||||
*Server* of the tree control, and select *Deploy a Cloud Instance* from the
|
||||
*Register* menu.
|
||||
|
||||
.. image:: images/cloud_deployment_provider.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
Once you launch the tool, the Amazon RDS is already selected as this is the only option currently available.
|
||||
Click on the *Next* button to proceed further.
|
||||
|
||||
.. image:: images/cloud_deployment_credentials.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
In the Credentials dialog, provide the region in which you want to deploy the instance along with
|
||||
*AWS access key* and *AWS secret access key*.
|
||||
Provide *AWS session token* only if your AWS session is temporary.
|
||||
|
||||
To proceed further, click on the next button. Before going further, pgAdmin will validate your credentials.
|
||||
|
||||
.. image:: images/cloud_deployment_instance.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Use the fields from the Instance Specification tab to specify the Instance details.
|
||||
|
||||
* Use the *Instance name* field to add an instance name for the PostgreSQL server; the name
|
||||
specified will be displayed in the *Browser* tree control too.
|
||||
|
||||
* Use the *Public IP* field to specify the IP Address range for permitting the inbound traffic.
|
||||
|
||||
* Use the *Database version* field to specify the PostgreSQL version to deploy.
|
||||
|
||||
* Use the *Instance class* field to allocate the computational, network, and memory capacity required by planned workload of this DB instance.
|
||||
|
||||
* Use the *Instance type* field to select the instance type.
|
||||
|
||||
* Use the *Storage type* field to select the instance storage type. Three options are available. General Purpose (SSD) storage, Provisioned IOPS (SSD) and Magnetic storage.
|
||||
|
||||
* Use the *Allocated storage* field to specify the storage capacity in GiB.
|
||||
|
||||
* Use the *Provisioned IOPS* in case of Provisioned IOPS (SSD) storage type.
|
||||
|
||||
.. image:: images/cloud_deployment_database.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Use the fields from the Database Details tab to specify the Instance details.
|
||||
|
||||
* Use the drop-down list box in the *Server group* field to select the parent
|
||||
node for the server; the server will be displayed in the *Browser* tree
|
||||
control within the specified group.
|
||||
|
||||
* Use the *Database name* field to add the database name for the PostgreSQL server.
|
||||
|
||||
* Use the *Username* field to specify the name of a role that will be used when
|
||||
authenticating with the server.
|
||||
|
||||
* Use the *Password* field to provide a password that will be supplied when
|
||||
authenticating with the server.
|
||||
|
||||
* Use the *Confirm password* field to repeat the password.
|
||||
|
||||
* Enter the listener port number of the server host in the *Port* field.
|
||||
|
||||
.. image:: images/cloud_deployment_review.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
At the end, review the Instance details that you provided. Click on Finish button to deploy the instance on Amazon RDS.
|
||||
|
||||
.. image:: images/cloud_deployment_tree.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Once you click on the finish, one background process will start which will deploy the instance in the cloud
|
||||
and monitor the progress of the deployment. The Server will be added to the tree with the cloud uploading icon.
|
||||
Once the deployment is done, the necessary server details will be updated.
|
||||
cloud_aws_rds
|
||||
cloud_edb_biganimal
|
||||
cloud_azure_database
|
||||
cloud_google_cloud_sql
|
||||
@@ -0,0 +1,110 @@
|
||||
.. _cloud_edb_biganimal:
|
||||
|
||||
******************************************
|
||||
`EDB BigAnimal Cloud Deployment`:index:
|
||||
******************************************
|
||||
|
||||
To deploy a PostgreSQL server on the EDB BigAnimal cloud, follow the below steps.
|
||||
|
||||
.. image:: images/cloud_provider_for_postgresql.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Once you launch the tool, select the EDB BigAnimal option.
|
||||
Click on the *Next* button to proceed further.
|
||||
|
||||
.. image:: images/cloud_biganimal_credentials.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
The next steps is to authenticate the user to EDB BigAninal.
|
||||
Click the given button to authenticate, by clicking the button, the user
|
||||
will be redirected to the new tab for the verification.
|
||||
Once you confirm the one time code, the pgAdmin will automatically detect it
|
||||
and the next button will be enabled. To proceed further, click on the next button.
|
||||
|
||||
.. image:: images/cloud_biganimal_cluster.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
* Use the *Project* field to choose a project in your Biganimal account.
|
||||
|
||||
* Use the *Cluster type* field to choose a cluster type.
|
||||
|
||||
* Use the *No. of Standby Replicas* field to specify the replicas if you have selected the High Availability cluster.
|
||||
|
||||
* Use the *Cluster provider* field to choose the provider.
|
||||
|
||||
|
||||
.. image:: images/cloud_biganimal_instance.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Use the fields from the Instance Specification tab to specify the Instance
|
||||
details.
|
||||
|
||||
* Use the *Cluster name* field to add a cluster name for the PostgreSQL
|
||||
server; the name specified will be displayed in the *Object Explorer* too.
|
||||
|
||||
* Use the *Region* field to select the region.
|
||||
|
||||
* Use the *Public IP range* field to specify the IP Address range for permitting the
|
||||
inbound traffic. Leave it blank for 0.0.0.0/0
|
||||
|
||||
* Use the *Instance type* field to select the instance type.
|
||||
|
||||
* Use the *Instance series* field to select the instance series.
|
||||
|
||||
* Use the *Instance size* field to allocate the computational, network, and
|
||||
memory capacity required by planned workload of this DB instance.
|
||||
|
||||
* Use the *Volume type* field to select the instance storage type.
|
||||
|
||||
* Use the *Volume properties* field to specify the storage capacity. This field is specific to Azure.
|
||||
|
||||
* Use the *Volume size* field to specify the storage size. This field is specific to AWS.
|
||||
|
||||
* Use the *Volume IOPS* field to specify the storage IOPS. This field is specific to AWS.
|
||||
|
||||
* Use the *Disk throughput* field to specify the disk throughput. This field is specific to AWS.
|
||||
|
||||
|
||||
.. image:: images/cloud_biganimal_database.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Use the fields from the Database Details tab to specify the Instance details.
|
||||
|
||||
* Use the drop-down list box in the *Server group* field to select the parent
|
||||
node for the server; the server will be displayed in the *Object Explorer*
|
||||
within the specified group.
|
||||
|
||||
* Use the *Database type* field to specify the PostgreSQL
|
||||
type, EnterpriseDB PostgreSQL Advanced Server or PostgreSQL.
|
||||
|
||||
* Use the *PostgreSQL version* field to select the database version.
|
||||
|
||||
* Use the *Database Password* field to provide a password that will be supplied when
|
||||
authenticating with the server.
|
||||
|
||||
* Use the *Confirm password* field to repeat the password.
|
||||
|
||||
|
||||
.. image:: images/cloud_biganimal_review.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
At the end, review the Cluster details that you provided. Click on Finish
|
||||
button to deploy the instance on EDB BigAnimal.
|
||||
|
||||
.. image:: images/cloud_deployment_tree.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Once you click on the finish, one background process will start which will
|
||||
deploy the instance in the cloud and monitor the progress of the deployment.
|
||||
You can view all the background process with there running status and logs
|
||||
on the :ref:`Processes <processes>` tab
|
||||
|
||||
The Server will be added to the tree with the cloud deployment icon. Once the
|
||||
deployment is done, the server details will be updated.
|
||||
@@ -0,0 +1,117 @@
|
||||
.. cloud_google_cloud_sql:
|
||||
|
||||
************************************************
|
||||
`Google Cloud SQL Deployment`:index:
|
||||
************************************************
|
||||
|
||||
To deploy a PostgreSQL server on the Google Cloud SQL, follow the below steps.
|
||||
|
||||
.. image:: images/cloud_provider_for_postgresql.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
Once you launch the tool, select the Google Cloud SQL option.
|
||||
Click on the *Next* button to proceed further.
|
||||
|
||||
|
||||
.. image:: images/cloud_google_credentials.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
In the Credentials dialog, select client secret file to authenticate
|
||||
using google.You can download a client secret which is json formatted file
|
||||
from google cloud console once OAuth2 client ID is created.
|
||||
|
||||
.. note:: While creating client OAuth client ID, select Desktop App as application type.
|
||||
Refer `this <https://support.google.com/cloud/answer/6158849?hl=en/>`_ link for creating client secret.
|
||||
|
||||
Clicking the *Click here to authenticate yourself to Google*
|
||||
button, user will be redirected to the Google authentication page in a
|
||||
new browser tab.
|
||||
|
||||
Once authentication is completed, click on the next button to proceed.
|
||||
|
||||
.. image:: images/cloud_google_instance.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
Use the fields from the Instance Specification tab to specify the Instance
|
||||
details.
|
||||
|
||||
* Use the *Cluster name* field to add a name for the PostgreSQL
|
||||
server; the name specified will be displayed in the *Object Explorer* too.
|
||||
|
||||
* Select the project from *project* dropdown under which the
|
||||
PostgreSQL instance will be created.
|
||||
|
||||
* Select the location to deploy PostgreSQL instance from *Location*
|
||||
options.
|
||||
|
||||
* Select the availability zone in specified region to deploy PostgreSQL
|
||||
instance from *Availability zone* options.
|
||||
|
||||
* Use *Database version* options to specify PostgreSQL database version.
|
||||
|
||||
* Use the *Instance class* field to allocate the computational and
|
||||
memory capacity required by planned workload of this DB instance.
|
||||
|
||||
* Use the *Instance type* field to select the instance type.
|
||||
|
||||
* Specify storage type by selecting option from *Storage type*.
|
||||
|
||||
* Use the *Storage capacity* option to specify the storage capacity.
|
||||
|
||||
.. image:: images/cloud_google_network.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
* Use the *Public IP* field to specify the list of IP address range
|
||||
for allowed inbound traffic, for example: 127.0.0.1/32. Add multiple
|
||||
IP addresses/ranges separated with commas.
|
||||
|
||||
* Use the *High Availability* option to specify High Availability
|
||||
option. This option creates a standby in a select Secondary
|
||||
Availability Zone.
|
||||
|
||||
* Select the secondary availability zone for high availability
|
||||
from *Secondary Availability zone* options.
|
||||
|
||||
.. image:: images/cloud_google_database.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
Use the fields from the Database Details tab to specify the PostgreSQL database details.
|
||||
|
||||
* Use the drop-down list in the *pgAdmin server group* field to select the parent
|
||||
node for the server; the server will be displayed in the *Object Explorer*
|
||||
within the specified group.
|
||||
|
||||
* Admin username field will be default to postgres.
|
||||
server.
|
||||
|
||||
* Use the *Password* field to provide a password that will be supplied when
|
||||
authenticating with the server.
|
||||
|
||||
* Use the *Confirm password* field to repeat the password.
|
||||
|
||||
Click on the next button to proceed.
|
||||
|
||||
.. image:: images/cloud_google_review.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
At the end, review the instance details that you provided. Click on Finish
|
||||
button to deploy the instance on Azure PostgreSQL.
|
||||
|
||||
Once you click on the finish, one background process will start which will
|
||||
deploy the instance in the cloud and monitor the progress of the deployment.
|
||||
You can view all the background process with there running status and logs
|
||||
on the :ref:`Processes <processes>` tab
|
||||
|
||||
|
||||
The Server will be added to the tree with the cloud deployment icon. Once the
|
||||
deployment is done, the server details will be updated.
|
||||
|
||||
.. image:: images/cloud_google_deployment_tree.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
@@ -5,14 +5,14 @@
|
||||
**********************
|
||||
|
||||
The bulk of pgAdmin is a Python web application written using the Flask framework
|
||||
on the backend, and HTML5 with CSS3, Bootstrap and jQuery on the front end. A
|
||||
on the backend, and HTML5 with CSS3,ReactJS on the front end. A
|
||||
desktop runtime is also included for users that prefer a desktop application to
|
||||
a web application, which is written using NWjs (Node Webkit).
|
||||
a web application, which is written using Electron.
|
||||
|
||||
Runtime
|
||||
*******
|
||||
|
||||
The runtime is based on NWjs which integrates a browser and the Python server
|
||||
The runtime is based on Electron which integrates a browser and the Python server
|
||||
creating a standalone application. The source code can be found in the
|
||||
**/runtime** directory in the source tree.
|
||||
|
||||
@@ -44,7 +44,7 @@ the **Flask-Security** module to manage application security and users, and
|
||||
provides options for self-service password reset and password changes etc.
|
||||
|
||||
Whether in desktop or server mode, each user's settings are stored in a SQLite
|
||||
database which is also used to store the user accounts. This is initially
|
||||
OR external database which is also used to store the user accounts. This is initially
|
||||
created using the **setup.py** script which will create the database file and
|
||||
schema within it, and add the first user account (with administrative
|
||||
privileges) and a default server group for them. A **settings** table is also
|
||||
@@ -194,7 +194,7 @@ Nodes
|
||||
*****
|
||||
|
||||
Nodes are very similar to modules, it represents an individual node or,
|
||||
collection object on the browser treeview. To recognised as a node module, a
|
||||
collection object on the object explorer treeview. To recognised as a node module, a
|
||||
Python package (along with javascript modules) must be created. This must:
|
||||
|
||||
1) Be placed within the **web/pgadmin/browser/** directory, and
|
||||
@@ -207,8 +207,7 @@ Front End
|
||||
|
||||
pgAdmin uses javascript extensively for the front-end implementation. It uses
|
||||
require.js to allow the lazy loading (or, say load only when required),
|
||||
bootstrap for UI look and feel, Backbone for data manipulation of a node,
|
||||
Backform for generating properties/create dialog for selected node. We have
|
||||
ReactJS with CSS and MaterialUI for UI look and feel. We have
|
||||
divided each module in small chunks as much as possible. Not all javascript
|
||||
modules are required to be loaded (i.e. loading a javascript module for
|
||||
database will make sense only when a server node is loaded completely.) Please
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
**************************
|
||||
|
||||
This document lists a number of standard items that will be checked during the
|
||||
review process for any patches submitted for inclusion in pgAdmin.
|
||||
review process for any changes submitted for inclusion in pgAdmin.
|
||||
|
||||
* Ensure all code follows the pgAdmin :doc:`coding_standards`.
|
||||
|
||||
@@ -16,7 +16,7 @@ review process for any patches submitted for inclusion in pgAdmin.
|
||||
bulk updates every year). The start date should always be 2013, and the end year
|
||||
the current year, e.g.
|
||||
|
||||
Copyright (C) 2013 - 2022, The pgAdmin Development Team
|
||||
Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
|
||||
* Ensure there's a blank line immediately following any copyright headers.
|
||||
|
||||
@@ -52,10 +52,13 @@ review process for any patches submitted for inclusion in pgAdmin.
|
||||
current schema/user as appropriate. In general, if there are common or sensible
|
||||
default values available, put them in the fields for the user.
|
||||
|
||||
* 1 patch == 1 feature. If you need to fix/update existing infrastructure in
|
||||
your patch, it's usually easier if it's in a separate patch. Patches containing
|
||||
multiple new features or unrelated changes are likely to be rejected.
|
||||
* 1 Pull Request == 1 feature. If you need to fix/update existing
|
||||
infrastructure in your change, it's usually easier if it's in a separate
|
||||
Pull Request. Pull Requests containing multiple new features or unrelated
|
||||
changes are likely to be rejected.
|
||||
|
||||
* Ensure the patch is fully functional, and works! If a patch is being sent as
|
||||
a work in progress, not intended for commit, clearly state that it's a WIP,
|
||||
and note what does or does not yet work.
|
||||
* Ensure the change is fully functional, and works! If you wish to send a
|
||||
work in progress (WIP) change that is not intended for commit, instead of
|
||||
submitting a Pull Request, send either as a link to a repository fork or a
|
||||
patch to the pgadmin-hackers@postgresql.org mailing list, clearly stating
|
||||
that it's a WIP, and noting what does or does not yet work.
|
||||
@@ -22,14 +22,12 @@ purpose or how it works if not obvious from a quick review of the code itself.
|
||||
CSS 3
|
||||
*****
|
||||
|
||||
CSS3 is used for styling and layout throughout the application. Extensive use is
|
||||
made of the Bootstrap Framework to aid in that process, however additional
|
||||
styles must still be created from time to time.
|
||||
CSS3 is used for styling and layout throughout the application.
|
||||
|
||||
Most custom styling comes from individual modules which may advertise static
|
||||
stylesheets to be included in the module that is loading them via hooks.
|
||||
|
||||
Styling overrides (for example, to alter the Bootstrap look and feel) will
|
||||
Styling overrides (for example, to alter the look and feel) will
|
||||
typically be found in the **overrides.css** file in the main static file
|
||||
directory for the application.
|
||||
|
||||
@@ -64,7 +62,7 @@ All HTML must be HTML 5 compliant.
|
||||
Javascript
|
||||
**********
|
||||
|
||||
Client-side code is written in Javascript using jQuery and various plugins.
|
||||
Client-side code is written in Javascript using ReactJS and various plugins.
|
||||
Whilst much of the code is rendered from static files, there is also code that
|
||||
is rendered from templates using Jinja2 (often to inject the users settings) or
|
||||
constructed on the fly from module hooks.
|
||||
@@ -122,7 +120,7 @@ with the required file header is shown below::
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2022, The pgAdmin Development Team
|
||||
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
@@ -40,6 +40,9 @@ settings:
|
||||
as the existing one, but will be an independent object. If you choose to copy
|
||||
an existing collation, you cannot modify the collation properties displayed on
|
||||
this tab.
|
||||
* Use the drop-down listbox next to *Provider* to select a locale services associated
|
||||
with the collation. Possible values are: icu, libc and builtin.
|
||||
**Note:** The builtin option is available from v17 onwards.
|
||||
* Use the *Locale* field to specify a locale; a locale specifies language and
|
||||
language formatting characteristics. If you specify this, you cannot specify
|
||||
either of the following parameters. To view a list of locales supported by
|
||||
@@ -50,6 +53,14 @@ settings:
|
||||
* Use the *LC_CTYPE* field to specify a locale with specified character
|
||||
classification. The locale must be applicable to the current database encoding.
|
||||
(See CREATE DATABASE for details.)
|
||||
* Move the switch next to *Deterministic* to *YES* to specify whether the collation should use
|
||||
deterministic comparisons. By default, this option is set to true. In a
|
||||
deterministic comparison, strings that are not byte-wise equal are considered
|
||||
unequal, even if they are considered logically equal in the comparison.
|
||||
* Use the *Rules* field to specify a rules for customizing the behavior of the collation.
|
||||
It includes considerations such as character ordering, case sensitivity, and accent
|
||||
sensitivity.
|
||||
* Use the *Version* field to specify version string to store with the collation object.
|
||||
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
@@ -39,6 +39,12 @@ are disabled if inapplicable.)
|
||||
a text value.
|
||||
* Use the drop-down listbox next to *Collation* to apply a collation setting to
|
||||
the column.
|
||||
* Use the drop-down listbox next to *Compression* to set the compression method
|
||||
for the column. Compression is supported only for variable-width data types,
|
||||
and is used only when the column's storage mode is main or extended. This
|
||||
option is available from v14 and above.
|
||||
* Use the drop-down listbox next to *Storage* to set the storage mode for the
|
||||
column. This option is available from v16 and above.
|
||||
|
||||
Click the *Constraints* tab to continue.
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ import config
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||
extensions = []
|
||||
extensions = ["sphinxcontrib.youtube"]
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
@@ -27,8 +27,8 @@ The configuration files are as follows:
|
||||
needed.
|
||||
|
||||
* ``config_local.py``: This file is read after ``config_distro.py`` and is intended
|
||||
for end users to change any default or packaging specific settings that they may
|
||||
wish to adjust to meet local preferences or standards.This file is optional,
|
||||
for the owner of the installation to change any default or packaging specific settings
|
||||
that they may wish to adjust to meet local preferences or standards.This file is optional,
|
||||
and may be created by users in the same directory as ``config.py`` if
|
||||
needed.
|
||||
|
||||
@@ -45,11 +45,12 @@ The configuration files are as follows:
|
||||
macOS,/Library/Preferences/pgadmin/config_system.py
|
||||
Windows,%CommonProgramFiles%\\pgadmin\\config_system.py
|
||||
|
||||
.. note:: If the SERVER_MODE setting is changed in ``config_distro.py``,
|
||||
``config_local.py``, or ``config_system.py`` you will most likely need to
|
||||
re-set the LOG_FILE, SQLITE_PATH, SESSION_DB_PATH and STORAGE_DIR values
|
||||
as well as they will have been set based on the default configuration or
|
||||
overridden by the runtime.
|
||||
.. note:: If the SERVER_MODE or DATA_DIR settings are changed in
|
||||
``config_distro.py``, ``config_local.py``, or ``config_system.py``
|
||||
LOG_FILE, SQLITE_PATH, SESSION_DB_PATH, STORAGE_DIR, KERBEROS_CCACHE_DIR,
|
||||
and AZURE_CREDENTIAL_CACHE_DIR values will be set based on DATA_DIR unless
|
||||
values are explicitly overridden for any of the variable in any of the
|
||||
above file.
|
||||
|
||||
The default ``config.py`` file is shown below for reference:
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ and select *Connect Server...* from the context menu.
|
||||
|
||||
.. image:: images/connect_to_server.png
|
||||
:alt: Connect to server dialog
|
||||
:align: center
|
||||
|
||||
Provide authentication information for the selected server:
|
||||
|
||||
@@ -26,6 +27,7 @@ Tunnel and Database server passwords if not already saved.
|
||||
|
||||
.. image:: images/connect_to_tunneled_server.png
|
||||
:alt: Connect to server dialog
|
||||
:align: center
|
||||
|
||||
Provide authentication information for the selected server:
|
||||
|
||||
|
||||
@@ -24,6 +24,13 @@ dialog, right-click on the *Servers* node of the tree control, and select
|
||||
|
||||
server_dialog
|
||||
|
||||
Alternatively you can use the *Cloud Deployment* wizard to deploy a new
|
||||
PostgreSQL instance in the cloud, and connect to it.
|
||||
|
||||
.. toctree::
|
||||
|
||||
cloud_deployment
|
||||
|
||||
A master password is required to secure and later unlock saved server passwords.
|
||||
It is set by the user and can be disabled using config.
|
||||
|
||||
|
||||
@@ -8,6 +8,31 @@ pgAdmin can be deployed in a container using the image at:
|
||||
|
||||
https://hub.docker.com/r/dpage/pgadmin4/
|
||||
|
||||
There are various tags that you can select from to get the version of pgAdmin
|
||||
that you want, using a command such as this if you're using Docker:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
docker pull dpage/pgadmin4:<tag name>
|
||||
|
||||
where *<tag name>* is one of the following:
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 4
|
||||
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
| Tag name | Description |
|
||||
+==========+===============================================================================+
|
||||
| latest | The most recent release. |
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
| 8.4 | A specific version (8.4 in this case). |
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
| 8 | the latest release of a specific major version (major version 8 in this case).|
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
| snapshot | The latest nightly test build. |
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
|
||||
PostgreSQL Utilities
|
||||
********************
|
||||
|
||||
@@ -17,22 +42,22 @@ maintenance functions to be executed. Multiple versions are included in the
|
||||
following directories to allow use with different versions of the database
|
||||
server:
|
||||
|
||||
* PostgreSQL 10: */usr/local/pgsql-10*
|
||||
* PostgreSQL 11: */usr/local/pgsql-11*
|
||||
* PostgreSQL 12: */usr/local/pgsql-12*
|
||||
* PostgreSQL 13: */usr/local/pgsql-13*
|
||||
* PostgreSQL 14: */usr/local/pgsql-14*
|
||||
* PostgreSQL 15: */usr/local/pgsql-15*
|
||||
* PostgreSQL 16: */usr/local/pgsql-16*
|
||||
|
||||
The default binary paths set in the container are as follows:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
DEFAULT_BINARY_PATHS = {
|
||||
'pg-17': '/usr/local/pgsql-17',
|
||||
'pg-16': '/usr/local/pgsql-16',
|
||||
'pg-15': '/usr/local/pgsql-15',
|
||||
'pg-14': '/usr/local/pgsql-14',
|
||||
'pg-13': '/usr/local/pgsql-13',
|
||||
'pg-12': '/usr/local/pgsql-12',
|
||||
'pg-11': '/usr/local/pgsql-11',
|
||||
'pg-10': '/usr/local/pgsql-10'
|
||||
'pg-13': '/usr/local/pgsql-13'
|
||||
}
|
||||
|
||||
this may be changed in the :ref:`preferences`.
|
||||
@@ -52,6 +77,14 @@ to login to pgAdmin. This variable is required and must be set at launch time.
|
||||
This is the password used when setting up the initial administrator account to
|
||||
login to pgAdmin. This variable is required and must be set at launch time.
|
||||
|
||||
**PGADMIN_DEFAULT_PASSWORD_FILE**
|
||||
|
||||
This is the password used when setting up the initial administrator account to
|
||||
login to pgAdmin. This value should be set to *docker secret* in order to set
|
||||
the password. This variable is supported in docker swarm environment or while creating
|
||||
container with docker compose. PGADMIN_DEFAULT_PASSWORD or PGADMIN_DEFAULT_PASSWORD_FILE
|
||||
variable is required and must be set at launch time.
|
||||
|
||||
**PGADMIN_DISABLE_POSTFIX**
|
||||
|
||||
*Default: <null>*
|
||||
@@ -98,7 +131,39 @@ than using the default.
|
||||
*Default: /pgadmin4/servers.json*
|
||||
|
||||
Override the default file path for the server definition list. See the
|
||||
/pgadmin4/servers.json mapped file below for more information.
|
||||
/pgadmin4/servers.json mapped file below for more information. See the format
|
||||
of the `Servers JSON file <https://www.pgadmin.org/docs/pgadmin4/latest/import_export_servers.html#json-format>`_.
|
||||
|
||||
**PGADMIN_REPLACE_SERVERS_ON_STARTUP**
|
||||
|
||||
*Default: null*
|
||||
|
||||
By default, the server definitions are only loaded on first launch, i.e. when initializing the configuration database. See PGADMIN_SERVER_JSON_FILE above.
|
||||
|
||||
If this variable is set to True, the server definitions will be replaced on every launch. This can be used to declaratively manage the server definitions.
|
||||
|
||||
**PGADMIN_PREFERENCES_JSON_FILE**
|
||||
|
||||
*Default: /pgadmin4/preferences.json*
|
||||
|
||||
Override the default file path for the preferences customization at the container creation. See the
|
||||
/pgadmin4/preferences.json mapped file below for more information. See the format
|
||||
of the `Preferences JSON file <https://www.pgadmin.org/docs/pgadmin4/latest/preferences.html#json-format>`_.
|
||||
|
||||
**PGADMIN_CUSTOM_CONFIG_DISTRO_FILE**
|
||||
|
||||
*Default: /pgadmin4/config_distro.py*
|
||||
|
||||
Override the default file path for the pgadmin configurations file.This can be used while provisioning
|
||||
container with read only root file system to achieve a more secure pgadmin4 deployment for kubernetes.
|
||||
Note that if you are externally mapping this file, then environment variables passed using *PGADMIN_CONFIG_*
|
||||
suffix will be ignored.
|
||||
|
||||
**PGPASS_FILE**
|
||||
|
||||
*Default: <null>*
|
||||
This varible should be set to if you want to pass password using pgpass
|
||||
file for the servers added in pgadmin.
|
||||
|
||||
**GUNICORN_ACCESS_LOGFILE**
|
||||
|
||||
@@ -107,6 +172,15 @@ Override the default file path for the server definition list. See the
|
||||
Specify an output file in which to store the Gunicorn access logs, instead of
|
||||
sending them to stdout.
|
||||
|
||||
**GUNICORN_LIMIT_REQUEST_LINE**
|
||||
|
||||
*Default: 8190*
|
||||
|
||||
Set the maximum size of HTTP request line in bytes. By default the pgAdmin
|
||||
container uses the maximum limited size offered by Gunicorn as some requests
|
||||
can be quite large. In exceptional cases this value can be set to 0 (zero) to
|
||||
specify "unlimited", however this poses a potential denial of service hazard.
|
||||
|
||||
**GUNICORN_THREADS**
|
||||
|
||||
*Default: 25*
|
||||
@@ -185,6 +259,14 @@ pgAdmin in the container. Note that server definitions are only loaded on first
|
||||
launch, i.e. when the configuration database is created, and not on subsequent
|
||||
launches using the same configuration database.
|
||||
|
||||
**/pgadmin4/preferences.json**
|
||||
|
||||
If this file is mapped, preferences defined in it will be updated at launch
|
||||
time. This allows customization of preferences settings into the instance of
|
||||
pgAdmin in the container. Note that preferences are only set on first
|
||||
launch, i.e. when the configuration database is created, and not on subsequent
|
||||
launches using the same configuration database.
|
||||
|
||||
**/certs/server.cert**
|
||||
|
||||
If TLS is enabled, this file will be used as the servers TLS certificate.
|
||||
@@ -414,7 +496,7 @@ If you wish to host pgAdmin under a subdirectory using Traefik, the
|
||||
configuration changes are typically made to the way the container is launched
|
||||
and not to Traefik itself. For example, to host pgAdmin under */pgadmin4/*
|
||||
instead of at the root directory, the Traefik configuration above may be used if
|
||||
the container is launched like this:
|
||||
the container is launched like this while using the version v1 of Traefik:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@@ -430,3 +512,16 @@ The *SCRIPT_NAME* environment variable has been set to tell the container it is
|
||||
being hosted under a subdirectory (in the same way as the *X-Script-Name* header
|
||||
is used with Nginx), and a label has been added to tell Traefik to route
|
||||
requests under the subdirectory to this container.
|
||||
|
||||
While using the Traefik configuration for version v2 for hosting pgAdmin under subdirectory
|
||||
the container is typically launched per the example below:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
docker pull dpage/pgadmin4
|
||||
docker run --name "pgadmin4" \
|
||||
-e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
|
||||
-e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
|
||||
-e "SCRIPT_NAME=/pgadmin4" \
|
||||
-l "traefik.frontend.pgadmin4.rule=Host(`host.example.com`) && PathPrefix(`/pgadmin4`)" \
|
||||
-d dpage/pgadmin4
|
||||
@@ -15,7 +15,7 @@ development process used to develop, improve, and maintain the pgAdmin client.
|
||||
|
||||
.. toctree::
|
||||
|
||||
submitting_patches
|
||||
submitting_pull_requests
|
||||
code_overview
|
||||
coding_standards
|
||||
code_snippets
|
||||
|
||||
@@ -19,6 +19,9 @@ Use the fields in the *General* tab to identify the database:
|
||||
|
||||
* Use the *Database* field to add a descriptive name for the database. The name
|
||||
will be displayed in the *pgAdmin* tree control.
|
||||
* Use the *OID* field to specify the object identifier to be used for the new
|
||||
database. Users can specify the value greater than 16383. This option is available
|
||||
from v15 and above.
|
||||
* Select the owner of the database from the drop-down listbox in the *Owner*
|
||||
field.
|
||||
* Store notes about the database in the *Comment* field.
|
||||
@@ -38,14 +41,29 @@ Use the *Definition* tab to set properties for the database:
|
||||
* Select a tablespace from the drop-down listbox in the *Tablespace* field. The
|
||||
selected tablespace will be the default tablespace used to contain database
|
||||
objects.
|
||||
* Select the strategy from the drop-down listbox in the *Strategy* field while
|
||||
creating a new database. This option is available from v15 and above.
|
||||
* Select the locale provider from the drop-down listbox in the *Locale Provider*
|
||||
field to set the default collation for this database. Possible values are: icu, libc and builtin.
|
||||
This option is available from v15 and above. **Note:** The icu and libc options are available
|
||||
from v15 and builtin option is available from v17 onwards.
|
||||
* Select the collation order from the drop-down listbox in the *Collation* field.
|
||||
* Select the character classification from the drop-down listbox in the
|
||||
*Character Type* field. This affects the categorization of characters, e.g.
|
||||
lower, upper and digit. The default, or a blank field, uses the character
|
||||
classification of the template database.
|
||||
* Select the icu locale from the drop-down listbox in the *ICU Locale* to
|
||||
specifies the ICU locale ID if the ICU locale provider is used.
|
||||
This option is available from v15 and above.
|
||||
* Specify the icu rules in the *ICU Rules* field as additional collation
|
||||
rules to customize the behavior of the default collation of this database.
|
||||
This option is available from v16 and above.
|
||||
* Select the builtin locale from the drop-down listbox in the *Builtin Locale* if the
|
||||
builtin locale provider is used. This option is available from v17 and above.
|
||||
* Specify a connection limit in the *Connection Limit* field to configure the
|
||||
maximum number of connection requests. The default value (*-1*) allows
|
||||
unlimited connections to the database.
|
||||
* If the *templates?* is set to true, then database will be a template database.
|
||||
|
||||
Click the *Security* tab to continue.
|
||||
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
.. _dbms_job:
|
||||
|
||||
*****************
|
||||
`DBMS Job`:index:
|
||||
*****************
|
||||
|
||||
Use the *DBMS Job* dialog to create a DBMS Job.
|
||||
|
||||
.. image:: images/dbms_job_general.png
|
||||
:alt: DBMS Job dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to create job:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the job. The name will
|
||||
be displayed in the *pgAdmin* object explorer.
|
||||
* Use the *Enabled?* switch to indicate that job should be enabled or disabled.
|
||||
* Use the *Job Type* field to select the type of the job. Type could be SELF-CONTAINED or PRE-DEFINED.
|
||||
If the Job Type is Self-Contained you need to specify the action and repeat interval in the Action and Repeat tabs respectively.
|
||||
If the Job Type is Pre-Defined you need to specify the existing Program and Schedule names in the Pre-Defined tab.
|
||||
* Store notes about the job in the *Comment* field.
|
||||
|
||||
Click the *Action* tab to continue.
|
||||
|
||||
.. image:: images/dbms_job_action.png
|
||||
:alt: DBMS Job dialog action tab
|
||||
:align: center
|
||||
|
||||
Use the *Action* tab to select the action for the job. This tab is only enabled when the job type is 'SELF-CONTAINED'.
|
||||
|
||||
* Use the *Type* field to select the type of the job. Type could be PLSQL BLOCK or STORED PROCEDURE.
|
||||
* Use the *Procedure* field to select an existing procedure that executes when the job is invoked.
|
||||
* *Number of Arguments* field is read-only and indicates the quantity of arguments necessary for the chosen procedure.
|
||||
|
||||
Click the *Code* tab to continue.
|
||||
|
||||
.. image:: images/dbms_job_code.png
|
||||
:alt: DBMS Job dialog code tab
|
||||
:align: center
|
||||
|
||||
* Use the *Code* field to write the code that executes when the job is invoked.
|
||||
This tab is only enabled when the job type is 'SELF-CONTAINED' and type of the action is set to 'PLSQL BLOCK'.
|
||||
|
||||
|
||||
Click the *Arguments* tab to continue.
|
||||
|
||||
.. image:: images/dbms_job_arguments.png
|
||||
:alt: DBMS Job dialog arguments tab
|
||||
:align: center
|
||||
|
||||
* *Arguments* tab outlines the arguments required by the selected procedure in the 'Action' tab. This tab is only enabled when the job type is 'SELF-CONTAINED'.
|
||||
|
||||
|
||||
Click the *Repeat* tab to continue.
|
||||
|
||||
.. image:: images/dbms_job_repeat.png
|
||||
:alt: DBMS Job dialog repeat tab
|
||||
:align: center
|
||||
|
||||
Use the *Repeat* tab to select the repeat interval for the job. This tab is only enabled when the job type is 'SELF-CONTAINED'.
|
||||
|
||||
* Use the calendar selector in the *Start* field to specify the starting date
|
||||
and time for the job.
|
||||
* Use the calendar selector in the *End* field to specify the ending date and
|
||||
time for the job.
|
||||
* Use the *Frequency* field to select the frequency. Frequency is one of the following:
|
||||
YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY.
|
||||
* Use the *Date* field to select the date on which job will execute.Date is YYYYMMDD.
|
||||
* Use the *Months* field to select the months in which the job will execute.
|
||||
* Use the *Week Days* field to select the days on which the job will execute.
|
||||
* Use the *Month Days* field to select the numeric days on which the job will
|
||||
execute.
|
||||
* Use the *Hours* field to select the hour at which the job will execute.
|
||||
* Use the *Minutes* field to select the minute at which the job will execute.
|
||||
|
||||
Click the *Pre-Defined* tab to continue.
|
||||
|
||||
.. image:: images/dbms_job_predefined.png
|
||||
:alt: DBMS Job dialog predefined tab
|
||||
:align: center
|
||||
|
||||
Use the *Pre-Defined* tab to select the existing program and schedule to create the job.
|
||||
This tab is only enabled when the job type is 'PRE-DEFINED'.
|
||||
|
||||
* Use the *Program Name* field to select the existing program.
|
||||
* Use the *Schedule Name* field to select an existing schedule.
|
||||
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *DBMS Job* dialog generate a SQL command (see an example below).
|
||||
Use the *SQL* tab for review; revisit or switch tabs to make any changes to the
|
||||
SQL command.
|
||||
|
||||
**Example**
|
||||
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *DBMS Job* dialog:
|
||||
|
||||
.. image:: images/dbms_job_sql.png
|
||||
:alt: DBMS Job dialog sql tab
|
||||
:align: center
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Help* button (?) to access dialog help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -0,0 +1,45 @@
|
||||
.. _dbms_job_scheduler:
|
||||
|
||||
********************************
|
||||
`Using EDB Job Scheduler`:index:
|
||||
********************************
|
||||
|
||||
In the past versions of EPAS, DBMS_SCHEDULER or DBMS_JOBS required the configuration
|
||||
of pgAgent, an essential service for their functionality. Maintaining pgAgent in a
|
||||
production environment is cumbersome. The need for correct configuration, regular updates,
|
||||
and ensuring the service’s health added complexity.
|
||||
|
||||
EPAS 16 revolutionizes job scheduling by eliminating the need for the pgAgent component.
|
||||
The new version introduces EDB Job Scheduler which is an extension that runs the job scheduler
|
||||
as a background process for the DBMS_SCHEDULER and DBMS_JOB packages.
|
||||
|
||||
The EDB Job Scheduler has a scheduler process that starts when the database cluster starts.
|
||||
To start the scheduler process, load the EDB Job Scheduler extension using the **shared_preload_libraries**
|
||||
parameter. After you load the extension, create the extension **'edb_job_scheduler'** and **'dbms_scheduler'** using
|
||||
the CREATE EXTENSION command. The database in which you're creating the extension must be listed in the
|
||||
**edb_job_scheduler.database_list** parameter.
|
||||
|
||||
Instructions for configuring the EDB Job Scheduler can be found in the
|
||||
`Configuring EDB Job Scheduler <https://www.enterprisedb.com/docs/pg_extensions/edb_job_scheduler/configuring/>`_.
|
||||
|
||||
.. image:: images/dbms_job_scheduler.png
|
||||
:alt: DBMS Job Scheduler Object Browser
|
||||
:align: center
|
||||
|
||||
Check the status of all the jobs
|
||||
********************************
|
||||
|
||||
To check the running status of all the jobs select the 'DBMS Job Scheduler' collection node from the object
|
||||
explorer and select the Properties tab.
|
||||
|
||||
.. image:: images/dbms_job_details.png
|
||||
:alt: DBMS Job Details
|
||||
:align: center
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
dbms_job
|
||||
dbms_program
|
||||
dbms_schedule
|
||||
@@ -0,0 +1,71 @@
|
||||
.. _dbms_program:
|
||||
|
||||
*********************
|
||||
`DBMS Program`:index:
|
||||
*********************
|
||||
|
||||
Use the *DBMS Program* dialog to create a DBMS Program.
|
||||
|
||||
.. image:: images/dbms_program_general.png
|
||||
:alt: DBMS Program dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to create program:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the program. The name will
|
||||
be displayed in the *pgAdmin* object explorer.
|
||||
* Use the *Enabled?* switch to indicate that program should be enabled or disabled.
|
||||
* Store notes about the program in the *Comment* field.
|
||||
|
||||
Click the *Action* tab to continue.
|
||||
|
||||
.. image:: images/dbms_program_action.png
|
||||
:alt: DBMS Program dialog action tab
|
||||
:align: center
|
||||
|
||||
Use the *Action* tab to select the action for the program:
|
||||
|
||||
* Use the *Type* field to select the type of the program. Type could be PLSQL BLOCK or STORED PROCEDURE.
|
||||
* Use the *Procedure* field to select an existing procedure that executes when the program is invoked.
|
||||
* *Number of Arguments* field is read-only and indicates the quantity of arguments necessary for the chosen procedure.
|
||||
|
||||
Click the *Code* tab to continue.
|
||||
|
||||
.. image:: images/dbms_program_code.png
|
||||
:alt: DBMS Program dialog code tab
|
||||
:align: center
|
||||
|
||||
* Use the *Code* field to write the code that executes when the program is invoked.
|
||||
This tab is only enabled when the type of the program is set to 'PLSQL BLOCK'.
|
||||
|
||||
|
||||
Click the *Arguments* tab to continue.
|
||||
|
||||
.. image:: images/dbms_program_arguments.png
|
||||
:alt: DBMS Program dialog arguments tab
|
||||
:align: center
|
||||
|
||||
* *Arguments* tab is a read-only section that outlines the arguments required by the selected procedure in the 'Action' tab.
|
||||
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *DBMS Program* dialog generate a SQL command (see an example below).
|
||||
Use the *SQL* tab for review; revisit or switch tabs to make any changes to the
|
||||
SQL command.
|
||||
|
||||
**Example**
|
||||
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *DBMS Program* dialog:
|
||||
|
||||
.. image:: images/dbms_program_sql.png
|
||||
:alt: DBMS Program dialog sql tab
|
||||
:align: center
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Help* button (?) to access dialog help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
.. _dbms_schedule:
|
||||
|
||||
**********************
|
||||
`DBMS Schedule`:index:
|
||||
**********************
|
||||
|
||||
Use the *DBMS Schedule* dialog to create a DBMS Schedule.
|
||||
|
||||
.. image:: images/dbms_schedule_general.png
|
||||
:alt: DBMS Schedule dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to create schedule:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the schedule. The name will
|
||||
be displayed in the *pgAdmin* object explorer.
|
||||
* Store notes about the schedule in the *Comment* field.
|
||||
|
||||
Click the *Repeat* tab to continue.
|
||||
|
||||
.. image:: images/dbms_schedule_repeat.png
|
||||
:alt: DBMS Schedule dialog repeat tab
|
||||
:align: center
|
||||
|
||||
Use the *Repeat* tab to select the repeat interval for the schedule:
|
||||
|
||||
* Use the calendar selector in the *Start* field to specify the starting date
|
||||
and time for the schedule.
|
||||
* Use the calendar selector in the *End* field to specify the ending date and
|
||||
time for the schedule.
|
||||
* Use the *Frequency* field to select the frequency. Frequency is one of the following:
|
||||
YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY.
|
||||
* Use the *Date* field to select the date on which schedule will execute.Date is YYYYMMDD.
|
||||
* Use the *Months* field to select the months in which the schedule will execute.
|
||||
* Use the *Week Days* field to select the days on which the schedule will execute.
|
||||
* Use the *Month Days* field to select the numeric days on which the schedule will
|
||||
execute.
|
||||
* Use the *Hours* field to select the hour at which the schedule will execute.
|
||||
* Use the *Minutes* field to select the minute at which the schedule will execute.
|
||||
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *DBMS Schedule* dialog generate a SQL command (see an example below).
|
||||
Use the *SQL* tab for review; revisit or switch tabs to make any changes to the
|
||||
SQL command.
|
||||
|
||||
**Example**
|
||||
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *DBMS Schedule* dialog:
|
||||
|
||||
.. image:: images/dbms_schedule_sql.png
|
||||
:alt: DBMS Schedule dialog sql tab
|
||||
:align: center
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Help* button (?) to access dialog help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -61,6 +61,7 @@ values required by the program:
|
||||
|
||||
.. image:: images/debug_params.png
|
||||
:alt: Debugger parameter dialog
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Debugger* dialog to provide a value for each parameter:
|
||||
|
||||
@@ -100,23 +101,29 @@ The toolbar options are:
|
||||
:alt: Debugger navigation toolbar
|
||||
:align: center
|
||||
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+
|
||||
| Option | Action |
|
||||
+=========================+===========================================================================================================+
|
||||
| *Step into* | Click the *Step into* icon to execute the currently highlighted line of code. |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+
|
||||
| *Step over* | Click the *Step over* icon to execute a line of code, stepping over any sub-functions invoked by the code.|
|
||||
| | The sub-function executes, but is not debugged unless it contains a breakpoint. |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+
|
||||
| *Continue/Start* | Click the *Continue/Start* icon to execute the highlighted code, and continue until the program |
|
||||
| | encounters a breakpoint or completes. |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+
|
||||
| *Toggle breakpoint* | Use the *Toggle breakpoint* icon to enable or disable a breakpoint (without removing the breakpoint). |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+
|
||||
| *Clear all breakpoints* | Click the *Clear all breakpoints* icon to remove all breakpoints from the program. |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+
|
||||
| *Stop* | Click the *Stop* icon to halt the execution of a program. |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 4 1
|
||||
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------------------+
|
||||
| Option | Action | Shortcut |
|
||||
+=========================+===========================================================================================================+========================+
|
||||
| *Step into* | Click the *Step into* icon to execute the currently highlighted line of code. | Option/Alt + Shift + I |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------------------+
|
||||
| *Step over* | Click the *Step over* icon to execute a line of code, stepping over any sub-functions invoked by the code.| Option/Alt + Shift + O |
|
||||
| | The sub-function executes, but is not debugged unless it contains a breakpoint. | |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------------------+
|
||||
| *Continue/Start* | Click the *Continue/Start* icon to execute the highlighted code, and continue until the program | Option/Alt + Shift + C |
|
||||
| | encounters a breakpoint or completes. | |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------------------+
|
||||
| *Toggle breakpoint* | Use the *Toggle breakpoint* icon to enable or disable a breakpoint (without removing the breakpoint). | Option/Alt + Shift + T |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------------------+
|
||||
| *Clear all breakpoints* | Click the *Clear all breakpoints* icon to remove all breakpoints from the program. | Option/Alt + Shift + X |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------------------+
|
||||
| *Stop* | Click the *Stop* icon to halt the execution of a program. | Option/Alt + Shift + S |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------------------+
|
||||
| *Help* | Click the *Help* icon to open debugger documentation. | |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------------------+
|
||||
|
||||
The top panel of the debugger window displays the program body; click in the
|
||||
grey margin next to a line number to add a breakpoint. The highlighted line in
|
||||
|
||||
@@ -17,4 +17,3 @@ will provide detailed information about creating a custom deployment.
|
||||
desktop_deployment
|
||||
server_deployment
|
||||
container_deployment
|
||||
cloud_deployment
|
||||
@@ -19,7 +19,7 @@ pgAdmin server and opens a window to render the user interface.
|
||||
.. seealso:: For detailed instructions on building and configuring pgAdmin from
|
||||
scratch, please see the README file in the top level directory of the source code.
|
||||
For convenience, you can find the latest version of the file
|
||||
`here <https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=blob;f=README.md>`_,
|
||||
`here <https://github.com/pgadmin-org/pgadmin4/blob/master/README.md>`_,
|
||||
but be aware that this may differ from the version included with the source code
|
||||
for a specific version of pgAdmin.
|
||||
|
||||
@@ -36,43 +36,34 @@ See :ref:`config_py` for more information on configuration settings.
|
||||
Desktop Runtime Standalone Application
|
||||
======================================
|
||||
|
||||
The Desktop Runtime is based on `NWjs <https://nwjs.io/>`_ which integrates a
|
||||
The Desktop Runtime is based on `Electron <https://www.electronjs.org/>`_ which integrates a
|
||||
browser and the Python server creating a standalone application.
|
||||
|
||||
.. image:: images/runtime_standalone.png
|
||||
:alt: Runtime Standalone
|
||||
:align: center
|
||||
|
||||
Runtime Menu
|
||||
------------
|
||||
Runtime Menu Items
|
||||
------------------
|
||||
|
||||
.. image:: images/runtime_menu.png
|
||||
:alt: Runtime Menu
|
||||
:align: center
|
||||
|
||||
Use the *File Menu* to access the *Runtime Menu*:
|
||||
Use the *File Menu* to access the runtime menu items:
|
||||
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| Option | Action |
|
||||
+=========================+=========================================================================================================+
|
||||
| *Configure...* | Click to open configuration dialog to configure fixed port, port number and connection timeout. |
|
||||
| *View logs...* | Click to open the view log dialog to view the pgAdmin 4 logs. |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| *View log...* | Click to open the view log dialog to view the pgAdmin 4 logs. |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| *Enter Full Screen* | Click to enter/exit the full screen mode. Keyboard Shortcuts: OSX (Cmd + Ctrl + F), Other OS (F10). |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| *Actual Size* | Click to change the window size to it original size. Keyboard Shortcuts: OSX (Cmd + 0), |
|
||||
| | Other OS (Ctrl + 0). |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| *Zoom In* | Click to increase the zoom level. Keyboard Shortcuts: OSX (Cmd + +), Other OS (Ctrl + +). |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| *Zoom Out* | Click to decrease the zoom level. Keyboard Shortcuts: OSX (Cmd + -), Other OS (Ctrl + -). |
|
||||
| *Configure runtime...* | Click to open configuration dialog to configure fixed port, port number and connection timeout. |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Configuration Dialog
|
||||
--------------------
|
||||
|
||||
Use the *Runtime Menu* to access the *Configuration* dialog:
|
||||
Use the *Configure runtime...* option to access the *Configuration* dialog:
|
||||
|
||||
.. image:: images/runtime_configuration.png
|
||||
:alt: Runtime Configuration
|
||||
@@ -101,7 +92,7 @@ Timeout*, and 'Open Documentation in Default Browser?' configuration parameters:
|
||||
Log dialog
|
||||
----------
|
||||
|
||||
Use the *Runtime Menu* to access the *Log* dialog:
|
||||
Use the *File Menu* to access the *View Logs* dialog:
|
||||
|
||||
.. image:: images/runtime_view_log.png
|
||||
:alt: Runtime View Log
|
||||
@@ -137,3 +128,10 @@ The configuration settings are stored in *runtime_config.json* file, which
|
||||
will be available on Unix systems (~/.local/share/pgadmin/),
|
||||
on Mac OS X (~/Library/Preferences/pgadmin),
|
||||
and on Windows (%APPDATA%/pgadmin).
|
||||
|
||||
For details on the auto-update system for the desktop application, see
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
auto_update_desktop_app
|
||||
@@ -0,0 +1,87 @@
|
||||
.. _directory_dialog:
|
||||
|
||||
*************************
|
||||
`Directory Dialog`:index:
|
||||
*************************
|
||||
|
||||
Use the Directory dialog to create an alias for a file system directory path.
|
||||
To create directories, you must have the CREATE ANY DIRECTORY system privilege.
|
||||
When you create a directory, you are automatically granted READ and WRITE privileges
|
||||
on the directory, and you can grant READ and WRITE privileges to other users and roles.
|
||||
The superuser can also grant these privileges to other users and roles.
|
||||
|
||||
Please note that directories are supported when connected to EDB Postgres Advanced Server.
|
||||
For more information about using directories, please see the EDB Postgres Advanced Server Guide, available at:
|
||||
|
||||
https://www.enterprisedb.com/docs/epas/latest/epas_compat_sql/
|
||||
|
||||
|
||||
The *Directory* dialog organizes the definition of a directory through the
|
||||
following tabs: *General*, *Definition*, *Security*, and *SQL*.
|
||||
The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
|
||||
.. image:: images/directory_general.png
|
||||
:alt: Directory general tab
|
||||
:align: center
|
||||
|
||||
Use the fields on the *General* tab to specify directory attributes:
|
||||
|
||||
* Use the *Name* field to add a directory alias name. This name will be displayed in the object explorer.
|
||||
* Select the owner of the directory from the drop-down listbox in the *Owner*
|
||||
field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/directory_definition.png
|
||||
:alt: Directory dialog definition tab
|
||||
:align: center
|
||||
|
||||
* Use the *Location* field to specify a fully qualified directory path represented
|
||||
by the alias name. The CREATE DIRECTORY command doesn't create the operating system directory.
|
||||
The physical directory must be created independently using operating system commands.
|
||||
|
||||
Click the *Security* tab to continue.
|
||||
|
||||
.. image:: images/directory_security.png
|
||||
:alt: Directory dialog security tab
|
||||
:align: center
|
||||
|
||||
NOTE:- This *Security* tab will be only available for EPAS 17.
|
||||
|
||||
Use the *Security* tab to assign privileges for the directory.
|
||||
|
||||
Use the *Privileges* panel to assign security privileges. Click the *Add* icon
|
||||
(+) to assign a set of privileges:
|
||||
|
||||
* Select the name of the role from the drop-down listbox in the *Grantee* field.
|
||||
* The current user, who is the default grantor for granting the privilege, is displayed in the *Grantor* field.
|
||||
* Click inside the *Privileges* field. Check the boxes to the left of one or
|
||||
more privileges to grant the selected privileges to the specified user.
|
||||
|
||||
Click the *Add* icon to assign additional sets of privileges; to discard a
|
||||
privilege, click the trash icon to the left of the row and confirm deletion in
|
||||
the *Delete Row* popup.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Directory* dialog generate a SQL command (see an example
|
||||
below). Use the *SQL* tab for review; revisit or switch tabs to make any changes
|
||||
to the SQL command.
|
||||
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Directory* dialog:
|
||||
|
||||
.. image:: images/directory_sql.png
|
||||
:alt: Directory dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a directory named *test1*. It has a
|
||||
*location* value equal to */home/test_dir*.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -5,9 +5,9 @@
|
||||
`View/Edit Data`:index:
|
||||
***********************
|
||||
|
||||
To view or modify data, right click on a table or view name in the *Browser*
|
||||
tree control. When the context menu opens, use the *View/Edit Data* menu to
|
||||
specify the number of rows you would like to display in the editor panel.
|
||||
To view or modify data, right click on a table or view name in the
|
||||
*Object Explorer*. When the context menu opens, use the *View/Edit Data* menu
|
||||
to specify the number of rows you would like to display in the editor panel.
|
||||
|
||||
.. image:: images/editgrid.png
|
||||
:alt: Edit grid window
|
||||
@@ -212,14 +212,29 @@ To add new column(s) in data sorting grid, click on the [+] icon.
|
||||
|
||||
* Use the drop-down *Column* to select the column you want to sort.
|
||||
* Use the drop-down *Order* to select the sort order for the column.
|
||||
* Use the drop-down *NULLs* to select the NULL values order for the column.
|
||||
|
||||
To delete a row from the grid, click the trash icon.
|
||||
|
||||
* Click the *Help* button (?) to access online help.
|
||||
* Click the *Ok* button to save work.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Close* button to discard current changes and close the dialog.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
viewdata_filter
|
||||
viewdata_filter
|
||||
|
||||
|
||||
|
||||
Promote View/Edit Data to Query Tool
|
||||
************************************
|
||||
|
||||
A View/Edit Data tab can be converted to a Query Tool Tab just by editing the query. Once you start editing, it will ask if you really want to move away from View/Edit.
|
||||
|
||||
.. image:: images/promote_view_edit_data_warning.png
|
||||
:alt: Promote View/Edit Data tab to Query Tool tab warning
|
||||
:align: center
|
||||
|
||||
You can disable the dialog by selecting the "Don't Ask again" checkbox. If you wish to resume the confirmation dialog, you can do it from "Prefrences -> Query Tool -> Editor -> Show View/Edit Data Promotion Warning?"
|
||||
|
||||
Once you chose to continue, you won't be able to use the features of View/Edit mode like the filter and sorting options, limit, etc. It is a one-way conversion. It will be a query tool now.
|
||||
@@ -12,13 +12,20 @@ The Entity-Relationship Diagram (ERD) tool is a database design tool that provid
|
||||
* Save the diagram and open it later to continue working on it.
|
||||
* Generate ready to run SQL from the database design.
|
||||
* Generate the database diagram for an existing database.
|
||||
* Drag and drop tables from browser tree to the diagram.
|
||||
* Drag and drop tables from object explorer to the diagram.
|
||||
|
||||
.. image:: images/erd_tool.png
|
||||
:alt: ERD tool window
|
||||
:align: center
|
||||
|
||||
You can open multiple copies of the ERD tool in individual tabs simultaneously. To close a copy of the ERD tool, click the *X* in the upper-right hand corner of the tab bar.
|
||||
You can open multiple copies of the ERD tool in individual tabs simultaneously.
|
||||
You can also generate an ERD from a database, schema or a table.
|
||||
|
||||
* The ERD for database will fetch all the tables from all the schemas of the database and plot them with foreign key links.
|
||||
* The ERD for schema will fetch all the tables from a schema and plot them with foreign key links. If any table refers to a table in another
|
||||
schema, then that link/foreign key will be removed.
|
||||
* The ERD for table will fetch all the tables linked directly or indirectly to mentioned table. You can change the depth of traversal from :ref:`Preferences <preferences>`.
|
||||
|
||||
|
||||
Toolbar
|
||||
*******
|
||||
@@ -41,13 +48,13 @@ File Options
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+======================+===================================================================================================+================+
|
||||
| *Open File* | Click the *Open File* icon to load a previously saved diagram. | Ctrl + O |
|
||||
| *Open File* | Click the *Open File* icon to load a previously saved diagram. | Cmd/Ctrl + O |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Save* | Click the *Save* icon to perform a quick-save of a previously saved diagram, or to save the | Ctrl + S |
|
||||
| *Save* | Click the *Save* icon to perform a quick-save of a previously saved diagram, or to save the | Cmd/Ctrl + S |
|
||||
| | diagram to a file. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Save as* | Click the *Save As* to open a new browser dialog and specify a new location to save the diagram. | Ctrl + Shift + |
|
||||
| | | S |
|
||||
| | You need to click the down arrow beside the save button to see *Save As*. | S |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Export Options
|
||||
@@ -60,11 +67,13 @@ Export Options
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+======================+===================================================================================================+================+
|
||||
| *Generate SQL* | Click the *Generate SQL* icon to generate the DDL SQL for the diagram and open a query tool | Option + Ctrl +|
|
||||
| | with the generated SQL ready for execution. | S |
|
||||
| *Generate SQL* | Click the *Generate SQL* icon to generate the DDL SQL for the diagram and open a query tool | Option/Alt + |
|
||||
| | with the generated SQL ready for execution. | Ctrl + S |
|
||||
| | You can select the option *With DROP Table* if you wish to have DROP Table DDL statements before | |
|
||||
| | each CREATE Table DDL. You can see the option by clicking the down arrow beside the SQL button. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Download image* | Click the *Download image* icon to save the ERD diagram in a image formate | Option + Ctrl +|
|
||||
| | | I |
|
||||
| *Download image* | Click the *Download image* icon to save the ERD diagram in a image formate | Option/Alt + |
|
||||
| | | Ctrl + I |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Editing Options
|
||||
@@ -109,6 +118,23 @@ Table Relationship Options
|
||||
| | tables and link them. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Node Color Options
|
||||
**************************
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 5
|
||||
|
||||
+----------------------+----------------------------------------------------------------------------------------------------------+
|
||||
| Icon | Behavior |
|
||||
+======================+==========================================================================================================+
|
||||
| *Fill Color* | Use Fill Color to change the background color of a table node. This is helpful if you want to |
|
||||
| | identify a of group tables. Once set, all the newly added tables will take the same color. |
|
||||
+----------------------+----------------------------------------------------------------------------------------------------------+
|
||||
| *Text Color* | Use Text Color to change the text color of a table node based on the fill color to make text |
|
||||
| | easily readable. |
|
||||
+----------------------+----------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Utility Options
|
||||
***************
|
||||
|
||||
@@ -116,18 +142,21 @@ Utility Options
|
||||
:class: longtable
|
||||
:widths: 1 4 1
|
||||
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+======================+===================================================================================================+================+
|
||||
| *Add/Edit note* | Click this button to make notes on tables nodes while designing the database. | Option/Alt + |
|
||||
| | | Ctrl + N |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Auto align* | Click this button to auto align all tables and links to make it look more cleaner. | Option/Alt + |
|
||||
| | | Ctrl + L |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Show details* | Click this button to toggle the column details visibility. It allows you to show few or more | Option/Alt + |
|
||||
| | column details. | Shift + D |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
+-------------------------+------------------------------------------------------------------------------------------------+----------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+=========================+================================================================================================+================+
|
||||
| *Add/Edit note* | Click this button to make notes on tables nodes while designing the database. | Option/Alt + |
|
||||
| | | Ctrl + N |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Auto align* | Click this button to auto align all tables and links to make it look more cleaner. | Option/Alt + |
|
||||
| | | Ctrl + L |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Show details* | Click this button to toggle the column details visibility. It allows you to show few or more | Option/Alt + |
|
||||
| | column details. | Shift + D |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Cardinality Notation* | Change the cardinality notation format used to present relationship links. Options available | |
|
||||
| | are - Crow's Foot Notation and Chen Notation. | |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Zoom Options
|
||||
************
|
||||
@@ -178,6 +207,22 @@ The table node shows table details in a graphical representation:
|
||||
* you can click on the node and drag to move on the canvas.
|
||||
* Upon double click on the table node or by clicking the edit button from the toolbar, the table dialog opens where you can change the table details. Refer :ref:`table dialog <table_dialog>` for information on different fields.
|
||||
|
||||
The One to One Link Dialog
|
||||
***************************
|
||||
|
||||
.. image:: images/erd_11_dialog.png
|
||||
:alt: ERD tool 1-1 dialog
|
||||
:align: center
|
||||
|
||||
The one to one link dialog allows you to:
|
||||
|
||||
* Add a one to one relationship between two tables.
|
||||
* *Local Table* is the table that references a table and has the *one* end point.
|
||||
* *Local Column* the column that references.
|
||||
* *Select Constraint* To implement one to one relationship, the *Local Column* must have primaty key or unique constraint. The default is a unique constraint. Please note that this field is visible only when the selected *Local Column* does not have either of the mentioned constraints.
|
||||
* *Referenced Table* is the table that is being referred and has the *one* end point.
|
||||
* *Referenced Column* the column that is being referred.
|
||||
|
||||
The One to Many Link Dialog
|
||||
***************************
|
||||
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
.. _export_data_using_query:
|
||||
|
||||
***************************************
|
||||
`Export Data Using Query Dialog`:index:
|
||||
***************************************
|
||||
|
||||
Use the *Export Data Using Query* dialog to copy data to a file.
|
||||
|
||||
The *Export Data Using Query* dialog organizes the export of data through the
|
||||
*General*, *Options* and *Query* tabs.
|
||||
|
||||
.. image:: images/export_query_general.png
|
||||
:alt: Export data using query dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to specify export preferences:
|
||||
|
||||
* Enter the name of the target file in the *Filename* field.
|
||||
Optionally, select the *Browse* icon (ellipsis) to the right to navigate
|
||||
into a directory and select a file.
|
||||
|
||||
* Use the drop-down listbox in the *Format* field to specify the file type.
|
||||
Select:
|
||||
|
||||
* *binary* for a .bin file.
|
||||
* *csv* for a .csv file.
|
||||
* *text* for a .txt file.
|
||||
|
||||
* Use the drop-down listbox in the *Encoding* field to specify the type of
|
||||
character encoding.
|
||||
|
||||
.. image:: images/export_query_options.png
|
||||
:alt: Export data using query dialog options tab
|
||||
:align: center
|
||||
|
||||
* Use the fields in the *Options* tab to specify additional information:
|
||||
|
||||
* Move the *Header* switch to the *Yes* position to include the table header
|
||||
with the data rows. If you include the table header, the first row of the
|
||||
file will contain the column names.
|
||||
* If you are exporting data, specify the delimiter that will separate the
|
||||
columns within the target file in the *Delimiter* field. The separating
|
||||
character can be a colon, semicolon, a vertical bar, or a tab.
|
||||
* Specify a quoting character used in the *Quote* field. Quoting can be
|
||||
applied to string columns only (i.e. numeric columns will not be quoted)
|
||||
or all columns regardless of data type. The character used for quoting can
|
||||
be a single quote or a double quote.
|
||||
* Specify a character that should appear before a data character that matches
|
||||
the *QUOTE* value in the *Escape* field.
|
||||
* Use the *NULL String* field to specify a string that will represent a null
|
||||
value within the source or target file.
|
||||
|
||||
Click the *Query* tab to continue.
|
||||
|
||||
.. image:: images/export_query.png
|
||||
:alt: Export data using query dialog query tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Query* tab to write the query that will be exported:
|
||||
|
||||
* Use the *Export Data Query* field to specifies A SELECT, VALUES, INSERT, UPDATE,
|
||||
DELETE, or MERGE command whose results are to be copied .
|
||||
|
||||
* Use *Force Quote columns* field to forces quoting to be used for all non-NULL
|
||||
values in each specified column. NULL output is never quoted. This is a creatable
|
||||
select control. If you would like to quote all columns then provide only '*' in
|
||||
the field.
|
||||
|
||||
After completing the *Export Data Using Query* dialog, click the *OK* button to
|
||||
perform the export. pgAdmin will notify you when the background
|
||||
process completes:
|
||||
|
||||
.. image:: images/export_query_complete.png
|
||||
:alt: Export data using query completion notification
|
||||
:align: center
|
||||
|
||||
|
||||
Use the *View Processes* button on the notification to open the *Process
|
||||
Watcher* and review detailed information about the execution of the command
|
||||
that performed the export:
|
||||
|
||||
Use the **End Process** button to end the Export process.
|
||||
|
||||
.. image:: images/export_query_pw.png
|
||||
:alt: Export data using query process watcher
|
||||
:align: center
|
||||
|
||||
.. note:: If you are running *pgAdmin* in *Server Mode* you can click on the |sm_icon| icon in the process watcher window to open the file location in the Storage Manager. You can use the :ref:`Storage Manager <storage_manager>` to download the exported file on the client machine .
|
||||
|
||||
|
||||
.. |sm_icon| image:: images/sm_icon.png
|
||||
@@ -23,6 +23,9 @@ Use the fields in the *General* tab to identify an extension:
|
||||
|
||||
* Use the drop-down listbox in the *Name* field to select the extension. Each
|
||||
extension must have a unique name.
|
||||
* Move the switch next to *Cascade?* towards right position to automatically
|
||||
install any extensions that this extension depends on that are not already
|
||||
installed.
|
||||
* Store notes about the extension in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
@@ -55,7 +58,7 @@ the *Extension* dialog:
|
||||
:align: center
|
||||
|
||||
The command creates the *adminpack* extension in the *public* schema. It is
|
||||
version *1.0* of *adminpack*.
|
||||
version *2.0* of *adminpack*.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
.. _external_database:
|
||||
|
||||
****************************************************
|
||||
`External database for pgAdmin user settings`:index:
|
||||
****************************************************
|
||||
|
||||
The user settings used by pgAdmin are stored in a SQLite database. In this
|
||||
database, many settings are stored, such as preferences, user accounts,
|
||||
auto-discovered servers, and many more.
|
||||
|
||||
As SQLite is a file-based database and it can be anywhere in the file system,
|
||||
so it is not designed to take care of failures (no HA support). Furthermore,
|
||||
it isn't designed to handle multiple connections concurrently reading/writing
|
||||
data to it. Example: In environments such as Kubernetes it may be useful to
|
||||
use an alternate backend to avoid using SQLite on non-ephemeral storage and to
|
||||
allow HA of the settings database.
|
||||
|
||||
In order to prevent this, pgAdmin now supports storing user settings in an
|
||||
external database using the new 'CONFIG_DATABASE_URI' parameter in the
|
||||
:ref:`config.py <config_py>` file.
|
||||
|
||||
Use SQLite Database
|
||||
*******************
|
||||
|
||||
In order to use SQLite Database, make sure CONFIG_DATABASE_URI parameter is
|
||||
set to an empty string like ''. By default it is set to an empty string in the
|
||||
config.py so if you would like to use SQLite database then no need to change
|
||||
anything.
|
||||
|
||||
Use External Database
|
||||
*********************
|
||||
|
||||
In order to use an external database, make sure CONFIG_DATABASE_URI parameter
|
||||
is set like "dialect+driver://username:password@host:port/database".
|
||||
|
||||
**Note** It is recommended to create the database in advance.
|
||||
|
||||
Use PostgreSQL Database
|
||||
***********************
|
||||
|
||||
Following are the formats to use PostgreSQL as an external database.
|
||||
|
||||
Basic syntax:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
postgresql://username:password@host:port/database
|
||||
|
||||
Using specific schema (It is recommended to create the schema in advance):
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
postgresql://username:password@host:port/database?options=-csearch_path=<schema name>
|
||||
|
||||
Using default pgpass path for the service account:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
postgresql://username@host:port?options=-csearch_path=<schema name>
|
||||
|
||||
Specifying pgpass file path:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
postgresql://username@host:port?passfile=<path of the pgpass file>&options=-csearch_path=<schema name>
|
||||
@@ -35,8 +35,10 @@ Click the *Definition* tab to continue.
|
||||
|
||||
Use the fields in the *Definition* tab to define the function:
|
||||
|
||||
* Move the *Custom return type?* switch to provide a user defined return type.
|
||||
* Use the drop-down listbox next to *Return type* to select the data type
|
||||
returned by the function, if any.
|
||||
returned by the function, if any. If *Custom return type?* is enabled this field
|
||||
will change to an input text field.
|
||||
* Use the drop-down listbox next to *Language* to select the implementation
|
||||
language. The default is *sql*.
|
||||
* Use the fields in the *Arguments* to define an argument. Click the *Add*
|
||||
|
||||
@@ -35,6 +35,7 @@ Mode is pre-configured for security.
|
||||
login
|
||||
mfa
|
||||
user_management
|
||||
change_ownership
|
||||
change_user_password
|
||||
restore_locked_user
|
||||
ldap
|
||||
|
||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 152 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 218 KiB |
|
Before Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 103 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 125 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 25 KiB |