Compare commits

...
124 Commits
Author SHA1 Message Date
Akshay Joshi 78757564c8 Pin Flask-SocketIO <= v5.2.0. The latest version does not support Werkzeug in production environments. Fixes #7641 2022-08-25 13:21:18 +05:30
Yogesh Mahajan 41a3345101 Fixed an issue where the cursor was not visible in the code tab of the trigger dialog. 2022-08-23 18:45:43 +05:30
Nikhil Mohite 6b6efd1c4d Fixed Jasmine test cases.
refs #7633
2022-08-22 18:47:14 +05:30
Akshay Joshi d53f2b69f2 Update version for release. 2022-08-22 16:00:00 +05:30
Nikhil Mohite 5c04f1aa2e 1) Ensure that the autofocus is on the input control for the master password and server password dialogs. Fixes #7633
2) Fixed an XSS vulnerability in the Hostname/Address control in the Server Connection dialog.
2022-08-22 15:58:17 +05:30
Yogesh Mahajan 2de89dcaaf Fixed an issue where a user could not authenticate using Azure CLI on OSX. Fixes #7632 2022-08-22 14:50:18 +05:30
Aditya Toshniwal f2cc897f2f 1. Fixed an issue where copy and pasting a row in the results grid doesn't set the default for boolean. Fixes #7579
2. Fixed an issue where the History tab is getting blank and showing an error after some queries are executed. Fixes #7468
3. Fixed query tool view data crash.
2022-08-22 14:33:38 +05:30
Akshay Joshi 56e2c9db97 Ensure that If the trigger function definition is changed, drop and recreate the trigger in the schema diff. Fixes #7630 2022-08-22 11:56:11 +05:30
Domenico Sgarbossa 8ca8cb9409 Updated Italian translation. 2022-08-22 10:23:54 +05:30
Libor M 0d518a5cb6 Updated Czech translation. 2022-08-22 10:21:37 +05:30
Akshay Joshi 0f53fc8511 Fixed Spanish translations typo. Fixes #7625
Submitted by: Alan Nevot
2022-08-22 10:20:10 +05:30
Akshay Joshi d7307fd334 Update message catalogs 2022-08-18 18:45:42 +05:30
Akshay Joshi ee1f97d124 Update Dependencies 2022-08-18 18:44:01 +05:30
Aditya Toshniwal 09e2c0eac0 1. Explain plan crashes query tool after SonarQube fixes.
2. Fix XSS issue in query tool.
3. Process details for cloud process not showing complete command.
4. Confirm dialog before removing processes.
2022-08-18 18:42:03 +05:30
Yogesh Mahajan f873ab5374 1) Ensure that the next button should be disabled if the password did not match for Azure deployment. Fixes #7616
2) Fixed an issue where Azure cloud deployment failed. Fixes #7617
2022-08-18 18:39:52 +05:30
Khushboo Vashi 8bcd1e4e60 Strings are wrapped into gettext in the Dashboard and Cloud modules. 2022-08-18 13:41:27 +05:30
Akshay Joshi e455114441 1) Fixed column "none" does not exist issue, while comparing schema objects. Fixes #7591
2) Fixed an issue where schema diff did not pick up the change in RLS policy. Fixes #7596
3) Ensure that schema diff maintains view ownership when view definitions are modified. Fixes #7611
2022-08-18 13:40:28 +05:30
Aditya Toshniwal 306b184e11 1. Fixed an issue where Alt-Shift-Q didn't work after creating a new query. Fixes #7575
2. Fixed an issue where the Query Editor loses focus when saving a query (Alt+s). Fixes #7521
3. Ensure that an error is thrown if clipboard access is not provided and change the copy rows shortcut. Fixes #7452
2022-08-17 17:23:44 +05:30
Dave Page c8ef4733d0 Various minor string fixes. 2022-08-17 12:47:13 +01:00
Dave Page 71647c886d Fix label. 2022-08-17 12:34:47 +01:00
Akshay Joshi 3583b094d0 Fixed API test cases for Postgres 14.4 2022-08-17 15:29:56 +05:30
Akshay Joshi da927f4897 1) Autocomplete on keypress should be set to False by default.
2) Update the documentation for the locked option in user management.
2022-08-17 14:38:37 +05:30
Akshay Joshi f771d3a4bb Conditionally pin Flask version based on Python version. 2022-08-17 12:21:05 +05:30
Akshay Joshi d4fdd4601e 1) Pin Flask version 2.1.*
2) Fixed API test cases that failed due to a change in the Werkzeug version.
3) Change password issue is fixed.
2022-08-17 11:54:16 +05:30
Aditya Toshniwal b12c1f8740 1. Stop process of Process details dialog not working.
2. When a server of an in progress cloud deployment is expanded, it is throwing a failed error.
3. Close the process notification on clicking View Processes.

Fixes #3709
2022-08-16 17:58:02 +05:30
Akshay Joshi ef91207669 1) Fixed an issue where an existing user is deleted and recreated again in the User Management dialog. Fixes #7618
2) Fixed preferences issue when changing themes.
3) Added validation for user names that already exist.
2022-08-16 17:28:45 +05:30
Khushboo Vashi d45072fae5 Ensure that rename panel should work on view/edit panels. Fixes #7540 2022-08-16 15:31:55 +05:30
Akshay Joshi ff4c5392d6 Fixed crypt key is missing issue when logout from the pgAdmin. Fixes #7614 2022-08-16 15:29:57 +05:30
Akshay Joshi 485265979e Fixed an issue email already exists and disable the 'Locked' switch when its value is false. Fixes #7618 2022-08-16 15:25:25 +05:30
Akshay Joshi 88a443f73d Add a condition for Werkzeug version 2.1.1, as it is supported on Python 3.7 and above. 2022-08-16 12:52:04 +05:30
Akshay Joshi 2d27a97b8c Fixed improper parsing of HTTP requests in Pallets Werkzeug v2.1.0 and below (CVE-2022-29361). Fixes #7602 2022-08-16 12:20:01 +05:30
Akshay Joshi 06d454473c Fixed an issue where an invalid email error was not visible on the GUI. Fixes #7609 2022-08-14 08:48:58 +05:30
Khushboo Vashi ae5254e8a9 Fixed an issue where the cloud deployment wizard creates the cluster with the
High Availability even if that option is not selected. Fixes #7608
2022-08-14 07:14:10 +05:30
Akshay Joshi 1e94c3bd81 Fixed Security Hotspot reported by SonarQube. 2022-08-14 07:09:45 +05:30
Dave Page 6179b216c5 Fix translation. 2022-08-12 14:30:59 +01:00
Akshay Joshi 76f581289c Fixed maintenance feature test. 2022-08-12 18:21:42 +05:30
Aditya Toshniwal 7bd0d55c83 Fixed Security Hotspot reported by SonarQube. 2022-08-12 17:14:15 +05:30
Akshay Joshi 084203debc Fixed Securtiy Hotspot reported by SonarQube. 2022-08-12 17:10:26 +05:30
Nikhil Mohite b34078c6d2 Fixed SonarQube issues 2022-08-12 12:19:11 +05:30
Akshay Joshi b6765e00eb Fixed feature tests failed after user management changes. 2022-08-12 12:18:05 +05:30
Dave Page 2567ed5784 Fix a bug introduced by the previous Sonarqube fixes. 2022-08-11 10:44:55 +01:00
Dave Page 3cffcc8f5b Sonarqube fixes for Docker. 2022-08-11 09:30:43 +01:00
Pradip Parkale b4e5717bde Fixed an issue where expanding the Shared Servers group would open the properties dialog for another server. 2022-08-11 13:10:18 +05:30
Christian Tosta 9a7859c5cb Added Brazilian language support. 2022-08-11 12:58:31 +05:30
Aditya Toshniwal e1fa1b0396 Ensure that the children of information_schema and pg_catalog node should be displayed. Fixes #7587 2022-08-11 10:53:07 +05:30
Aditya Toshniwal c2b23465cc 1) Added support to show all background processes in separate panel. Fixes #3709
2) Port process watcher to React. Fixes #7404
2022-08-11 10:49:45 +05:30
Akshay Joshi 271b6d91fc Port User Management dialog to React. Fixes #7345 2022-08-11 10:25:52 +05:30
Dave Page 3766fa7f0b Sphinx doesn't seem to be in EPEL any more. 2022-08-10 17:17:56 +01:00
Dave Page 626681c5ba Yet more Sonarqube fixes. 2022-08-10 17:01:31 +01:00
Dave Page 9c9fb293da Yet more Sonarqube fixes. 2022-08-10 16:43:48 +01:00
Dave Page 2bc60c9142 More Sonarqube fixes for macOS 2022-08-10 16:18:19 +01:00
Dave Page 0f11033989 More Sonarqube fixes for Linux 2022-08-10 15:54:51 +01:00
Dave Page c0c4524ec3 Sonarqube fixes for macOS 2022-08-10 14:56:25 +01:00
Aditya Toshniwal 8b7ce2c276 Port change user password and 2FA dialog to React. Fixes #7568 2022-08-10 18:02:54 +05:30
Dave Page 5e4d3cc535 More sonarqube fixes for Linux 2022-08-10 11:34:40 +01:00
Dave Page f6e7221359 Remove unnecessary variable. 2022-08-10 10:44:06 +01:00
Dave Page d7ad375232 Fix additional issues detected by Sonarqube. 2022-08-10 10:36:47 +01:00
Nikhil Mohite 9c418188ee Fixed SonarQube issues. 2022-08-10 15:05:20 +05:30
Dave Page b69af1341b NodeJS 16 should be the default. 2022-08-10 10:27:40 +01:00
Dave Page 233652c3f1 Fix some issues detected bu Sonarqube. 2022-08-10 10:22:06 +01:00
Dave Page 923f2fc7c4 'file' output might span two lines with universal binaries.
Filter out any lines that start with "- Mach-O".
2022-08-10 10:20:01 +01:00
Aditya Toshniwal f5793e9a7a Fixed SonarQube issues. 2022-08-09 15:42:16 +05:30
Yogesh Mahajan f96653e9af Fixed an issue with rendering geometry when selecting a complete column. Fixes #7586 2022-08-09 13:28:09 +05:30
Pradip Parkale 8c24d28740 Remove the SQL files for the unsupported versions of the database server. Fixes #7462
Fixed API test cases for Postgres 14.4. Fixes #7527
2022-08-09 13:24:52 +05:30
Akshay Joshi d1c94ac73d Fixed SonarQube issues. 2022-08-05 18:58:03 +05:30
Yogesh Mahajan fa6b77b42c Port Role Reassign dialog to React. Fixes #7344 2022-08-05 16:04:15 +05:30
Yogesh Mahajan 4c6e7d4f4f Fixed an issue with the error message being displayed at the right place for Azure deployments. Fixes #7497 2022-08-05 14:11:17 +05:30
Akshay Joshi 53887c32bf Port change ownership dialog to React. Fixes #7590 2022-08-05 14:11:17 +05:30
Dave Page 060d7ba46b Update the container base image to Alpine 3.16 (with Python 3.10.5). Fixes #7595 2022-08-04 11:50:56 +01:00
Yogesh Mahajan 5877b49f64 Fixed FileManager feature tests. 2022-08-03 18:59:01 +05:30
Akshay Joshi 352eb15dc7 Fixed PEP8 2022-08-01 22:06:34 +05:30
Dave Page 66a1123268 Clarify config settings that may need to be re-defined if SERVER_MODE or DATA_DIR are updated in an included config file. 2022-08-01 16:17:49 +01:00
Akshay Joshi 95312f2d14 1) Ensure that autocomplete does not appear when navigating code using arrow keys. Fixes #7573
2) Fixed an issue where autocomplete is not working after clearing the query editor. Fixes #7563
2022-08-01 14:38:32 +05:30
Yogesh Mahajan 6145dc76fc Added support to create triggers from existing trigger functions in EPAS. Fixes #7387 2022-07-28 11:16:05 +05:30
Libor M 526ee51485 Update Czech translation. 2022-07-28 10:20:07 +05:30
Domenico Sgarbossa 1dab98c6a0 Update Italian translation. 2022-07-28 10:17:31 +05:30
Fred Escallier 7e46e46080 Update French translation. 2022-07-28 10:16:21 +05:30
Akshay Joshi 81b0d1138b Remove Alertify dialog from Grant Wizard, Import/Export Servers and Cloud. 2022-07-28 10:14:04 +05:30
Akshay Joshi 81f52a82c8 Port About dialog to React. Fixes #7567 2022-07-28 10:11:40 +05:30
Aditya Toshniwal a7fd7d67b3 1. Intermittently failing test cases.
2. Dialog vertical position should be more on the upper side.
3. File not supported error is not showing.

refs #7313
2022-07-25 11:48:27 +05:30
Akshay Joshi 96c360e728 Update version for release. 2022-07-25 09:33:11 +05:30
Akshay Joshi 3e3f06c55d Fixed an issue where Autocomplete did not work after pressing CTRL/CMD + Space
for the second time and autocomplete on keypress is off. Fixes #7563
2022-07-22 18:49:46 +05:30
Akshay Joshi 1745aaaa0a Update Dependencies 2022-07-22 16:11:01 +05:30
Akshay Joshi c67ed7d7d2 Update message catalogs. 2022-07-22 16:09:43 +05:30
Yogesh Mahajan f6d8f9f5c5 Fixed feature tests. 2022-07-22 16:07:25 +05:30
Akshay Joshi a4c12555cb Fixed docker build. 2022-07-22 13:04:24 +05:30
Aditya Toshniwal 8d1868305d Fixed Jasmine test cases.
refs #7313
2022-07-21 15:45:51 +05:30
Akshay Joshi 2cdee919c1 Fixed audit issues. 2022-07-21 13:44:19 +05:30
Yogesh Mahajan 3f8c36789f Fixed copy command error on Windows in Import/Export data.
refs #7428
2022-07-21 13:07:42 +05:30
Akshay Joshi 631a08189a 1) Improved autocomplete loading indicator.
2) Avoid too many ajax requests per key press.

refs #4488
2022-07-20 18:02:45 +05:30
Aditya Toshniwal 4808df5e95 1) Port the file/storage manager to React. Fixes #7313
2) Allow users to delete files/folders from the storage manager. Fixes #4607
3) Allow users to search within the file/storage manager. Fixes #7389
4) Fixed an issue where new folders cannot be created in the save dialog. Fixes #7524
2022-07-19 15:27:47 +05:30
Akshay Joshi 4585597388 Added option to trigger autocomplete on key press in the query tool. Fixes #4488 2022-07-19 11:55:37 +05:30
Yogesh Mahajan 8f73956d1e Fixed API test cases.
refs #7428
2022-07-18 18:15:46 +05:30
Yogesh Mahajan 8f2bda2309 1) Preserve the settings set by the user in the import/export data dialog. Fixes #7428
2) Fixed the JSON editor issue of hiding the first record. Fixes #7520
2022-07-18 10:54:03 +05:30
Aditya Toshniwal 9dde195af4 Ensure that notices should not disappear from the messages tab. Fixes #7512 2022-07-14 18:05:36 +05:30
Aditya Toshniwal 9468c80a78 Fixed an issue where comments on indexes are not displayed. Fixes #7508 2022-07-14 18:01:31 +05:30
Aditya Toshniwal 1fecf70123 Ensure that geometry should be shown for all the selected cells. Fixes #7519 2022-07-14 17:38:42 +05:30
Akshay Joshi a11f42b3e0 Fixed audit issues. 2022-07-14 11:24:17 +05:30
Yogesh Mahajan 683528b81c Fixed feature tests. 2022-07-12 11:10:23 +05:30
Akshay Joshi 02b0f35442 1) Port change password dialog to React. Fixes #7341
2) Port named restore point dialog to React. Fixes #7546
2022-07-11 13:39:09 +05:30
Yogesh Mahajan 1a5e60c44f Fixed feature tests. 2022-07-08 18:25:00 +05:30
Akshay Joshi a16e3523bd Ensure that the splash screen can be moved. Fixes # 7471 2022-07-07 14:11:36 +05:30
Akshay Joshi 50c930f5fa Make the controls on the Graph Visualiser collapsible and reorganize the controls. 2022-07-07 14:10:10 +05:30
Akshay Joshi 9cdcad7a88 1) Keep the selected columns for the X and Y-axis.
2) Lighten the color of the stacked line chart.
2022-07-06 18:58:15 +05:30
Yogesh Mahajan 59f5c0d955 Added support for Azure PostgreSQL deployment in server mode. Fixes #7522 2022-07-06 11:43:49 +05:30
Nikhil Mohite 64e6700228 Changed the default position of the dialog. 2022-07-05 18:46:49 +05:30
Akshay Joshi 7414394ceb Fixed the following issues in the Graph Visualiser:
1) Change all theme's color codes.
 2) Bar graph for the first and last labels on the X-axis does not display all the bars.
 3) Make the graphs always start from zero on the Y-axis.
2022-07-05 18:44:20 +05:30
Akshay Joshi 8b62cd1f04 Added support for visualise the graph using a Pie chart in the query tool. Fixes #7487 2022-07-05 10:47:17 +05:30
Aditya Toshniwal 239e3bb6f1 Some more theme related fixes. 2022-07-04 14:26:33 +05:30
Nikhil Mohite b283c0ba18 Port Master Password dialog to React. Fixes #7342 2022-07-04 12:16:23 +05:30
Pradip Parkale e59471d87d Ensure that dashboard graph API is not called after the panel has been closed. Fixes #7518 2022-07-04 12:03:18 +05:30
Akshay Joshi 6bebce7015 Fixed PEP8 2022-07-04 11:15:38 +05:30
Akshay Joshi eb65ab6b4b Fixed no module named 'setup' error. 2022-07-04 10:33:12 +05:30
Akshay Joshi 3a69d50458 Change the logic to call setup_db if the database doesn't exist. 2022-07-01 18:12:00 +05:30
Aditya Toshniwal 9c45a62b53 Fixed jasmine test cases introduced by the theme patch. 2022-07-01 15:01:51 +05:30
Fahar Abbas ed59584fe4 Fixed typo error for Statistics on the table header. Fixes #7523 2022-07-01 14:58:45 +05:30
Akshay Joshi bf7de8e7a5 Fixed an issue where the create_app() function was called twice if an SQLite database file was not present.
Remove the exec call to run the 'setup.py' instead call the setup database function directly.
2022-07-01 14:50:12 +05:30
Nikhil Mohite 9c745db413 Enable the start debugging button once execution is completed. Fixes #7517 2022-07-01 12:41:06 +05:30
Aditya Toshniwal 7d0ed90796 Fixed API test cases.
refs #7492
2022-07-01 12:07:43 +05:30
Fred Escallier b0681f55e9 Update French translation. 2022-07-01 12:06:34 +05:30
Aditya Toshniwal 86b30b3c83 Theme component usage has been fixed, a component should never be wrapped in multiple Theme components. 2022-06-30 15:18:20 +05:30
Akshay Joshi b92e2fcfc9 Added support for visualizing the graphs using Stacked Line, Bar, and Stacked Bar charts in the query tool. Fixes #7486 2022-06-30 12:38:48 +05:30
Akshay Joshi b1f6664292 Added some logging for start-up time and changed the ping time from every second to 250 milliseconds. 2022-06-30 11:11:30 +05:30
Aditya Toshniwal cb635f6706 Removing dynamic module loading and replacing it with static loading. Fixes #7492
Gets rid of all occurrences and usage of get_own_javascripts since it is no longer used.
2022-06-30 11:06:50 +05:30
1592 changed files with 59053 additions and 70638 deletions

No files matched your search

+42 -20
View File
@@ -23,18 +23,18 @@ 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
@@ -42,28 +42,28 @@ simplejson 3.17.6
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.11 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
@@ -195,6 +195,7 @@ aspen-core 1.0.5
aspen-decorations 1.1.1 MIT git+https://github.com/neeksandhu/aspen-decorations.git
aspen-tree-model 1.0.5 MIT git+https://github.com/neeksandhu/aspen-tree-model.git
async 2.6.4 MIT https://github.com/caolan/async.git
attr-accept 2.2.2 MIT https://github.com/react-dropzone/attr-accept.git
axios 0.21.4 MIT https://github.com/axios/axios.git
babel-plugin-styled-components 1.13.3 MIT https://github.com/styled-components/babel-plugin-styled-components.git
babel-plugin-syntax-jsx 6.18.0 MIT https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-jsx
@@ -239,6 +240,7 @@ commander 7.2.0
concat-map 0.0.1 MIT git://github.com/substack/node-concat-map.git
context-menu 2.0.0 MIT https://github.com/chipto/context-menu.git
convert-source-map 1.8.0 MIT git://github.com/thlorenz/convert-source-map.git
convert-units 2.3.4 MIT git://github.com/ben-ng/convert-units.git
core-js 3.19.1 MIT https://github.com/zloirock/core-js.git
css-color-names 1.0.1 MIT git://github.com/bahamas10/css-color-names.git
css-line-break 2.0.1 MIT git+ssh://git@github.com/niklasvh/css-line-break.git
@@ -255,8 +257,7 @@ csstype 2.6.18
csstype 3.0.9 MIT https://github.com/frenic/csstype
dagre 0.8.5 MIT https://github.com/dagrejs/dagre.git
date-fns 2.25.0 MIT https://github.com/date-fns/date-fns
debug 4.3.2 MIT git://github.com/visionmedia/debug.git
debug 4.3.3 MIT git://github.com/debug-js/debug.git
debug 4.3.4 MIT git://github.com/debug-js/debug.git
decamelize 5.0.1 MIT https://github.com/sindresorhus/decamelize.git
decamelize 1.2.0 MIT https://github.com/sindresorhus/decamelize.git
decamelize-keys 1.1.0 MIT https://github.com/dsblv/decamelize-keys.git
@@ -266,7 +267,6 @@ dir-glob 3.0.1
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
dropzone 5.9.3 MIT https://github.com/dropzone/dropzone.git
emojis-list 3.0.0 MIT git+https://github.com/kikobeats/emojis-list.git
engine.io-client 6.0.2 MIT https://github.com/socketio/engine.io-client.git
engine.io-parser 5.0.3 MIT git@github.com:socketio/engine.io-parser.git
@@ -277,6 +277,7 @@ fast-deep-equal 3.1.3
fast-glob 3.2.11 MIT https://github.com/mrmlnc/fast-glob.git
fast-json-stable-stringify 2.1.0 MIT git://github.com/epoberezkin/fast-json-stable-stringify.git
fast-memoize 2.5.2 MIT git+https://github.com/caiogondim/fast-memoize.git
file-selector 0.6.0 MIT https://github.com/react-dropzone/file-selector.git
filename-reserved-regex 2.0.0 MIT https://github.com/sindresorhus/filename-reserved-regex.git
fill-range 7.0.1 MIT https://github.com/jonschlinkert/fill-range.git
find-up 5.0.0 MIT https://github.com/sindresorhus/find-up.git
@@ -315,7 +316,7 @@ is-unc-path 1.0.0
javascript-natural-sort 0.7.1 MIT https://github.com/Bill4Time/javascript-natural-sort.git
jquery 3.6.0 MIT https://github.com/jquery/jquery.git
jquery-contextmenu 2.9.2 MIT git://github.com/swisnl/jQuery-contextMenu.git
jquery-ui 1.13.0 MIT git://github.com/jquery/jquery-ui.git
jquery-ui 1.13.2 MIT git://github.com/jquery/jquery-ui.git
js-tokens 4.0.0 MIT https://github.com/lydell/js-tokens.git
jsbn 1.1.0 MIT https://github.com/andyperlitch/jsbn.git
jsesc 2.5.2 MIT https://github.com/mathiasbynens/jsesc.git
@@ -343,7 +344,26 @@ loader-utils 2.0.2
loader-utils 1.4.0 MIT https://github.com/webpack/loader-utils.git
locate-path 6.0.0 MIT https://github.com/sindresorhus/locate-path.git
lodash 4.17.21 MIT https://github.com/lodash/lodash.git
lodash._basebind 2.3.0 MIT https://github.com/lodash/lodash-cli.git
lodash._basecreate 2.3.0 MIT https://github.com/lodash/lodash-cli.git
lodash._basecreatecallback 2.3.0 MIT https://github.com/lodash/lodash-cli.git
lodash._basecreatewrapper 2.3.0 MIT https://github.com/lodash/lodash-cli.git
lodash._createwrapper 2.3.0 MIT https://github.com/lodash/lodash-cli.git
lodash._objecttypes 2.3.0 MIT https://github.com/lodash/lodash-cli.git
lodash._renative 2.3.0 MIT https://github.com/lodash/lodash-cli.git
lodash._setbinddata 2.3.0 MIT https://github.com/lodash/lodash-cli.git
lodash._shimkeys 2.3.0 MIT https://github.com/lodash/lodash-cli.git
lodash._slice 2.3.0 MIT https://github.com/lodash/lodash-cli.git
lodash.bind 2.3.0 MIT https://github.com/lodash/lodash-cli.git
lodash.foreach 2.3.0 MIT https://github.com/lodash/lodash-cli.git
lodash.forown 2.3.0 MIT https://github.com/lodash/lodash-cli.git
lodash.identity 2.3.0 MIT https://github.com/lodash/lodash-cli.git
lodash.isfunction 2.3.0 MIT https://github.com/lodash/lodash-cli.git
lodash.isobject 2.3.0 MIT https://github.com/lodash/lodash-cli.git
lodash.keys 2.3.0 MIT https://github.com/lodash/lodash-cli.git
lodash.memoize 4.1.2 MIT https://github.com/lodash/lodash.git
lodash.noop 2.3.0 MIT https://github.com/lodash/lodash-cli.git
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
@@ -364,9 +384,8 @@ ml-array-min 1.2.2
ml-array-rescale 1.3.6 MIT git+https://github.com/mljs/array.git
ml-matrix 6.8.0 MIT https://github.com/mljs/matrix.git
mobius1-selectr 2.4.13 MIT git+https://github.com/Mobius1/Selectr.git
moment 2.29.3 MIT https://github.com/moment/moment.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.33 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
@@ -425,6 +444,7 @@ postcss-svgo 5.0.3
postcss-unique-selectors 5.0.1 MIT https://github.com/cssnano/cssnano.git
postcss-value-parser 4.1.0 MIT https://github.com/TrySound/postcss-value-parser.git
prop-types 15.7.2 MIT https://github.com/facebook/prop-types.git
prop-types 15.8.1 MIT https://github.com/facebook/prop-types.git
punycode 2.1.1 MIT https://github.com/bestiejs/punycode.js.git
queue-microtask 1.2.3 MIT git://github.com/feross/queue-microtask.git
quick-lru 5.1.1 MIT https://github.com/sindresorhus/quick-lru.git
@@ -449,6 +469,7 @@ react-dom 16.14.0
react-dom 17.0.2 MIT https://github.com/facebook/react.git
react-draggable 4.4.4 MIT https://github.com/react-grid-layout/react-draggable.git
react-draggable 4.4.3 MIT https://github.com/mzabriskie/react-draggable.git
react-dropzone 14.2.1 MIT https://github.com/react-dropzone/react-dropzone.git
react-input-autosize 3.0.0 MIT https://github.com/JedWatson/react-input-autosize.git
react-is 16.13.1 MIT https://github.com/facebook/react.git
react-is 17.0.2 MIT https://github.com/facebook/react.git
@@ -545,6 +566,7 @@ postcss-modules-scope 3.0.0
postcss-modules-values 4.0.0 ISC git+https://github.com/css-modules/postcss-modules-values.git
react-timer-hook 3.0.5 ISC git+https://github.com/amrlabib/react-timer-hook.git
semver 7.3.5 ISC https://github.com/npm/node-semver
semver 7.3.7 ISC https://github.com/npm/node-semver.git
semver 6.3.0 ISC https://github.com/npm/node-semver
vanilla-picker 2.12.1 ISC https://github.com/Sphinxxxx/vanilla-picker.git
yallist 4.0.0 ISC git+https://github.com/isaacs/yallist.git
@@ -594,9 +616,9 @@ pako 1.0.11
precond 0.2.3 MIT* https://github.com/MathieuTurcotte/node-precond.git
webcabin-docker 2.2.5 MIT* Unknown
spdx-exceptions 2.3.0 CC-BY-3.0 https://github.com/kemitchell/spdx-exceptions.json.git
tablesorter 2.31.3 (MIT OR GPL-2.0) git://github.com/Mottie/tablesorter.git
tslib 2.4.0 0BSD https://github.com/Microsoft/tslib.git
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
518 dependencies listed.
540 dependencies listed.
+5 -5
View File
@@ -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 /
@@ -117,7 +117,7 @@ FROM postgres:12-alpine as pg12-builder
FROM postgres:13-alpine as pg13-builder
FROM postgres:14-alpine as pg14-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/
@@ -149,7 +149,7 @@ COPY --from=pg14-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-14/
# 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
@@ -196,7 +196,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
+2 -2
View File
@@ -19,7 +19,7 @@ the restore point to add* to provide a descriptive name for the restore point.
For more information about using a restore point as a recovery target, please
see the
`PostgreSQL documentation <https://www.postgresql.org/docs/current/recovery-target-settings.html#RECOVERY-TARGET-NAME>`_.
`PostgreSQL documentation <https://www.postgresql.org/docs/current/runtime-config-wal.html#RUNTIME-CONFIG-WAL-RECOVERY-TARGET>`_.
* Click the *OK* button to save the restore point.
* Click the *Cancel* button to exit without saving work.
* Click the *Cancel* button to exit without saving work.
+3 -18
View File
@@ -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
+3 -21
View File
@@ -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
+3 -21
View File
@@ -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
+27
View File
@@ -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.
+5 -2
View File
@@ -36,5 +36,8 @@ Use the *Change Password* dialog to change your password:
* Enter the desired password for in the *New Password* field.
* Re-enter the new password in the *Confirm Password* field.
Click the *OK* button to change your password; click *Cancel* to exit the dialog
without changing your password.
Click the *Save* button to change your password.
Click the *Close* button to exit without changing your password.
Click the *Reset* button to reset the values.
+3
View File
@@ -89,5 +89,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.
+2 -2
View File
@@ -10,8 +10,6 @@ To deploy a PostgreSQL server on the Azure cloud, follow the below steps.
:alt: Cloud Deployment
:align: center
**Note:** This feature is currently available in Desktop mode only.
Once you launch the tool, select the Azure PostgreSQL option.
Click on the *Next* button to proceed further.
@@ -109,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
+11 -4
View File
@@ -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.
+4 -3
View File
@@ -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.
+1
View File
@@ -35,6 +35,7 @@ Mode is pre-configured for security.
login
mfa
user_management
change_ownership
change_user_password
restore_locked_user
ldap
Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 KiB

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 130 KiB

+29 -31
View File
@@ -8,39 +8,36 @@ Use the *Import/Export data* dialog to copy data from a table to a file, or copy
data from a file into a table.
The *Import/Export data* dialog organizes the import/export of data through the
*Options* and *Columns* tabs.
*General*, *Options* and *Columns* tabs.
.. image:: images/import_export_general.png
:alt: Import Export data dialog general tab
:align: center
Use the fields in the *General* tab to specify import and export preferences:
* Move the *Import/Export* switch to the *Import* position to specify that the
server should import data to a table from a file. The default is *Import*.
* Enter the name of the source or target file in the *Filename* field.
Optionally, select the *Browser* icon (ellipsis) to the right to navigate
into a directory and select a file.
* Use the drop-down listbox in the *Format* field to specify the file type.
Select:
* *binary* for a .bin file.
* *csv* for a .csv file.
* *text* for a .txt file.
* Use the drop-down listbox in the *Encoding* field to specify the type of
character encoding.
.. image:: images/import_export_options.png
:alt: Import Export data dialog options tab
:align: center
Use the fields in the *Options* tab to specify import and export preferences:
* Move the *Import/Export* switch to the *Import* position to specify that the
server should import data to a table from a file. The default is *Export*.
* Use the fields in the *File Info* field box to specify information about the
source or target file:
* Enter the name of the source or target file in the *Filename* field.
Optionally, select the *Browser* icon (ellipsis) to the right to navigate
into a directory and select a file.
* Use the drop-down listbox in the *Format* field to specify the file type.
Select:
* *binary* for a .bin file.
* *csv* for a .csv file.
* *text* for a .txt file.
* Use the drop-down listbox in the *Encoding* field to specify the type of
character encoding.
.. image:: images/import_export_miscellaneous.png
:alt: Import Export data dialog miscellaneous tab
:align: center
* Use the fields in the *Miscellaneous* field box to specify additional
information:
* Use the fields in the *Options* tab to specify additional information:
* Move the *OID* switch to the *Yes* position to include the *OID* column.
The *OID* is a system-assigned value that may not be modified. The default
@@ -57,6 +54,8 @@ Use the fields in the *Options* tab to specify import and export preferences:
be a single quote or a double quote.
* Specify a character that should appear before a data character that matches
the *QUOTE* value in the *Escape* field.
* Use the *NULL Strings* field to specify a string that will represent a null
value within the source or target file.
Click the *Columns* tab to continue.
@@ -71,9 +70,8 @@ or exported:
columns from the drop-down listbox. To delete a selection, click the *x* to
the left of the column name. Click an empty spot inside the field to access
the drop-down list.
* Use the *NULL Strings* field to specify a string that will represent a null
value within the source or target file.
* If enabled, click inside the *Not null columns* field to select one or more
* If enabled, click inside the *NOT NULL columns* field to select one or more
columns that will not be checked for a NULL value. To delete a column, click
the *x* to the left of the column name.
+1
View File
@@ -23,6 +23,7 @@ of database objects.
management_basics
backup_and_restore
developer_tools
processes
pgagent
contributions
release_notes
+3 -15
View File
@@ -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
+3
View File
@@ -290,6 +290,9 @@ preferences for the Query Editor tool.
Use the fields on the *Auto Completion* panel to set the auto completion options.
* When the *Autocomplete on key press* switch is set to *True* then autocomplete
will be available on key press along with CTRL/CMD + Space. If it is set to
*False* then autocomplete is only activated when CTRL/CMD + Space is pressed.
* When the *Keywords in uppercase* switch is set to *True* then keywords are
shown in upper case.
+49
View File
@@ -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
+58 -12
View File
@@ -331,13 +331,21 @@ Graph Visualiser Panel
**********************
Click the Graph Visualiser button in the toolbar to generate the *Graphs* of
the query results. The graph visualiser currently supports only Line Charts,
but more charts (Bar, Stacked Bar, Pie...) will be added soon.
the query results. The graph visualiser supports Line Charts, Stacked Line Charts,
Bar Charts, Stacked Bar Charts, and Pie Charts.
.. image:: images/query_graph_visualiser_panel.png
:alt: Query tool graph visualiser panel
:align: center
* Graph Type
Choose the type of the graph that you would like to generate.
.. image:: images/query_graph_type.png
:alt: Query tool graph visualiser graph type
:align: center
* X Axis
Choose the column whose value you wish to display on X-axis from the *X Axis*
@@ -358,15 +366,6 @@ from the drop-down menu to select all the columns.
:alt: Query tool graph visualiser yaxis
:align: center
* Graph Type
Choose the type of the graph that you would like to generate. Currently only
*Line Charts* option is there, but more charts will be added soon.
.. image:: images/query_graph_type.png
:alt: Query tool graph visualiser graph type
:align: center
* Download and Zoom button
Zooming is performed by clicking and selecting an area over the chart with the
@@ -382,7 +381,8 @@ Click the *Download* button on the button bar to download the chart.
Line Chart
==========
The *Line Chart* can be generated by selecting the X-axis and the Y-axis and
The *Line Chart* can be generated by selecting the 'Line Chart'
from the Graph Type drop-down, selecting the X-axis and the Y-axis, and
clicking on the 'Generate' button. Below is an example of a chart of employee
names and their salaries.
@@ -393,6 +393,52 @@ names and their salaries.
Set *Use different data point styles?* option to true in the :ref:`preferences`,
to show data points in a different style on each graph lines.
Stacked Line Chart
==================
The *Stacked Line Chart* can be generated by selecting the 'Stacked Line Chart'
from the Graph Type drop-down, selecting the X-axis and the Y-axis, and
clicking on the 'Generate' button.
.. image:: images/query_stacked_line_chart.png
:alt: Query tool graph visualiser stacked line chart
:align: center
Bar Chart
==========
The *Bar Chart* can be generated by selecting the 'Bar Chart'
from the Graph Type drop-down, selecting the X-axis and the Y-axis, and
clicking on the 'Generate' button.
.. image:: images/query_bar_chart.png
:alt: Query tool graph visualiser bar chart
:align: center
Stacked Bar Chart
=================
The *Stacked Bar Chart* can be generated by selecting the 'Stacked Bar Chart'
from the Graph Type drop-down, selecting the X-axis and the Y-axis, and
clicking on the 'Generate' button.
.. image:: images/query_stacked_bar_chart.png
:alt: Query tool graph visualiser stacked bar chart
:align: center
Pie Chart
=========
The *Pie Chart* can be generated by selecting the 'Pie Chart'
from the Graph Type drop-down, selecting the Label and Value, and
clicking on the 'Generate' button.
.. image:: images/query_pie_chart.png
:alt: Query tool graph visualiser pie chart
:align: center
Connection Status
*****************
+2
View File
@@ -11,6 +11,8 @@ notes for it.
.. toctree::
:maxdepth: 1
release_notes_6_13
release_notes_6_12
release_notes_6_11
release_notes_6_10
release_notes_6_9
+40
View File
@@ -0,0 +1,40 @@
************
Version 6.12
************
Release date: 2022-07-28
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v6.11.
New features
************
| `Issue #4488 <https://redmine.postgresql.org/issues/4488>`_ - Added option to trigger autocomplete on key press in the query tool.
| `Issue #4607 <https://redmine.postgresql.org/issues/4607>`_ - Allow users to delete files/folders from the storage manager.
| `Issue #7389 <https://redmine.postgresql.org/issues/7389>`_ - Allow users to search within the file/storage manager.
| `Issue #7486 <https://redmine.postgresql.org/issues/7486>`_ - Added support for visualizing the graphs using Stacked Line, Bar, and Stacked Bar charts in the query tool.
| `Issue #7487 <https://redmine.postgresql.org/issues/7487>`_ - Added support for visualise the graph using a Pie chart in the query tool.
Housekeeping
************
| `Issue #7313 <https://redmine.postgresql.org/issues/7313>`_ - Port the file/storage manager to React.
| `Issue #7341 <https://redmine.postgresql.org/issues/7341>`_ - Port change password dialog to React.
| `Issue #7342 <https://redmine.postgresql.org/issues/7342>`_ - Port Master Password dialog to React.
| `Issue #7492 <https://redmine.postgresql.org/issues/7492>`_ - Removing dynamic module loading and replacing it with static loading.
| `Issue #7546 <https://redmine.postgresql.org/issues/7546>`_ - Port named restore point dialog to React.
Bug fixes
*********
| `Issue #7428 <https://redmine.postgresql.org/issues/7428>`_ - Preserve the settings set by the user in the import/export data dialog.
| `Issue #7471 <https://redmine.postgresql.org/issues/7471>`_ - Ensure that the splash screen can be moved.
| `Issue #7508 <https://redmine.postgresql.org/issues/7508>`_ - Fixed an issue where comments on indexes are not displayed.
| `Issue #7512 <https://redmine.postgresql.org/issues/7512>`_ - Ensure that notices should not disappear from the messages tab.
| `Issue #7517 <https://redmine.postgresql.org/issues/7517>`_ - Enable the start debugging button once execution is completed.
| `Issue #7518 <https://redmine.postgresql.org/issues/7518>`_ - Ensure that dashboard graph API is not called after the panel has been closed.
| `Issue #7519 <https://redmine.postgresql.org/issues/7519>`_ - Ensure that geometry should be shown for all the selected cells.
| `Issue #7520 <https://redmine.postgresql.org/issues/7520>`_ - Fixed the JSON editor issue of hiding the first record.
| `Issue #7522 <https://redmine.postgresql.org/issues/7522>`_ - Added support for Azure PostgreSQL deployment in server mode.
| `Issue #7523 <https://redmine.postgresql.org/issues/7523>`_ - Fixed typo error for Statistics on the table header.
| `Issue #7524 <https://redmine.postgresql.org/issues/7524>`_ - Fixed an issue where new folders cannot be created in the save dialog.
+55
View File
@@ -0,0 +1,55 @@
************
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.
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.
+3 -14
View File
@@ -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
+33 -27
View File
@@ -20,48 +20,54 @@ Use icons on the top of the *Storage Manager* window to manage storage:
Use the ``Home`` icon |home| to return to the home directory.
.. |home| image:: images/home.png
.. |home| image:: images/sm_home.png
Use the ``Up Arrow`` icon |uparrow| to return to the previous directory.
.. |uparrow| image:: images/uparrow.png
.. |uparrow| image:: images/sm_go_back.png
Use the ``Refresh`` icon |refresh| to display the most-recent files available.
.. |refresh| image:: images/refresh.png
.. |refresh| image:: images/sm_refresh.png
Select the ``Download`` icon |download| to download the selected file.
.. |download| image:: images/download.png
Select the ``Delete`` icon |delete| to delete the selected file or folder.
.. |delete| image:: images/delete.png
Select the ``Edit`` icon |edit| to rename a file or folder.
.. |edit| image:: images/edit.png
Use the ``Upload`` icon |upload| to upload a file.
.. |upload| image:: images/upload.png
.. |download| image:: images/sm_download.png
Use the ``New Folder`` icon |folder| to add a new folder.
.. |folder| image:: images/folder.png
Use the ``Grid View`` icon |gridview| to display all the files and folders in a grid view.
.. |gridview| image:: images/gridview.png
Use the ``Table View`` icon |tableview| to display all the files and folders in a list view.
.. |tableview| image:: images/tableview.png
Click on the check box next to *Show hidden files and folders* at the bottom of the window to view hidden files and folders.
.. |folder| image:: images/sm_new_folder.png
Use the *Format* drop down list to select the format of the files to be displayed; choose from *sql*, *csv*, or *All Files*.
Other Options
*********************
.. image:: images/sm_options.png
:alt: Other options
:align: center
.. table::
:class: longtable
:widths: 1 5
+----------------------+---------------------------------------------------------------------------------------------------+
| Menu | Behavior |
+======================+===================================================================================================+
| *Rename* | Click the *Rename* option to rename a file/folder. |
+----------------------+---------------------------------------------------------------------------------------------------+
| *Delete* | Click the *Delete* option to rename a file/folder. |
+----------------------+---------------------------------------------------------------------------------------------------+
| *Upload* | Click the *Upload* option to upload multiple files to the current folder. |
+----------------------+---------------------------------------------------------------------------------------------------+
| *List View* | Click the *List View* option to to display all the files and folders in a list view. |
+----------------------+---------------------------------------------------------------------------------------------------+
| *Grid View* | Click the *Grid View* option to to display all the files and folders in a grid view. |
+----------------------+---------------------------------------------------------------------------------------------------+
| *Show Hidden Files* | Click the *Show Hidden Files* option to view hidden files and folders. |
+----------------------+---------------------------------------------------------------------------------------------------+
You can also download backup files through *Storage Manager* at the successful completion of the backups taken through :ref:`Backup Dialog <backup_dialog>`, :ref:`Backup Global Dialog <backup_globals_dialog>`, or :ref:`Backup Server Dialog <backup_server_dialog>`.
At the successful completion of a backup, click on the icon to open the current backup file in *Storage Manager* on the *process watcher* window.
+15 -10
View File
@@ -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.
+3 -4
View File
@@ -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"
@@ -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
+1 -1
View File
@@ -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..."
+18 -15
View File
@@ -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,7 +13,7 @@ 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'
@@ -31,37 +31,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 +72,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 +89,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 --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 --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
+48 -45
View File
@@ -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
}
+10 -16
View File
@@ -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."
+73 -72
View File
@@ -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:
@@ -77,7 +78,7 @@ _create_python_env() {
PATH=$PATH:/usr/local/pgsql/bin python \
"${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 +86,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 +125,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 +147,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 +158,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 +186,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 +228,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 +250,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 +269,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 +314,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 +334,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 +361,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 +385,7 @@ _create_dmg() {
}
_codesign_dmg() {
if [ ${CODESIGN} -eq 0 ]; then
if [ "${CODESIGN}" -eq 0 ]; then
return
fi
@@ -396,20 +400,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 +430,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 +439,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 +450,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 +461,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
+24 -16
View File
@@ -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
+28 -26
View File
@@ -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 ../
+13 -13
View File
@@ -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}."
+15 -17
View File
@@ -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}/"
+13 -12
View File
@@ -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.
Loaded 100 of 1592 files, more files were not shown because too many files have changed in this diff. Show more