Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
No files matched your search
@@ -0,0 +1,36 @@
|
||||
name: Check documentation build
|
||||
|
||||
on:
|
||||
# Triggers the workflow on push or pull request events but only for the "master" branch
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||
jobs:
|
||||
# This workflow contains a single job called "build"
|
||||
build:
|
||||
# The type of runner that the job will run on
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
# Run the tests
|
||||
- name: Install dependencies
|
||||
run: sudo apt install build-essential python3-dev libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev
|
||||
|
||||
- name: Install requirements
|
||||
run: pip install -r requirements.txt
|
||||
|
||||
- name: Install sphinx
|
||||
run: pip install sphinx
|
||||
|
||||
- name: Check the documentation
|
||||
run: make docs
|
||||
@@ -0,0 +1,36 @@
|
||||
name: Check Javascript style
|
||||
|
||||
on:
|
||||
# Triggers the workflow on push or pull request events but only for the "master" branch
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||
jobs:
|
||||
# This workflow contains a single job called "build"
|
||||
build:
|
||||
# The type of runner that the job will run on
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
# Run the tests
|
||||
- name: Install nodejs
|
||||
run: sudo apt install nodejs
|
||||
|
||||
- name: Install yarn
|
||||
run: sudo npm install --global yarn
|
||||
|
||||
- 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 style
|
||||
|
||||
on:
|
||||
# Triggers the workflow on push or pull request events but only for the "master" branch
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||
jobs:
|
||||
# This workflow contains a single job called "build"
|
||||
build:
|
||||
# The type of runner that the job will run on
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
# Run the tests
|
||||
- name: Install pycodestyle
|
||||
run: 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/
|
||||
@@ -12,9 +12,9 @@ Name Version
|
||||
---- ------- ------- ---
|
||||
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
|
||||
axios 0.21.2 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
|
||||
follow-redirects 1.15.2 MIT git@github.com:follow-redirects/follow-redirects.git
|
||||
|
||||
5 dependencies listed.
|
||||
|
||||
@@ -23,47 +23,46 @@ Python Dependencies
|
||||
|
||||
Name Version Licence URL
|
||||
---- ------- ------- ---
|
||||
Flask 2.1.1 BSD-3-Clause https://palletsprojects.com/p/flask
|
||||
Flask 2.1.3 BSD-3-Clause https://palletsprojects.com/p/flask
|
||||
Flask-Gravatar 0.5.0 BSD https://github.com/zzzsochi/Flask-Gravatar/
|
||||
Flask-Login 0.6.0 MIT https://github.com/maxcountryman/flask-login
|
||||
Flask-Login 0.6.2 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.1 BSD-3-Clause https://github.com/wtforms/flask-wtf/
|
||||
Flask-Compress 1.11 MIT https://github.com/colour-science/flask-compress
|
||||
Flask-Compress 1.12 MIT https://github.com/colour-science/flask-compress
|
||||
Flask-Paranoid 0.3.0 UNKNOWN https://github.com/miguelgrinberg/flask-paranoid
|
||||
Flask-Babel 2.0.0 BSD http://github.com/python-babel/flask-babel
|
||||
Flask-Security-Too 4.1.4 MIT https://github.com/Flask-Middleware/flask-security
|
||||
Flask-SocketIO 5.1.1 UNKNOWN https://github.com/miguelgrinberg/flask-socketio
|
||||
Flask-Security-Too 4.1.5 MIT https://github.com/Flask-Middleware/flask-security
|
||||
Flask-SocketIO 5.2.0 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
|
||||
psutil 5.9.1 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.35 MIT https://www.sqlalchemy.org
|
||||
bcrypt 3.2.0 Apache License, Version 2.0 https://github.com/pyca/bcrypt/
|
||||
SQLAlchemy 1.4.40 MIT https://www.sqlalchemy.org
|
||||
bcrypt 3.2.2 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.3 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
|
||||
httpagentparser 1.9.3 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.1.0 HPND https://python-pillow.org
|
||||
Pillow 9.2.0 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.9 MIT https://urllib3.readthedocs.io/
|
||||
Werkzeug 2.0.3 BSD-3-Clause https://palletsprojects.com/p/werkzeug/
|
||||
urllib3 1.26.12 MIT https://urllib3.readthedocs.io/
|
||||
Werkzeug 2.1.2 BSD-3-Clause https://palletsprojects.com/p/werkzeug/
|
||||
azure-mgmt-rdbms 10.1.0 MIT License https://github.com/Azure/azure-sdk-for-python
|
||||
azure-mgmt-resource 21.0.0 MIT License https://github.com/Azure/azure-sdk-for-python
|
||||
azure-mgmt-subscription 3.0.0 MIT License https://github.com/Azure/azure-sdk-for-python
|
||||
@@ -72,7 +71,7 @@ azure-identity 1.9.0
|
||||
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.
|
||||
|
||||
45 dependencies listed.
|
||||
44 dependencies listed.
|
||||
|
||||
Javascript Dependencies
|
||||
=======================
|
||||
@@ -124,6 +123,7 @@ Name Version
|
||||
@babel/preset-react 7.13.13 MIT https://github.com/babel/babel.git
|
||||
@babel/runtime 7.16.0 MIT https://github.com/babel/babel.git
|
||||
@babel/runtime 7.17.0 MIT https://github.com/babel/babel.git
|
||||
@babel/runtime 7.19.0 MIT https://github.com/babel/babel.git
|
||||
@babel/runtime 7.17.8 MIT https://github.com/babel/babel.git
|
||||
@babel/template 7.16.7 MIT https://github.com/babel/babel.git
|
||||
@babel/template 7.14.5 MIT https://github.com/babel/babel.git
|
||||
@@ -157,19 +157,20 @@ Name Version
|
||||
@nodelib/fs.scandir 2.1.5 MIT https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.scandir
|
||||
@nodelib/fs.stat 2.0.5 MIT https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.stat
|
||||
@nodelib/fs.walk 1.2.8 MIT https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.walk
|
||||
@popperjs/core 2.10.2 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
|
||||
@react-dnd/asap 5.0.2 MIT https://github.com/react-dnd/react-dnd
|
||||
@react-dnd/invariant 4.0.2 MIT https://github.com/react-dnd/react-dnd
|
||||
@react-dnd/shallowequal 4.0.2 MIT https://github.com/react-dnd/react-dnd
|
||||
@simonwep/pickr 1.8.2 MIT https://github.com/Simonwep/pickr.git
|
||||
@sindresorhus/is 0.7.0 MIT https://github.com/sindresorhus/is.git
|
||||
@socket.io/base64-arraybuffer 1.0.2 MIT https://github.com/socketio/base64-arraybuffer
|
||||
@socket.io/component-emitter 3.0.0 MIT https://github.com/socketio/emitter.git
|
||||
@szhsin/react-menu 2.3.3 MIT https://github.com/szhsin/react-menu.git
|
||||
@tippyjs/react 4.2.6 MIT git+https://github.com/atomiks/tippyjs-react.git
|
||||
@types/classnames 2.3.1 MIT Unknown
|
||||
@types/json-schema 7.0.9 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@types/minimist 1.2.2 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
|
||||
@@ -186,7 +187,6 @@ ajv 8.9.0
|
||||
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
|
||||
array-union 3.0.1 MIT https://github.com/sindresorhus/array-union.git
|
||||
@@ -201,12 +201,6 @@ babel-plugin-styled-components 1.13.3
|
||||
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
|
||||
@@ -264,6 +258,7 @@ decamelize-keys 1.1.0
|
||||
deep-diff 1.0.2 MIT git://github.com/flitbit/diff.git
|
||||
diff-arrays-of-objects 1.1.9 MIT git+https://github.com/malcolmvr/diff-arrays-of-objects.git
|
||||
dir-glob 3.0.1 MIT https://github.com/kevva/dir-glob.git
|
||||
dnd-core 16.0.1 MIT https://github.com/react-dnd/react-dnd.git
|
||||
dom-align 1.12.2 MIT git@github.com:yiminghe/dom-align.git
|
||||
dom-helpers 5.2.1 MIT git+https://github.com/react-bootstrap/dom-helpers.git
|
||||
dom-serializer 1.3.2 MIT git://github.com/cheeriojs/dom-renderer.git
|
||||
@@ -366,7 +361,6 @@ lodash.noop 2.3.0
|
||||
lodash.support 2.3.0 MIT https://github.com/lodash/lodash-cli.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
|
||||
map-obj 4.3.0 MIT https://github.com/sindresorhus/map-obj.git
|
||||
map-obj 1.0.1 MIT https://github.com/sindresorhus/map-obj.git
|
||||
@@ -385,7 +379,7 @@ ml-array-rescale 1.3.6
|
||||
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.4 MIT https://github.com/moment/moment.git
|
||||
moment-timezone 0.5.34 MIT https://github.com/moment/moment-timezone.git
|
||||
moment-timezone 0.5.37 MIT https://github.com/moment/moment-timezone.git
|
||||
ms 2.1.2 MIT https://github.com/zeit/ms.git
|
||||
nanoid 3.3.2 MIT https://github.com/ai/nanoid.git
|
||||
nanoid 3.2.0 MIT https://github.com/ai/nanoid.git
|
||||
@@ -464,7 +458,9 @@ react 17.0.2
|
||||
react-aspen 1.2.0 MIT https://github.com/neeksandhu/react-aspen.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-data-grid 7.0.0-beta.12 MIT https://github.com/adazzle/react-data-grid.git
|
||||
react-data-grid 7.0.0-beta.14 MIT https://github.com/adazzle/react-data-grid.git
|
||||
react-dnd 16.0.1 MIT https://github.com/react-dnd/react-dnd.git
|
||||
react-dnd-html5-backend 16.0.1 MIT https://github.com/react-dnd/react-dnd.git
|
||||
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
|
||||
@@ -484,6 +480,7 @@ react-window 1.8.6
|
||||
read-pkg 6.0.0 MIT https://github.com/sindresorhus/read-pkg.git
|
||||
read-pkg-up 8.0.0 MIT https://github.com/sindresorhus/read-pkg-up.git
|
||||
redent 4.0.0 MIT https://github.com/sindresorhus/redent.git
|
||||
redux 4.2.0 MIT https://github.com/reduxjs/redux.git
|
||||
regenerator-runtime 0.13.9 MIT https://github.com/facebook/regenerator/tree/master/packages/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
|
||||
@@ -499,7 +496,6 @@ select2 4.0.13
|
||||
shallowequal 1.1.0 MIT https://github.com/dashed/shallowequal.git
|
||||
shim-loader 1.0.1 MIT https://github.com/zinserjan/shim-loader
|
||||
slash 4.0.0 MIT https://github.com/sindresorhus/slash.git
|
||||
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.3.2 MIT https://github.com/socketio/socket.io-client.git
|
||||
socket.io-parser 4.1.1 MIT https://github.com/socketio/socket.io-parser.git
|
||||
@@ -521,7 +517,6 @@ text-segmentation 1.0.2
|
||||
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.5 MIT git+https://github.com/atomiks/tippyjs.git
|
||||
to-fast-properties 2.0.0 MIT https://github.com/sindresorhus/to-fast-properties.git
|
||||
to-regex-range 5.0.1 MIT https://github.com/micromatch/to-regex-range.git
|
||||
trim-newlines 4.0.2 MIT https://github.com/sindresorhus/trim-newlines.git
|
||||
@@ -620,5 +615,5 @@ tslib 2.4.0
|
||||
tslib 2.3.0 0BSD https://github.com/Microsoft/tslib.git
|
||||
type-fest 1.4.0 (MIT OR CC0-1.0) https://github.com/sindresorhus/type-fest.git
|
||||
|
||||
540 dependencies listed.
|
||||
536 dependencies listed.
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
# and clean up the web/ source code
|
||||
#########################################################################
|
||||
|
||||
FROM alpine:3.15 AS app-builder
|
||||
FROM alpine:3.16 AS app-builder
|
||||
|
||||
RUN apk add --no-cache \
|
||||
autoconf \
|
||||
@@ -60,7 +60,7 @@ RUN export CPPFLAGS="-DPNG_ARM_NEON_OPT=0" && \
|
||||
# Next, create the base environment for Python
|
||||
#########################################################################
|
||||
|
||||
FROM alpine:3.15 as env-builder
|
||||
FROM alpine:3.16 as env-builder
|
||||
|
||||
# Install dependencies
|
||||
COPY requirements.txt /
|
||||
@@ -116,8 +116,9 @@ 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:15-alpine as pg15-builder
|
||||
|
||||
FROM alpine:3.15 as tool-builder
|
||||
FROM alpine:3.16 as tool-builder
|
||||
|
||||
# Copy the PG binaries
|
||||
COPY --from=pg10-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-10/
|
||||
@@ -145,20 +146,25 @@ 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/
|
||||
|
||||
#########################################################################
|
||||
# Assemble everything into the final container.
|
||||
#########################################################################
|
||||
|
||||
FROM alpine:3.15
|
||||
FROM alpine:3.16
|
||||
|
||||
# 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=pg15-builder /usr/local/lib/libpq.so.5.15 /usr/lib/
|
||||
RUN ln -s libpq.so.5.15 /usr/lib/libpq.so.5 && \
|
||||
ln -s libpq.so.5.15 /usr/lib/libpq.so
|
||||
|
||||
WORKDIR /pgadmin4
|
||||
ENV PYTHONPATH=/pgadmin4
|
||||
@@ -196,7 +202,7 @@ RUN apk add \
|
||||
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.9 && \
|
||||
setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/python3.10 && \
|
||||
echo "pgadmin ALL = NOPASSWD: /usr/sbin/postfix start" > /etc/sudoers.d/postfix && \
|
||||
echo "pgadminr ALL = NOPASSWD: /usr/sbin/postfix start" >> /etc/sudoers.d/postfix
|
||||
|
||||
|
||||
@@ -263,15 +263,12 @@ See https://www.pgadmin.org/support/ for support options.
|
||||
|
||||
# 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:
|
||||
|
||||
@@ -203,21 +203,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
|
||||
@@ -122,24 +122,6 @@ tab to provide options related to data or pgAdmin objects that correspond to *pg
|
||||
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_server_messages.png
|
||||
:alt: Backup server 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_server_process_watcher.png
|
||||
:alt: Backup server 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
|
||||
@@ -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.
|
||||
@@ -53,6 +53,9 @@ details.
|
||||
|
||||
* 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
|
||||
@@ -89,5 +92,8 @@ button to deploy the instance on Amazon RDS.
|
||||
|
||||
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.
|
||||
@@ -73,7 +73,7 @@ details.
|
||||
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"
|
||||
|
||||
* User *Zone redundant high availability* option to specify High Availability
|
||||
* 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.
|
||||
@@ -107,6 +107,8 @@ 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
|
||||
|
||||
.. image:: images/cloud_azure_bg_process_watcher.png
|
||||
:alt: Cloud Deployment
|
||||
|
||||
@@ -36,7 +36,8 @@ details.
|
||||
|
||||
* Use the *Region* field to select the region.
|
||||
|
||||
* Use the *Database version* field to specify the PostgreSQL version to deploy.
|
||||
* 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.
|
||||
|
||||
@@ -49,10 +50,7 @@ details.
|
||||
|
||||
* Use the *Volume properties* field to specify the storage capacity.
|
||||
|
||||
* Use the *Cloud type* field to specify the private or public network.
|
||||
|
||||
* 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
|
||||
|
||||
.. image:: images/cloud_biganimal_database.png
|
||||
:alt: Cloud Deployment Provider
|
||||
@@ -74,6 +72,12 @@ Use the fields from the Database Details tab to specify the Instance details.
|
||||
|
||||
* Use the *Confirm password* field to repeat the password.
|
||||
|
||||
* Use the *High Availability* field to create the cluster with high availability, which creates a cluster
|
||||
with one primary and up to two standby replicas in different availability zones.
|
||||
|
||||
* Use the *Number of standby replicas* field to specify the standby replicas.
|
||||
|
||||
|
||||
.. image:: images/cloud_biganimal_review.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
@@ -87,5 +91,8 @@ button to deploy the instance on EDB BigAnimal.
|
||||
|
||||
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.
|
||||
@@ -208,7 +208,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
|
||||
React for generating properties/create dialog for selected node. 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`.
|
||||
|
||||
@@ -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.
|
||||
@@ -45,9 +45,10 @@ 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
|
||||
.. note:: If the SERVER_MODE or DATA_DIR settings are 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,
|
||||
STORAGE_DIR, KERBEROS_CCACHE_DIR, and AZURE_CREDENTIAL_CACHE_DIR values
|
||||
as well as they will have been set based on the default configuration or
|
||||
overridden by the runtime.
|
||||
|
||||
|
||||
@@ -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. |
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
| 6.14 | A specific version (6.14 in this case). |
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
| 6 | the latest release of a specific major version (major version 6 in this case).|
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
| snapshot | The latest nightly test build. |
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
|
||||
PostgreSQL Utilities
|
||||
********************
|
||||
|
||||
@@ -115,6 +140,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*
|
||||
|
||||
@@ -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,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.
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ File Options
|
||||
| | 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
|
||||
@@ -62,6 +62,8 @@ Export Options
|
||||
+======================+===================================================================================================+================+
|
||||
| *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 |
|
||||
| | 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 |
|
||||
@@ -109,6 +111,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
|
||||
***************
|
||||
|
||||
|
||||
@@ -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: 47 KiB After Width: | Height: | Size: 125 KiB |
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 218 KiB |
|
Before Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 131 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 153 KiB |
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 147 KiB After Width: | Height: | Size: 141 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 143 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 237 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 310 KiB After Width: | Height: | Size: 348 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 155 KiB |
|
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 177 KiB After Width: | Height: | Size: 178 KiB |
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 189 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 224 KiB |
|
After Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 148 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 431 KiB After Width: | Height: | Size: 274 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 198 KiB After Width: | Height: | Size: 336 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 167 KiB After Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 247 KiB After Width: | Height: | Size: 199 KiB |
|
Before Width: | Height: | Size: 185 KiB After Width: | Height: | Size: 148 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 130 KiB |
@@ -23,6 +23,7 @@ of database objects.
|
||||
management_basics
|
||||
backup_and_restore
|
||||
developer_tools
|
||||
processes
|
||||
pgagent
|
||||
contributions
|
||||
release_notes
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
***************************
|
||||
`Keyboard Shortcuts`:index:
|
||||
***************************
|
||||
****************************
|
||||
`Keyboard Shortcuts`:index::
|
||||
****************************
|
||||
|
||||
Keyboard shortcuts are provided in pgAdmin to allow easy access to specific
|
||||
functions. Alternate shortcuts can be configured through File > Preferences if
|
||||
desired.˝
|
||||
desired.
|
||||
|
||||
Main Browser Window
|
||||
*******************
|
||||
@@ -18,33 +18,49 @@ When using main browser window, the following keyboard shortcuts are available:
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Shortcut for all platforms | Function |
|
||||
+============================+=======================================================+
|
||||
| Alt+Shift+F | Open the File menu |
|
||||
| Shift+Ctrl+a | Add grid row |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Alt+Shift+O | Open the Object menu |
|
||||
| Shift+Alt+b | Browser tree |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Alt+Shift+L | Open the Tools menu |
|
||||
| Shift+Alt+n | Create object |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Alt+Shift+H | Open the Help menu |
|
||||
| Shift+Alt+d | Delete object |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Alt+Shift+B | Focus the browser tree |
|
||||
| Shift+Alt+m | Delete/Drop multiple objects |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Alt+Shift+[ | Move tabbed panel backward |
|
||||
| Shift+Ctrl+[ | Dialog tab backward |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Alt+Shift+] | Move tabbed panel forward |
|
||||
| Shift+Ctrl+] | Dialog tab forward |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Alt+Shift+Q | Open the Query Tool in the current database |
|
||||
| Shift+Alt+g | Direct debugging |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Alt+Shift+V | View Data in the selected table/view |
|
||||
| Shift+Alt+u | Drop Cascade multiple objects |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Alt+Shift+C | Open the context menu |
|
||||
| Shift+Alt+e | Edit object properties |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Alt+Shift+N | Create an object |
|
||||
| Shift+Alt+f | File main menu |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Alt+Shift+E | Edit object properties |
|
||||
| Shift+Alt+h | Help main menu |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Alt+Shift+D | Delete the object |
|
||||
| Shift+Alt+o | Object main menu |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Alt+Shift+G | Direct debugging |
|
||||
| Shift+Alt+c | Open context menu |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Shift+Alt+q | Open query tool |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Shift+Ctrl+f | Quick Search |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| F5 | Refresh browser tree |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Shift+Alt+s | Search objects |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Shift+Alt+[ | Tabbed panel backward |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Shift+Alt+] | Tabbed panel forward |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Shift+Alt+l | Tools main menu |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Shift+Alt+v | View data |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
|
||||
Dialog Tabs
|
||||
@@ -152,43 +168,51 @@ When using the Query Tool, the following shortcuts are available:
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Shortcut (Windows/Linux) | Shortcut (Mac) | Function |
|
||||
+==========================+====================+===================================+
|
||||
| F5 | F5 | Execute query |
|
||||
| <accesskey> + q | <accesskey> + q | Cancel query |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| F6 | F6 | Save data changes |
|
||||
| <accesskey> + t | <accesskey> + t | Connection status |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| F7 | F7 | EXPLAIN query |
|
||||
| <accesskey> + d | <accesskey> + d | Delete rows |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Shift + F7 | Shift + F7 | EXPLAIN ANALYZE query |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| F8 | F8 | Execute query to CSV file |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + o | <accesskey> + o | Open file |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + s | <accesskey> + s | Save file |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + n | <accesskey> + n | Find option drop down |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + c | <accesskey> + c | Copy row(s) |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + p | <accesskey> + p | Paste row(s) |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + d | <accesskey> + d | Delete row(s) |
|
||||
| <accesskey> + x | <accesskey> + x | Execute options |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + f | <accesskey> + f | Filter dialog |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + i | <accesskey> + i | Filter options drop down |
|
||||
| <accesskey> + i | <accesskey> + i | Filter options |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + r | <accesskey> + r | Row limit |
|
||||
| <accesskey> + n | <accesskey> + n | Find options |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + q | <accesskey> + q | Cancel query |
|
||||
| <accesskey> + o | <accesskey> + o | Open file |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + l | <accesskey> + l | Clear option drop down |
|
||||
| <accesskey> + p | <accesskey> + p | Paste rows |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + x | <accesskey> + x | Execute option drop down |
|
||||
| <accesskey> + r | <accesskey> + r | Rows limit |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + t | <accesskey> + t | Display connection status |
|
||||
| <accesskey> + s | <accesskey> + s | Save file |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + y | <accesskey> + y | Copy SQL on history panel |
|
||||
| Ctrl + Alt + L | Ctrl + option + L | Clear query |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Shift + Ctrl + m | Shift + Ctrl + m | Commit |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| F8 | F8 | Download Results |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Shift + F7 | Shift + F7 | EXPLAIN ANALYZE query |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| F7 | F7 | EXPLAIN query |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| F5 | F5 | Execute query |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Shift + Alt + ] | Shift + option + ] | Next tab |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Shift + Alt + [ | Shift + option + [ | Previous tab |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Shift + Ctrl + r | Shift + Ctrl + r | Rollback |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| F6 | F6 | Save data changes |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Shift + Alt + Tab | Shift + option +Tab| Switch Panel |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Shift + Ctrl + u | Shift + Ctrl + u | Toggle case of selected text |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
|
||||
Debugger
|
||||
@@ -203,19 +227,72 @@ When using the Debugger, the following shortcuts are available:
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Shortcut (Windows/Linux) | Shortcut (Mac) | Function |
|
||||
+==========================+====================+===================================+
|
||||
| <accesskey> + i | <accesskey> + i | Step in |
|
||||
| <accesskey> + x | <accesskey> + x | Clear all breakpoints |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + c | <accesskey> + c | Continue/Start |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + i | <accesskey> + i | Step into |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + o | <accesskey> + o | Step over |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + c | <accesskey> + c | Continue/Restart |
|
||||
| <accesskey> + s | <accesskey> + s | Stop |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + t | <accesskey> + t | Toggle breakpoint |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + x | <accesskey> + x | Clear all breakpoints |
|
||||
| Shift + Alt + q | Shift + option + q | Edit grid values |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + s | <accesskey> + s | Stop |
|
||||
| Shift + Alt + ] | Shift + option + ] | Next tab |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Alt + Shift + q | Option + Shift + q | Enter or Edit values in Grid |
|
||||
| Shift + Alt + [ | Shift + option + ] | Previous tab |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Shift + Alt + Tab | Shift + option +Tab| Switch Panel |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
|
||||
ERD Tool
|
||||
********
|
||||
|
||||
When using the ERD Tool, the following shortcuts are available:
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 2 2 3
|
||||
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Shortcut (Windows/Linux) | Shortcut (Mac) | Function |
|
||||
+==========================+====================+===================================+
|
||||
| Ctrl + Alt + a | Ctrl + option + a | Add table |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Ctrl + Alt + n | Ctrl + option + n | Add/Edit note |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Ctrl + Alt + l | Ctrl + option + l | Auto align |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Ctrl + Alt + c | Ctrl + option + c | Clone table |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Ctrl + Alt + i | Ctrl + option + i | Download image |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Ctrl + Alt + d | Ctrl + option + d | Drop table |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Ctrl + Alt + e | Ctrl + option + e | Edit table |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Ctrl + Alt + s | Ctrl + option + s | Generate SQL |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Ctrl + Alt + m | Ctrl + option + m | Many to many link |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Ctrl + Alt + o | Ctrl + option + o | One to many link |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Ctrl + o | Ctrl + o | Open project |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Ctrl + s | Ctrl + s | Save project |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Shift + Ctrl + s | Shift + Ctrl + s | Save project as |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Ctrl + Alt + t | Ctrl + option + t | Show more/fewer details |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Shift + Alt + + | Shift + option + + | Zoom in |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Shift + Alt + - | Shift + option + - | Zoom out |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Shift + Alt + f | Shift + option + f | Zoom to fit |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
|
||||
Inner Tab and Panel Navigation
|
||||
@@ -224,7 +301,7 @@ Inner Tab and Panel Navigation
|
||||
When using the Query Tool and Debugger, the following shortcuts are available
|
||||
for inner panel navigation:
|
||||
|
||||
.. table::
|
||||
.. table::I
|
||||
:class: longtable
|
||||
:widths: 2 2 3
|
||||
|
||||
@@ -251,7 +328,7 @@ default access keys for supported browsers.
|
||||
+-------------------+-------------+-------------+---------------+
|
||||
| | Windows | Linux | Mac |
|
||||
+===================+=============+=============+===============+
|
||||
| Internet Explorer | Alt | Alt | |
|
||||
| Edge | Alt | | |
|
||||
+-------------------+-------------+-------------+---------------+
|
||||
| Chrome | Alt | Alt | Ctrl + Option |
|
||||
+-------------------+-------------+-------------+---------------+
|
||||
|
||||
@@ -45,18 +45,6 @@ switch to the *No* position; by default, status messages are included.
|
||||
When you've completed the dialog, click *OK* to start the background process;
|
||||
to exit the dialog without performing maintenance operations, click *Cancel*.
|
||||
|
||||
pgAdmin will inform you when the background process completes:
|
||||
|
||||
.. image:: images/maintenance_complete.png
|
||||
:alt: Maintenance completion notification
|
||||
:align: center
|
||||
|
||||
Use the **Stop Process** button to stop the Maintenance process.
|
||||
|
||||
Use the *Click here for details* link on the notification to open the *Process
|
||||
Watcher* and review detailed information about the execution of the command that
|
||||
performed the import or export:
|
||||
|
||||
.. image:: images/maintenance_pw.png
|
||||
:alt: Maintenance process watcher
|
||||
:align: center
|
||||
pgAdmin will run the maintenance process in background. You can view all the background
|
||||
process with there running status and logs on the :ref:`Processes <processes>`
|
||||
tab
|
||||
@@ -43,13 +43,6 @@ Use the fields on the *Display* panel to specify general display preferences:
|
||||
attempt to catch browser close or refresh events and prompt before allowing
|
||||
them to continue.
|
||||
|
||||
* When the *Enable browser tree animation?* switch is set to *True*, the client
|
||||
will display the animated tree control otherwise it will be unanimated.
|
||||
|
||||
* When the *Enable dialogue/notification animation?* switch is set to *True*,
|
||||
the client will display the animated dialogues/notifications otherwise it
|
||||
will be unanimated.
|
||||
|
||||
* When the *Hide shared servers?* switch is set to *True*, the client will hide
|
||||
all the shared servers from the browser tree.
|
||||
|
||||
@@ -192,6 +185,17 @@ ERD Tool window navigation:
|
||||
:alt: Preferences dialog erd keyboard shortcuts section
|
||||
:align: center
|
||||
|
||||
Use the fields on the *Options* panel to manage ERD preferences.
|
||||
|
||||
.. image:: images/preferences_erd_options.png
|
||||
:alt: Preferences dialog erd options section
|
||||
:align: center
|
||||
|
||||
|
||||
* When the *SQL With DROP Table* switch is set to *True*, the SQL
|
||||
generated by the ERD Tool will add DROP table DDL before each CREATE
|
||||
table DDL.
|
||||
|
||||
The Graphs Node
|
||||
***************
|
||||
|
||||
@@ -231,7 +235,7 @@ Expand the *Miscellaneous* node to specify miscellaneous display preferences.
|
||||
|
||||
* Use the *Themes* drop-down listbox to select the theme for pgAdmin. You'll also get a preview just below the
|
||||
drop down. Note that, to apply the theme you need to refresh the pgAdmin page. You can also submit your
|
||||
own themes, check `here <https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=blob_plain;f=README>`_ how.
|
||||
own themes, check `here <https://github.com/pgadmin-org/pgadmin4/blob/master/README.md>`_ how.
|
||||
Currently we support Standard, Dark and High Contrast theme.
|
||||
|
||||
The Paths Node
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
.. _processes:
|
||||
|
||||
***********************
|
||||
`Processes`:index:
|
||||
***********************
|
||||
|
||||
There are certain tasks which pgAdmin runs in the background. The processes
|
||||
running in the background can be viewed in the processes tab. It shows the
|
||||
process details of Backup, Restore, Maintenance, Import/Export and Cloud instance
|
||||
creation.
|
||||
|
||||
.. image:: images/processes_main.png
|
||||
:alt: Processes Tab
|
||||
:align: center
|
||||
|
||||
The columns of the processes table shows:
|
||||
|
||||
* The *PID* of the forked OS process.
|
||||
* The *Type* of the task being performed.
|
||||
* The *Server* name for which the task is.
|
||||
* The *Object* can be a database, table, mview or anything which gives more info.
|
||||
* The *Start Time* of the process, sorted descending by default.
|
||||
* The current *Status* of the process. It can be Running, Finished, Failed, Terminated.
|
||||
* The *Time Taken* to complete. It will keep updating if it is running.
|
||||
|
||||
There are two action buttons on each row:
|
||||
|
||||
* The *Stop Process* button allows you to kill a running process.
|
||||
* The *More details* button allows you to open the process watcher which shows the
|
||||
process logs and other details.
|
||||
|
||||
You can also select the checkboxes and click on *Delete and Acknowledge* button
|
||||
on the top to clear the process info and logs.
|
||||
|
||||
Process Watcher
|
||||
*********************
|
||||
|
||||
.. image:: images/processes_details.png
|
||||
:alt: Process Watcher
|
||||
:align: center
|
||||
|
||||
|
||||
The Process Watcher logs all the activity associated with the process/task and provides
|
||||
additional information for troubleshooting
|
||||
Use the **Stop Process** button to stop the Backup process.
|
||||
|
||||
.. 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
|
||||
@@ -11,6 +11,9 @@ notes for it.
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
release_notes_6_15
|
||||
release_notes_6_14
|
||||
release_notes_6_13
|
||||
release_notes_6_12
|
||||
release_notes_6_11
|
||||
release_notes_6_10
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
************
|
||||
Version 6.13
|
||||
************
|
||||
|
||||
Release date: 2022-08-25
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v6.12.
|
||||
|
||||
Supported Database Servers
|
||||
**************************
|
||||
**PostgreSQL**: 10, 11, 12, 13 and 14
|
||||
|
||||
**EDB Advanced Server**: 10, 11, 12, 13 and 14
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #3709 <https://redmine.postgresql.org/issues/3709>`_ - Added support to show all background processes in separate panel.
|
||||
| `Issue #7387 <https://redmine.postgresql.org/issues/7387>`_ - Added support to create triggers from existing trigger functions in EPAS.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #7344 <https://redmine.postgresql.org/issues/7344>`_ - Port Role Reassign dialog to React.
|
||||
| `Issue #7345 <https://redmine.postgresql.org/issues/7345>`_ - Port User Management dialog to React.
|
||||
| `Issue #7404 <https://redmine.postgresql.org/issues/7404>`_ - Port process watcher to React.
|
||||
| `Issue #7462 <https://redmine.postgresql.org/issues/7462>`_ - Remove the SQL files for the unsupported versions of the database server.
|
||||
| `Issue #7567 <https://redmine.postgresql.org/issues/7567>`_ - Port About dialog to React.
|
||||
| `Issue #7568 <https://redmine.postgresql.org/issues/7568>`_ - Port change user password and 2FA dialog to React.
|
||||
| `Issue #7590 <https://redmine.postgresql.org/issues/7590>`_ - Port change ownership dialog to React.
|
||||
| `Issue #7595 <https://redmine.postgresql.org/issues/7595>`_ - Update the container base image to Alpine 3.16 (with Python 3.10.5).
|
||||
| `Issue #7602 <https://redmine.postgresql.org/issues/7602>`_ - Fixed improper parsing of HTTP requests in Pallets Werkzeug v2.1.0 and below (CVE-2022-29361).
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #7452 <https://redmine.postgresql.org/issues/7452>`_ - Ensure that an error is thrown if clipboard access is not provided and change the copy rows shortcut.
|
||||
| `Issue #7468 <https://redmine.postgresql.org/issues/7468>`_ - Fixed an issue where the History tab is getting blank and showing an error after some queries are executed.
|
||||
| `Issue #7481 <https://redmine.postgresql.org/issues/7481>`_ - Fixed an issue where OWNED BY was incorrectly set to NONE when adding user privileges on the sequence.
|
||||
| `Issue #7497 <https://redmine.postgresql.org/issues/7497>`_ - Fixed an issue with the error message being displayed at the right place for Azure deployments.
|
||||
| `Issue #7521 <https://redmine.postgresql.org/issues/7521>`_ - Fixed an issue where the Query Editor loses focus when saving a query (Alt+s).
|
||||
| `Issue #7527 <https://redmine.postgresql.org/issues/7527>`_ - Fixed API test cases for Postgres 14.4.
|
||||
| `Issue #7540 <https://redmine.postgresql.org/issues/7540>`_ - Ensure that rename panel should work on view/edit panels.
|
||||
| `Issue #7563 <https://redmine.postgresql.org/issues/7563>`_ - Fixed an issue where autocomplete is not working after clearing the query editor.
|
||||
| `Issue #7573 <https://redmine.postgresql.org/issues/7573>`_ - Ensure that autocomplete does not appear when navigating code using arrow keys.
|
||||
| `Issue #7575 <https://redmine.postgresql.org/issues/7575>`_ - Fixed an issue where Alt-Shift-Q didn't work after creating a new query.
|
||||
| `Issue #7579 <https://redmine.postgresql.org/issues/7579>`_ - Fixed an issue where copy and pasting a row in the results grid doesn't set the default for boolean.
|
||||
| `Issue #7586 <https://redmine.postgresql.org/issues/7586>`_ - Fixed an issue with rendering geometry when selecting a complete column.
|
||||
| `Issue #7587 <https://redmine.postgresql.org/issues/7587>`_ - Ensure that the children of information_schema and pg_catalog node should be displayed.
|
||||
| `Issue #7591 <https://redmine.postgresql.org/issues/7591>`_ - Fixed column "none" does not exist issue, while comparing schema objects.
|
||||
| `Issue #7596 <https://redmine.postgresql.org/issues/7596>`_ - Fixed an issue where schema diff did not pick up the change in RLS policy.
|
||||
| `Issue #7608 <https://redmine.postgresql.org/issues/7608>`_ - Fixed an issue where the cloud deployment wizard creates the cluster with the High Availability even if that option is not selected.
|
||||
| `Issue #7611 <https://redmine.postgresql.org/issues/7611>`_ - Ensure that schema diff maintains view ownership when view definitions are modified.
|
||||
| `Issue #7614 <https://redmine.postgresql.org/issues/7614>`_ - Fixed crypt key is missing issue when logout from the pgAdmin.
|
||||
| `Issue #7616 <https://redmine.postgresql.org/issues/7616>`_ - Ensure that the next button should be disabled if the password did not match for Azure deployment.
|
||||
| `Issue #7617 <https://redmine.postgresql.org/issues/7617>`_ - Fixed an issue where Azure cloud deployment failed.
|
||||
| `Issue #7625 <https://redmine.postgresql.org/issues/7625>`_ - Fixed Spanish translations typo.
|
||||
| `Issue #7630 <https://redmine.postgresql.org/issues/7630>`_ - Ensure that If the trigger function definition is changed, drop and recreate the trigger in the schema diff.
|
||||
| `Issue #7632 <https://redmine.postgresql.org/issues/7632>`_ - Fixed an issue where a user could not authenticate using Azure CLI on OSX.
|
||||
| `Issue #7633 <https://redmine.postgresql.org/issues/7633>`_ - Ensure that the autofocus is on the input control for the master password and server password dialogs.
|
||||
| `Issue #7641 <https://redmine.postgresql.org/issues/7641>`_ - Pin Flask-SocketIO <= v5.2.0. The latest version does not support Werkzeug in production environments.
|
||||
@@ -0,0 +1,48 @@
|
||||
************
|
||||
Version 6.14
|
||||
************
|
||||
|
||||
Release date: 2022-09-22
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v6.13.
|
||||
|
||||
Supported Database Servers
|
||||
**************************
|
||||
**PostgreSQL**: 10, 11, 12, 13 and 14
|
||||
|
||||
**EDB Advanced Server**: 10, 11, 12, 13 and 14
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #4059 <https://github.com/pgadmin-org/pgadmin4/issues/4059>`_ - Port schema diff to React. (RM #6133)
|
||||
| `Issue #4060 <https://github.com/pgadmin-org/pgadmin4/issues/4060>`_ - Remove Backgrid and Backform. (RM #6134)
|
||||
| `Issue #5035 <https://github.com/pgadmin-org/pgadmin4/issues/5035>`_ - Port the remaining components of the ERD Tool to React. (RM #7343)
|
||||
| `Issue #5120 <https://github.com/pgadmin-org/pgadmin4/issues/5120>`_ - Updated keyboard shortcut documentation. (RM #7446)
|
||||
| `Issue #5260 <https://github.com/pgadmin-org/pgadmin4/issues/5260>`_ - Remove Alertify from pgAdmin completely. (RM #7619)
|
||||
| `Issue #5263 <https://github.com/pgadmin-org/pgadmin4/issues/5263>`_ - Port search object dialog to React. (RM #7622)
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #5144 <https://github.com/pgadmin-org/pgadmin4/issues/5144>`_ - Ensure that if BigAnimal authentication is aborted, API calls should be stopped. (RM #7472)
|
||||
| `Issue #5209 <https://github.com/pgadmin-org/pgadmin4/issues/5209>`_ - Fixed an issue where pgAdmin failed to start due to bin path migration. (RM #7557)
|
||||
| `Issue #5230 <https://github.com/pgadmin-org/pgadmin4/issues/5230>`_ - Fixed an issue where backup does not work due to parameter 'preexec_fn' no longer being supported. (RM #7580)
|
||||
| `Issue #5250 <https://github.com/pgadmin-org/pgadmin4/issues/5250>`_ - Ensure that the browser tree should be refreshed after changing the ownership. (RM #7607)
|
||||
| `Issue #5274 <https://github.com/pgadmin-org/pgadmin4/issues/5274>`_ - Fixed the error message displayed when clicking the cloud server for which deployment is in progress. (RM #7636)
|
||||
| `Issue #5275 <https://github.com/pgadmin-org/pgadmin4/issues/5275>`_ - Fixed an issue where the wrong SQL displayed in difference if the user create an RLS policy on the table without a column. (RM #7637)
|
||||
| `Issue #5282 <https://github.com/pgadmin-org/pgadmin4/issues/5282>`_ - Ensure that the dump servers functionality works from setup.py. (RM #7644)
|
||||
| `Issue #5284 <https://github.com/pgadmin-org/pgadmin4/issues/5284>`_ - Ensure that the Import/Export server menu option is visible. (RM #7646)
|
||||
| `Issue #5286 <https://github.com/pgadmin-org/pgadmin4/issues/5286>`_ - Fixed API test case for change password in the server mode. (RM #7648)
|
||||
| `Issue #5287 <https://github.com/pgadmin-org/pgadmin4/issues/5287>`_ - Fixed an issue with the non-visibility of columns added prior to import/export data. (RM #7649)
|
||||
| `Issue #5292 <https://github.com/pgadmin-org/pgadmin4/issues/5292>`_ - Fixed an issue where textarea of the JSON Editor does not resize with dialog. (RM #7656)
|
||||
| `Issue #5299 <https://github.com/pgadmin-org/pgadmin4/issues/5299>`_ - Fixed ModuleNotFoundError when running setup.py to load/dump servers. (RM #7663)
|
||||
| `Issue #5323 <https://github.com/pgadmin-org/pgadmin4/issues/5323>`_ - Replace the language selection 'Brazilian' with 'Portuguese (Brazilian). (RM #7693)
|
||||
| `Issue #5325 <https://github.com/pgadmin-org/pgadmin4/issues/5325>`_ - Fixed an issue where server names with special characters are not displayed correctly in the process tab. (RM #7695)
|
||||
| `Issue #5333 <https://github.com/pgadmin-org/pgadmin4/issues/5333>`_ - Fixed an issue where ERD throws an error if variable is added to the column. (RM #7709)
|
||||
| `Issue #5342 <https://github.com/pgadmin-org/pgadmin4/issues/5342>`_ - Fixed an error while saving changes to the ERD table.
|
||||
| `Issue #5343 <https://github.com/pgadmin-org/pgadmin4/issues/5343>`_ - Fixes a redirect vulnerability when the user opens the pgAdmin URL.
|
||||
@@ -0,0 +1,60 @@
|
||||
************
|
||||
Version 6.15
|
||||
************
|
||||
|
||||
Release date: 2022-10-20
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v6.14.
|
||||
|
||||
Supported Database Servers
|
||||
**************************
|
||||
**PostgreSQL**: 10, 11, 12, 13, 14 and 15
|
||||
|
||||
**EDB Advanced Server**: 10, 11, 12, 13, 14 and 15
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #3491 <https://github.com/pgadmin-org/pgadmin4/issues/3491>`_ - Added support for IAM token based authentication for AWS RDS or Azure DB.
|
||||
| `Issue #4392 <https://github.com/pgadmin-org/pgadmin4/issues/4392>`_ - Added support to specify the background fill color to the table nodes in the ERD tool.
|
||||
| `Issue #4994 <https://github.com/pgadmin-org/pgadmin4/issues/4994>`_ - Allow reordering table columns using drag and drop in ERD Tool.
|
||||
| `Issue #4997 <https://github.com/pgadmin-org/pgadmin4/issues/4997>`_ - Add option to generate SQL with DROP table DDL in ERD Tool.
|
||||
| `Issue #5304 <https://github.com/pgadmin-org/pgadmin4/issues/5304>`_ - Added high availability options to AWS deployment.
|
||||
| `Issue #5390 <https://github.com/pgadmin-org/pgadmin4/issues/5390>`_ - Expose the Gunicorn limit_request_line parameter in the container, with the default set to the maximum 8190.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #5065 <https://github.com/pgadmin-org/pgadmin4/issues/5065>`_ - Use SocketIO instead of REST for fetching database tables data in ERD.
|
||||
| `Issue #5293 <https://github.com/pgadmin-org/pgadmin4/issues/5293>`_ - Ensure that the tooltips are consistent throughout the entire application.
|
||||
| `Issue #5357 <https://github.com/pgadmin-org/pgadmin4/issues/5357>`_ - Remove Python's 'Six' package completely.
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #5101 <https://github.com/pgadmin-org/pgadmin4/issues/5101>`_ - Ensure consistent orderings for ACLS when comparing schemas in the schema diff.
|
||||
| `Issue #5132 <https://github.com/pgadmin-org/pgadmin4/issues/5132>`_ - Ensure that the result grid column should take width as pre preferences setting on first execution.
|
||||
| `Issue #5133 <https://github.com/pgadmin-org/pgadmin4/issues/5133>`_ - Fixed an exception occur while taking backup and SSL certificates/keys are not found in the specified path.
|
||||
| `Issue #5145 <https://github.com/pgadmin-org/pgadmin4/issues/5145>`_ - Fixed intermittent error shown while OAuth2 login.
|
||||
| `Issue #5167 <https://github.com/pgadmin-org/pgadmin4/issues/5167>`_ - Ensure that the path to the psqlrc file is correct when multiple users open the PSQL tool at the same time.
|
||||
| `Issue #5188 <https://github.com/pgadmin-org/pgadmin4/issues/5188>`_ - Ensure that the continue/start button should be disabled if the user stops the Debugger for the procedures.
|
||||
| `Issue #5210 <https://github.com/pgadmin-org/pgadmin4/issues/5210>`_ - Ensure that the query tool creates a new tab with the appropriate user when pressing Alt+Shift+Q.
|
||||
| `Issue #5212 <https://github.com/pgadmin-org/pgadmin4/issues/5212>`_ - Added the close button for all the notifications of the notistack.
|
||||
| `Issue #5249 <https://github.com/pgadmin-org/pgadmin4/issues/5249>`_ - Added the ability to display the selected text from the query tool in the find/replace box.
|
||||
| `Issue #5261 <https://github.com/pgadmin-org/pgadmin4/issues/5261>`_ - Ensure that the search filter should be cleared when a new row is added to the user management.
|
||||
| `Issue #5262 <https://github.com/pgadmin-org/pgadmin4/issues/5262>`_ - Ensure that the user management dialog should not allow the same email addresses with different letter casings when creating users.
|
||||
| `Issue #5277 <https://github.com/pgadmin-org/pgadmin4/issues/5277>`_ - Fixed XSS vulnerability issues.
|
||||
| `Issue #5296 <https://github.com/pgadmin-org/pgadmin4/issues/5296>`_ - Ensure that the scroll position should be preserved for the result set in the query tool on tab change.
|
||||
| `Issue #5308 <https://github.com/pgadmin-org/pgadmin4/issues/5308>`_ - Ensure that the default value for a column should be used if it is made empty.
|
||||
| `Issue #5327 <https://github.com/pgadmin-org/pgadmin4/issues/5327>`_ - Fixed an issue where user was unable to select privileges in Safari.
|
||||
| `Issue #5332 <https://github.com/pgadmin-org/pgadmin4/issues/5332>`_ - Fixed console warning shown while updating database node from browser tree.
|
||||
| `Issue #5338 <https://github.com/pgadmin-org/pgadmin4/issues/5338>`_ - Fixed an issue where the prompt is not visible when clicking on the 'save results to file' button on the large data.
|
||||
| `Issue #5352 <https://github.com/pgadmin-org/pgadmin4/issues/5352>`_ - Fixed error occurring while LDAP authentication for a user with multiple email attributes.
|
||||
| `Issue #5364 <https://github.com/pgadmin-org/pgadmin4/issues/5364>`_ - Fixed an issue where notifications disappeared quickly.
|
||||
| `Issue #5367 <https://github.com/pgadmin-org/pgadmin4/issues/5367>`_ - Ensure that the correct value should be returned if an exception occurs while decoding the password.
|
||||
| `Issue #5368 <https://github.com/pgadmin-org/pgadmin4/issues/5368>`_ - Fixed the issue while downloading the file from the file manager.
|
||||
| `Issue #5386 <https://github.com/pgadmin-org/pgadmin4/issues/5386>`_ - Ensure that the login form is hidden if the authentication source is OAuth2 or Kerberos.
|
||||
| `Issue #5397 <https://github.com/pgadmin-org/pgadmin4/issues/5397>`_ - Fixed an issue where the password recovery link was not working.
|
||||
| `Issue #5402 <https://github.com/pgadmin-org/pgadmin4/issues/5402>`_ - Ensure that scroll bar on browser tree should be visible on windows resize.
|
||||
| `Issue #5405 <https://github.com/pgadmin-org/pgadmin4/issues/5405>`_ - Fixed the cross-site scripting vulnerability.
|
||||
| `Issue #5427 <https://github.com/pgadmin-org/pgadmin4/issues/5427>`_ - Fixed an issue where filtered rows were not working.
|
||||
@@ -143,17 +143,6 @@ command, click the *Restore* button to start the process, or click the *Cancel*
|
||||
button to exit without saving your work. A popup will confirm if the restore is
|
||||
successful.
|
||||
|
||||
.. image:: images/restore_messages.png
|
||||
:alt: Restore dialog notifications
|
||||
:align: center
|
||||
|
||||
Use the **Stop Process** button to stop the Restore process.
|
||||
|
||||
Click *Click here for details* on the popup to launch the *Process Watcher*. The
|
||||
*Process Watcher* logs all the activity associated with the restore, and
|
||||
provides additional information for troubleshooting should the restore command
|
||||
encounter problems.
|
||||
|
||||
.. image:: images/restore_process_watcher.png
|
||||
:alt: Restore dialog process watcher
|
||||
:align: center
|
||||
pgAdmin will run the restore process in background. You can view all the background
|
||||
process with there running status and logs on the :ref:`Processes <processes>`
|
||||
tab
|
||||
@@ -99,6 +99,8 @@ following comparison criteria:
|
||||
Click on any of the database objects in the object comparison panel to
|
||||
display the DDL Statements of that object in the DDL Comparison panel.
|
||||
|
||||
Click the *Help* icon to open Schema Diff documentation.
|
||||
|
||||
|
||||
Schema Diff DDL Comparison Panel
|
||||
================================
|
||||
|
||||
@@ -25,7 +25,7 @@ or ``Gunicorn``, or under ``NGINX`` using using ``uWSGI`` or ``Gunicorn``.
|
||||
.. 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_plain;f=README>`_,
|
||||
`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.
|
||||
|
||||
@@ -300,3 +300,12 @@ Then, configure NGINX:
|
||||
include uwsgi_params;
|
||||
uwsgi_pass unix:/tmp/pgadmin4.sock;
|
||||
}
|
||||
|
||||
Additional Information
|
||||
----------------------
|
||||
|
||||
.. note:: pgAdmin will spawn additional Python processes from time to time, and
|
||||
relies on the *sys.executable* variable in Python to do this. In some cases,
|
||||
you may need to override that value to ensure the correct interpreter is
|
||||
used, instead of the WSGI host process. For example, uWSGI offers the
|
||||
*--py-sys-executable* command line option to achieve this.
|
||||
@@ -189,6 +189,16 @@ Use the fields in the *Advanced* tab to configure a connection:
|
||||
(.pgpass). A .pgpass file allows a user to login without providing a password
|
||||
when they connect. For more information, see
|
||||
`Section 33.15 of the Postgres documentation <https://www.postgresql.org/docs/current/libpq-pgpass.html>`_.
|
||||
* Use the *Password exec command* field to specify a shell command to be executed
|
||||
to retrieve a password to be used for SQL authentication. The ``stdout`` of the
|
||||
command will be used as the SQL password. This may be useful when the password
|
||||
should be generated as a transient authorization token instead of providing a
|
||||
password when connecting in `PAM authentication <https://www.postgresql.org/docs/current/auth-pam.html>`_ scenarios.
|
||||
* Use the *Password exec expiration* field to specify a maximum age, in seconds,
|
||||
of the password generated with a *Password exec command*. If not specified,
|
||||
the password will not expire until your pgAdmin session does.
|
||||
Zero means the command will be executed for each new connection or reconnection that is made.
|
||||
If the generated password is not valid indefinitely, set this value to slightly before it will expire.
|
||||
* Use the *Connection timeout* field to specify the maximum wait for connection,
|
||||
in seconds. Zero or not specified means wait indefinitely. It is not
|
||||
recommended to use a timeout of less than 2 seconds. By default it is set to
|
||||
@@ -197,6 +207,8 @@ Use the fields in the *Advanced* tab to configure a connection:
|
||||
.. note:: The password file option is only supported when pgAdmin is using libpq
|
||||
v10.0 or later to connect to the server.
|
||||
|
||||
.. note:: The Password exec option is only supported when pgAdmin is run in desktop mode.
|
||||
|
||||
* Click the *Save* button to save your work.
|
||||
* Click the *Close* button to exit without saving your work.
|
||||
* Click the *Reset* button to return the values specified on the Server dialog
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
.. _submitting_patches:
|
||||
|
||||
***************************
|
||||
`Submitting Patches`:index:
|
||||
***************************
|
||||
|
||||
Before developing a patch for pgAdmin you should always contact the developers
|
||||
on the mailing list pgadmin-hackers@postgresql.org to discuss your
|
||||
plans. This ensures that others know if you're fixing a bug and can then avoid
|
||||
duplicating your work, and in the case of large patches, gives the community
|
||||
the chance to discuss and refine your ideas before investing too much time
|
||||
writing code that may later be rejected.
|
||||
|
||||
You should always develop patches against a checkout of the source code from the
|
||||
GIT source code repository, and not a release tarball. This ensures that you're
|
||||
working with the latest code on the branch and makes it easier to generate
|
||||
patches correctly. You can checkout the source code with a command like:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ git clone git://git.postgresql.org/git/pgadmin4.git
|
||||
|
||||
Once you've made the changes you wish to make, commit them to a private
|
||||
development branch in your local repository. Then create a patch containing the
|
||||
changes in your development branch against the upstream branch on which your
|
||||
work is based. For example, if your current branch contains your changes, you
|
||||
might run:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ git diff origin/master > my_cool_feature.diff
|
||||
|
||||
to create a patch between your development branch and the public master branch.
|
||||
|
||||
You can also create patches directly from the development tree, for example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ git diff > my_cool_feature.diff
|
||||
|
||||
If you are adding new files, you may need to stage them for commit, and then
|
||||
create your patch against the staging area. If any of the files are binary,
|
||||
for example, images, you will need to use the *--binary* option:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ git add file1.py file2.py images/image1.png [...]
|
||||
$ git diff --cached --binary > my_cool_feature.diff
|
||||
|
||||
Once you have your patch, check it thoroughly to ensure it meets the pgAdmin
|
||||
:doc:`coding_standards`, and review it against the :doc:`code_review` to minimise
|
||||
the chances of it being rejected. Once you're happy with your work, mail it
|
||||
as an attachment to the mailing list pgadmin-hackers@postgresql.org.
|
||||
Please ensure you include a full description of what the patch does,
|
||||
as well as the rationale for any important design decisions.
|
||||
@@ -0,0 +1,65 @@
|
||||
.. _submitting_pull_requests:
|
||||
|
||||
*********************************
|
||||
`Submitting Pull Requests`:index:
|
||||
*********************************
|
||||
|
||||
Before developing a feature or bug fix for pgAdmin you should always contact
|
||||
the developers on the mailing list pgadmin-hackers@postgresql.org to discuss
|
||||
your plans. This ensures that others know what you are doing and can then
|
||||
avoid duplicating your work, and in the case of large changes, gives the
|
||||
community the chance to discuss and refine your ideas before investing too
|
||||
much time writing code that may later be rejected.
|
||||
|
||||
You should always develop changes against a checkout of the source code from
|
||||
the GIT source code repository, and not a release tarball. This ensures that
|
||||
you're working with the latest code on the branch and makes it easier to
|
||||
generate Pull Requests correctly.
|
||||
|
||||
As of September 2022, the pgAdmin source repository can found at
|
||||
https://github.com/pgadmin-org/pgadmin4. A typical workflow for a relatively
|
||||
simple change might look as follows:
|
||||
|
||||
1. Visit the pgAdmin 4 project on GitHub, and click the *Fork* button to create
|
||||
your own development repository in your GitHub account.
|
||||
|
||||
2. Checkout a local copy of the source code with a command like:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ git clone https://github.com/<your GitHub username>/pgadmin4.git
|
||||
|
||||
3. Develop and test your change in your local development environment.
|
||||
|
||||
4. Review your changes and check them thoroughly to ensure they meet the
|
||||
pgAdmin :doc:`coding_standards`, and review them against the
|
||||
:doc:`code_review` to minimise the chances of them being rejected.
|
||||
|
||||
5. Once you're happy with your change, commit it with a suitable message.
|
||||
Include a one-line summary at the top, and if appropriate, further
|
||||
paragraphs following a blank line after the summary.
|
||||
|
||||
6. Push your changes to your fork of the repository.
|
||||
|
||||
7. Back in GitHub, create a new Pull Request against the *pgadmin-org/pgadmin4*
|
||||
*master* branch.
|
||||
|
||||
.. note::
|
||||
Each Pull Request should encompass a single bug fix or feature as a single
|
||||
commit. If necessary, you should squash multiple commits for larger changes
|
||||
or features into a single commit before submitting.
|
||||
|
||||
8. Your Pull Request will be reviewed by one or more members of the development
|
||||
team and either accepted or sent back with requested changes. In some cases
|
||||
it may be rejected if the change is not considered appropriate - this is
|
||||
why it's important to discuss your work with the team before spending any
|
||||
significant time on it.
|
||||
|
||||
For more complex changes, you may wish to use a *Feature Branch* in your fork
|
||||
of the pgAdmin repository, and use that to create the Pull Request.
|
||||
|
||||
.. note::
|
||||
This is a simple example of a workflow. You may choose to use other
|
||||
tools such as the `GitHub CLI <https://cli.github.com>`_ instead; documenting
|
||||
such tools and workflows is outside the scope of the pgAdmin documentation
|
||||
however.
|
||||
@@ -35,12 +35,13 @@ To add a user, click the Add (+) button at the top right corner.
|
||||
Provide information about the new pgAdmin role in the row:
|
||||
|
||||
* Use the drop-down list box next to *Authentication source* field to select the
|
||||
type of authentication that should be used for the user. If LDAP
|
||||
authentication is not enabled for pgAdmin, then *Authentication source* field
|
||||
is disabled.
|
||||
type of authentication that should be used for the user. If authentication
|
||||
source is only 'internal' then *Authentication source* field
|
||||
is disabled. Supported *Authentication source* are internal, ldap, kerberos,
|
||||
oauth2 and webserver.
|
||||
* Click in the *Username* field, and provide a username for the user. This field
|
||||
is enabled only if you select *ldap* as authentication source. If you select
|
||||
*internal* as authentication source, your email address is displayed in the
|
||||
is enabled only when you select authentication source except *internal*. If you
|
||||
select *internal* as authentication source, your email address is displayed in the
|
||||
username field.
|
||||
* Click in the *Email* field, and provide an email address for the user.
|
||||
* Use the drop-down list box next to *Role* to select whether a user is an
|
||||
@@ -54,15 +55,19 @@ Provide information about the new pgAdmin role in the row:
|
||||
active; the default is *Yes*. Use this switch to disable account activity
|
||||
without deleting an account.
|
||||
* Use the *New password* field to provide the password associated with the user
|
||||
specified in the *Email* field. This field is disabled if you select *ldap*
|
||||
as authentication source since LDAP password is not stored in the pgAdmin database.
|
||||
specified in the *Email* field. This field is disabled if you select any
|
||||
authentication source except *internal*.
|
||||
* Re-enter the password in the *Confirm password* field. This field is disabled
|
||||
if you select *ldap* as authentication source.
|
||||
* Move the *Locked* switch to the *True* position if you want to lock the account;
|
||||
the default is *False*. This functionality is useful when a user is locked by trying unsuccessful login attempts.
|
||||
* *Locked* switch is disabled by default when set to *False*. It is only enabled
|
||||
when the user is locked by trying unsuccessful login attempts. Move the switch
|
||||
to the *False* position if you want to unlock the account.
|
||||
|
||||
To discard a user, and revoke access to pgAdmin, click the trash icon to the
|
||||
left of the row and confirm deletion in the *Delete user?* dialog.
|
||||
left of the row and confirm deletion in the *Delete user?* dialog. If the user
|
||||
has created some shared servers, then the :ref:`Change Ownership <change_ownership>`
|
||||
dialog will appear to change the ownership of a shared server.
|
||||
|
||||
|
||||
Users with the *Administrator* role are able to add, edit and remove pgAdmin
|
||||
users, but otherwise have the same capabilities as those with the *User* role.
|
||||
|
||||
@@ -6,8 +6,7 @@ set -e
|
||||
# Debugging shizz
|
||||
trap 'ERRCODE=$? && if [ ${ERRCODE} -ne 0 ]; then echo "The command \"${BASH_COMMAND}\" failed in \"${FUNCNAME}\" with exit code ${ERRCODE}."; fi' EXIT
|
||||
|
||||
OS_VERSION=$(cat /etc/os-release | grep "^VERSION_ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_NAME=$(cat /etc/os-release | grep "^ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_ARCH=$(dpkg-architecture -qDEB_HOST_ARCH)
|
||||
|
||||
# Stop creating pyc files.
|
||||
@@ -17,7 +16,7 @@ export PYTHONDONTWRITEBYTECODE=1
|
||||
source pkg/linux/build-functions.sh
|
||||
|
||||
# Assemble the "standard" installation footprint
|
||||
_setup_env $0 "debian"
|
||||
_setup_env "$0" "debian"
|
||||
_cleanup "deb"
|
||||
_setup_dirs
|
||||
_create_python_virtualenv "debian"
|
||||
@@ -40,7 +39,7 @@ Architecture: ${OS_ARCH}
|
||||
Section: database
|
||||
Priority: optional
|
||||
Depends: python3, libpq5 (>= 11.0), libgssapi-krb5-2
|
||||
Recommends: postgresql-client | postgresql-client-14 | postgresql-client-13 | postgresql-client-12 | postgresql-client-11 | postgresql-client-10
|
||||
Recommends: postgresql-client | postgresql-client-15 | postgresql-client-14 | postgresql-client-13 | postgresql-client-12 | postgresql-client-11 | postgresql-client-10
|
||||
Maintainer: pgAdmin Development Team <pgadmin-hackers@postgresql.org>
|
||||
Description: The core server package for pgAdmin. pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world.
|
||||
EOF
|
||||
@@ -122,7 +121,7 @@ EOF
|
||||
fakeroot dpkg-deb --build "${METAROOT}" "${DISTROOT}/${APP_NAME}_${APP_LONG_VERSION}_all.deb"
|
||||
|
||||
# Get the libpq package
|
||||
pushd ${DISTROOT} 1> /dev/null
|
||||
pushd "${DISTROOT}" 1> /dev/null
|
||||
apt-get download libpq5
|
||||
popd 1> /dev/null
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)
|
||||
|
||||
# Node repo
|
||||
echo "Setting up the NodeJS repo..."
|
||||
curl -sL https://deb.nodesource.com/setup_12.x | bash -
|
||||
curl -sL https://deb.nodesource.com/setup_16.x | bash -
|
||||
|
||||
# Yarn repo
|
||||
echo "Setting up the Yarn repo..."
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Fixup the passwd file, in case we're on OpenShift
|
||||
if ! whoami &> /dev/null; then
|
||||
if [ $(id -u) -ne 5050 ]; then
|
||||
if ! whoami > /dev/null 2>&1; then
|
||||
if [ "$(id -u)" -ne 5050 ]; then
|
||||
if [ -w /etc/passwd ]; then
|
||||
echo "${USER_NAME:-pgadminr}:x:$(id -u):0:${USER_NAME:-pgadminr} user:${HOME}:/sbin/nologin" >> /etc/passwd
|
||||
fi
|
||||
@@ -13,13 +13,14 @@ fi
|
||||
# provided by the user through the PGADMIN_CONFIG_* environment variables.
|
||||
# Only update the file on first launch. The empty file is created during the
|
||||
# container build so it can have the required ownership.
|
||||
if [ `wc -m /pgadmin4/config_distro.py | awk '{ print $1 }'` = "0" ]; then
|
||||
if [ "$(wc -m /pgadmin4/config_distro.py | awk '{ print $1 }')" = "0" ]; then
|
||||
cat << EOF > /pgadmin4/config_distro.py
|
||||
CA_FILE = '/etc/ssl/certs/ca-certificates.crt'
|
||||
LOG_FILE = '/dev/null'
|
||||
HELP_PATH = '../../docs'
|
||||
DEFAULT_BINARY_PATHS = {
|
||||
'pg': '/usr/local/pgsql-14',
|
||||
'pg': '/usr/local/pgsql-15',
|
||||
'pg-15': '/usr/local/pgsql-15',
|
||||
'pg-14': '/usr/local/pgsql-14',
|
||||
'pg-13': '/usr/local/pgsql-13',
|
||||
'pg-12': '/usr/local/pgsql-12',
|
||||
@@ -31,37 +32,40 @@ EOF
|
||||
# This is a bit kludgy, but necessary as the container uses BusyBox/ash as
|
||||
# it's shell and not bash which would allow a much cleaner implementation
|
||||
for var in $(env | grep PGADMIN_CONFIG_ | cut -d "=" -f 1); do
|
||||
# shellcheck disable=SC2086
|
||||
# shellcheck disable=SC2046
|
||||
echo ${var#PGADMIN_CONFIG_} = $(eval "echo \$$var") >> /pgadmin4/config_distro.py
|
||||
done
|
||||
fi
|
||||
|
||||
if [ ! -f /var/lib/pgadmin/pgadmin4.db ]; then
|
||||
if ([ -z "${PGADMIN_DEFAULT_EMAIL}" ]) || ( [ -z "${PGADMIN_DEFAULT_PASSWORD}" ] && [ ! -n "${PGADMIN_DEFAULT_PASSWORD_FILE}" ] ); then
|
||||
if [ -z "${PGADMIN_DEFAULT_EMAIL}" ] || { [ -z "${PGADMIN_DEFAULT_PASSWORD}" ] && [ -z "${PGADMIN_DEFAULT_PASSWORD_FILE}" ]; }; then
|
||||
echo 'You need to define the PGADMIN_DEFAULT_EMAIL and PGADMIN_DEFAULT_PASSWORD or PGADMIN_DEFAULT_PASSWORD_FILE environment variables.'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ${PGADMIN_DEFAULT_EMAIL} | grep -E "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$" > /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
if ! echo "${PGADMIN_DEFAULT_EMAIL}" | grep -E "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$" > /dev/null; then
|
||||
echo "'${PGADMIN_DEFAULT_EMAIL}' does not appear to be a valid email address. Please reset the PGADMIN_DEFAULT_EMAIL environment variable and try again."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Read secret contents
|
||||
if [ -n "${PGADMIN_DEFAULT_PASSWORD_FILE}" ]; then
|
||||
export PGADMIN_DEFAULT_PASSWORD=$(cat ${PGADMIN_DEFAULT_PASSWORD_FILE})
|
||||
PGADMIN_DEFAULT_PASSWORD=$(cat "${PGADMIN_DEFAULT_PASSWORD_FILE}")
|
||||
export PGADMIN_DEFAULT_PASSWORD
|
||||
fi
|
||||
|
||||
# Set the default username and password in a
|
||||
# backwards compatible way
|
||||
export PGADMIN_SETUP_EMAIL=${PGADMIN_DEFAULT_EMAIL}
|
||||
export PGADMIN_SETUP_PASSWORD=${PGADMIN_DEFAULT_PASSWORD}
|
||||
export PGADMIN_SETUP_EMAIL="${PGADMIN_DEFAULT_EMAIL}"
|
||||
export PGADMIN_SETUP_PASSWORD="${PGADMIN_DEFAULT_PASSWORD}"
|
||||
|
||||
# Initialize DB before starting Gunicorn
|
||||
# Importing pgadmin4 (from this script) is enough
|
||||
/venv/bin/python3 run_pgadmin.py
|
||||
|
||||
export PGADMIN_SERVER_JSON_FILE=${PGADMIN_SERVER_JSON_FILE:-/pgadmin4/servers.json}
|
||||
export PGADMIN_SERVER_JSON_FILE="${PGADMIN_SERVER_JSON_FILE:-/pgadmin4/servers.json}"
|
||||
|
||||
# Pre-load any required servers
|
||||
if [ -f "${PGADMIN_SERVER_JSON_FILE}" ]; then
|
||||
# When running in Desktop mode, no user is created
|
||||
@@ -69,13 +73,13 @@ if [ ! -f /var/lib/pgadmin/pgadmin4.db ]; then
|
||||
if [ "${PGADMIN_CONFIG_SERVER_MODE}" = "False" ]; then
|
||||
/venv/bin/python3 /pgadmin4/setup.py --load-servers "${PGADMIN_SERVER_JSON_FILE}"
|
||||
else
|
||||
/venv/bin/python3 /pgadmin4/setup.py --load-servers "${PGADMIN_SERVER_JSON_FILE}" --user ${PGADMIN_DEFAULT_EMAIL}
|
||||
/venv/bin/python3 /pgadmin4/setup.py --load-servers "${PGADMIN_SERVER_JSON_FILE}" --user "${PGADMIN_DEFAULT_EMAIL}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Start Postfix to handle password resets etc.
|
||||
if [ -z ${PGADMIN_DISABLE_POSTFIX} ]; then
|
||||
if [ -z "${PGADMIN_DISABLE_POSTFIX}" ]; then
|
||||
sudo /usr/sbin/postfix start
|
||||
fi
|
||||
|
||||
@@ -86,8 +90,8 @@ TIMEOUT=$(cd /pgadmin4 && /venv/bin/python3 -c 'import config; print(config.SESS
|
||||
# NOTE: currently pgadmin can run only with 1 worker due to sessions implementation
|
||||
# Using --threads to have multi-threaded single-process worker
|
||||
|
||||
if [ ! -z ${PGADMIN_ENABLE_TLS} ]; then
|
||||
exec /venv/bin/gunicorn --timeout ${TIMEOUT} --bind ${PGADMIN_LISTEN_ADDRESS:-[::]}:${PGADMIN_LISTEN_PORT:-443} -w 1 --threads ${GUNICORN_THREADS:-25} --access-logfile ${GUNICORN_ACCESS_LOGFILE:--} --keyfile /certs/server.key --certfile /certs/server.cert -c gunicorn_config.py run_pgadmin:app
|
||||
if [ -n "${PGADMIN_ENABLE_TLS}" ]; then
|
||||
exec /venv/bin/gunicorn --limit-request-line "${GUNICORN_LIMIT_REQUEST_LINE:-8190}" --timeout "${TIMEOUT}" --bind "${PGADMIN_LISTEN_ADDRESS:-[::]}:${PGADMIN_LISTEN_PORT:-443}" -w 1 --threads "${GUNICORN_THREADS:-25}" --access-logfile "${GUNICORN_ACCESS_LOGFILE:--}" --keyfile /certs/server.key --certfile /certs/server.cert -c gunicorn_config.py run_pgadmin:app
|
||||
else
|
||||
exec /venv/bin/gunicorn --timeout ${TIMEOUT} --bind ${PGADMIN_LISTEN_ADDRESS:-[::]}:${PGADMIN_LISTEN_PORT:-80} -w 1 --threads ${GUNICORN_THREADS:-25} --access-logfile ${GUNICORN_ACCESS_LOGFILE:--} -c gunicorn_config.py run_pgadmin:app
|
||||
exec /venv/bin/gunicorn --limit-request-line "${GUNICORN_LIMIT_REQUEST_LINE:-8190}" --timeout "${TIMEOUT}" --bind "${PGADMIN_LISTEN_ADDRESS:-[::]}:${PGADMIN_LISTEN_PORT:-80}" -w 1 --threads "${GUNICORN_THREADS:-25}" --access-logfile "${GUNICORN_ACCESS_LOGFILE:--}" -c gunicorn_config.py run_pgadmin:app
|
||||
fi
|
||||
@@ -1,6 +1,8 @@
|
||||
# shellcheck shell=bash
|
||||
|
||||
_setup_env() {
|
||||
echo "Setting up the environment..."
|
||||
WD=$(cd `dirname "$1"` && pwd)
|
||||
WD=$(cd "$(dirname "$1")" && pwd)
|
||||
SOURCEDIR=$(realpath "${WD}/../..")
|
||||
BUILDROOT=$(realpath "${WD}/../../$2-build")
|
||||
DESKTOPROOT=${BUILDROOT}/desktop
|
||||
@@ -8,49 +10,49 @@ _setup_env() {
|
||||
SERVERROOT=${BUILDROOT}/server
|
||||
WEBROOT=${BUILDROOT}/web
|
||||
DISTROOT=$(realpath "${WD}/../../dist")
|
||||
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_NAME=`grep "^APP_NAME" web/config.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //' | sed 's/ //g' | tr '[:upper:]' '[:lower:]'`
|
||||
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_NAME=$(grep "^APP_NAME" web/config.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //' | sed 's/ //g' | tr '[:upper:]' '[:lower:]')
|
||||
APP_LONG_VERSION=${APP_RELEASE}.${APP_REVISION}
|
||||
APP_SHORT_VERSION=`echo ${APP_LONG_VERSION} | cut -d . -f1,2`
|
||||
APP_SUFFIX=`grep "^APP_SUFFIX" web/config.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g"`
|
||||
if [ ! -z ${APP_SUFFIX} ]; then
|
||||
APP_SUFFIX=$(grep "^APP_SUFFIX" web/config.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g")
|
||||
if [ -n "${APP_SUFFIX}" ]; then
|
||||
APP_LONG_VERSION=${APP_LONG_VERSION}-${APP_SUFFIX}
|
||||
fi
|
||||
}
|
||||
|
||||
_cleanup() {
|
||||
echo "Cleaning up the old environment and app..."
|
||||
if test -f ${SOURCEDIR}/runtime/pgAdmin4; then
|
||||
rm -rf ${SOURCEDIR}/runtime/pgAdmin4
|
||||
if test -f "${SOURCEDIR}/runtime/pgAdmin4"; then
|
||||
rm -rf "${SOURCEDIR}/runtime/pgAdmin4"
|
||||
fi
|
||||
if test -d ${BUILDROOT}; then
|
||||
rm -rf ${BUILDROOT}
|
||||
if test -d "${BUILDROOT}"; then
|
||||
rm -rf "${BUILDROOT}"
|
||||
fi
|
||||
rm -f ${DISTROOT}/pgadmin4*.$1
|
||||
rm -f "${DISTROOT}/pgadmin4"*".$1"
|
||||
}
|
||||
|
||||
_setup_dirs() {
|
||||
echo "Creating output directories..."
|
||||
test -d ${BUILDROOT} || mkdir ${BUILDROOT}
|
||||
test -d ${DESKTOPROOT} || mkdir ${DESKTOPROOT}
|
||||
test -d ${METAROOT} || mkdir ${METAROOT}
|
||||
test -d ${SERVERROOT} || mkdir ${SERVERROOT}
|
||||
test -d ${WEBROOT} || mkdir ${WEBROOT}
|
||||
test -d ${DISTROOT} || mkdir ${DISTROOT}
|
||||
test -d "${BUILDROOT}" || mkdir "${BUILDROOT}"
|
||||
test -d "${DESKTOPROOT}" || mkdir "${DESKTOPROOT}"
|
||||
test -d "${METAROOT}" || mkdir "${METAROOT}"
|
||||
test -d "${SERVERROOT}" || mkdir "${SERVERROOT}"
|
||||
test -d "${WEBROOT}" || mkdir "${WEBROOT}"
|
||||
test -d "${DISTROOT}" || mkdir "${DISTROOT}"
|
||||
}
|
||||
|
||||
_create_python_virtualenv() {
|
||||
echo "Creating the virtual environment..."
|
||||
|
||||
cd ${SERVERROOT}
|
||||
cd "${SERVERROOT}" || exit
|
||||
|
||||
# Create the required directories
|
||||
mkdir -p "usr/${APP_NAME}"
|
||||
cd "usr/${APP_NAME}"
|
||||
cd "usr/${APP_NAME}" || exit
|
||||
|
||||
# Create the blank venv
|
||||
python3 -m venv venv
|
||||
# shellcheck disable=SC1091
|
||||
source venv/bin/activate
|
||||
|
||||
# Make sure we have the wheel package present, as well as the latest pip
|
||||
@@ -58,7 +60,7 @@ _create_python_virtualenv() {
|
||||
pip3 install wheel
|
||||
|
||||
# Install the requirements
|
||||
pip3 install --no-cache-dir --no-binary psycopg2 -r ${SOURCEDIR}/requirements.txt
|
||||
pip3 install --no-cache-dir --no-binary psycopg2 -r "${SOURCEDIR}/requirements.txt"
|
||||
|
||||
# Fixup the paths in the venv activation scripts
|
||||
sed -i 's/VIRTUAL_ENV=.*/VIRTUAL_ENV="\/usr\/pgadmin4\/venv"/g' venv/bin/activate
|
||||
@@ -74,10 +76,10 @@ _create_python_virtualenv() {
|
||||
# Figure out some paths for use when completing the venv
|
||||
# Use "python3" here as we want the venv path
|
||||
PYMODULES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
|
||||
DIR_PYMODULES_PATH=`dirname ${PYMODULES_PATH}`
|
||||
DIR_PYMODULES_PATH=$(dirname "${PYMODULES_PATH}")
|
||||
|
||||
# Use /usr/bin/python3 here as we want the system path
|
||||
if [ $1 == "debian" ]; then
|
||||
if [ "$1" == "debian" ]; then
|
||||
PYSYSLIB_PATH=$(/usr/bin/python3 -c "import sys; print('%s/lib/python%d.%.d' % (sys.prefix, sys.version_info.major, sys.version_info.minor))")
|
||||
else
|
||||
PYSYSLIB_PATH=$(/usr/bin/python3 -c "import sys; print('%s/lib64/python%d.%.d' % (sys.prefix, sys.version_info.major, sys.version_info.minor))")
|
||||
@@ -86,33 +88,33 @@ _create_python_virtualenv() {
|
||||
# Symlink in the rest of the Python libs. This is required because the runtime
|
||||
# will clear PYTHONHOME for safety, which has the side-effect of preventing
|
||||
# it from finding modules that are not explicitly included in the venv
|
||||
cd ${DIR_PYMODULES_PATH}
|
||||
cd "${DIR_PYMODULES_PATH}" || exit
|
||||
|
||||
# Files
|
||||
for FULLPATH in ${PYSYSLIB_PATH}/*.py; do
|
||||
for FULLPATH in "${PYSYSLIB_PATH}"/*.py; do
|
||||
FILE=${FULLPATH##*/}
|
||||
if [ ! -e ${FILE} ]; then
|
||||
ln -s ${FULLPATH} ${FILE}
|
||||
if [ ! -e "${FILE}" ]; then
|
||||
ln -s "${FULLPATH}" "${FILE}"
|
||||
fi
|
||||
done
|
||||
|
||||
# Paths
|
||||
for FULLPATH in ${PYSYSLIB_PATH}/*/; do
|
||||
for FULLPATH in "${PYSYSLIB_PATH}"/*/; do
|
||||
FULLPATH=${FULLPATH%*/}
|
||||
FILE=${FULLPATH##*/}
|
||||
if [ ! -e ${FILE} ]; then
|
||||
ln -s ${FULLPATH} ${FILE}
|
||||
if [ ! -e "${FILE}" ]; then
|
||||
ln -s "${FULLPATH}" "${FILE}"
|
||||
fi
|
||||
done
|
||||
|
||||
# Remove tests
|
||||
cd site-packages
|
||||
cd site-packages || exit
|
||||
find . -name "test" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "tests" -type d -print0 | xargs -0 rm -rf
|
||||
|
||||
# Link the python<version> directory to python so that the private environment path is found by the application.
|
||||
if test -d ${DIR_PYMODULES_PATH}; then
|
||||
ln -s $(basename ${DIR_PYMODULES_PATH}) ${DIR_PYMODULES_PATH}/../python
|
||||
if test -d "${DIR_PYMODULES_PATH}"; then
|
||||
ln -s "$(basename "${DIR_PYMODULES_PATH}")" "${DIR_PYMODULES_PATH}/../python"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -134,13 +136,13 @@ _build_runtime() {
|
||||
# NW_VERSION=$(yarn info nw | grep latest | awk -F "'" '{ print $2}')
|
||||
NW_VERSION="0.62.2"
|
||||
|
||||
pushd "${BUILDROOT}" > /dev/null
|
||||
pushd "${BUILDROOT}" > /dev/null || exit
|
||||
while true;do
|
||||
wget https://dl.nwjs.io/v${NW_VERSION}/nwjs-v${NW_VERSION}-linux-x64.tar.gz && break
|
||||
rm nwjs-v${NW_VERSION}-linux-x64.tar.gz
|
||||
wget "https://dl.nwjs.io/v${NW_VERSION}/nwjs-v${NW_VERSION}-linux-x64.tar.gz" && break
|
||||
rm "nwjs-v${NW_VERSION}-linux-x64.tar.gz"
|
||||
done
|
||||
tar -zxvf nwjs-v${NW_VERSION}-linux-x64.tar.gz
|
||||
popd > /dev/null
|
||||
tar -zxvf "nwjs-v${NW_VERSION}-linux-x64.tar.gz"
|
||||
popd > /dev/null || exit
|
||||
# WGET END
|
||||
|
||||
# Copy nwjs into the staging directory
|
||||
@@ -188,10 +190,11 @@ _build_runtime() {
|
||||
_build_docs() {
|
||||
echo "Building the documentation..."
|
||||
cd "${SERVERROOT}" && mkdir -p "usr/${APP_NAME}/share/docs/en_US/html"
|
||||
cd "${SOURCEDIR}/docs/en_US"
|
||||
cd "${SOURCEDIR}/docs/en_US" || exit
|
||||
python3 build_code_snippet.py
|
||||
SYS_PYTHONPATH=$(/usr/bin/python3 -c "import sys; print(':'.join([p for p in sys.path if p]))")
|
||||
if [ $1 == "redhat" -a "${OS_VERSION}" == "7" ]; then
|
||||
# shellcheck disable=SC2153
|
||||
if [ "$1" == "redhat" ] && [ "${OS_VERSION}" == "7" ]; then
|
||||
PYTHONPATH=$PYTHONPATH:${SYS_PYTHONPATH} python3 /usr/local/bin/sphinx-build . "${SERVERROOT}/usr/${APP_NAME}/share/docs/en_US/html"
|
||||
else
|
||||
PYTHONPATH=$PYTHONPATH:${SYS_PYTHONPATH} python3 -msphinx . "${SERVERROOT}/usr/${APP_NAME}/share/docs/en_US/html"
|
||||
@@ -204,15 +207,15 @@ _copy_code() {
|
||||
# Remove any TCL-related files that may cause us problems
|
||||
find "${SERVERROOT}/usr/${APP_NAME}/venv/" -name "_tkinter*" -print0 | xargs -0 rm -rf
|
||||
|
||||
pushd ${SOURCEDIR}/web > /dev/null
|
||||
pushd "${SOURCEDIR}/web" > /dev/null || exit
|
||||
yarn install
|
||||
yarn run bundle
|
||||
popd > /dev/null
|
||||
popd > /dev/null || exit
|
||||
|
||||
# copy the web directory to the bundle as it is required by runtime
|
||||
cp -r "${SOURCEDIR}/web" "${SERVERROOT}/usr/${APP_NAME}/web/"
|
||||
cp "${SOURCEDIR}/pkg/linux/config_distro.py" "${SERVERROOT}/usr/${APP_NAME}/web/"
|
||||
cd "${SERVERROOT}/usr/${APP_NAME}/web/"
|
||||
cd "${SERVERROOT}/usr/${APP_NAME}/web/" || exit
|
||||
rm -f pgadmin4.db config_local.*
|
||||
rm -rf karma.conf.js package.json node_modules/ regression/ tools/ pgadmin/static/js/generated/.cache
|
||||
find . -name "tests" -type d -print0 | xargs -0 rm -rf
|
||||
@@ -230,11 +233,11 @@ _copy_code() {
|
||||
# Ensure our venv will use the correct Python interpreter, even if the
|
||||
# user has configured an alternative default.
|
||||
# DO THIS LAST!
|
||||
cd "${SERVERROOT}/usr/${APP_NAME}/venv/bin"
|
||||
cd "${SERVERROOT}/usr/${APP_NAME}/venv/bin" || exit
|
||||
PYTHON_INTERPRETER=$(/usr/bin/python3 -c "import os, sys; print(os.path.realpath(sys.executable))")
|
||||
PYTHON_VERSION=$(/usr/bin/python3 -c "import sys; print('%d.%d' % (sys.version_info.major, sys.version_info.minor))")
|
||||
rm python && ln -s python3 python
|
||||
rm python${PYTHON_VERSION} && ln -s python3 python${PYTHON_VERSION}
|
||||
rm "python${PYTHON_VERSION}" && ln -s python3 "python${PYTHON_VERSION}"
|
||||
rm python3 && ln -s "${PYTHON_INTERPRETER}" python3
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ if [ "$EUID" -ne 0 ]
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$#" -ne 0 ]] && ([[ "$#" -eq 1 ]] && [[ "$1" != "--yes" ]]); then
|
||||
if [[ "$#" -gt 1 ]] || { [[ "$#" -eq 1 ]] && [[ "$1" != "--yes" ]]; }; then
|
||||
echo "Usage: $0 [--yes]"
|
||||
exit 1
|
||||
fi
|
||||
@@ -20,7 +20,7 @@ IS_SUSE=0
|
||||
UNAME=$(uname -a)
|
||||
|
||||
# Get the distro from the environment
|
||||
if [ "x${PGADMIN_PLATFORM_TYPE}" == "x" ]; then
|
||||
if [ "${PGADMIN_PLATFORM_TYPE}" == "" ]; then
|
||||
if [ -f /etc/redhat-release ]; then
|
||||
PLATFORM_TYPE=redhat
|
||||
elif [[ ${UNAME} =~ "Ubuntu" ]] || [[ ${UNAME} =~ "Debian" ]] || [ -f /etc/apt/sources.list ]; then
|
||||
@@ -72,9 +72,7 @@ fi
|
||||
|
||||
# Run setup script first:
|
||||
echo "Creating configuration database..."
|
||||
/usr/pgadmin4/venv/bin/python3 /usr/pgadmin4/web/setup.py
|
||||
|
||||
if [ $? != 0 ]
|
||||
if ! /usr/pgadmin4/venv/bin/python3 /usr/pgadmin4/web/setup.py;
|
||||
then
|
||||
echo "Error setting up server mode. Please examine the output above."
|
||||
exit 1
|
||||
@@ -108,7 +106,7 @@ if [ ${IS_DEBIAN} == 1 ]; then
|
||||
if [ ${AUTOMATED} == 1 ]; then
|
||||
RESPONSE=Y
|
||||
else
|
||||
read -p "We can now configure the Apache Web server for you. This involves enabling the wsgi module and configuring the pgAdmin 4 application to mount at /pgadmin4. Do you wish to continue (y/n)? " RESPONSE
|
||||
read -r -p "We can now configure the Apache Web server for you. This involves enabling the wsgi module and configuring the pgAdmin 4 application to mount at /pgadmin4. Do you wish to continue (y/n)? " RESPONSE
|
||||
fi
|
||||
|
||||
case ${RESPONSE} in
|
||||
@@ -121,18 +119,16 @@ if [ ${IS_DEBIAN} == 1 ]; then
|
||||
esac
|
||||
fi
|
||||
|
||||
APACHE_STATUS=`ps cax | grep ${APACHE}`
|
||||
if [ $? -eq 0 ]; then
|
||||
if pgrep ${APACHE} > /dev/null; then
|
||||
if [ ${AUTOMATED} == 1 ]; then
|
||||
RESPONSE=Y
|
||||
else
|
||||
read -p "The Apache web server is running and must be restarted for the pgAdmin 4 installation to complete. Continue (y/n)? " RESPONSE
|
||||
read -r -p "The Apache web server is running and must be restarted for the pgAdmin 4 installation to complete. Continue (y/n)? " RESPONSE
|
||||
fi
|
||||
|
||||
case ${RESPONSE} in
|
||||
y|Y )
|
||||
systemctl restart ${APACHE}
|
||||
if [ $? != 0 ]; then
|
||||
if ! systemctl restart ${APACHE}; then
|
||||
echo "Error restarting ${APACHE}. Please check the systemd logs"
|
||||
else
|
||||
echo "Apache successfully restarted. You can now start using pgAdmin 4 in web mode at http://127.0.0.1/pgadmin4"
|
||||
@@ -144,20 +140,18 @@ else
|
||||
if [ ${AUTOMATED} == 1 ]; then
|
||||
RESPONSE=Y
|
||||
else
|
||||
read -p "The Apache web server is not running. We can enable and start the web server for you to finish pgAdmin 4 installation. Continue (y/n)? " RESPONSE
|
||||
read -r -p "The Apache web server is not running. We can enable and start the web server for you to finish pgAdmin 4 installation. Continue (y/n)? " RESPONSE
|
||||
fi
|
||||
|
||||
case ${RESPONSE} in
|
||||
y|Y )
|
||||
systemctl enable ${APACHE}
|
||||
if [ $? != 0 ]; then
|
||||
if ! systemctl enable ${APACHE}; then
|
||||
echo "Error enabling ${APACHE}. Please check the systemd logs"
|
||||
else
|
||||
echo "Apache successfully enabled."
|
||||
fi
|
||||
|
||||
systemctl start ${APACHE}
|
||||
if [ $? != 0 ]; then
|
||||
if ! systemctl start ${APACHE}; then
|
||||
echo "Error starting ${APACHE}. Please check the systemd logs"
|
||||
else
|
||||
echo "Apache successfully started."
|
||||
|
||||
@@ -1,23 +1,24 @@
|
||||
# shellcheck shell=bash
|
||||
|
||||
_setup_env() {
|
||||
FUNCS_DIR=$(cd `dirname $0` && pwd)/../..
|
||||
APP_RELEASE=`grep "^APP_RELEASE" ${FUNCS_DIR}/web/config.py | cut -d"=" -f2 | sed 's/ //g'`
|
||||
APP_REVISION=`grep "^APP_REVISION" ${FUNCS_DIR}/web/config.py | cut -d"=" -f2 | sed 's/ //g'`
|
||||
APP_NAME=`grep "^APP_NAME" ${FUNCS_DIR}/web/config.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //'`
|
||||
FUNCS_DIR=$(cd "$(dirname "$0")" && pwd)/../..
|
||||
APP_RELEASE=$(grep "^APP_RELEASE" "${FUNCS_DIR}/web/config.py" | cut -d"=" -f2 | sed 's/ //g')
|
||||
APP_REVISION=$(grep "^APP_REVISION" "${FUNCS_DIR}/web/config.py" | cut -d"=" -f2 | sed 's/ //g')
|
||||
APP_NAME=$(grep "^APP_NAME" "${FUNCS_DIR}/web/config.py" | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //')
|
||||
APP_LONG_VERSION=${APP_RELEASE}.${APP_REVISION}
|
||||
APP_SHORT_VERSION=`echo ${APP_LONG_VERSION} | cut -d . -f1,2`
|
||||
APP_SUFFIX=`grep "^APP_SUFFIX" ${FUNCS_DIR}/web/config.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g"`
|
||||
if [ ! -z ${APP_SUFFIX} ]; then
|
||||
APP_SUFFIX=$(grep "^APP_SUFFIX" "${FUNCS_DIR}/web/config.py" | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g")
|
||||
if [ -n "${APP_SUFFIX}" ]; then
|
||||
APP_LONG_VERSION=${APP_LONG_VERSION}-${APP_SUFFIX}
|
||||
fi
|
||||
BUNDLE_DIR="${BUILD_ROOT}/${APP_NAME}.app"
|
||||
DMG_NAME="${DIST_ROOT}/$(echo ${APP_NAME} | sed 's/ //g' | awk '{print tolower($0)}')-${APP_LONG_VERSION}.dmg"
|
||||
DMG_NAME="${DIST_ROOT}"/$(echo "${APP_NAME}" | sed 's/ //g' | awk '{print tolower($0)}')-"${APP_LONG_VERSION}.dmg"
|
||||
}
|
||||
|
||||
_cleanup() {
|
||||
echo Cleaning up the old environment and app bundle...
|
||||
rm -rf "${BUILD_ROOT}"
|
||||
rm -rf "${TEMP_DIR}"
|
||||
rm -f ${DIST_ROOT}/*.dmg
|
||||
rm -f "${DIST_ROOT}"/*.dmg
|
||||
}
|
||||
|
||||
_build_runtime() {
|
||||
@@ -39,13 +40,13 @@ _build_runtime() {
|
||||
# NW_VERSION=$(yarn info nw | grep latest | awk -F "'" '{ print $2}')
|
||||
NW_VERSION="0.62.2"
|
||||
|
||||
pushd "${BUILD_ROOT}" > /dev/null
|
||||
pushd "${BUILD_ROOT}" > /dev/null || exit
|
||||
while true;do
|
||||
wget https://dl.nwjs.io/v${NW_VERSION}/nwjs-v${NW_VERSION}-osx-x64.zip && break
|
||||
rm nwjs-v${NW_VERSION}-osx-x64.zip
|
||||
wget "https://dl.nwjs.io/v${NW_VERSION}/nwjs-v${NW_VERSION}-osx-x64.zip" && break
|
||||
rm "nwjs-v${NW_VERSION}-osx-x64.zip"
|
||||
done
|
||||
unzip nwjs-v${NW_VERSION}-osx-x64.zip
|
||||
popd > /dev/null
|
||||
unzip "nwjs-v${NW_VERSION}-osx-x64.zip"
|
||||
popd > /dev/null || exit
|
||||
# WGET END
|
||||
|
||||
# YARN:
|
||||
@@ -73,11 +74,19 @@ _create_python_env() {
|
||||
PATH=${PGADMIN_POSTGRES_DIR}/bin:${PATH}
|
||||
LD_LIBRARY_PATH=${PGADMIN_POSTGRES_DIR}/lib:${LD_LIBRARY_PATH}
|
||||
|
||||
# Figure out what python to use
|
||||
if which python3 > /dev/null 2>&1
|
||||
then
|
||||
SYSTEM_PYTHON_EXE="python3"
|
||||
else
|
||||
SYSTEM_PYTHON_EXE="python"
|
||||
fi
|
||||
|
||||
git clone https://github.com/gregneagle/relocatable-python.git "${BUILD_ROOT}/relocatable_python"
|
||||
PATH=$PATH:/usr/local/pgsql/bin python \
|
||||
PATH=$PATH:/usr/local/pgsql/bin "${SYSTEM_PYTHON_EXE}" \
|
||||
"${BUILD_ROOT}/relocatable_python/make_relocatable_python_framework.py" \
|
||||
--upgrade-pip \
|
||||
--python-version ${PGADMIN_PYTHON_VERSION} \
|
||||
--python-version "${PGADMIN_PYTHON_VERSION}" \
|
||||
--pip-requirements "${SOURCE_DIR}/requirements.txt" \
|
||||
--destination "${BUNDLE_DIR}/Contents/Frameworks/"
|
||||
|
||||
@@ -85,26 +94,27 @@ _create_python_env() {
|
||||
# so they get properly signed later
|
||||
OLD_IFS=${IFS}
|
||||
IFS=$'\n'
|
||||
for i in $(find . -type f -name *.so -exec file "{}" \; | grep -v "(for architecture" | grep -E "Mach-O executable|Mach-O 64-bit executable|Mach-O 64-bit bundle|Mach-O 64-bit dynamically linked shared library" | awk -F":" '{print $1}' | uniq)
|
||||
for i in $(find . -type f -name '*.so' -exec file "{}" \; | grep -v "(for architecture" | grep -E "Mach-O executable|Mach-O 64-bit executable|Mach-O 64-bit bundle|Mach-O 64-bit dynamically linked shared library" | awk -F":" '{print $1}' | uniq)
|
||||
do
|
||||
chmod +x "${i}"
|
||||
done
|
||||
IFS=${OLD_IFS}
|
||||
|
||||
# Fixup shebangs
|
||||
cd "${BUNDLE_DIR}/Contents/Frameworks/Python.framework/Versions/Current/bin"
|
||||
grep -RiIl 'mac-build' * | xargs sed -i '' 's/\/.*\/python3\./\$(dirname \"$0\")\/python3./g'
|
||||
cd "${BUNDLE_DIR}/Contents/Frameworks/Python.framework/Versions/Current/bin" || exit
|
||||
# shellcheck disable=SC2016
|
||||
grep -RiIl 'mac-build' ./* | xargs sed -i '' 's/\/.*\/python3\./\$(dirname \"$0\")\/python3./g'
|
||||
|
||||
# Remove some things we don't need
|
||||
cd "${BUNDLE_DIR}/Contents/Frameworks/Python.framework"
|
||||
cd "${BUNDLE_DIR}/Contents/Frameworks/Python.framework" || exit
|
||||
find . -name test -type d -print0 | xargs -0 rm -rf
|
||||
find . -name tkinter -type d -print0 | xargs -0 rm -rf
|
||||
find . -name turtle.py -type f -print0 | xargs -0 rm -rf
|
||||
find . -name turtledemo -type d -print0 | xargs -0 rm -rf
|
||||
find . -name tcl* -type d -print0 | xargs -0 rm -rf
|
||||
find . -name tk* -type d -print0 | xargs -0 rm -rf
|
||||
find . -name tdbc* -type d -print0 | xargs -0 rm -rf
|
||||
find . -name itcl* -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "tcl*" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "tk*" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "tdbc*" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "itcl*" -type d -print0 | xargs -0 rm -rf
|
||||
rm -f Versions/Current/lib/Tk.*
|
||||
rm -f Versions/Current/lib/libtcl*.dylib
|
||||
rm -f Versions/Current/lib/libtk*.dylib
|
||||
@@ -123,15 +133,16 @@ _build_docs() {
|
||||
# Create a temporary venv for the doc build, so we don't contaminate the one
|
||||
# that we're going to ship.
|
||||
"${BUNDLE_DIR}/Contents/Frameworks/Python.framework/Versions/Current/bin/python3" -m venv "${BUILD_ROOT}/venv"
|
||||
# shellcheck disable=SC1091
|
||||
source "${BUILD_ROOT}/venv/bin/activate"
|
||||
pip3 install --upgrade pip
|
||||
pip3 install -r "${SOURCE_DIR}/requirements.txt"
|
||||
pip3 install sphinx
|
||||
|
||||
cd "${SOURCE_DIR}"
|
||||
cd "${SOURCE_DIR}" || exit
|
||||
make docs
|
||||
|
||||
cd "${SOURCE_DIR}/docs/en_US"
|
||||
cd "${SOURCE_DIR}/docs/en_US" || exit
|
||||
test -d "${BUNDLE_DIR}/Contents/Resources/docs/en_US" || mkdir -p "${BUNDLE_DIR}/Contents/Resources/docs/en_US"
|
||||
cp -r _build/html "${BUNDLE_DIR}/Contents/Resources/docs/en_US/"
|
||||
|
||||
@@ -144,10 +155,10 @@ _fixup_imports() {
|
||||
local TODO TODO_OLD FW_RELPATH LIB LIB_BN
|
||||
|
||||
echo "Fixing imports on the core appbundle..."
|
||||
pushd "$1" > /dev/null
|
||||
pushd "$1" > /dev/null || exit
|
||||
|
||||
# Find all the files that may need tweaks
|
||||
TODO=$(file `find . -perm +0111 -type f` | \
|
||||
TODO=$(find . -perm +0111 -type f -exec file "{}" \; | \
|
||||
grep -v "Frameworks/Python.framework" | \
|
||||
grep -v "Frameworks/nwjs" | \
|
||||
grep -E "Mach-O 64-bit" | \
|
||||
@@ -155,7 +166,7 @@ _fixup_imports() {
|
||||
uniq)
|
||||
|
||||
# Add anything in the site-packages Python directory
|
||||
TODO+=$(file `find ./Contents/Frameworks/Python.framework/Versions/Current/lib/python*/site-packages -perm +0111 -type f` | \
|
||||
TODO+=$(find ./Contents/Frameworks/Python.framework/Versions/Current/lib/python*/site-packages -perm +0111 -type f -exec file "{}" \; | \
|
||||
grep -E "Mach-O 64-bit" | \
|
||||
awk -F ':| ' '{ORS=" "; print $1}' | \
|
||||
uniq)
|
||||
@@ -183,9 +194,9 @@ _fixup_imports() {
|
||||
|
||||
# Find all libraries ${TODO_OBJ} depends on, but skip system libraries
|
||||
for LIB in $(
|
||||
otool -L ${TODO_OBJ} | \
|
||||
otool -L "${TODO_OBJ}" | \
|
||||
sed -n 's|^.*[[:space:]]\([^[:space:]]*\.dylib\).*$|\1|p' | \
|
||||
egrep -v '^(/usr/lib)|(/System)|@executable_path|@loader_path|/DLC/PIL/' \
|
||||
grep -E -v '^(/usr/lib)|(/System)|@executable_path|@loader_path|/DLC/PIL/' \
|
||||
); do
|
||||
# Copy in any required dependencies
|
||||
LIB_BN="$(basename "${LIB}")" ;
|
||||
@@ -225,12 +236,12 @@ _fixup_imports() {
|
||||
done
|
||||
|
||||
echo "Imports updated on the core appbundle."
|
||||
popd > /dev/null
|
||||
popd > /dev/null || exit
|
||||
}
|
||||
|
||||
_complete_bundle() {
|
||||
echo "Completing the appbundle..."
|
||||
cd ${SCRIPT_DIR}
|
||||
cd "${SCRIPT_DIR}" || exit
|
||||
|
||||
# Copy the binary utilities into place
|
||||
mkdir -p "${BUNDLE_DIR}/Contents/SharedSupport/"
|
||||
@@ -247,7 +258,7 @@ _complete_bundle() {
|
||||
for FILE in "${BUNDLE_DIR}"/Contents/Resources/*.lproj/InfoPlist.strings; do
|
||||
sed -i '' 's/CFBundleGetInfoString =.*/CFBundleGetInfoString = "Copyright (C) 2013 - 2022, The pgAdmin Development Team";/g' "${FILE}"
|
||||
sed -i '' 's/NSHumanReadableCopyright =.*/NSHumanReadableCopyright = "Copyright (C) 2013 - 2022, The pgAdmin Development Team";/g' "${FILE}"
|
||||
echo CFBundleDisplayName = \"${APP_NAME}\"\; >> "${FILE}"
|
||||
echo CFBundleDisplayName = \""${APP_NAME}"\"\; >> "${FILE}"
|
||||
done
|
||||
|
||||
# PkgInfo
|
||||
@@ -266,39 +277,41 @@ _complete_bundle() {
|
||||
_fixup_imports "${BUNDLE_DIR}"
|
||||
|
||||
# Build node modules
|
||||
pushd "${SOURCE_DIR}/web" > /dev/null
|
||||
pushd "${SOURCE_DIR}/web" > /dev/null || exit
|
||||
yarn install
|
||||
yarn run bundle
|
||||
|
||||
curl https://curl.se/ca/cacert.pem -o cacert.pem -s
|
||||
popd > /dev/null
|
||||
popd > /dev/null || exit
|
||||
|
||||
# copy the web directory to the bundle as it is required by runtime
|
||||
cp -r "${SOURCE_DIR}/web" "${BUNDLE_DIR}/Contents/Resources/"
|
||||
cd "${BUNDLE_DIR}/Contents/Resources/web"
|
||||
cd "${BUNDLE_DIR}/Contents/Resources/web" || exit
|
||||
rm -f pgadmin4.db config_local.*
|
||||
rm -rf karma.conf.js package.json node_modules/ regression/ tools/ pgadmin/static/js/generated/.cache
|
||||
find . -name "tests" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "feature_tests" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name ".DS_Store" -print0 | xargs -0 rm -f
|
||||
|
||||
echo "SERVER_MODE = False" > config_distro.py
|
||||
echo "HELP_PATH = '../../../docs/en_US/html/'" >> config_distro.py
|
||||
echo "DEFAULT_BINARY_PATHS = {" >> config_distro.py
|
||||
echo " 'pg': '\$DIR/../../SharedSupport'," >> config_distro.py
|
||||
echo " 'ppas': ''" >> config_distro.py
|
||||
echo "}" >> config_distro.py
|
||||
{
|
||||
echo "SERVER_MODE = False"
|
||||
echo "HELP_PATH = '../../../docs/en_US/html/'"
|
||||
echo "DEFAULT_BINARY_PATHS = {"
|
||||
echo " 'pg': '\$DIR/../../SharedSupport',"
|
||||
echo " 'ppas': ''"
|
||||
echo "}"
|
||||
} > config_distro.py
|
||||
|
||||
# License files
|
||||
cp -r ${SOURCE_DIR}/LICENSE "${BUNDLE_DIR}/Contents/"
|
||||
cp -r ${SOURCE_DIR}/DEPENDENCIES "${BUNDLE_DIR}/Contents/"
|
||||
cp -r "${SOURCE_DIR}/LICENSE" "${BUNDLE_DIR}/Contents/"
|
||||
cp -r "${SOURCE_DIR}/DEPENDENCIES" "${BUNDLE_DIR}/Contents/"
|
||||
|
||||
# Remove the .pyc files if any
|
||||
find "${BUNDLE_DIR}" -name "*.pyc" -print0 | xargs -0 rm -f
|
||||
}
|
||||
|
||||
_codesign_binaries() {
|
||||
if [ ${CODESIGN} -eq 0 ]; then
|
||||
if [ "${CODESIGN}" -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
@@ -309,13 +322,14 @@ _codesign_binaries() {
|
||||
|
||||
# Create the entitlements file
|
||||
cp "${SCRIPT_DIR}/entitlements.plist.in" "${BUILD_ROOT}/entitlements.plist"
|
||||
TEAM_ID=$(echo ${DEVELOPER_ID} | awk -F"[()]" '{print $2}')
|
||||
TEAM_ID=$(echo "${DEVELOPER_ID}" | awk -F"[()]" '{print $2}')
|
||||
sed -i '' "s/%TEAMID%/${TEAM_ID}/g" "${BUILD_ROOT}/entitlements.plist"
|
||||
|
||||
echo Signing ${BUNDLE_DIR} binaries...
|
||||
echo Signing "${BUNDLE_DIR}" binaries...
|
||||
IFS=$'\n'
|
||||
for i in $(find "${BUNDLE_DIR}" -type f -perm +111 -exec file "{}" \; | \
|
||||
grep -v "(for architecture" | \
|
||||
grep -v -E "^- Mach-O" | \
|
||||
grep -E "Mach-O executable|Mach-O 64-bit executable|Mach-O 64-bit bundle|Mach-O 64-bit dynamically linked shared library" | \
|
||||
awk -F":" '{print $1}' | \
|
||||
uniq)
|
||||
@@ -328,25 +342,23 @@ _codesign_binaries() {
|
||||
"$i"
|
||||
done
|
||||
|
||||
echo Signing ${BUNDLE_DIR} libraries...
|
||||
for i in $(find "${BUNDLE_DIR}" -type f -name "*.dylib*")
|
||||
do
|
||||
echo Signing "${BUNDLE_DIR}" libraries...
|
||||
find "${BUNDLE_DIR}" -type f -name "*.dylib*" -exec \
|
||||
codesign --deep --force --verify --verbose --timestamp \
|
||||
--options runtime \
|
||||
--entitlements "${BUILD_ROOT}/entitlements.plist" \
|
||||
-i org.pgadmin.pgadmin4 \
|
||||
--sign "${DEVELOPER_ID}" \
|
||||
"$i"
|
||||
done
|
||||
{} \;
|
||||
}
|
||||
|
||||
_codesign_bundle() {
|
||||
if [ ${CODESIGN} -eq 0 ]; then
|
||||
if [ "${CODESIGN}" -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
# Sign the .app
|
||||
echo Signing ${BUNDLE_DIR}...
|
||||
echo Signing "${BUNDLE_DIR}"...
|
||||
codesign --deep --force --verify --verbose --timestamp \
|
||||
--options runtime \
|
||||
--entitlements "${BUILD_ROOT}/entitlements.plist" \
|
||||
@@ -357,7 +369,7 @@ _codesign_bundle() {
|
||||
|
||||
_create_dmg() {
|
||||
# move to the directory where we want to create the DMG
|
||||
test -d ${DIST_ROOT} || mkdir ${DIST_ROOT}
|
||||
test -d "${DIST_ROOT}" || mkdir "${DIST_ROOT}"
|
||||
|
||||
echo "Checking out create-dmg..."
|
||||
git clone https://github.com/create-dmg/create-dmg.git "${BUILD_ROOT}/create-dmg"
|
||||
@@ -381,7 +393,7 @@ _create_dmg() {
|
||||
}
|
||||
|
||||
_codesign_dmg() {
|
||||
if [ ${CODESIGN} -eq 0 ]; then
|
||||
if [ "${CODESIGN}" -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
@@ -396,20 +408,19 @@ _codesign_dmg() {
|
||||
|
||||
|
||||
_notarize_pkg() {
|
||||
if [ ${CODESIGN} -eq 0 ]; then
|
||||
if [ "${CODESIGN}" -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
# Notarize the package. Try three times, to allow for upload issues
|
||||
cmd_status=0
|
||||
for i in {1..3}; do
|
||||
echo "Uploading DMG for notarisation (attempt ${i} of 3)..."
|
||||
STATUS=$(xcrun altool --notarize-app \
|
||||
-f "${DMG_NAME}" \
|
||||
--asc-provider ${DEVELOPER_NAME} \
|
||||
--asc-provider "${DEVELOPER_NAME}" \
|
||||
--primary-bundle-id org.pgadmin.pgadmin4 \
|
||||
-u ${DEVELOPER_USER} \
|
||||
-p ${DEVELOPER_ASP} 2>&1)
|
||||
-u "${DEVELOPER_USER}" \
|
||||
-p "${DEVELOPER_ASP}" 2>&1)
|
||||
RETVAL=$?
|
||||
|
||||
if [ ${RETVAL} != 0 ]; then
|
||||
@@ -427,7 +438,7 @@ _notarize_pkg() {
|
||||
fi
|
||||
|
||||
# Get the request ID
|
||||
REQUEST_UUID=$(echo ${STATUS} | awk '/RequestUUID/ { print $NF; }')
|
||||
REQUEST_UUID=$(echo "${STATUS}" | awk '/RequestUUID/ { print $NF; }')
|
||||
echo "Notarization request ID: ${REQUEST_UUID}"
|
||||
|
||||
# Now we need to wait for the results. Try 60 times.
|
||||
@@ -436,9 +447,9 @@ _notarize_pkg() {
|
||||
sleep 30
|
||||
|
||||
echo "Requesting notarisation result (attempt ${i} of 60)..."
|
||||
REQUEST_STATUS=$(xcrun altool --notarization-info ${REQUEST_UUID} \
|
||||
--username ${DEVELOPER_USER} \
|
||||
--password ${DEVELOPER_ASP} 2>&1 | \
|
||||
REQUEST_STATUS=$(xcrun altool --notarization-info "${REQUEST_UUID}" \
|
||||
--username "${DEVELOPER_USER}" \
|
||||
--password "${DEVELOPER_ASP}" 2>&1 | \
|
||||
awk -F ': ' '/Status:/ { print $2; }' )
|
||||
|
||||
if [[ "${REQUEST_STATUS}" == "success" ]]; then
|
||||
@@ -447,9 +458,9 @@ _notarize_pkg() {
|
||||
done
|
||||
|
||||
# Print status information
|
||||
xcrun altool --notarization-info ${REQUEST_UUID} \
|
||||
--username ${DEVELOPER_USER} \
|
||||
--password ${DEVELOPER_ASP}
|
||||
xcrun altool --notarization-info "${REQUEST_UUID}" \
|
||||
--username "${DEVELOPER_USER}" \
|
||||
--password "${DEVELOPER_ASP}"
|
||||
|
||||
if [[ "${REQUEST_STATUS}" != "success" ]]; then
|
||||
echo "Notarization failed."
|
||||
@@ -458,10 +469,8 @@ _notarize_pkg() {
|
||||
|
||||
# Staple the notarization
|
||||
echo "Stapling the notarization to the pgAdmin DMG..."
|
||||
xcrun stapler staple "${DMG_NAME}"
|
||||
|
||||
if [ $? != 0 ]; then
|
||||
echo "Stapling failed."
|
||||
if ! xcrun stapler staple "${DMG_NAME}"; then
|
||||
echo "Stapling failed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -8,49 +8,57 @@ set -e -E
|
||||
# Debugging shizz
|
||||
trap 'ERRCODE=$? && if [ ${ERRCODE} -ne 0 ]; then echo "The command \"${BASH_COMMAND}\" failed in \"${FUNCNAME}\" with exit code ${ERRCODE}."; fi' EXIT
|
||||
|
||||
SCRIPT_DIR=$(cd `dirname $0` && pwd)
|
||||
SOURCE_DIR=$(realpath ${SCRIPT_DIR}/../..)
|
||||
BUILD_ROOT=$(realpath ${SCRIPT_DIR}/../..)/mac-build
|
||||
TEMP_DIR=$(realpath ${SCRIPT_DIR}/../..)/mac-temp
|
||||
DIST_ROOT=$(realpath ${SCRIPT_DIR}/../..)/dist
|
||||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
export SCRIPT_DIR
|
||||
SOURCE_DIR=$(realpath "${SCRIPT_DIR}"/../..)
|
||||
export SOURCE_DIR
|
||||
BUILD_ROOT=$(realpath "${SCRIPT_DIR}"/../..)/mac-build
|
||||
export BUILD_ROOT
|
||||
TEMP_DIR=$(realpath "${SCRIPT_DIR}"/../..)/mac-temp
|
||||
export TEMP_DIR
|
||||
DIST_ROOT=$(realpath "${SCRIPT_DIR}"/../..)/dist
|
||||
export DIST_ROOT
|
||||
|
||||
CODESIGN=1
|
||||
if [ ! -f ${SCRIPT_DIR}/codesign.conf ]; then
|
||||
export CODESIGN=1
|
||||
if [ ! -f "${SCRIPT_DIR}/codesign.conf" ]; then
|
||||
echo
|
||||
echo "******************************************************************"
|
||||
echo "* pkg/mac/codesign.conf not found. NOT signing the binaries."
|
||||
echo "******************************************************************"
|
||||
echo
|
||||
CODESIGN=0
|
||||
export CODESIGN=0
|
||||
sleep 2
|
||||
else
|
||||
source ${SCRIPT_DIR}/codesign.conf
|
||||
# shellcheck disable=SC1091
|
||||
source "${SCRIPT_DIR}/codesign.conf"
|
||||
fi
|
||||
|
||||
NOTARIZE=1
|
||||
if [ ! -f ${SCRIPT_DIR}/notarization.conf ]; then
|
||||
export NOTARIZE=1
|
||||
if [ ! -f "${SCRIPT_DIR}/notarization.conf" ]; then
|
||||
echo
|
||||
echo "******************************************************************"
|
||||
echo "* pkg/mac/notarization.conf not found. NOT notarizing the package."
|
||||
echo "******************************************************************"
|
||||
echo
|
||||
NOTARIZE=0
|
||||
export NOTARIZE=0
|
||||
sleep 2
|
||||
else
|
||||
source ${SCRIPT_DIR}/notarization.conf
|
||||
# shellcheck disable=SC1091
|
||||
source "${SCRIPT_DIR}/notarization.conf"
|
||||
fi
|
||||
|
||||
if [ "x${PGADMIN_POSTGRES_DIR}" == "x" ]; then
|
||||
if [ "${PGADMIN_POSTGRES_DIR}" == "" ]; then
|
||||
echo "PGADMIN_POSTGRES_DIR not set. Setting it to the default: /usr/local/pgsql"
|
||||
export PGADMIN_POSTGRES_DIR=/usr/local/pgsql
|
||||
fi
|
||||
|
||||
if [ "x${PGADMIN_PYTHON_VERSION}" == "x" ]; then
|
||||
if [ "${PGADMIN_PYTHON_VERSION}" == "" ]; then
|
||||
echo "PGADMIN_PYTHON_VERSION not set. Setting it to the default: 3.9.9"
|
||||
export PGADMIN_PYTHON_VERSION=3.9.9
|
||||
fi
|
||||
|
||||
source ${SCRIPT_DIR}/build-functions.sh
|
||||
# shellcheck disable=SC1091
|
||||
source "${SCRIPT_DIR}/build-functions.sh"
|
||||
|
||||
_setup_env
|
||||
_cleanup
|
||||
|
||||
@@ -2,11 +2,63 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<!--
|
||||
Disable Sandboxing. This must be enabled for the app store, but it will
|
||||
cause NWjs to fail to start with an error like:
|
||||
|
||||
[1004/170922.238911:ERROR:directory_reader_posix.cc(42)] opendir /dev/fd: Operation not permitted (1)
|
||||
|
||||
We should figure out why that happens and fix it one day, but for now
|
||||
we just don't support the app store.
|
||||
-->
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<false/>
|
||||
|
||||
<!--
|
||||
Set the app group name for IPC and access to shared containers between
|
||||
our processes.
|
||||
-->
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<string>%TEAMID%.org.pgadmin.pgadmin4</string>
|
||||
|
||||
<!--
|
||||
We have no need for JIT.
|
||||
-->
|
||||
<key>com.apple.security.cs.allow-jit</key>
|
||||
<false/>
|
||||
|
||||
<!--
|
||||
Explicitly disallow executable code overwriting/patching.
|
||||
-->
|
||||
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
||||
<false/>
|
||||
|
||||
<!--
|
||||
Explicitly disallow use of dynamic loader environment variables that
|
||||
could be used for code injection.
|
||||
-->
|
||||
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
|
||||
<false/>
|
||||
|
||||
<!--
|
||||
Explicitly ensure that library validation is enabled so we only load
|
||||
libraries and frameworks signed by us or Apple.
|
||||
-->
|
||||
<key>com.apple.security.cs.disable-library-validation</key>
|
||||
<false/>
|
||||
|
||||
<!--
|
||||
We need to enable this, even though we don't modify our own executables.
|
||||
Otherwise, NWjs just bombs out.
|
||||
-->
|
||||
<key>com.apple.security.cs.disable-executable-page-protection</key>
|
||||
<true/>
|
||||
|
||||
<!--
|
||||
We're not a debugger (well, except for procedural languages in Postgres,
|
||||
but that doesn't count).
|
||||
-->
|
||||
<key>com.apple.security.cs.debugger</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -10,30 +10,28 @@
|
||||
#########################################################################
|
||||
|
||||
# Runtime checks
|
||||
if [ ! -d runtime -a ! -d web ]; then
|
||||
if [ ! -d runtime ] && [ ! -d web ]; then
|
||||
echo This script must be run from the top-level directory of the source tree.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d .git -a ! -f .git/config ]; then
|
||||
if [ ! -d .git ] && [ ! -f .git/config ]; then
|
||||
echo This script must be run from a git checkout of the source tree.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get the required package info
|
||||
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_NAME=`grep "^APP_NAME" web/config.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //'`
|
||||
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_NAME=$(grep "^APP_NAME" web/config.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //')
|
||||
APP_LONG_VERSION=${APP_RELEASE}.${APP_REVISION}
|
||||
APP_SHORT_VERSION=`echo ${APP_LONG_VERSION} | cut -d . -f1,2`
|
||||
APP_SUFFIX=`grep "^APP_SUFFIX" web/config.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g"`
|
||||
if [ ! -z ${APP_SUFFIX} ]; then
|
||||
APP_SUFFIX=$(grep "^APP_SUFFIX" web/config.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g")
|
||||
if [ -n "${APP_SUFFIX}" ]; then
|
||||
export APP_LONG_VERSION=${APP_LONG_VERSION}-${APP_SUFFIX}
|
||||
fi
|
||||
TARBALL_NAME=`echo ${APP_NAME}-${APP_LONG_VERSION} | sed 's/ //g' | awk '{print tolower($0)}'`
|
||||
|
||||
# Output basic details to show we're working
|
||||
echo Building tarballs for ${APP_NAME} version ${APP_LONG_VERSION}...
|
||||
echo Building tarballs for "${APP_NAME}" version "${APP_LONG_VERSION}"...
|
||||
|
||||
# Create/clearout the build directory
|
||||
echo Creating/cleaning required directories...
|
||||
@@ -49,36 +47,39 @@ mkdir pip-build/pgadmin4
|
||||
mkdir pip-build/pgadmin4/docs
|
||||
|
||||
# Build the clean tree
|
||||
cd web
|
||||
for FILE in `git ls-files`
|
||||
cd web || exit
|
||||
for FILE in $(git ls-files)
|
||||
do
|
||||
echo Adding ${FILE}
|
||||
echo Adding "${FILE}"
|
||||
# We use tar here to preserve the path, as Mac (for example) doesn't support cp --parents
|
||||
tar cf - ${FILE} | (cd ../pip-build/pgadmin4; tar xf -)
|
||||
# shellcheck disable=SC2164
|
||||
tar cf - "${FILE}" | (cd ../pip-build/pgadmin4; tar xf -)
|
||||
done
|
||||
|
||||
yarn install
|
||||
yarn run bundle
|
||||
|
||||
for FILE in `ls -d pgadmin/static/js/generated/*`
|
||||
for FILE in pgadmin/static/js/generated/*
|
||||
do
|
||||
echo Adding ${FILE}
|
||||
tar cf - ${FILE} | (cd ../pip-build/pgadmin4; tar xf -)
|
||||
echo Adding "${FILE}"
|
||||
# shellcheck disable=SC2164
|
||||
tar cf - "${FILE}" | (cd ../pip-build/pgadmin4; tar xf -)
|
||||
done
|
||||
|
||||
cd ../docs
|
||||
for FILE in `git ls-files`
|
||||
cd ../docs || exit
|
||||
for FILE in $(git ls-files)
|
||||
do
|
||||
echo Adding ${FILE}
|
||||
echo Adding "${FILE}"
|
||||
# We use tar here to preserve the path, as Mac (for example) doesn't support cp --parents
|
||||
tar cf - ${FILE} | (cd ../pip-build/pgadmin4/docs; tar xf -)
|
||||
# shellcheck disable=SC2164
|
||||
tar cf - "${FILE}" | (cd ../pip-build/pgadmin4/docs; tar xf -)
|
||||
done
|
||||
|
||||
for DIR in `ls -d ??_??/`
|
||||
for DIR in ./??_??/
|
||||
do
|
||||
if [ -d ${DIR}/_build/html ]; then
|
||||
mkdir -p ../pip-build/pgadmin4/docs/${DIR}/_build
|
||||
cp -R ${DIR}/_build/html ../pip-build/pgadmin4/docs/${DIR}/_build
|
||||
if [ -d "${DIR}"/_build/html ]; then
|
||||
mkdir -p "../pip-build/pgadmin4/docs/${DIR}/_build"
|
||||
cp -R "${DIR}/_build/html" "../pip-build/pgadmin4/docs/${DIR}/_build"
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -87,6 +88,7 @@ for FILE in LICENSE DEPENDENCIES README.md
|
||||
do
|
||||
echo Adding ${FILE}
|
||||
# We use tar here to preserve the path, as Mac (for example) doesn't support cp --parents
|
||||
# shellcheck disable=SC2164
|
||||
tar cf - ${FILE} | (cd pip-build/pgadmin4; tar xf -)
|
||||
done
|
||||
|
||||
@@ -101,7 +103,7 @@ echo recursive-include pgadmin4 \* > pip-build/MANIFEST.in
|
||||
|
||||
# Run the build
|
||||
echo Building wheel...
|
||||
cd pip-build
|
||||
cd pip-build || exit
|
||||
python ../pkg/pip/setup_pip.py bdist_wheel
|
||||
cd ../
|
||||
|
||||
|
||||
@@ -6,8 +6,7 @@ set -e
|
||||
# Debugging shizz
|
||||
trap 'ERRCODE=$? && if [ ${ERRCODE} -ne 0 ]; then echo "The command \"${BASH_COMMAND}\" failed in \"${FUNCNAME}\" with exit code ${ERRCODE}."; fi' EXIT
|
||||
|
||||
OS_VERSION=$(cat /etc/os-release | grep "^VERSION_ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_NAME=$(cat /etc/os-release | grep "^ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_ARCH=$(arch)
|
||||
|
||||
# Make sure we get the right libpq
|
||||
@@ -17,10 +16,11 @@ export PATH=/usr/pgsql-14/bin:$PATH
|
||||
export PYTHONDONTWRITEBYTECODE=1
|
||||
|
||||
# Common Linux build functions
|
||||
# shellcheck disable=SC1091
|
||||
source pkg/linux/build-functions.sh
|
||||
|
||||
# Assemble the "standard" installation footprint
|
||||
_setup_env $0 "redhat"
|
||||
_setup_env "$0" "redhat"
|
||||
_cleanup "rpm"
|
||||
_setup_dirs
|
||||
_create_python_virtualenv "redhat"
|
||||
@@ -30,7 +30,7 @@ _copy_code
|
||||
|
||||
# Get an RPM-compatible version number
|
||||
RPM_VERSION=${APP_RELEASE}.${APP_REVISION}
|
||||
if [ ! -z ${APP_SUFFIX} ]; then
|
||||
if [ -n "${APP_SUFFIX}" ]; then
|
||||
RPM_VERSION=${RPM_VERSION}_${APP_SUFFIX}
|
||||
fi
|
||||
|
||||
@@ -222,23 +222,23 @@ rpmbuild --define "pga_build_root ${BUILDROOT}" -bb "${BUILDROOT}/meta.spec"
|
||||
#
|
||||
# mod_wsgi for CentOS 7
|
||||
#
|
||||
if [ ${OS_VERSION} == 7 ]; then
|
||||
cp "${SOURCEDIR}/pkg/redhat/pgadmin4-python3-mod_wsgi-exports.patch" ${HOME}/rpmbuild/SOURCES
|
||||
cp "${SOURCEDIR}/pkg/redhat/pgadmin4-python3-mod_wsgi.conf" ${HOME}/rpmbuild/SOURCES
|
||||
curl -o ${HOME}/rpmbuild/SOURCES/mod_wsgi-4.9.0.tar.gz https://codeload.github.com/GrahamDumpleton/mod_wsgi/tar.gz/4.9.0
|
||||
if [ "${OS_VERSION}" == 7 ]; then
|
||||
cp "${SOURCEDIR}/pkg/redhat/pgadmin4-python3-mod_wsgi-exports.patch" "${HOME}/rpmbuild/SOURCES"
|
||||
cp "${SOURCEDIR}/pkg/redhat/pgadmin4-python3-mod_wsgi.conf" "${HOME}/rpmbuild/SOURCES"
|
||||
curl -o "${HOME}/rpmbuild/SOURCES/mod_wsgi-4.9.0.tar.gz" https://codeload.github.com/GrahamDumpleton/mod_wsgi/tar.gz/4.9.0
|
||||
rpmbuild -bb "${SOURCEDIR}/pkg/redhat/pgadmin4-python-mod_wsgi.spec"
|
||||
fi
|
||||
|
||||
# Get the libpq we need
|
||||
yumdownloader -y --downloadonly --destdir=$DISTROOT postgresql14-libs
|
||||
yumdownloader -y --downloadonly --destdir="${DISTROOT}" postgresql14-libs
|
||||
|
||||
#
|
||||
# Get the results!
|
||||
#
|
||||
cp ${HOME}/rpmbuild/RPMS/${OS_ARCH}/${APP_NAME}-*${RPM_VERSION}-*.${OS_ARCH}.rpm "${DISTROOT}/"
|
||||
cp ${HOME}/rpmbuild/RPMS/noarch/${APP_NAME}-*${RPM_VERSION}-*.noarch.rpm "${DISTROOT}/"
|
||||
if [ ${OS_VERSION} == 7 ]; then
|
||||
cp ${HOME}/rpmbuild/RPMS/${OS_ARCH}/pgadmin4-python3-mod_wsgi-4.9.0-1.el7.x86_64.rpm "${DISTROOT}/"
|
||||
cp "${HOME}/rpmbuild/RPMS/${OS_ARCH}/${APP_NAME}-"*"${RPM_VERSION}-"*".${OS_ARCH}.rpm" "${DISTROOT}/"
|
||||
cp "${HOME}/rpmbuild/RPMS/noarch/${APP_NAME}-"*"${RPM_VERSION}-"*".noarch.rpm" "${DISTROOT}/"
|
||||
if [ "${OS_VERSION}" == 7 ]; then
|
||||
cp "${HOME}/rpmbuild/RPMS/${OS_ARCH}/pgadmin4-python3-mod_wsgi-4.9.0-1.el7.x86_64.rpm" "${DISTROOT}/"
|
||||
fi
|
||||
|
||||
echo "Completed. RPMs created in ${DISTROOT}."
|
||||
@@ -5,7 +5,7 @@ REPO_RPM_VERSION=2
|
||||
REPO_RPM_BUILD=1
|
||||
|
||||
# Set the repo base directory
|
||||
if [ "x${PGADMIN_REPO_DIR}" == "x" ]; then
|
||||
if [ "${PGADMIN_REPO_DIR}" == "" ]; then
|
||||
echo "PGADMIN_REPO_DIR not set. Setting it to the default: https://ftp.postgresql.org/pub/pgadmin/pgadmin4/repos/yum"
|
||||
export PGADMIN_REPO_DIR=https://ftp.postgresql.org/pub/pgadmin/pgadmin4/repos/yum
|
||||
fi
|
||||
@@ -14,14 +14,10 @@ fi
|
||||
set -e
|
||||
|
||||
# Debugging shizz
|
||||
trap 'last_command=$current_command; current_command=$BASH_COMMAND' DEBUG
|
||||
trap 'if [ $? -ne 0 ]; then echo "\"${last_command}\" command filed with exit code $?."; fi' EXIT
|
||||
|
||||
OS_VERSION=$(cat /etc/os-release | grep "^VERSION_ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_NAME=$(cat /etc/os-release | grep "^ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_ARCH=$(arch)
|
||||
trap 'ERRCODE=$? && if [ ${ERRCODE} -ne 0 ]; then echo "The command \"${BASH_COMMAND}\" failed in \"${FUNCNAME}\" with exit code ${ERRCODE}."; fi' EXIT
|
||||
|
||||
# Common Linux build functions
|
||||
# shellcheck disable=SC1091
|
||||
source pkg/linux/build-functions.sh
|
||||
|
||||
# Are we installing a package key?
|
||||
@@ -38,14 +34,14 @@ fi
|
||||
# Create the Redhat packaging stuffs for the repo
|
||||
_create_repo_rpm() {
|
||||
DISTRO=$1
|
||||
if [ ${DISTRO} == "redhat" ]; then
|
||||
if [ "${DISTRO}" == "redhat" ]; then
|
||||
PLATFORM="rhel"
|
||||
else
|
||||
PLATFORM=${DISTRO}
|
||||
fi
|
||||
|
||||
echo "Creating the repo package for ${DISTRO}..."
|
||||
test -d ${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d || mkdir -p ${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d
|
||||
test -d "${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d" || mkdir -p "${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d"
|
||||
|
||||
cat << EOF > "${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d/pgadmin4.repo"
|
||||
[pgAdmin4]
|
||||
@@ -55,9 +51,11 @@ enabled=1
|
||||
EOF
|
||||
|
||||
if [ ${INCLUDE_KEY} -eq 1 ]; then
|
||||
echo repo_gpgcheck=1 >> "${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d/pgadmin4.repo"
|
||||
echo gpgcheck=1 >> "${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d/pgadmin4.repo"
|
||||
echo gpgkey=file:///etc/pki/rpm-gpg/PGADMIN_PKG_KEY >> "${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d/pgadmin4.repo"
|
||||
{
|
||||
echo repo_gpgcheck=1
|
||||
echo gpgcheck=1
|
||||
echo gpgkey=file:///etc/pki/rpm-gpg/PGADMIN_PKG_KEY
|
||||
} >> "${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d/pgadmin4.repo"
|
||||
else
|
||||
echo gpgcheck=0 >> "${BUILDROOT}/${DISTRO}-repo/etc/yum.repos.d/pgadmin4.repo"
|
||||
fi
|
||||
@@ -88,11 +86,11 @@ cp -rfa %{pga_build_root}/${DISTRO}-repo/* \${RPM_BUILD_ROOT}
|
||||
EOF
|
||||
|
||||
if [ ${INCLUDE_KEY} -eq 1 ]; then
|
||||
cat << EOF >> ${BUILDROOT}/${DISTRO}-repo.spec
|
||||
cat << EOF >> "${BUILDROOT}/${DISTRO}-repo.spec"
|
||||
/etc/pki/rpm-gpg/PGADMIN_PKG_KEY
|
||||
EOF
|
||||
test -d ${BUILDROOT}/${DISTRO}-repo/etc/pki/rpm-gpg || mkdir -p ${BUILDROOT}/${DISTRO}-repo/etc/pki/rpm-gpg
|
||||
cp pkg/redhat/PGADMIN_PKG_KEY ${BUILDROOT}/${DISTRO}-repo/etc/pki/rpm-gpg/
|
||||
test -d "${BUILDROOT}/${DISTRO}-repo/etc/pki/rpm-gpg" || mkdir -p "${BUILDROOT}/${DISTRO}-repo/etc/pki/rpm-gpg"
|
||||
cp pkg/redhat/PGADMIN_PKG_KEY "${BUILDROOT}/${DISTRO}-repo/etc/pki/rpm-gpg/"
|
||||
fi
|
||||
|
||||
# Build the package
|
||||
@@ -100,7 +98,7 @@ EOF
|
||||
rpmbuild --define "pga_build_root ${BUILDROOT}" -bb "${BUILDROOT}/${DISTRO}-repo.spec"
|
||||
}
|
||||
|
||||
_setup_env $0 "redhat"
|
||||
_setup_env "$0" "redhat"
|
||||
_create_repo_rpm redhat
|
||||
_create_repo_rpm fedora
|
||||
|
||||
@@ -108,4 +106,4 @@ _create_repo_rpm fedora
|
||||
# Get the results!
|
||||
#
|
||||
test -d "${DISTROOT}/" || mkdir -p "${DISTROOT}/"
|
||||
cp ${HOME}/rpmbuild/RPMS/noarch/${APP_NAME}-*-repo-${REPO_RPM_VERSION}-${REPO_RPM_BUILD}.noarch.rpm "${DISTROOT}/"
|
||||
cp "${HOME}/rpmbuild/RPMS/noarch/${APP_NAME}-"*"-repo-${REPO_RPM_VERSION}-${REPO_RPM_BUILD}.noarch.rpm" "${DISTROOT}/"
|
||||
@@ -5,24 +5,24 @@ if [ "$EUID" -ne 0 ]
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OS_VERSION=$(cat /etc/os-release | grep "^VERSION_ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g' | awk -F "." '{ print $1 }')
|
||||
OS_VERSION=$(grep "^VERSION_ID=" /etc/os-release | awk -F "=" '{ print $2 }' | sed 's/"//g' | awk -F "." '{ print $1 }')
|
||||
|
||||
# EPEL & other repos
|
||||
if [ ${OS_VERSION} != 9 ]; then
|
||||
if [ "${OS_VERSION}" != 9 ]; then
|
||||
yum -y install centos-release-scl
|
||||
fi
|
||||
|
||||
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-${OS_VERSION}.noarch.rpm
|
||||
if [ ${OS_VERSION} == 8 ] || [ ${OS_VERSION} == 9 ]; then
|
||||
yum config-manager --enable PowerTools AppStream BaseOS *epel
|
||||
yum install -y "https://dl.fedoraproject.org/pub/epel/epel-release-latest-${OS_VERSION}.noarch.rpm"
|
||||
if [ "${OS_VERSION}" == 8 ] || [ "${OS_VERSION}" == 9 ]; then
|
||||
yum config-manager --enable PowerTools AppStream BaseOS "*epel"
|
||||
dnf -qy module disable postgresql
|
||||
fi
|
||||
|
||||
# PostgreSQL repo
|
||||
if [ ${OS_VERSION} == 7 ] || [ ${OS_VERSION} == 8 ] || [ ${OS_VERSION} == 9 ]; then
|
||||
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-${OS_VERSION}-x86_64/pgdg-redhat-repo-latest.noarch.rpm
|
||||
if [ "${OS_VERSION}" == 7 ] || [ "${OS_VERSION}" == 8 ] || [ "${OS_VERSION}" == 9 ]; then
|
||||
yum install -y "https://download.postgresql.org/pub/repos/yum/reporpms/EL-${OS_VERSION}-x86_64/pgdg-redhat-repo-latest.noarch.rpm"
|
||||
else
|
||||
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/F-${OS_VERSION}-x86_64/pgdg-fedora-repo-latest.noarch.rpm
|
||||
yum install -y "https://download.postgresql.org/pub/repos/yum/reporpms/F-${OS_VERSION}-x86_64/pgdg-fedora-repo-latest.noarch.rpm"
|
||||
fi
|
||||
|
||||
# Node repo
|
||||
@@ -37,20 +37,21 @@ curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yu
|
||||
echo "Installing build pre-requisites..."
|
||||
yum groupinstall -y "Development Tools"
|
||||
|
||||
if [ ${OS_VERSION} == 7 ]; then
|
||||
if [ "${OS_VERSION}" == 7 ]; then
|
||||
yum install -y expect fakeroot httpd-devel postgresql14-devel python3-devel nodejs yarn rpm-build rpm-sign yum-utils krb5-devel
|
||||
pip3 install sphinx
|
||||
elif [ ${OS_VERSION} == 9 ]; then
|
||||
elif [ "${OS_VERSION}" == 9 ]; then
|
||||
yum install -y expect postgresql14-devel python3-devel nodejs yarn rpm-build rpm-sign yum-utils krb5-devel
|
||||
pip3 install sphinx
|
||||
else
|
||||
yum install -y expect fakeroot postgresql14-devel python3-devel python3-sphinx nodejs yarn rpm-build rpm-sign yum-utils krb5-devel
|
||||
yum install -y expect fakeroot postgresql14-devel python3-devel nodejs yarn rpm-build rpm-sign yum-utils krb5-devel
|
||||
pip3 install sphinx
|
||||
fi
|
||||
|
||||
# Setup RPM macros for signing
|
||||
echo "Please add the following macros to ~/.rpmmacros for the user that will sign the RPMs if required:"
|
||||
echo
|
||||
if [ ${OS_VERSION} == 7 ]; then
|
||||
if [ "${OS_VERSION}" == 7 ]; then
|
||||
cat << EOF
|
||||
# Macros for signing RPMs.
|
||||
|
||||
|
||||
@@ -10,31 +10,30 @@
|
||||
#########################################################################
|
||||
|
||||
# Runtime checks
|
||||
if [ ! -d runtime -a ! -d web ]; then
|
||||
if [ ! -d runtime ] && [ ! -d web ]; then
|
||||
echo This script must be run from the top-level directory of the source tree.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d .git -a ! -f .git/config ]; then
|
||||
if [ ! -d .git ] && [ ! -f .git/config ]; then
|
||||
echo This script must be run from a git checkout of the source tree.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get the required package info
|
||||
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_NAME=`grep "^APP_NAME" web/config.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //'`
|
||||
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_NAME=$(grep "^APP_NAME" web/config.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //')
|
||||
APP_LONG_VERSION=${APP_RELEASE}.${APP_REVISION}
|
||||
APP_SHORT_VERSION=`echo ${APP_LONG_VERSION} | cut -d . -f1,2`
|
||||
APP_SUFFIX=`grep "^APP_SUFFIX" web/config.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g"`
|
||||
if [ ! -z ${APP_SUFFIX} ]; then
|
||||
APP_SUFFIX=$(grep "^APP_SUFFIX" web/config.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g")
|
||||
if [ -n "${APP_SUFFIX}" ]; then
|
||||
export APP_LONG_VERSION=${APP_LONG_VERSION}-${APP_SUFFIX}
|
||||
fi
|
||||
TARBALL_NAME=`echo ${APP_NAME}-${APP_LONG_VERSION} | sed 's/ //g' | awk '{print tolower($0)}'`
|
||||
DOC_TARBALL_NAME=`echo ${APP_NAME}-${APP_LONG_VERSION}-docs | sed 's/ //g' | awk '{print tolower($0)}'`
|
||||
TARBALL_NAME=$(echo "${APP_NAME}-${APP_LONG_VERSION}" | sed 's/ //g' | awk '{print tolower($0)}')
|
||||
DOC_TARBALL_NAME=$(echo "${APP_NAME}-${APP_LONG_VERSION}-docs" | sed 's/ //g' | awk '{print tolower($0)}')
|
||||
|
||||
# Output basic details to show we're working
|
||||
echo Building tarballs for ${APP_NAME} version ${APP_LONG_VERSION}...
|
||||
echo "Building tarballs for ${APP_NAME} version ${APP_LONG_VERSION}..."
|
||||
|
||||
# Create/clearout the build directory
|
||||
echo Creating/cleaning required directories...
|
||||
@@ -42,58 +41,60 @@ if [ ! -d src-build ]; then
|
||||
mkdir src-build
|
||||
fi
|
||||
|
||||
if [ -d src-build/${TARBALL_NAME} ]; then
|
||||
rm -rf src-build/${TARBALL_NAME}
|
||||
if [ -d "src-build/${TARBALL_NAME}" ]; then
|
||||
rm -rf "src-build/${TARBALL_NAME}"
|
||||
fi
|
||||
|
||||
mkdir src-build/${TARBALL_NAME}
|
||||
mkdir "src-build/${TARBALL_NAME}"
|
||||
|
||||
# Create the output directory if not present
|
||||
if [ ! -d dist ]; then
|
||||
mkdir dist
|
||||
fi
|
||||
|
||||
if [ -f dist/${TARBALL_NAME}.tar.gz ]; then
|
||||
rm -f dist/${TARBALL_NAME}.tar.gz
|
||||
if [ -f "dist/${TARBALL_NAME}.tar.gz" ]; then
|
||||
rm -f "dist/${TARBALL_NAME}.tar.gz"
|
||||
fi
|
||||
|
||||
if [ -f dist/${DOC_TARBALL_NAME}.tar.gz ]; then
|
||||
rm -f dist/${DOC_TARBALL_NAME}.tar.gz
|
||||
if [ -f "dist/${DOC_TARBALL_NAME}.tar.gz" ]; then
|
||||
rm -f "dist/${DOC_TARBALL_NAME}.tar.gz"
|
||||
fi
|
||||
|
||||
# Build the clean tree
|
||||
for FILE in `git ls-files`
|
||||
for FILE in $(git ls-files)
|
||||
do
|
||||
echo Adding ${FILE}
|
||||
echo Adding "${FILE}"
|
||||
# We use tar here to preserve the path, as Mac (for example) doesn't support cp --parents
|
||||
tar cf - ${FILE} | (cd src-build/${TARBALL_NAME}; tar xf -)
|
||||
# shellcheck disable=SC2164
|
||||
tar cf - "${FILE}" | (cd "src-build/${TARBALL_NAME}"; tar xf -)
|
||||
done
|
||||
|
||||
pushd web > /dev/null
|
||||
pushd web > /dev/null || exit
|
||||
yarn install
|
||||
yarn run bundle
|
||||
|
||||
for FILE in `ls -d pgadmin/static/js/generated/*`
|
||||
for FILE in pgadmin/static/js/generated/*
|
||||
do
|
||||
echo Adding ${FILE}
|
||||
tar cf - ${FILE} | (cd ../src-build/${TARBALL_NAME}/web; tar xf -)
|
||||
echo Adding "${FILE}"
|
||||
# shellcheck disable=SC2164
|
||||
tar cf - "${FILE}" | (cd "../src-build/${TARBALL_NAME}/web"; tar xf -)
|
||||
done
|
||||
popd > /dev/null
|
||||
popd > /dev/null || exit
|
||||
|
||||
# Create the tarball
|
||||
echo Creating tarball...
|
||||
cd src-build
|
||||
tar zcvf ../dist/${TARBALL_NAME}.tar.gz ${TARBALL_NAME}
|
||||
cd src-build || exit
|
||||
tar zcvf "../dist/${TARBALL_NAME}.tar.gz" "${TARBALL_NAME}"
|
||||
cd ..
|
||||
|
||||
# Create the docs
|
||||
echo Creating docs...
|
||||
cd src-build/${TARBALL_NAME}/docs/en_US
|
||||
cd "src-build/${TARBALL_NAME}/docs/en_US" || exit
|
||||
make -f Makefile.sphinx html
|
||||
cd _build
|
||||
mv html ${DOC_TARBALL_NAME}
|
||||
tar zcvf ../../../../../dist/${DOC_TARBALL_NAME}.tar.gz ${DOC_TARBALL_NAME}
|
||||
cd _build || exit
|
||||
mv html "${DOC_TARBALL_NAME}"
|
||||
tar zcvf "../../../../../dist/${DOC_TARBALL_NAME}.tar.gz" "${DOC_TARBALL_NAME}"
|
||||
cd ../../../../../
|
||||
|
||||
# Fin!
|
||||
echo Created tarball dist/${TARBALL_NAME}.tar.gz and dist/${DOC_TARBALL_NAME}.tar.gz
|
||||
echo "Created tarball dist/${TARBALL_NAME}.tar.gz and dist/${DOC_TARBALL_NAME}.tar.gz"
|
||||
@@ -141,7 +141,7 @@ want to build an installer.
|
||||
|
||||
1. Check out the source code:
|
||||
|
||||
git clone https://git.postgresql.org/git/pgadmin4.git
|
||||
git clone https://github.com/pgadmin-org/pgadmin4.git
|
||||
|
||||
2. Install and build the JS dependencies:
|
||||
|
||||
|
||||