Compare commits

..
36 Commits
Author SHA1 Message Date
Akshay Joshi a144815201 Fixed an issue where migration on external database is not working. #5941 2023-03-20 16:18:21 +05:30
Akshay Joshi c6220bd8e2 Fixed an issue where the file name in the query tool tab was not changing if another file is opened. #5909 2023-03-08 16:59:36 +05:30
Akshay Joshi bff425f49e Hardcoded NWjs version to 0.72.0 as the latest version throws error on CentOS 7 2023-03-06 15:39:18 +05:30
Akshay Joshi 843925e5bc Ensure that the database migration does not fail with a NoSuchTableError exception. #5870 2023-03-06 15:36:09 +05:30
Akshay Joshi 18ee965da6 Update version for release v6.21 2023-03-01 16:56:06 +05:30
Akshay Joshi ca534aaabc Update Dependencies. 2023-03-01 16:55:17 +05:30
Akshay Joshi f7acbad684 Update release note. 2023-03-01 14:13:03 +05:30
Dave Page d0c53e1621 Add missing import. 2023-03-01 13:44:07 +05:30
Akshay Joshi c75f72e6e2 Fixed the RESQL test cases for Sequences. #5810 2023-03-01 13:43:46 +05:30
Akshay Joshi 6fa5d1f061 Fixed an issue where the database server is not connected using a service file. #5889 2023-03-01 13:41:16 +05:30
Nikhil Mohite 12c44cd0fa Fixed schema diff UI alignment issues. 2023-03-01 13:39:31 +05:30
Akshay Joshi 623204d062 Update release note 2023-03-01 13:39:31 +05:30
Aditya Toshniwal 004e777032 Fix an issue where sequence owner is remove on sequence edit. #5810 2023-03-01 13:39:27 +05:30
Aditya Toshniwal 0e9d59fe51 Fix an issue where query tool is stripping spaces in grid cell. #5803 2023-03-01 13:33:22 +05:30
Akshay Joshi 919d973ec0 Fixed an issue where the user can't create trigger AFTER UPDATE OF. #5790 2023-03-01 13:33:22 +05:30
Aditya Toshniwal e86363bbc0 Do not allow to save invalid JSON in query tool JSON editor. #5822 2023-03-01 13:33:19 +05:30
Aditya Toshniwal feaa47497c Handle MERGE operation in query tool explain introduced in PostgreSQL 15. #5872 2023-03-01 13:27:22 +05:30
Akshay Joshi a4451fead8 Update release note 2023-03-01 13:27:22 +05:30
Pravesh Sharma 5e8d99fbbd Fixed an issue where query was not pasted to editor after trojan source warning. #5760 2023-03-01 13:27:22 +05:30
Aditya Toshniwal 45b7abd267 Few dashboard graph improvements. 2023-03-01 13:27:18 +05:30
Akshay Joshi 724fa361ea Ensure that content on the DDL comparison panel should get refreshed on selecting the object using the up and down arrow keys. #5747 2023-03-01 12:39:32 +05:30
Anil Sahoo eb68176ee1 Fixed an issue where Clear Saved Password should be disabled if the password is already cleared. #5773 2023-03-01 12:39:26 +05:30
Akshay Joshi 65ede27a38 Update release note 2023-03-01 12:34:47 +05:30
Pravesh Sharma 92c9d757b2 Fix for query tool prompting for unsaved changes even if no changes have been made. #5756 2023-03-01 12:34:47 +05:30
Akshay Joshi 465106206b Ensure that the schema diff tool should pick up the change in the column grants. #5269 2023-03-01 12:34:47 +05:30
Akshay Joshi 81dc2161cb Fixed an issue where pgAdmin failed to connect when the Postgres password included special characters. #5847 2023-03-01 12:34:42 +05:30
Yogesh Mahajan ae1eca5b3f Removed logging added for feature test failure. Added more assets to avoid false failures. 2023-03-01 12:28:57 +05:30
Paul Milbank c599edb342 Add additional logging for successful logins and user creation. #5842 2023-03-01 12:28:57 +05:30
Anil Sahoo 4d03fbd34f Fix an issue where the maintenance dialog for Materialized View gives an error. #5764 2023-03-01 12:28:57 +05:30
Yogesh Mahajan b2b52b2f66 Added logging for feature test failure on jenkins job. 2023-03-01 12:28:57 +05:30
Akshay Joshi 23c3a27201 Correct the OR operator. #5758 2023-03-01 12:28:57 +05:30
Akshay Joshi c8356f2bfd Update release note 2023-03-01 12:28:57 +05:30
Pravesh Sharma b5e7e7848c Fixed an issue where lock layout menu was not in sync with preferences. #5758 2023-03-01 12:28:57 +05:30
Aditya Toshniwal f58dbf36bb Allow changing cardinality notation in ERD to use Chen notation. #5832 2023-03-01 12:28:56 +05:30
Akshay Joshi 57431ca754 Ensure that Grant column permission to a view is visible in the SQL tab. #5685 2023-03-01 12:28:56 +05:30
Dave Page ab62af0d55 Update copyright notices in Dockerfile and Makefile and ensure they don't get missed again. 2023-03-01 12:28:56 +05:30
3695 changed files with 149708 additions and 347728 deletions

No files matched your search

+1
View File
@@ -1,3 +1,4 @@
.git
web/node_modules
web/*.log
web/regression
+1 -1
View File
@@ -34,7 +34,7 @@ If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. Windows 10, OSX monterey]
- pgAdmin version: [e.g. 6.15]
- Version: [e.g. 6.15]
- Mode: [e.g Desktop or Server]
- Browser (if running in server mode): [e.g. chrome, safari]
- Package type: [e.g. RPM, DEB, Python, Container, etc.]
-55
View File
@@ -1,55 +0,0 @@
version: 2
updates:
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "weekly"
labels:
- "Dependencies"
commit-message:
prefix: "Docker dependency"
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
labels:
- "Dependencies"
commit-message:
prefix: "Python dependency"
- package-ecosystem: "pip"
directory: "/tools"
schedule:
interval: "weekly"
labels:
- "Dependencies"
commit-message:
prefix: "Python dependency"
- package-ecosystem: "pip"
directory: "/web/regression"
schedule:
interval: "weekly"
labels:
- "Dependencies"
commit-message:
prefix: "Python dependency"
- package-ecosystem: "npm"
directory: "/runtime"
schedule:
interval: "weekly"
labels:
- "Dependencies"
commit-message:
prefix: "Javascript dependency"
- package-ecosystem: "npm"
directory: "/web"
schedule:
interval: "weekly"
labels:
- "Dependencies"
commit-message:
prefix: "Javascript dependency"
@@ -1,28 +0,0 @@
name: Check container build
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
workflow_dispatch:
concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
cancel-in-progress: true
jobs:
build-container:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Build the container
uses: docker/build-push-action@v6
with:
push: false
context: .
+39
View File
@@ -0,0 +1,39 @@
name: Check documentation build
on:
# Triggers the workflow on push or pull request events but only for the "master" branch
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v3
# Run the tests
- name: Install dependencies
run: sudo apt install build-essential python3-dev libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev
- name: Install requirements
run: pip install -r requirements.txt
- name: Install sphinx
run: pip install sphinx
- name: Install sphinx youtube
run: pip install sphinxcontrib-youtube
- name: Check the documentation
run: make docs
-61
View File
@@ -1,61 +0,0 @@
name: Check documentation builds
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
workflow_dispatch:
concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
cancel-in-progress: true
jobs:
build-docs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Install platform dependencies
run: |
sudo apt update
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev latexmk texlive-latex-recommended tex-gyre texlive-latex-extra
- name: Install Python dependencies
run: make install-python
- name: Check the HTML build
run: |
. venv/bin/activate
make docs
- name: Archive HTML
uses: actions/upload-artifact@v4
with:
name: pgadmin4-html-build-output
path: docs/en_US/_build/html/*
- name: Check the ePub build
run: |
. venv/bin/activate
make docs-epub
- name: Archive ePub
uses: actions/upload-artifact@v4
with:
name: pgadmin4-epub-build-output
path: docs/en_US/_build/epub/pgAdmin4.epub
- name: Check the PDF build
run: |
. venv/bin/activate
make docs-pdf
- name: Archive PDF
uses: actions/upload-artifact@v4
with:
name: pgadmin4-pdf-build-output
path: docs/en_US/_build/latex/pgadmin4.pdf
+19 -18
View File
@@ -1,35 +1,36 @@
name: Check Javascript style
on:
# Triggers the workflow on push or pull request events but only for the "master" branch
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
cancel-in-progress: true
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
check-javascript-style:
runs-on: ubuntu-22.04
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- uses: actions/checkout@v4
- name: Upgrade yarn
run: |
yarn set version berry
yarn set version 4
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v3
# Run the tests
- name: Install nodejs
run: sudo apt install nodejs
- name: Install yarn
run: sudo npm install --global yarn
- name: Install Node modules
run: |
cd web
yarn install
run: cd web && yarn install
- name: Run the linter
run: |
cd web
yarn run linter
run: cd web && yarn run linter
-39
View File
@@ -1,39 +0,0 @@
name: Check Python build
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
workflow_dispatch:
concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
cancel-in-progress: true
jobs:
build-python-package:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Install platform dependencies
run: |
sudo apt update
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev
- name: Install Python dependencies
run: make install-python
- name: Check the Python wheel build
run: |
. venv/bin/activate
make pip
- name: Archive Python wheel
uses: actions/upload-artifact@v4
with:
name: pgadmin4-python-build-output
path: dist/*
+14 -12
View File
@@ -1,28 +1,30 @@
name: Check Python style
on:
# Triggers the workflow on push or pull request events but only for the "master" branch
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
cancel-in-progress: true
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
check-python-style:
runs-on: ubuntu-22.04
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- uses: actions/checkout@v4
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v3
- name: Install Python dependencies
run: |
sudo pip install --upgrade pip
sudo pip install pycodestyle
# Run the tests
- name: Install pycodestyle
run: pip install pycodestyle
- name: Check the documentation
run: pycodestyle --config=.pycodestyle docs/
@@ -34,4 +36,4 @@ jobs:
run: pycodestyle --config=.pycodestyle web/
- name: Check the tools
run: pycodestyle --config=.pycodestyle tools/
run: pycodestyle --config=.pycodestyle tools/
-39
View File
@@ -1,39 +0,0 @@
name: Check tarball build
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
workflow_dispatch:
concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
cancel-in-progress: true
jobs:
build-tarball:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Install platform dependencies
run: |
sudo apt update
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev
- name: Install Python dependencies
run: make install-python
- name: Check the tarball build
run: |
. venv/bin/activate
make src
- name: Archive source tarball
uses: actions/upload-artifact@v4
with:
name: pgadmin4-tarball-build-output
path: dist/*
-34
View File
@@ -1,34 +0,0 @@
name: Check translations
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
workflow_dispatch:
concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
cancel-in-progress: true
jobs:
check-translations:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Install platform dependencies
run: |
sudo apt update
sudo apt install -y python3-babel python3-jinja2
- name: Check we can extract messages
run: make msg-extract
- name: Check we can update the catalogs
run: make msg-update
- name: Check the catalogs will compile
run: make msg-compile
@@ -1,183 +0,0 @@
name: Run feature tests on EPAS
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
workflow_dispatch:
concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
cancel-in-progress: true
jobs:
run-feature-tests-epas:
# Only run if the tests are enabled
# TODO: Figure out a way to test for the presence of the secrets instead
if: vars.ENABLE_EPAS_TESTS == 'true'
strategy:
fail-fast: false
matrix:
pgver: [13, 14, 15, 16, 17]
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Setup the EDB APT repo on Linux
run: |
curl -1sLf 'https://downloads.enterprisedb.com/${{ secrets.CLOUDSMITH_TOKEN }}/enterprise/setup.deb.sh' | sudo -E bash
- name: Install platform dependencies
run: |
sudo apt update
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev edb-as${{ matrix.pgver }}-server edb-as${{ matrix.pgver }}-server-pldebugger
- name: Install pgagent on Linux
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver <= 16 }}
run: |
sudo apt install -y edb-as${{ matrix.pgver }}-pgagent
- name: Create the tablespace directory
run: |
sudo mkdir -p /var/lib/edb-as/tablespaces/${{ matrix.pgver }}
sudo chown enterprisedb:enterprisedb /var/lib/edb-as/tablespaces/${{ matrix.pgver }}
- name: Start EDB PostgreSQL
run: |
# Note: we use a custom port for PostgreSQL as the runner may already have a version of PostgreSQL installed
sudo su -c "echo local all all trust > /etc/edb-as/${{ matrix.pgver }}/main/pg_hba.conf"
sudo sed -i "s/port = 544[0-9]/port = 58${{ matrix.pgver }}/g" /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf
sudo sed -i "s/shared_preload_libraries = '/shared_preload_libraries = '\$libdir\/plugin_debugger,/g" /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf
sudo su - enterprisedb -c "mkdir -p /var/run/edb-as/${{ matrix.pgver }}-main.epas_stat_tmp"
sudo systemctl restart edb-as@${{ matrix.pgver }}-main
until sudo runuser -l enterprisedb -c "/usr/lib/edb-as/${{ matrix.pgver }}/bin/pg_isready -p 58${{ matrix.pgver }}" 2>/dev/null; do
>&2 echo "EPAS is unavailable - sleeping for 2 seconds"
sleep 2
done
- name: Create pgagent extension on Linux
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver <= 16 }}
run: psql -U enterprisedb -d postgres -p 58${{ matrix.pgver }} -c 'CREATE EXTENSION IF NOT EXISTS pgagent;'
- name: Install Python dependencies
run: make install-python-testing
- name: Create the test configuration
run: |
cat <<EOF > web/config_local.py
from config import *
# Debug mode
DEBUG = True
# App mode
SERVER_MODE = False
# Log
CONSOLE_LOG_LEVEL = DEBUG
FILE_LOG_LEVEL = DEBUG
DEFAULT_SERVER = '127.0.0.1'
UPGRADE_CHECK_ENABLED = False
LOG_FILE = "$(pwd)/var/pgadmin4.log"
SESSION_DB_PATH = "$(pwd)/var/sessions"
STORAGE_DIR = "$(pwd)/var/storage"
SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
TEST_SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
AZURE_CREDENTIAL_CACHE_DIR = "$(pwd)/var/azurecredentialcache"
EOF
cat <<EOF > web/regression/test_config.json
{
"headless_chrome": false,
"default_browser": "Chrome",
"pgAdmin4_login_credentials": {
"new_password": "NEWPASSWORD",
"login_password": "PASSWORD",
"login_username": "USER@EXAMPLE.COM"
},
"pgAdmin4_test_user_credentials": {
"new_password": "NEWPASSWORD",
"login_password": "PASSWORD",
"login_username": "USER2@EXAMPLE.COM"
},
"pgAdmin4_test_non_admin_credentials": {
"new_password": "NEWPASSWORD",
"login_password": "PASSWORD",
"login_username": "USER@EXAMPLE.COM"
},
"server_group": 1,
"server_credentials": [
{
"name": "EPAS ${{ matrix.pgver }}",
"comment": "EPAS ${{ matrix.pgver }} Server",
"db_username": "enterprisedb",
"host": "/var/run/edb-as",
"db_password": "",
"db_port": 58${{ matrix.pgver }},
"maintenance_db": "postgres",
"sslmode": "prefer",
"tablespace_path": "/var/lib/edb-as/tablespaces/${{ matrix.pgver }}",
"enabled": true,
"default_binary_paths": {
"pg": "",
"ppas": "/usr/lib/edb-as/${{ matrix.pgver }}/bin"
}
}
],
"server_update_data": [
{
"comment": "This is test update comment"
}
]
}
EOF
- name: Upgrade yarn
run: |
yarn set version berry
yarn set version 4
- name: Build the JS bundle
run: |
cd web
yarn install
yarn run bundle
- name: Run the tests
run: |
. venv/bin/activate
sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 &
export DISPLAY=:99
cd web
python regression/runtests.py --pkg feature_tests
- name: Archive server log
if: success() || failure()
uses: actions/upload-artifact@v4
with:
name: server-log-pg${{ matrix.pgver }}
path: var/pgadmin4.log
- name: Archive regression log
if: success() || failure()
uses: actions/upload-artifact@v4
with:
name: regression-log-pg${{ matrix.pgver }}
path: web/regression/regression.log
- name: Archive screenshots
if: success() || failure()
uses: actions/upload-artifact@v4
with:
name: screenshots-pg${{ matrix.pgver }}
path: web/regression/screenshots
if-no-files-found: ignore
-193
View File
@@ -1,193 +0,0 @@
name: Run feature tests on PostgreSQL
# Note: we use a custom port for PostgreSQL as the runners may already have
# a version installed.
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
workflow_dispatch:
concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
cancel-in-progress: true
jobs:
run-feature-tests-pg:
strategy:
fail-fast: false
matrix:
pgver: [13, 14, 15, 16, 17]
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Setup the PGDG APT repo
run: |
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
- name: Uninstall PostgreSQL if already present
run: |
if [ -n "$(ls /etc/postgresql/*/*/postgresql.conf 2>/dev/null)" ]; then
# Extract the major version from pg_config
installed_pg_version=$( pg_config --version | cut -d ' ' -f 2 | cut -d '.' -f 1 )
echo "Installed PostgreSQL version: $installed_pg_version"
if [ $installed_pg_version != ${{ matrix.pgver }} ]; then
sudo pg_dropcluster $installed_pg_version main --stop
sudo apt-get -y remove "postgresql-${installed_pg_version}"
fi
fi
- name: Install platform dependencies
run: |
sudo apt update
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev postgresql-${{ matrix.pgver }} postgresql-${{ matrix.pgver }}-pldebugger pgagent
- name: Create the tablespace directory
run: |
sudo mkdir -p /var/lib/postgresql/tablespaces/${{ matrix.pgver }}
sudo chown postgres:postgres /var/lib/postgresql/tablespaces/${{ matrix.pgver }}
- name: Re-create stats directory, just in case
run: |
sudo rm -rf /var/run/postgresql/${{ matrix.pgver }}-main.pg_stat_tmp/
sudo mkdir -p /var/run/postgresql/${{ matrix.pgver }}-main.pg_stat_tmp/
sudo chown postgres:postgres /var/run/postgresql/${{ matrix.pgver }}-main.pg_stat_tmp/
- name: Start PostgreSQL
run: |
sudo su -c "echo local all all trust > /etc/postgresql/${{ matrix.pgver }}/main/pg_hba.conf"
sudo sed -i "s/port = 543[0-9]/port = 59${{ matrix.pgver }}/g" /etc/postgresql/${{ matrix.pgver }}/main/postgresql.conf
sudo sed -i "s/#shared_preload_libraries = ''/shared_preload_libraries = '\$libdir\/plugin_debugger'/g" /etc/postgresql/${{ matrix.pgver }}/main/postgresql.conf
sudo su - postgres -c "/usr/lib/postgresql/${{ matrix.pgver }}/bin/postgres -D /var/lib/postgresql/${{ matrix.pgver }}/main -c config_file=/etc/postgresql/${{ matrix.pgver }}/main/postgresql.conf &"
until sudo runuser -l postgres -c "pg_isready -p 59${{ matrix.pgver }}" 2>/dev/null; do
>&2 echo "Postgres is unavailable - sleeping for 2 seconds"
sleep 2
done
psql -U postgres -p 59${{ matrix.pgver }} -c 'CREATE EXTENSION pgagent;'
psql -U postgres -p 59${{ matrix.pgver }} -c 'CREATE EXTENSION pldbgapi;'
- name: Install Python dependencies
run: make install-python-testing
- name: Create the test configuration
run: |
cat <<EOF > web/config_local.py
from config import *
# Debug mode
DEBUG = True
# App mode
SERVER_MODE = False
# Log
CONSOLE_LOG_LEVEL = DEBUG
FILE_LOG_LEVEL = DEBUG
DEFAULT_SERVER = '127.0.0.1'
UPGRADE_CHECK_ENABLED = False
LOG_FILE = "$(pwd)/var/pgadmin4.log"
SESSION_DB_PATH = "$(pwd)/var/sessions"
STORAGE_DIR = "$(pwd)/var/storage"
SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
TEST_SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
AZURE_CREDENTIAL_CACHE_DIR = "$(pwd)/var/azurecredentialcache"
EOF
cat <<EOF > web/regression/test_config.json
{
"headless_chrome": false,
"default_browser": "Chrome",
"pgAdmin4_login_credentials": {
"new_password": "NEWPASSWORD",
"login_password": "PASSWORD",
"login_username": "USER@EXAMPLE.COM"
},
"pgAdmin4_test_user_credentials": {
"new_password": "NEWPASSWORD",
"login_password": "PASSWORD",
"login_username": "USER2@EXAMPLE.COM"
},
"pgAdmin4_test_non_admin_credentials": {
"new_password": "NEWPASSWORD",
"login_password": "PASSWORD",
"login_username": "USER@EXAMPLE.COM"
},
"server_group": 1,
"server_credentials": [
{
"name": "PostgreSQL ${{ matrix.pgver }}",
"comment": "PostgreSQL ${{ matrix.pgver }} Server",
"db_username": "postgres",
"host": "/var/run/postgresql",
"db_password": "",
"db_port": 59${{ matrix.pgver }},
"maintenance_db": "postgres",
"sslmode": "prefer",
"tablespace_path": "/var/lib/postgresql/tablespaces/${{ matrix.pgver }}",
"enabled": true,
"default_binary_paths": {
"pg": "/usr/lib/postgresql/${{ matrix.pgver }}/bin",
"ppas": ""
}
}
],
"server_update_data": [
{
"comment": "This is test update comment"
}
]
}
EOF
- name: Upgrade yarn
run: |
yarn set version berry
yarn set version 4
- name: Build the JS bundle
run: |
cd web
yarn install
yarn run bundle
- name: Run the tests
run: |
. venv/bin/activate
sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 &
export DISPLAY=:99
cd web
python regression/runtests.py --pkg feature_tests
- name: Archive server log
if: success() || failure()
uses: actions/upload-artifact@v4
with:
name: server-log-pg${{ matrix.pgver }}
path: var/pgadmin4.log
- name: Archive regression log
if: success() || failure()
uses: actions/upload-artifact@v4
with:
name: regression-log-pg${{ matrix.pgver }}
path: web/regression/regression.log
- name: Archive screenshots
if: success() || failure()
uses: actions/upload-artifact@v4
with:
name: screenshots-pg${{ matrix.pgver }}
path: web/regression/screenshots
if-no-files-found: ignore
@@ -1,44 +0,0 @@
name: Run Javascript tests
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
workflow_dispatch:
concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
cancel-in-progress: true
jobs:
run-javascript-tests:
strategy:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-22.04, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/setup-node@v4
with:
node-version: '20.x'
- uses: actions/checkout@v4
- name: Upgrade yarn
run: |
yarn set version berry
yarn set version 4
- name: Install Node modules
run: |
cd web
yarn install
- name: Run the tests
run: |
cd web
yarn run test:js-once
-305
View File
@@ -1,305 +0,0 @@
# This workflow requires the following configuration in Github
#
# Vars:
# ENABLE_EPAS_TESTS - Set to true to enable this test
#
# Secrets:
# EDB_REPO_USERNAME - Username for accessing EDB Repos 1.0
# EDB_REPO_PASSWORD - Password for accessing EDB Repos 1.0
# EDB_SBP_URL - URL to the EDB StackBuilder Plus catalog
name: Run Python tests on EPAS
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
workflow_dispatch:
concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
cancel-in-progress: true
jobs:
run-python-tests-epas:
# Only run if the tests are enabled
# TODO: Figure out a way to test for the presence of the secrets instead
if: vars.ENABLE_EPAS_TESTS == 'true'
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, windows-latest]
pgver: [13, 14, 15, 16, 17]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Update python version
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Setup the EDB APT repo on Linux
if: ${{ matrix.os == 'ubuntu-22.04' }}
run: |
curl -1sLf 'https://downloads.enterprisedb.com/${{ secrets.CLOUDSMITH_TOKEN }}/enterprise/setup.deb.sh' | sudo -E bash
- name: Install platform dependencies on Linux
if: ${{ matrix.os == 'ubuntu-22.04' }}
run: |
sudo apt update
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev edb-as${{ matrix.pgver }}-server edb-as${{ matrix.pgver }}-server-pldebugger edb-as${{ matrix.pgver }}-postgis34
- name: Install pgagent on Linux
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver <= 16 }}
run: |
sudo apt install -y edb-as${{ matrix.pgver }}-pgagent
- name: Install platform dependencies on Windows
if: ${{ matrix.os == 'windows-latest' }}
run: |
FOR /f "delims=" %%F IN ('python tools\get_sb_package.py "${{ secrets.EDB_SBP_URL }}" "edb_as${{ matrix.pgver }}_dbserver" "windows-x64"') DO SET INSTALLER_EXE=%%F
ECHO Running %INSTALLER_EXE%...
%INSTALLER_EXE% --prefix C:\EPAS\${{ matrix.pgver }} --datadir C:\EPAS\${{ matrix.pgver }}\data --serverport 58${{ matrix.pgver }} --superpassword enterprisedb --create_samples no --install_runtimes 0 --mode unattended --unattendedmodeui none --disable-components stackbuilderplus${{ matrix.pgver < 15 && ',pgadmin4' || '' }}
choco install -y mitkerberos
REM Ignore error 3010 (reboot required)
IF %ERRORLEVEL% EQU 3010 cmd /c "exit /b 0"
shell: cmd
- name: Create the tablespace directory on Linux
if: ${{ matrix.os == 'ubuntu-22.04' }}
run: |
sudo mkdir -p /var/lib/edb-as/tablespaces/${{ matrix.pgver }}
sudo chown enterprisedb:enterprisedb /var/lib/edb-as/tablespaces/${{ matrix.pgver }}
- name: Create the tablespace directory on Windows
if: ${{ matrix.os == 'windows-latest' }}
run: |
mkdir "C:\EPAS\${{ matrix.pgver }}\tablespaces"
icacls "C:\EPAS\${{ matrix.pgver }}\tablespaces" /grant "NETWORK SERVICE":(OI)(CI)F /T
shell: cmd
- name: Add edb_job_scheduler into config file.
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver >= 16 }}
run: |
sudo sed -i "s/shared_preload_libraries = '/shared_preload_libraries = '\$libdir\/edb_job_scheduler,/g" /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf
sudo su -c "echo \"edb_job_scheduler.database_list = 'test_dbms_job_scheduler'\" >> /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf"
- name: Start PostgreSQL on Linux
if: ${{ matrix.os == 'ubuntu-22.04' }}
run: |
# Note: we use a custom port for PostgreSQL as the runner may already have a version of PostgreSQL installed
sudo su -c "echo local all all trust > /etc/edb-as/${{ matrix.pgver }}/main/pg_hba.conf"
sudo sed -i "s/port = 544[0-9]/port = 58${{ matrix.pgver }}/g" /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf
sudo sed -i "s/shared_preload_libraries = '/shared_preload_libraries = '\$libdir\/plugin_debugger,/g" /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf
sudo su - enterprisedb -c "mkdir -p /var/run/edb-as/${{ matrix.pgver }}-main.epas_stat_tmp"
sudo systemctl restart edb-as@${{ matrix.pgver }}-main
until sudo runuser -l enterprisedb -c "/usr/lib/edb-as/${{ matrix.pgver }}/bin/pg_isready -p 58${{ matrix.pgver }}" 2>/dev/null; do
>&2 echo "EPAS is unavailable - sleeping for 2 seconds"
sleep 2
done
- name: Create pgagent extension on Linux
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver <= 16 }}
run: psql -U enterprisedb -d postgres -p 58${{ matrix.pgver }} -c 'CREATE EXTENSION IF NOT EXISTS pgagent;'
- name: Create postgis extension on Linux
if: ${{ matrix.os == 'ubuntu-22.04' }}
run: psql -U enterprisedb -d postgres -p 58${{ matrix.pgver }} -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
- name: Install Python dependencies on Linux
if: ${{ matrix.os == 'ubuntu-22.04' }}
run: make install-python-testing
- name: Install Python dependencies on Windows
if: ${{ matrix.os == 'windows-latest' }}
run: |
SET LIB=C:\EPAS\${{ matrix.pgver }}\lib;%LIB%
SET INCLUDE=C:\EPAS\${{ matrix.pgver }}\include;%INCLUDE%
python -m venv venv
call venv\Scripts\activate.bat
python -m pip install --upgrade pip
pip install wheel sphinx sphinxcontrib-youtube -r web\regression\requirements.txt
shell: cmd
- name: Create the test configuration on Linux
if: ${{ matrix.os == 'ubuntu-22.04' }}
run: |
cat <<EOF > web/config_local.py
from config import *
# Debug mode
DEBUG = True
# App mode
SERVER_MODE = False
# Log
CONSOLE_LOG_LEVEL = DEBUG
FILE_LOG_LEVEL = DEBUG
DEFAULT_SERVER = '127.0.0.1'
UPGRADE_CHECK_ENABLED = False
LOG_FILE = "$(pwd)/var/pgadmin4.log"
SESSION_DB_PATH = "$(pwd)/var/sessions"
STORAGE_DIR = "$(pwd)/var/storage"
SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
TEST_SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
AZURE_CREDENTIAL_CACHE_DIR = "$(pwd)/var/azurecredentialcache"
EOF
cat <<EOF > web/regression/test_config.json
{
"pgAdmin4_login_credentials": {
"new_password": "NEWPASSWORD",
"login_password": "PASSWORD",
"login_username": "USER@EXAMPLE.COM"
},
"pgAdmin4_test_user_credentials": {
"new_password": "NEWPASSWORD",
"login_password": "PASSWORD",
"login_username": "USER2@EXAMPLE.COM"
},
"pgAdmin4_test_non_admin_credentials": {
"new_password": "NEWPASSWORD",
"login_password": "PASSWORD",
"login_username": "USER@EXAMPLE.COM"
},
"server_group": 1,
"server_credentials": [
{
"name": "EPAS ${{ matrix.pgver }}",
"comment": "EPAS ${{ matrix.pgver }} Server",
"db_username": "enterprisedb",
"host": "/var/run/edb-as",
"db_password": "",
"db_port": 58${{ matrix.pgver }},
"maintenance_db": "postgres",
"sslmode": "prefer",
"tablespace_path": "/var/lib/edb-as/tablespaces/${{ matrix.pgver }}",
"enabled": true,
"default_binary_paths": {
"pg": "",
"ppas": "/usr/lib/edb-as/${{ matrix.pgver }}/bin"
}
}
],
"server_update_data": [
{
"comment": "This is test update comment"
}
]
}
EOF
- name: Create the test configuration on Windows
if: ${{ matrix.os == 'windows-latest' }}
run: |
FOR /f "delims=" %%D IN ('python -c "import os; print(os.getcwd().replace('\\', '\\\\'))"') DO SET WORKING_DIR=%%D
> web\config_local.py (
@echo.from config import *
@echo.
@echo.# Debug mode
@echo.DEBUG = True
@echo.
@echo.# App mode
@echo.SERVER_MODE = False
@echo.
@echo.# Log
@echo.CONSOLE_LOG_LEVEL = DEBUG
@echo.FILE_LOG_LEVEL = DEBUG
@echo.
@echo.DEFAULT_SERVER = '127.0.0.1'
@echo.
@echo.UPGRADE_CHECK_ENABLED = False
@echo.
@echo.LOG_FILE = "%WORKING_DIR%\\var\\pgadmin4.log"
@echo.SESSION_DB_PATH = "%WORKING_DIR%\\var\\sessions"
@echo.STORAGE_DIR = "%WORKING_DIR%\\var\\storage"
@echo.SQLITE_PATH = "%WORKING_DIR%\\var\\pgadmin4.db"
@echo.TEST_SQLITE_PATH = "%WORKING_DIR%\\var\\test_pgadmin4.db"
@echo.AZURE_CREDENTIAL_CACHE_DIR = "%WORKING_DIR%\\var\\azurecredentialcache"
)
> web\regression\test_config.json (
@echo.{
@echo. "pgAdmin4_login_credentials": {
@echo. "new_password": "NEWPASSWORD",
@echo. "login_password": "PASSWORD",
@echo. "login_username": "USER@EXAMPLE.COM"
@echo. },
@echo. "pgAdmin4_test_user_credentials": {
@echo. "new_password": "NEWPASSWORD",
@echo. "login_password": "PASSWORD",
@echo. "login_username": "USER2@EXAMPLE.COM"
@echo. },
@echo. "pgAdmin4_test_non_admin_credentials": {
@echo. "new_password": "NEWPASSWORD",
@echo. "login_password": "PASSWORD",
@echo. "login_username": "USER@EXAMPLE.COM"
@echo. },
@echo. "server_group": 1,
@echo. "server_credentials": [
@echo. {
@echo. "name": "EPAS ${{ matrix.pgver }}",
@echo. "comment": "EPAS ${{ matrix.pgver }} Server",
@echo. "db_username": "enterprisedb",
@echo. "host": "127.0.0.1",
@echo. "db_password": "enterprisedb",
@echo. "db_port": 58${{ matrix.pgver }},
@echo. "maintenance_db": "postgres",
@echo. "sslmode": "prefer",
@echo. "tablespace_path": "C:\\EPAS\\${{ matrix.pgver }}\\tablespaces",
@echo. "enabled": true,
@echo. "default_binary_paths": {
@echo. "pg": "",
@echo. "ppas": "C:\\EPAS\\${{ matrix.pgver }}\\bin"
@echo. }
@echo. }
@echo. ],
@echo. "server_update_data": [
@echo. {
@echo. "comment": "This is test update comment"
@echo. }
@echo. ]
@echo.}
)
shell: cmd
- name: Run the tests on Linux
if: ${{ matrix.os == 'ubuntu-22.04' }}
run: |
. venv/bin/activate
make check-python
- name: Run the tests on Windows
if: ${{ matrix.os == 'windows-latest' }}
run: |
call venv\Scripts\activate.bat
python web\regression\runtests.py --exclude feature_tests
shell: cmd
- name: Archive server log
if: success() || failure()
uses: actions/upload-artifact@v4
with:
name: server-log-epas-${{ matrix.os }}-pg${{ matrix.pgver }}
path: var/pgadmin4.log
- name: Archive regression log
if: success() || failure()
uses: actions/upload-artifact@v4
with:
name: regression-log-epas-${{ matrix.os }}-pg${{ matrix.pgver }}
path: web/regression/regression.log
-326
View File
@@ -1,326 +0,0 @@
name: Run Python tests on PostgreSQL
# Note: we use a custom port (and installation directory on Windows) for
# PostgreSQL as the runners may already have a version installed.
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
workflow_dispatch:
concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
cancel-in-progress: true
jobs:
run-python-tests-pg:
strategy:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-22.04, windows-latest]
pgver: [13, 14, 15, 16, 17]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Update python version
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Setup the PGDG APT repo on Linux
if: ${{ matrix.os == 'ubuntu-22.04' }}
run: |
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
- name: Uninstall PostgreSQL if already present on linux
if: ${{ matrix.os == 'ubuntu-22.04' }}
run: |
if [ -n "$(ls /etc/postgresql/*/*/postgresql.conf 2>/dev/null)" ]; then
# Extract the major version from pg_config
installed_pg_version=$( pg_config --version | cut -d ' ' -f 2 | cut -d '.' -f 1 )
echo "Installed PostgreSQL version: $installed_pg_version"
if [ $installed_pg_version != ${{ matrix.pgver }} ]; then
sudo pg_dropcluster $installed_pg_version main --stop
sudo apt-get -y remove "postgresql-${installed_pg_version}"
fi
fi
- name: Install platform dependencies on Linux
if: ${{ matrix.os == 'ubuntu-22.04' }}
run: |
sudo apt update
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev postgresql-${{ matrix.pgver }} postgresql-${{ matrix.pgver }}-pldebugger pgagent postgresql-${{ matrix.pgver }}-postgis-3
- name: Install platform dependencies on macOS
if: ${{ matrix.os == 'macos-latest' }}
run: |
brew install postgresql@${{ matrix.pgver }}
echo "/opt/homebrew/opt/postgresql@${{ matrix.pgver }}/bin" >> $GITHUB_PATH
- name: Uninstall PostgreSQL if already present on windows
if: ${{ matrix.os == 'windows-latest' }}
run: |
if exist "C:\Program Files\PostgreSQL\{{ matrix.pgver }}\uninstall-postgresql.exe" (
"C:\Program Files\PostgreSQL\{{ matrix.pgver }}\uninstall-postgresql.exe" --mode unattended
)
reg delete "HKLM\SOFTWARE\PostgreSQL" /f
shell: cmd
- name: Install platform dependencies on Windows
if: ${{ matrix.os == 'windows-latest' }}
run: |
FOR /f "delims=" %%F IN ('python tools\get_sb_package.py "https://www.postgresql.org/applications-v2.xml" "postgresql_${{ matrix.pgver }}" "windows-x64"') DO SET INSTALLER_EXE=%%F
ECHO Running %INSTALLER_EXE%...
%INSTALLER_EXE% --prefix C:\PostgreSQL\${{ matrix.pgver }} --datadir C:\PostgreSQL\${{ matrix.pgver }}\data --serverport 59${{ matrix.pgver }} --superpassword postgres --install_runtimes 0 --mode unattended --unattendedmodeui none --disable-components pgAdmin,stackbuilder --enable-components server,commandlinetools"
choco install -y mitkerberos
REM Ignore error 3010 (reboot required)
IF %ERRORLEVEL% EQU 3010 cmd /c "exit /b 0"
shell: cmd
- name: Create the tablespace directory on Linux
if: ${{ matrix.os == 'ubuntu-22.04' }}
run: |
sudo mkdir -p /var/lib/postgresql/tablespaces/${{ matrix.pgver }}
sudo chown postgres:postgres /var/lib/postgresql/tablespaces/${{ matrix.pgver }}
- name: Create the tablespace directory on macOS
if: ${{ matrix.os == 'macos-latest' }}
run: |
mkdir -p /opt/homebrew/var/tablespaces/${{ matrix.pgver }}
- name: Create the tablespace directory on Windows
if: ${{ matrix.os == 'windows-latest' }}
run: |
mkdir "C:\PostgreSQL\${{ matrix.pgver }}\tablespaces"
icacls "C:\PostgreSQL\${{ matrix.pgver }}\tablespaces" /grant "NETWORK SERVICE":(OI)(CI)F /T
shell: cmd
- name: Start PostgreSQL on Linux
if: ${{ matrix.os == 'ubuntu-22.04' }}
run: |
sudo su -c "echo local all all trust > /etc/postgresql/${{ matrix.pgver }}/main/pg_hba.conf"
sudo sed -i "s/port = 543[0-9]/port = 59${{ matrix.pgver }}/g" /etc/postgresql/${{ matrix.pgver }}/main/postgresql.conf
sudo sed -i "s/#shared_preload_libraries = ''/shared_preload_libraries = '\$libdir\/plugin_debugger'/g" /etc/postgresql/${{ matrix.pgver }}/main/postgresql.conf
sudo su - postgres -c "/usr/lib/postgresql/${{ matrix.pgver }}/bin/postgres -D /var/lib/postgresql/${{ matrix.pgver }}/main -c config_file=/etc/postgresql/${{ matrix.pgver }}/main/postgresql.conf &"
until sudo runuser -l postgres -c "pg_isready -p 59${{ matrix.pgver }}" 2>/dev/null; do
>&2 echo "Postgres is unavailable - sleeping for 2 seconds"
sleep 2
done
psql -U postgres -p 59${{ matrix.pgver }} -c 'CREATE EXTENSION pgagent;'
psql -U postgres -p 59${{ matrix.pgver }} -c 'CREATE EXTENSION pldbgapi;'
psql -U postgres -p 59${{ matrix.pgver }} -c 'CREATE EXTENSION postgis;'
- name: Start PostgreSQL on macOS
if: ${{ matrix.os == 'macos-latest' }}
run: |
echo local all all trust > /opt/homebrew/var/postgresql@${{ matrix.pgver }}/pg_hba.conf
sed -i '' "s/#port = 543[0-9]/port = 59${{ matrix.pgver }}/g" /opt/homebrew/var/postgresql@${{ matrix.pgver }}/postgresql.conf
brew services restart postgresql@${{ matrix.pgver }}
until /opt/homebrew/opt/postgresql@${{ matrix.pgver }}/bin/pg_isready -p 59${{ matrix.pgver }} 2>/dev/null; do
>&2 echo "Postgres is unavailable - sleeping for 2 seconds"
sleep 2
done
psql postgres -p 59${{ matrix.pgver }} -c 'CREATE ROLE postgres SUPERUSER LOGIN;'
- name: Install Python dependencies on Linux and macOS
if: ${{ matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04' }}
run: make install-python-testing
- name: Install Python dependencies on Windows
if: ${{ matrix.os == 'windows-latest' }}
run: |
SET LIB=C:\PostgreSQL\${{ matrix.pgver }}\lib;%LIB%
SET INCLUDE=C:\PostgreSQL\${{ matrix.pgver }}\include;%INCLUDE%
python -m venv venv
call venv\Scripts\activate.bat
python -m pip install --upgrade pip
pip install wheel sphinx sphinxcontrib-youtube -r web\regression\requirements.txt
shell: cmd
- name: Create the test configuration on Linux and macOS
if: ${{ matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04' }}
run: |
cat <<EOF > web/config_local.py
from config import *
# Debug mode
DEBUG = True
# App mode
SERVER_MODE = False
# Log
CONSOLE_LOG_LEVEL = DEBUG
FILE_LOG_LEVEL = DEBUG
DEFAULT_SERVER = '127.0.0.1'
UPGRADE_CHECK_ENABLED = False
LOG_FILE = "$(pwd)/var/pgadmin4.log"
SESSION_DB_PATH = "$(pwd)/var/sessions"
STORAGE_DIR = "$(pwd)/var/storage"
SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
TEST_SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
AZURE_CREDENTIAL_CACHE_DIR = "$(pwd)/var/azurecredentialcache"
EOF
cat <<EOF > web/regression/test_config.json
{
"pgAdmin4_login_credentials": {
"new_password": "NEWPASSWORD",
"login_password": "PASSWORD",
"login_username": "USER@EXAMPLE.COM"
},
"pgAdmin4_test_user_credentials": {
"new_password": "NEWPASSWORD",
"login_password": "PASSWORD",
"login_username": "USER2@EXAMPLE.COM"
},
"pgAdmin4_test_non_admin_credentials": {
"new_password": "NEWPASSWORD",
"login_password": "PASSWORD",
"login_username": "USER@EXAMPLE.COM"
},
"server_group": 1,
"server_credentials": [
{
"name": "PostgreSQL ${{ matrix.pgver }}",
"comment": "PostgreSQL ${{ matrix.pgver }} Server",
"db_username": "postgres",
"host": "${{ matrix.os == 'macos-latest' && '/tmp' || matrix.os == 'ubuntu-22.04' && '/var/run/postgresql' || '127.0.0.1' }}",
"db_password": "postgres",
"db_port": 59${{ matrix.pgver }},
"maintenance_db": "postgres",
"sslmode": "prefer",
"tablespace_path": "${{ matrix.os == 'macos-latest' && format('/opt/homebrew/var/tablespaces/{0}', matrix.pgver) || format('/var/lib/postgresql/tablespaces/{0}', matrix.pgver) }}",
"enabled": true,
"default_binary_paths": {
"pg": "${{ matrix.os == 'macos-latest' && format('/opt/homebrew/opt/postgresql@{0}/bin', matrix.pgver) || format('/usr/lib/postgresql/{0}/bin', matrix.pgver) }}",
"ppas": ""
}
}
],
"server_update_data": [
{
"comment": "This is test update comment"
}
]
}
EOF
- name: Create the test configuration on Windows
if: ${{ matrix.os == 'windows-latest' }}
run: |
FOR /f "delims=" %%D IN ('python -c "import os; print(os.getcwd().replace('\\', '\\\\'))"') DO SET WORKING_DIR=%%D
> web\config_local.py (
@echo.from config import *
@echo.
@echo.# Debug mode
@echo.DEBUG = True
@echo.
@echo.# App mode
@echo.SERVER_MODE = False
@echo.
@echo.# Log
@echo.CONSOLE_LOG_LEVEL = DEBUG
@echo.FILE_LOG_LEVEL = DEBUG
@echo.
@echo.DEFAULT_SERVER = '127.0.0.1'
@echo.
@echo.UPGRADE_CHECK_ENABLED = False
@echo.
@echo.LOG_FILE = "%WORKING_DIR%\\var\\pgadmin4.log"
@echo.SESSION_DB_PATH = "%WORKING_DIR%\\var\\sessions"
@echo.STORAGE_DIR = "%WORKING_DIR%\\var\\storage"
@echo.SQLITE_PATH = "%WORKING_DIR%\\var\\pgadmin4.db"
@echo.TEST_SQLITE_PATH = "%WORKING_DIR%\\var\\test_pgadmin4.db"
@echo.AZURE_CREDENTIAL_CACHE_DIR = "%WORKING_DIR%\\var\\azurecredentialcache"
)
> web\regression\test_config.json (
@echo.{
@echo. "pgAdmin4_login_credentials": {
@echo. "new_password": "NEWPASSWORD",
@echo. "login_password": "PASSWORD",
@echo. "login_username": "USER@EXAMPLE.COM"
@echo. },
@echo. "pgAdmin4_test_user_credentials": {
@echo. "new_password": "NEWPASSWORD",
@echo. "login_password": "PASSWORD",
@echo. "login_username": "USER2@EXAMPLE.COM"
@echo. },
@echo. "pgAdmin4_test_non_admin_credentials": {
@echo. "new_password": "NEWPASSWORD",
@echo. "login_password": "PASSWORD",
@echo. "login_username": "USER@EXAMPLE.COM"
@echo. },
@echo. "server_group": 1,
@echo. "server_credentials": [
@echo. {
@echo. "name": "PostgreSQL ${{ matrix.pgver }}",
@echo. "comment": "PostgreSQL ${{ matrix.pgver }} Server",
@echo. "db_username": "postgres",
@echo. "host": "127.0.0.1",
@echo. "db_password": "postgres",
@echo. "db_port": 59${{ matrix.pgver }},
@echo. "maintenance_db": "postgres",
@echo. "sslmode": "prefer",
@echo. "tablespace_path": "C:\\PostgreSQL\\${{ matrix.pgver }}\\tablespaces",
@echo. "enabled": true,
@echo. "default_binary_paths": {
@echo. "pg": "C:\\PostgreSQL\\${{ matrix.pgver }}\\bin",
@echo. "ppas": ""
@echo. }
@echo. }
@echo. ],
@echo. "server_update_data": [
@echo. {
@echo. "comment": "This is test update comment"
@echo. }
@echo. ]
@echo.}
)
shell: cmd
- name: Run the tests on Linux and macOS
if: ${{ matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04' }}
run: |
. venv/bin/activate
make check-python
- name: Run the tests on Windows
if: ${{ matrix.os == 'windows-latest' }}
run: |
call venv\Scripts\activate.bat
python web\regression\runtests.py --exclude feature_tests
shell: cmd
- name: Archive server log
if: success() || failure()
uses: actions/upload-artifact@v4
with:
name: server-log-${{ matrix.os }}-pg${{ matrix.pgver }}
path: var/pgadmin4.log
- name: Archive regression log
if: success() || failure()
uses: actions/upload-artifact@v4
with:
name: regression-log-${{ matrix.os }}-pg${{ matrix.pgver }}
path: web/regression/regression.log
-58
View File
@@ -1,58 +0,0 @@
# This workflow requires the following configuration in Github
#
# Variables:
# SONARQUBE_PROJECT_KEY - The project key in SonarQube
#
# Secrets:
# SONARQUBE_TOKEN - SonarQube API token
# SONARQUBE_HOST - The URL of the SonarQube host
name: SonarQube scan
on:
push:
branches: [ "master" ]
concurrency:
group: sonarqube
cancel-in-progress: false
jobs:
run-sonarqube-scan:
# Only run if the project key is set
if: vars.SONARQUBE_PROJECT_KEY != null
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Create the scan properties file
run: |
cat <<EOF > sonar-project.properties
sonar.projectKey=${{ vars.SONARQUBE_PROJECT_KEY }}
sonar.projectName=pgAdmin 4
sonar.projectVersion=%VERSION%
# Ignore templates and SQL scripts as they confuse the scanner
sonar.exclusions=**/templates/**/*, **/*.sql
# Let SonarQube know where tests can be found
sonar.test.inclusions=**/tests/**, web/regression
# Python compatibility
sonar.python.version=3.7, 3.8, 3.9, 3.10, 3.11
EOF
APP_RELEASE=`grep "^APP_RELEASE" web/config.py | cut -d"=" -f2 | sed 's/ //g'`
APP_REVISION=`grep "^APP_REVISION" web/config.py | cut -d"=" -f2 | sed 's/ //g'`
APP_LONG_VERSION=${APP_RELEASE}.${APP_REVISION}
sed -i "s/%VERSION%/${APP_LONG_VERSION}/g" sonar-project.properties
- name: SonarQube Scan
uses: sonarsource/sonarqube-scan-action@master
env:
SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONARQUBE_HOST }}
-4
View File
@@ -9,8 +9,6 @@
.DS_Store
.idea
.vscode
.sonarlint
.yarn
/*.diff
/*.patch
/dist
@@ -39,7 +37,6 @@ runtime/pgAdmin4.app/
runtime/pgAdmin4.pro.user*
runtime/pgAdmin4_resource.rc
runtime/release/
runtime/dev_config.json
runtime/ui_BrowserWindow.h
web/config_local.py
web/pgadmin/misc/themes/pgadmin.themes.json
@@ -50,7 +47,6 @@ node_modules/
web/pgAdmin/static/js/generated
web/pgadmin/static/js/generated
web/yarn-error.log
web/commit_hash
/web/cacert.pem
auditjs.html
auditpy.txt
+2 -2
View File
@@ -1,9 +1,9 @@
[pycodestyle]
ignore = E402,W504,E231
ignore = E402,W504,W605
max-line-length = 79
statistics = True
show-source = False
show-pep8 = False
count = True
format = pylint
exclude = node_modules,config_local.py,config_distro.py
exclude = migrations,node_modules,config_local.py,config_distro.py
+576
View File
@@ -0,0 +1,576 @@
pgAdmin 4 Dependency Inventory
==============================
pgAdmin 4 is built on Python, Javascript and NW.js (node-webkit), and is
dependent on various third party libraries. These are automatically compiled
from the system, requirements.txt and packages.json and listed below.
Runtime Dependencies
====================
Name Version Licence URL
---- ------- ------- ---
Python 3.6+ PSF https://www.python.org/
nw 0.50.2 MIT git://github.com/nwjs/npm-installer.git
axios 0.21.4 MIT https://github.com/axios/axios.git
bootstrap 4.6.2 MIT git+https://github.com/twbs/bootstrap.git
follow-redirects 1.15.2 MIT git@github.com:follow-redirects/follow-redirects.git
5 dependencies listed.
Python Dependencies
===================
Name Version Licence URL
---- ------- ------- ---
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.2 MIT https://github.com/maxcountryman/flask-login
Flask-Mail 0.9.1 BSD https://github.com/rduplain/flask-mail
Flask-Migrate 4.0.4 MIT https://github.com/miguelgrinberg/flask-migrate
dnspython 2.2.1 ISC https://www.dnspython.org
greenlet 1.1.2 MIT License https://greenlet.readthedocs.io/
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.13 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.5 MIT https://github.com/Flask-Middleware/flask-security
Flask-SocketIO 5.2.0 Unknown https://github.com/miguelgrinberg/flask-socketio
WTForms 3.0.1 BSD-3-Clause https://wtforms.readthedocs.io/
passlib 1.7.4 BSD https://passlib.readthedocs.io
pytz 2021.3 MIT http://pythonhosted.org/pytz
simplejson 3.18.3 MIT License https://github.com/simplejson/simplejson
speaklater3 1.4 UNKNOWN https://github.com/ThomasWaldmann/speaklater
sqlparse 0.4.3 BSD-3-Clause https://github.com/andialbrecht/sqlparse
psutil 5.9.3 BSD-3-Clause https://github.com/giampaolo/psutil
psycopg2 2.9.5 LGPL with exceptions https://psycopg.org/
python-dateutil 2.8.2 Dual License https://github.com/dateutil/dateutil
SQLAlchemy 1.4.46 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.8.2 LICENSE.txt https://github.com/pythongssapi/python-gssapi
eventlet 0.33.0 UNKNOWN http://eventlet.net
httpagentparser 1.9.5 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 1.1.0 BSD 3-Clause License https://authlib.org/
requests 2.25.1 Apache 2.0 https://requests.readthedocs.io
pyotp 2.8.0 MIT License https://github.com/pyotp/pyotp
qrcode 7.4.2 BSD https://github.com/lincolnloop/python-qrcode
Pillow 9.4.0 HPND https://python-pillow.org
boto3 1.26.71 Apache License 2.0 https://github.com/boto/boto3
botocore 1.29.71 Apache License 2.0 https://github.com/boto/botocore
urllib3 1.26.14 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
azure-identity 1.9.0 MIT License https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/identity/azure-identity
NOTE: This report was generated using Python 3.10. Full information may not be
shown for Python modules that are not required with this version.
46 dependencies listed.
Javascript Dependencies
=======================
Name Version Licence URL
---- ------- ------- ---
@ampproject/remapping 2.2.0 Apache-2.0 git+https://github.com/ampproject/remapping.git
anti-trojan-source 1.4.0 Apache-2.0 https://github.com/lirantal/anti-trojan-source.git
bootstrap-datepicker 1.9.0 Apache-2.0 https://github.com/uxsolutions/bootstrap-datepicker.git
eve 0.5.4 Apache-2.0 git@github.com:adobe-webplatform/eve.git
jmespath 0.16.0 Apache-2.0 git://github.com/jmespath/jmespath.js
jsoneditor 9.9.2 Apache-2.0 https://github.com/josdejong/jsoneditor.git
paths-js 0.4.11 Apache-2.0 https://github.com/andreaferretti/paths-js.git
rc-dock 3.2.14 Apache-2.0 https://github.com/ticlo/rc-dock.git
rc-new-window 0.1.13 Apache-2.0 https://github.com/ticlo/rc-new-window.git
snapsvg 0.5.1 Apache-2.0 git@github.com:adobe-webplatform/Snap.svg.git
spdx-correct 3.1.1 Apache-2.0 https://github.com/jslicense/spdx-correct.js.git
validate-npm-package-license 3.0.4 Apache-2.0 https://github.com/kemitchell/validate-npm-package-license.js.git
@babel/code-frame 7.18.6 MIT https://github.com/babel/babel.git
@babel/compat-data 7.20.1 MIT https://github.com/babel/babel.git
@babel/core 7.20.2 MIT https://github.com/babel/babel.git
@babel/generator 7.20.4 MIT https://github.com/babel/babel.git
@babel/helper-annotate-as-pure 7.18.6 MIT https://github.com/babel/babel.git
@babel/helper-compilation-targets 7.20.0 MIT https://github.com/babel/babel.git
@babel/helper-create-class-features-plugin 7.20.2 MIT https://github.com/babel/babel.git
@babel/helper-environment-visitor 7.18.9 MIT https://github.com/babel/babel.git
@babel/helper-function-name 7.19.0 MIT https://github.com/babel/babel.git
@babel/helper-hoist-variables 7.18.6 MIT https://github.com/babel/babel.git
@babel/helper-member-expression-to-functions 7.18.9 MIT https://github.com/babel/babel.git
@babel/helper-module-imports 7.18.6 MIT https://github.com/babel/babel.git
@babel/helper-module-transforms 7.20.2 MIT https://github.com/babel/babel.git
@babel/helper-optimise-call-expression 7.18.6 MIT https://github.com/babel/babel.git
@babel/helper-plugin-utils 7.20.2 MIT https://github.com/babel/babel.git
@babel/helper-replace-supers 7.19.1 MIT https://github.com/babel/babel.git
@babel/helper-simple-access 7.20.2 MIT https://github.com/babel/babel.git
@babel/helper-split-export-declaration 7.18.6 MIT https://github.com/babel/babel.git
@babel/helper-string-parser 7.19.4 MIT https://github.com/babel/babel.git
@babel/helper-validator-identifier 7.19.1 MIT https://github.com/babel/babel.git
@babel/helper-validator-option 7.18.6 MIT https://github.com/babel/babel.git
@babel/helpers 7.20.1 MIT https://github.com/babel/babel.git
@babel/highlight 7.18.6 MIT https://github.com/babel/babel.git
@babel/parser 7.20.3 MIT https://github.com/babel/babel.git
@babel/plugin-proposal-class-properties 7.18.6 MIT https://github.com/babel/babel.git
@babel/plugin-syntax-jsx 7.18.6 MIT https://github.com/babel/babel.git
@babel/plugin-transform-react-display-name 7.18.6 MIT https://github.com/babel/babel.git
@babel/plugin-transform-react-jsx 7.19.0 MIT https://github.com/babel/babel.git
@babel/plugin-transform-react-jsx-development 7.18.6 MIT https://github.com/babel/babel.git
@babel/plugin-transform-react-pure-annotations 7.18.6 MIT https://github.com/babel/babel.git
@babel/preset-react 7.18.6 MIT https://github.com/babel/babel.git
@babel/runtime 7.20.1 MIT https://github.com/babel/babel.git
@babel/template 7.18.10 MIT https://github.com/babel/babel.git
@babel/traverse 7.20.1 MIT https://github.com/babel/babel.git
@babel/types 7.20.2 MIT https://github.com/babel/babel.git
@date-io/core 1.3.13 MIT https://github.com/dmtrKovalenko/date-io
@date-io/date-fns 1.3.13 MIT https://github.com/dmtrKovalenko/date-io
@emotion/babel-plugin 11.10.5 MIT https://github.com/emotion-js/emotion/tree/main/packages/babel-plugin
@emotion/cache 11.10.5 MIT https://github.com/emotion-js/emotion/tree/main/packages/cache
@emotion/hash 0.8.0 MIT https://github.com/emotion-js/emotion/tree/master/packages/hash
@emotion/hash 0.9.0 MIT https://github.com/emotion-js/emotion/tree/main/packages/hash
@emotion/is-prop-valid 1.2.0 MIT https://github.com/emotion-js/emotion/tree/main/packages/is-prop-valid
@emotion/memoize 0.8.0 MIT https://github.com/emotion-js/emotion/tree/main/packages/memoize
@emotion/react 11.10.5 MIT https://github.com/emotion-js/emotion/tree/main/packages/react
@emotion/serialize 1.1.1 MIT https://github.com/emotion-js/emotion/tree/main/packages/serialize
@emotion/sheet 1.2.1 MIT https://github.com/emotion-js/emotion/tree/main/packages/sheet
@emotion/stylis 0.8.5 MIT https://github.com/emotion-js/emotion/tree/master/packages/stylis
@emotion/unitless 0.8.0 MIT https://github.com/emotion-js/emotion/tree/main/packages/unitless
@emotion/unitless 0.7.5 MIT https://github.com/emotion-js/emotion/tree/master/packages/unitless
@emotion/use-insertion-effect-with-fallbacks 1.0.0 MIT https://github.com/emotion-js/emotion/tree/main/packages/use-insertion-effect-with-fallbacks
@emotion/utils 1.2.0 MIT https://github.com/emotion-js/emotion/tree/main/packages/utils
@emotion/weak-memoize 0.3.0 MIT https://github.com/emotion-js/emotion/tree/main/packages/weak-memoize
@istanbuljs/schema 0.1.3 MIT git+https://github.com/istanbuljs/schema.git
@jridgewell/gen-mapping 0.3.2 MIT https://github.com/jridgewell/gen-mapping
@jridgewell/gen-mapping 0.1.1 MIT https://github.com/jridgewell/gen-mapping
@jridgewell/resolve-uri 3.1.0 MIT https://github.com/jridgewell/resolve-uri
@jridgewell/set-array 1.1.2 MIT https://github.com/jridgewell/set-array
@jridgewell/sourcemap-codec 1.4.14 MIT git+https://github.com/jridgewell/sourcemap-codec.git
@jridgewell/trace-mapping 0.3.17 MIT git+https://github.com/jridgewell/trace-mapping.git
@material-ui/core 4.11.0 MIT https://github.com/mui-org/material-ui.git
@material-ui/icons 4.11.3 MIT https://github.com/mui-org/material-ui.git
@material-ui/lab 4.0.0-alpha.58 MIT https://github.com/mui-org/material-ui.git
@material-ui/pickers 3.3.10 MIT https://github.com/mui-org/material-ui-pickers
@material-ui/styles 4.11.5 MIT https://github.com/mui-org/material-ui.git
@material-ui/system 4.12.2 MIT https://github.com/mui-org/material-ui.git
@material-ui/types 5.1.0 MIT https://github.com/mui-org/material-ui.git
@material-ui/utils 4.11.3 MIT https://github.com/mui-org/material-ui.git
@nodelib/fs.scandir 2.1.5 MIT https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.scandir
@nodelib/fs.stat 2.0.5 MIT https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.stat
@nodelib/fs.walk 1.2.8 MIT https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.walk
@projectstorm/geometry 6.7.4 MIT https://github.com/projectstorm/react-diagrams.git
@projectstorm/react-canvas-core 6.7.4 MIT https://github.com/projectstorm/react-diagrams.git
@projectstorm/react-diagrams 6.7.4 MIT https://github.com/projectstorm/react-diagrams.git
@projectstorm/react-diagrams-core 6.7.4 MIT https://github.com/projectstorm/react-diagrams.git
@projectstorm/react-diagrams-defaults 6.7.4 MIT https://github.com/projectstorm/react-diagrams.git
@projectstorm/react-diagrams-routing 6.7.4 MIT https://github.com/projectstorm/react-diagrams.git
@react-dnd/asap 5.0.2 MIT https://github.com/react-dnd/react-dnd
@react-dnd/invariant 4.0.2 MIT https://github.com/react-dnd/react-dnd
@react-dnd/shallowequal 4.0.2 MIT https://github.com/react-dnd/react-dnd
@remix-run/router 1.0.3 MIT https://github.com/remix-run/react-router
@simonwep/pickr 1.8.2 MIT https://github.com/Simonwep/pickr.git
@sindresorhus/is 0.7.0 MIT https://github.com/sindresorhus/is.git
@socket.io/component-emitter 3.1.0 MIT https://github.com/socketio/emitter.git
@szhsin/react-menu 2.3.4 MIT https://github.com/szhsin/react-menu.git
@types/classnames 2.3.1 MIT Unknown
@types/minimist 1.2.2 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
@types/node 18.11.9 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
@types/normalize-package-data 2.4.1 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
@types/parse-json 4.0.0 MIT https://www.github.com/DefinitelyTyped/DefinitelyTyped.git
@types/prop-types 15.7.5 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
@types/react 18.0.25 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
@types/react 16.14.34 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
@types/react-dom 16.9.17 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
@types/react-transition-group 4.4.5 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
@types/scheduler 0.16.2 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
@types/styled-jsx 2.2.9 MIT https://github.com/DefinitelyTyped/DefinitelyTyped.git
ajv 8.11.2 MIT https://github.com/ajv-validator/ajv.git
ajv 6.12.6 MIT https://github.com/ajv-validator/ajv.git
ansi-styles 3.2.1 MIT https://github.com/chalk/ansi-styles.git
array-union 3.0.1 MIT https://github.com/sindresorhus/array-union.git
arrify 1.0.1 MIT https://github.com/sindresorhus/arrify.git
aspen-core 1.0.5 MIT git+https://github.com/neeksandhu/aspen-core.git
aspen-decorations 1.1.1 MIT git+https://github.com/neeksandhu/aspen-decorations.git
aspen-tree-model 1.0.5 MIT git+https://github.com/neeksandhu/aspen-tree-model.git
async 2.6.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-macros 3.1.0 MIT https://github.com/kentcdodds/babel-plugin-macros
babel-plugin-styled-components 2.0.7 MIT https://github.com/styled-components/babel-plugin-styled-components.git
babel-plugin-syntax-jsx 6.18.0 MIT https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-jsx
babelify 10.0.0 MIT https://github.com/babel/babelify.git
balanced-match 1.0.2 MIT git://github.com/juliangruber/balanced-match.git
base64-arraybuffer 1.0.2 MIT https://github.com/niklasvh/base64-arraybuffer
bignumber.js 9.1.0 MIT https://github.com/MikeMcl/bignumber.js.git
bootstrap 4.6.2 MIT git+https://github.com/twbs/bootstrap.git
bootstrap4-toggle 3.6.1 MIT https://github.com/gitbrent/bootstrap4-toggle.git
bowser 2.11.0 MIT git+https://github.com/lancedikson/bowser.git
brace 0.11.1 MIT git://github.com/thlorenz/brace.git
brace-expansion 1.1.11 MIT git://github.com/juliangruber/brace-expansion.git
braces 3.0.2 MIT https://github.com/micromatch/braces.git
browserfs 1.4.3 MIT https://github.com/jvilk/BrowserFS.git
browserslist 4.21.4 MIT https://github.com/browserslist/browserslist.git
callsites 3.1.0 MIT https://github.com/sindresorhus/callsites.git
camelcase 6.3.0 MIT https://github.com/sindresorhus/camelcase.git
camelcase-keys 7.0.2 MIT https://github.com/sindresorhus/camelcase-keys.git
camelize 1.0.1 MIT git://github.com/ljharb/camelize.git
caniuse-api 3.0.0 MIT https://github.com/nyalab/caniuse-api.git
chalk 2.4.2 MIT https://github.com/chalk/chalk.git
chart.js 3.9.1 MIT https://github.com/chartjs/Chart.js.git
chartjs-plugin-zoom 1.3.0 MIT https://github.com/chartjs/chartjs-plugin-zoom.git
classnames 2.3.2 MIT https://github.com/JedWatson/classnames.git
closest 0.0.1 MIT https://github.com/ForbesLindesay/closest.git
clsx 1.2.1 MIT https://github.com/lukeed/clsx.git
codemirror 5.65.10 MIT https://github.com/codemirror/CodeMirror.git
color-convert 1.9.3 MIT https://github.com/Qix-/color-convert.git
color-name 1.1.3 MIT git@github.com:dfcreative/color-name.git
colord 2.9.3 MIT https://github.com/omgovich/colord.git
commander 7.2.0 MIT https://github.com/tj/commander.js.git
concat-map 0.0.1 MIT git://github.com/substack/node-concat-map.git
convert-source-map 1.9.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.26.1 MIT https://github.com/zloirock/core-js.git
cosmiconfig 7.1.0 MIT git+https://github.com/davidtheclark/cosmiconfig.git
css-line-break 2.1.0 MIT git+ssh://git@github.com/niklasvh/css-line-break.git
css-to-react-native 3.0.0 MIT git+https://github.com/styled-components/css-to-react-native.git
css-tree 1.1.3 MIT https://github.com/csstree/csstree.git
css-vendor 2.0.8 MIT git@github.com:cssinjs/css-vendor.git
cssesc 3.0.0 MIT https://github.com/mathiasbynens/cssesc.git
cssnano 5.1.14 MIT https://github.com/cssnano/cssnano.git
cssnano-preset-default 5.2.13 MIT https://github.com/cssnano/cssnano.git
cssnano-utils 3.1.0 MIT https://github.com/cssnano/cssnano.git
csso 4.2.0 MIT https://github.com/css/csso.git
csstype 2.6.21 MIT https://github.com/frenic/csstype
csstype 3.1.1 MIT https://github.com/frenic/csstype
dagre 0.8.5 MIT https://github.com/dagrejs/dagre.git
date-fns 2.29.3 MIT https://github.com/date-fns/date-fns
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.1 MIT https://github.com/sindresorhus/decamelize-keys.git
deep-diff 1.0.2 MIT git://github.com/flitbit/diff.git
diff-arrays-of-objects 1.1.9 MIT git+https://github.com/malcolmvr/diff-arrays-of-objects.git
dir-glob 3.0.1 MIT https://github.com/kevva/dir-glob.git
dnd-core 16.0.1 MIT https://github.com/react-dnd/react-dnd.git
dom-align 1.12.4 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.4.1 MIT git://github.com/cheeriojs/dom-renderer.git
engine.io-client 6.2.3 MIT https://github.com/socketio/engine.io-client.git
engine.io-parser 5.0.4 MIT git@github.com:socketio/engine.io-parser.git
error-ex 1.3.2 MIT https://github.com/qix-/node-error-ex.git
escalade 3.1.1 MIT https://github.com/lukeed/escalade.git
escape-string-regexp 1.0.5 MIT https://github.com/sindresorhus/escape-string-regexp.git
escape-string-regexp 4.0.0 MIT https://github.com/sindresorhus/escape-string-regexp.git
fast-deep-equal 3.1.3 MIT git+https://github.com/epoberezkin/fast-deep-equal.git
fast-glob 3.2.12 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-root 1.1.0 MIT git@github.com:js-n/find-root.git
find-up 5.0.0 MIT https://github.com/sindresorhus/find-up.git
follow-redirects 1.15.2 MIT git@github.com:follow-redirects/follow-redirects.git
function-bind 1.1.1 MIT git://github.com/Raynos/function-bind.git
gensync 1.0.0-beta.2 MIT https://github.com/loganfsmyth/gensync.git
globals 11.12.0 MIT https://github.com/sindresorhus/globals.git
globby 12.2.0 MIT https://github.com/sindresorhus/globby.git
graphlib 2.1.8 MIT https://github.com/dagrejs/graphlib.git
hammerjs 2.0.8 MIT git://github.com/hammerjs/hammer.js.git
hard-rejection 2.1.0 MIT https://github.com/sindresorhus/hard-rejection.git
has 1.0.3 MIT git://github.com/tarruda/has.git
has-flag 3.0.0 MIT https://github.com/sindresorhus/has-flag.git
has-flag 4.0.0 MIT https://github.com/sindresorhus/has-flag.git
html-escaper 2.0.2 MIT https://github.com/WebReflection/html-escaper.git
html2canvas 1.4.1 MIT git@github.com:niklasvh/html2canvas.git
ignore 5.2.1 MIT git@github.com:kaelzhang/node-ignore.git
immutability-helper 3.1.1 MIT git+https://github.com/kolodny/immutability-helper.git
import-fresh 3.3.0 MIT https://github.com/sindresorhus/import-fresh.git
indent-string 5.0.0 MIT https://github.com/sindresorhus/indent-string.git
insert-if 1.2.0 MIT git+https://github.com/chipto/insert-if.git
ip-address 7.1.0 MIT git://github.com/beaugunderson/ip-address.git
is-any-array 2.0.0 MIT https://github.com/cheminfo-js/is-any-array.git
is-arrayish 0.2.1 MIT https://github.com/qix-/node-is-arrayish.git
is-core-module 2.11.0 MIT git+https://github.com/inspect-js/is-core-module.git
is-extglob 2.1.1 MIT https://github.com/jonschlinkert/is-extglob.git
is-glob 4.0.3 MIT https://github.com/micromatch/is-glob.git
is-in-browser 1.1.3 MIT git+https://github.com/tuxsudo/is-in-browser.git
is-number 7.0.0 MIT https://github.com/jonschlinkert/is-number.git
is-plain-obj 1.1.0 MIT https://github.com/sindresorhus/is-plain-obj.git
is-relative 1.0.0 MIT https://github.com/jonschlinkert/is-relative.git
is-unc-path 1.0.0 MIT https://github.com/jonschlinkert/is-unc-path.git
javascript-natural-sort 0.7.1 MIT https://github.com/Bill4Time/javascript-natural-sort.git
jquery 3.6.1 MIT https://github.com/jquery/jquery.git
jquery-contextmenu 2.9.2 MIT git://github.com/swisnl/jQuery-contextMenu.git
js-tokens 4.0.0 MIT https://github.com/lydell/js-tokens.git
jsbn 1.1.0 MIT https://github.com/andyperlitch/jsbn.git
jsesc 2.5.2 MIT https://github.com/mathiasbynens/jsesc.git
json-bignumber 1.1.1 MIT git@github.com:wbuss/JSONBigNumber.git
json-parse-even-better-errors 2.3.1 MIT https://github.com/npm/json-parse-even-better-errors
json-schema-traverse 1.0.0 MIT git+https://github.com/epoberezkin/json-schema-traverse.git
json-schema-traverse 0.4.1 MIT git+https://github.com/epoberezkin/json-schema-traverse.git
json-source-map 0.6.1 MIT git+https://github.com/epoberezkin/json-source-map.git
json5 2.2.3 MIT git+https://github.com/json5/json5.git
jss 10.9.2 MIT https://github.com/cssinjs/jss.git
jss-plugin-camel-case 10.9.2 MIT https://github.com/cssinjs/jss.git
jss-plugin-default-unit 10.9.2 MIT https://github.com/cssinjs/jss.git
jss-plugin-global 10.9.2 MIT https://github.com/cssinjs/jss.git
jss-plugin-nested 10.9.2 MIT https://github.com/cssinjs/jss.git
jss-plugin-props-sort 10.9.2 MIT https://github.com/cssinjs/jss.git
jss-plugin-rule-value-function 10.9.2 MIT https://github.com/cssinjs/jss.git
jss-plugin-vendor-prefixer 10.9.2 MIT https://github.com/cssinjs/jss.git
karma-coverage 2.2.0 MIT git://github.com/karma-runner/karma-coverage.git
kind-of 6.0.3 MIT https://github.com/jonschlinkert/kind-of.git
lilconfig 2.0.6 MIT https://github.com/antonk52/lilconfig
lines-and-columns 1.2.4 MIT https://github.com/eventualbuddha/lines-and-columns.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
make-dir 3.1.0 MIT https://github.com/sindresorhus/make-dir.git
map-obj 4.3.0 MIT https://github.com/sindresorhus/map-obj.git
map-obj 1.0.1 MIT https://github.com/sindresorhus/map-obj.git
matches-selector 0.0.1 MIT https://github.com/ForbesLindesay/matches-selector.git
memoize-one 5.2.1 MIT https://github.com/alexreardon/memoize-one.git
meow 10.1.5 MIT https://github.com/sindresorhus/meow.git
merge2 1.4.1 MIT git@github.com:teambition/merge2.git
micromatch 4.0.5 MIT https://github.com/micromatch/micromatch.git
min-indent 1.0.1 MIT https://github.com/thejameskyle/min-indent
minimist-options 4.1.0 MIT https://github.com/vadimdemedes/minimist-options.git
ml-array-max 1.2.4 MIT git+https://github.com/mljs/array.git
ml-array-min 1.2.3 MIT git+https://github.com/mljs/array.git
ml-array-rescale 1.3.7 MIT git+https://github.com/mljs/array.git
ml-matrix 6.10.4 MIT https://github.com/mljs/matrix.git
mobius1-selectr 2.4.13 MIT git+https://github.com/Mobius1/Selectr.git
moment 2.29.4 MIT https://github.com/moment/moment.git
moment-timezone 0.5.39 MIT https://github.com/moment/moment-timezone.git
ms 2.1.2 MIT https://github.com/zeit/ms.git
nanoid 3.3.4 MIT https://github.com/ai/nanoid.git
nanopop 2.2.0 MIT https://github.com/Simonwep/nanopop.git
node-releases 2.0.6 MIT https://github.com/chicoxyzzy/node-releases.git
normalize-url 6.1.0 MIT https://github.com/sindresorhus/normalize-url.git
notificar 1.0.1 MIT git+https://github.com/neeksandhu/notificar.git
notistack 1.0.10 MIT git+https://github.com/iamhosseindhv/notistack.git
object-assign 4.1.1 MIT https://github.com/sindresorhus/object-assign.git
p-limit 3.1.0 MIT https://github.com/sindresorhus/p-limit.git
p-locate 5.0.0 MIT https://github.com/sindresorhus/p-locate.git
p-reduce 1.0.0 MIT https://github.com/sindresorhus/p-reduce.git
p-series 1.1.0 MIT https://github.com/sindresorhus/p-series.git
parent-module 1.0.1 MIT https://github.com/sindresorhus/parent-module.git
parse-json 5.2.0 MIT https://github.com/sindresorhus/parse-json.git
path-exists 4.0.0 MIT https://github.com/sindresorhus/path-exists.git
path-fx 2.1.2 MIT git+https://github.com/NeekSandhu/path-fx.git
path-parse 1.0.7 MIT https://github.com/jbgutierrez/path-parse.git
path-type 4.0.0 MIT https://github.com/sindresorhus/path-type.git
pathfinding 0.4.18 MIT git://github.com/qiao/PathFinding.js.git
performance-now 2.1.0 MIT git://github.com/braveg1rl/performance-now.git
picomatch 2.3.1 MIT https://github.com/micromatch/picomatch.git
picomodal 3.0.0 MIT https://github.com/Nycto/PicoModal.git
popper.js 1.16.1-lts MIT git+https://github.com/FezVrasta/popper.js.git
popper.js 1.16.1 MIT git+https://github.com/FezVrasta/popper.js.git
postcss 8.4.19 MIT https://github.com/postcss/postcss.git
postcss-calc 8.2.4 MIT https://github.com/postcss/postcss-calc.git
postcss-colormin 5.3.0 MIT https://github.com/cssnano/cssnano.git
postcss-convert-values 5.1.3 MIT https://github.com/cssnano/cssnano.git
postcss-discard-comments 5.1.2 MIT https://github.com/cssnano/cssnano.git
postcss-discard-duplicates 5.1.0 MIT https://github.com/cssnano/cssnano.git
postcss-discard-empty 5.1.1 MIT https://github.com/cssnano/cssnano.git
postcss-discard-overridden 5.1.0 MIT https://github.com/cssnano/cssnano.git
postcss-merge-longhand 5.1.7 MIT https://github.com/cssnano/cssnano.git
postcss-merge-rules 5.1.3 MIT https://github.com/cssnano/cssnano.git
postcss-minify-font-values 5.1.0 MIT https://github.com/cssnano/cssnano.git
postcss-minify-gradients 5.1.1 MIT https://github.com/cssnano/cssnano.git
postcss-minify-params 5.1.4 MIT https://github.com/cssnano/cssnano.git
postcss-minify-selectors 5.2.1 MIT https://github.com/cssnano/cssnano.git
postcss-normalize-charset 5.1.0 MIT https://github.com/cssnano/cssnano.git
postcss-normalize-display-values 5.1.0 MIT https://github.com/cssnano/cssnano.git
postcss-normalize-positions 5.1.1 MIT https://github.com/cssnano/cssnano.git
postcss-normalize-repeat-style 5.1.1 MIT https://github.com/cssnano/cssnano.git
postcss-normalize-string 5.1.0 MIT https://github.com/cssnano/cssnano.git
postcss-normalize-timing-functions 5.1.0 MIT https://github.com/cssnano/cssnano.git
postcss-normalize-unicode 5.1.1 MIT https://github.com/cssnano/cssnano.git
postcss-normalize-url 5.1.0 MIT https://github.com/cssnano/cssnano.git
postcss-normalize-whitespace 5.1.1 MIT https://github.com/cssnano/cssnano.git
postcss-ordered-values 5.1.3 MIT https://github.com/cssnano/cssnano.git
postcss-reduce-initial 5.1.1 MIT https://github.com/cssnano/cssnano.git
postcss-reduce-transforms 5.1.0 MIT https://github.com/cssnano/cssnano.git
postcss-selector-parser 6.0.11 MIT https://github.com/postcss/postcss-selector-parser.git
postcss-svgo 5.1.0 MIT https://github.com/cssnano/cssnano.git
postcss-unique-selectors 5.1.1 MIT https://github.com/cssnano/cssnano.git
postcss-value-parser 4.2.0 MIT https://github.com/TrySound/postcss-value-parser.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
raf 3.4.1 MIT git://github.com/chrisdickinson/raf.git
rc-align 4.0.12 MIT git@github.com:react-component/align.git
rc-dropdown 3.6.2 MIT git@github.com:react-component/dropdown.git
rc-dropdown 4.0.1 MIT git@github.com:react-component/dropdown.git
rc-menu 9.8.0 MIT git@github.com:react-component/menu.git
rc-menu 9.6.4 MIT git@github.com:react-component/menu.git
rc-motion 2.6.2 MIT git@github.com:react-component/motion.git
rc-overflow 1.2.8 MIT git@github.com:react-component/overflow.git
rc-resize-observer 1.2.0 MIT git@github.com:react-component/resize-observer.git
rc-tabs 11.16.1 MIT git@github.com:react-component/tabs.git
rc-trigger 5.3.4 MIT https://github.com/react-component/trigger.git
rc-util 5.24.6 MIT git@github.com:react-component/util.git
re-resizable 6.9.6 MIT https://github.com/bokuweb/react-resizable-box.git
react 17.0.2 MIT https://github.com/facebook/react.git
react-aspen 1.2.0 MIT https://github.com/neeksandhu/react-aspen.git
react-checkbox-tree 1.8.0 MIT https://github.com/jakezatecky/react-checkbox-tree
react-data-grid 7.0.0-beta.14 MIT https://github.com/adazzle/react-data-grid.git
react-dnd 16.0.1 MIT https://github.com/react-dnd/react-dnd.git
react-dnd-html5-backend 16.0.1 MIT https://github.com/react-dnd/react-dnd.git
react-dom 17.0.2 MIT https://github.com/facebook/react.git
react-draggable 4.4.5 MIT https://github.com/react-grid-layout/react-draggable.git
react-draggable 4.4.4 MIT https://github.com/react-grid-layout/react-draggable.git
react-dropzone 14.2.3 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
react-resize-detector 8.0.3 MIT git+https://github.com/maslianok/react-resize-detector.git
react-rnd 10.3.7 MIT https://github.com/bokuweb/react-rnd.git
react-router 6.4.3 MIT https://github.com/remix-run/react-router
react-router-dom 6.4.3 MIT https://github.com/remix-run/react-router
react-select 4.3.1 MIT https://github.com/JedWatson/react-select/tree/master/packages/react-select
react-table 7.8.0 MIT https://github.com/tannerlinsley/react-table
react-transition-state 1.1.5 MIT https://github.com/szhsin/react-transition-state.git
react-virtualized-auto-sizer 1.0.7 MIT https://github.com/bvaughn/react-virtualized-auto-sizer.git
react-window 1.8.8 MIT https://github.com/bvaughn/react-window.git
read-pkg 6.0.0 MIT https://github.com/sindresorhus/read-pkg.git
read-pkg-up 8.0.0 MIT https://github.com/sindresorhus/read-pkg-up.git
redent 4.0.0 MIT https://github.com/sindresorhus/redent.git
redux 4.2.0 MIT https://github.com/reduxjs/redux.git
regenerator-runtime 0.13.11 MIT https://github.com/facebook/regenerator/tree/main/packages/runtime
require-from-string 2.0.2 MIT https://github.com/floatdrop/require-from-string.git
resize-observer-polyfill 1.5.1 MIT https://github.com/que-etc/resize-observer-polyfill.git
resolve 1.22.1 MIT git://github.com/browserify/resolve.git
resolve-from 4.0.0 MIT https://github.com/sindresorhus/resolve-from.git
reusify 1.0.4 MIT git+https://github.com/mcollina/reusify.git
rifm 0.7.0 MIT https://github.com/istarkov/rifm.git
run-parallel 1.2.0 MIT git://github.com/feross/run-parallel.git
scheduler 0.20.2 MIT https://github.com/facebook/react.git
select2 4.0.13 MIT git://github.com/select2/select2.git
shallowequal 1.1.0 MIT https://github.com/dashed/shallowequal.git
slash 4.0.0 MIT https://github.com/sindresorhus/slash.git
snapsvg-cjs 0.0.6 MIT git+https://github.com/geelen/Snap.svg-cjs.git
socket.io-client 4.5.4 MIT https://github.com/socketio/socket.io-client.git
socket.io-parser 4.2.1 MIT https://github.com/socketio/socket.io-parser.git
spdx-expression-parse 3.0.1 MIT https://github.com/jslicense/spdx-expression-parse.js.git
split.js 1.6.5 MIT https://github.com/nathancahill/split
stable 0.1.8 MIT https://github.com/Two-Screen/stable.git
strip-indent 4.0.0 MIT https://github.com/sindresorhus/strip-indent.git
styled-components 5.3.6 MIT git+https://github.com/styled-components/styled-components.git
stylehacks 5.1.1 MIT https://github.com/cssnano/cssnano.git
stylis 4.1.3 MIT https://github.com/thysultan/stylis.js
supports-color 5.5.0 MIT https://github.com/chalk/supports-color.git
supports-color 7.2.0 MIT https://github.com/chalk/supports-color.git
supports-preserve-symlinks-flag 1.0.0 MIT git+https://github.com/inspect-js/node-supports-preserve-symlinks-flag.git
svgo 2.8.0 MIT git://github.com/svg/svgo.git
tempusdominus-bootstrap-4 5.39.2 MIT https://github.com/tempusdominus/bootstrap-4.git
tempusdominus-core 5.19.3 MIT https://github.com/tempusdominus/core.git
text-segmentation 1.0.3 MIT git+ssh://git@github.com/niklasvh/text-segmentation.git
tiny-warning 1.0.3 MIT https://github.com/alexreardon/tiny-warning.git
to-fast-properties 2.0.0 MIT https://github.com/sindresorhus/to-fast-properties.git
to-regex-range 5.0.1 MIT https://github.com/micromatch/to-regex-range.git
trim-newlines 4.0.2 MIT https://github.com/sindresorhus/trim-newlines.git
unc-path-regex 0.1.2 MIT https://github.com/regexhq/unc-path-regex.git
update-browserslist-db 1.0.10 MIT https://github.com/browserslist/update-db.git
uplot 1.6.24 MIT git+https://github.com/leeoniya/uPlot.git
uplot-react 1.1.4 MIT https://github.com/skalinichev/uplot-wrappers.git
util-deprecate 1.0.2 MIT git://github.com/TooTallNate/util-deprecate.git
utrie 1.0.2 MIT git+ssh://git@github.com/niklasvh/utrie.git
valid-filename 2.0.1 MIT https://github.com/sindresorhus/valid-filename.git
wkx 0.5.0 MIT http://github.com/cschwarz/wkx.git
ws 8.2.3 MIT https://github.com/websockets/ws.git
xmlhttprequest-ssl 2.0.0 MIT git://github.com/mjwwit/node-XMLHttpRequest.git
xterm 4.19.0 MIT https://github.com/xtermjs/xterm.js
xterm-addon-fit 0.5.0 MIT https://github.com/xtermjs/xterm.js
xterm-addon-search 0.8.2 MIT https://github.com/xtermjs/xterm.js
xterm-addon-web-links 0.4.0 MIT https://github.com/xtermjs/xterm.js
yocto-queue 0.1.0 MIT https://github.com/sindresorhus/yocto-queue.git
@fortawesome/fontawesome-free 5.15.4 (CC-BY-4.0 AND OFL-1.1 AND MIT) https://github.com/FortAwesome/Font-Awesome
@react-leaflet/core 1.1.1 Hippocratic-2.1 https://github.com/PaulLeCam/react-leaflet.git
react-leaflet 3.2.5 Hippocratic-2.1 https://github.com/PaulLeCam/react-leaflet.git
@sphinxxxx/color-conversion 2.2.2 ISC git+https://github.com/Sphinxxxx/color-conversion.git
@trysound/sax 0.2.0 ISC git://github.com/svg/sax.git
boolbase 1.0.0 ISC https://github.com/fb55/boolbase
css-color-keywords 1.0.0 ISC https://github.com/sonicdoe/css-color-keywords.git
css-declaration-sorter 6.3.1 ISC https://github.com/Siilwyn/css-declaration-sorter.git
electron-to-chromium 1.4.284 ISC https://github.com/kilian/electron-to-chromium/
fastq 1.13.0 ISC git+https://github.com/mcollina/fastq.git
glob-parent 5.1.2 ISC https://github.com/gulpjs/glob-parent.git
hosted-git-info 4.1.0 ISC git+https://github.com/npm/hosted-git-info.git
jsonrepair 2.2.1 ISC https://github.com/josdejong/jsonrepair.git
lru-cache 6.0.0 ISC git://github.com/isaacs/node-lru-cache.git
minimatch 3.1.2 ISC git://github.com/isaacs/minimatch.git
picocolors 1.0.0 ISC https://github.com/alexeyraspopov/picocolors.git
react-timer-hook 3.0.5 ISC git+https://github.com/amrlabib/react-timer-hook.git
semver 7.3.8 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
yaml 1.10.2 ISC https://github.com/eemeli/yaml.git
yargs-parser 20.2.9 ISC https://github.com/yargs/yargs-parser.git
ace-builds 1.13.1 BSD-3-Clause https://github.com/ajaxorg/ace-builds.git
hoist-non-react-statics 3.3.2 BSD-3-Clause git://github.com/mridgway/hoist-non-react-statics.git
hyphenate-style-name 1.0.4 BSD-3-Clause git+ssh://git@github.com/rexxars/hyphenate-style-name.git
istanbul-lib-coverage 3.2.0 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
istanbul-lib-instrument 5.2.1 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
istanbul-lib-report 3.0.0 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
istanbul-lib-source-maps 4.0.1 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
istanbul-reports 3.1.5 BSD-3-Clause git+ssh://git@github.com/istanbuljs/istanbuljs.git
react-transition-group 4.4.5 BSD-3-Clause https://github.com/reactjs/react-transition-group.git
source-map 0.6.1 BSD-3-Clause http://github.com/mozilla/source-map.git
source-map 0.5.7 BSD-3-Clause http://github.com/mozilla/source-map.git
source-map-js 1.0.2 BSD-3-Clause https://github.com/7rulnik/source-map-js.git
sprintf-js 1.1.2 BSD-3-Clause https://github.com/alexei/sprintf.js.git
caniuse-lite 1.0.30001434 CC-BY-4.0 https://github.com/browserslist/caniuse-lite.git
css-select 4.3.0 BSD-2-Clause git://github.com/fb55/css-select.git
css-what 6.1.0 BSD-2-Clause https://github.com/fb55/css-what
domelementtype 2.3.0 BSD-2-Clause git://github.com/fb55/domelementtype.git
domhandler 4.3.1 BSD-2-Clause git://github.com/fb55/domhandler.git
domutils 2.8.0 BSD-2-Clause git://github.com/fb55/domutils.git
entities 2.2.0 BSD-2-Clause git://github.com/fb55/entities.git
leaflet 1.9.3 BSD-2-Clause git://github.com/Leaflet/Leaflet.git
normalize-package-data 3.0.3 BSD-2-Clause git://github.com/npm/normalize-package-data.git
nth-check 2.1.1 BSD-2-Clause https://github.com/fb55/nth-check
uri-js 4.4.1 BSD-2-Clause http://github.com/garycourt/uri-js
FileSaver 0.10.0 UNKNOWN Unknown
heap 0.2.5 UNKNOWN git://github.com/qiao/heap.js.git
mdn-data 2.0.14 CC0-1.0 https://github.com/mdn/data.git
spdx-license-ids 3.0.12 CC0-1.0 https://github.com/jslicense/spdx-license-ids.git
mousetrap 1.6.5 Apache-2.0 WITH LLVM-exception git://github.com/ccampbell/mousetrap.git
pako 1.0.11 (MIT AND Zlib) https://github.com/nodeca/pako.git
spdx-exceptions 2.3.0 CC-BY-3.0 https://github.com/kemitchell/spdx-exceptions.json.git
tslib 2.4.1 0BSD https://github.com/Microsoft/tslib.git
tslib 2.3.1 0BSD https://github.com/Microsoft/tslib.git
type-fest 1.4.0 (MIT OR CC0-1.0) https://github.com/sindresorhus/type-fest.git
webcabin-docker 2.2.5 MIT* Unknown
491 dependencies listed.
+33 -47
View File
@@ -2,7 +2,7 @@
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
# Copyright (C) 2013 - 2023, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
#########################################################################
@@ -27,11 +27,9 @@ RUN apk add --no-cache \
make \
nasm \
nodejs \
npm \
yarn \
zlib-dev
COPY .git .git
# Create the /pgadmin4 directory and copy the source into it. Explicitly
# remove the node_modules directory as we'll recreate a clean version, as well
# as various other files we don't want
@@ -47,10 +45,6 @@ WORKDIR /pgadmin4/web
# Build the JS vendor code in the app-builder, and then remove the vendor source.
RUN export CPPFLAGS="-DPNG_ARM_NEON_OPT=0" && \
npm install -g corepack && \
corepack enable && \
yarn set version berry && \
yarn set version 4 && \
yarn install && \
yarn run bundle && \
rm -rf node_modules \
@@ -59,20 +53,18 @@ RUN export CPPFLAGS="-DPNG_ARM_NEON_OPT=0" && \
.[^.]* \
babel.cfg \
webpack.* \
jest.config.js \
babel.* \
./pgadmin/static/js/generated/.cache \
/pgadmin4/.git
karma.conf.js \
./pgadmin/static/js/generated/.cache
#########################################################################
# Next, create the base environment for Python
#########################################################################
FROM alpine:latest AS env-builder
FROM alpine:latest as env-builder
# Install dependencies
COPY requirements.txt /
RUN apk add --no-cache \
RUN apk add --no-cache \
make \
python3 \
py3-pip && \
@@ -96,7 +88,7 @@ RUN apk add --no-cache \
# Now, create a documentation build container for the Sphinx docs
#########################################################################
FROM env-builder AS docs-builder
FROM env-builder as docs-builder
# Install Sphinx
RUN /venv/bin/python3 -m pip install --no-cache-dir sphinx
@@ -120,16 +112,26 @@ RUN rm -rf /pgadmin4/docs/en_US/_build/html/_static/*.png
# Create additional builders to get all of the PostgreSQL utilities
#########################################################################
FROM postgres:12-alpine AS pg12-builder
FROM postgres:13-alpine AS pg13-builder
FROM postgres:14-alpine AS pg14-builder
FROM postgres:15-alpine AS pg15-builder
FROM postgres:16-alpine AS pg16-builder
FROM postgres:17-alpine AS pg17-builder
FROM postgres:10-alpine as pg10-builder
FROM postgres:11-alpine as pg11-builder
FROM postgres:12-alpine as pg12-builder
FROM postgres:13-alpine as pg13-builder
FROM postgres:14-alpine as pg14-builder
FROM postgres:15-alpine as pg15-builder
FROM alpine:latest AS tool-builder
FROM alpine:latest as tool-builder
# Copy the PG binaries
COPY --from=pg10-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-10/
COPY --from=pg10-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-10/
COPY --from=pg10-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-10/
COPY --from=pg10-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-10/
COPY --from=pg11-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-11/
COPY --from=pg11-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-11/
COPY --from=pg11-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-11/
COPY --from=pg11-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-11/
COPY --from=pg12-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-12/
COPY --from=pg12-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-12/
COPY --from=pg12-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-12/
@@ -150,16 +152,6 @@ COPY --from=pg15-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-15/
COPY --from=pg15-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-15/
COPY --from=pg15-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-15/
COPY --from=pg16-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-16/
COPY --from=pg16-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-16/
COPY --from=pg16-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-16/
COPY --from=pg16-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-16/
COPY --from=pg17-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-17/
COPY --from=pg17-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-17/
COPY --from=pg17-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-17/
COPY --from=pg17-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-17/
#########################################################################
# Assemble everything into the final container.
#########################################################################
@@ -171,14 +163,9 @@ COPY --from=env-builder /venv /venv
# Copy in the tools
COPY --from=tool-builder /usr/local/pgsql /usr/local/
COPY --from=pg17-builder /usr/local/lib/libpq.so.5.17 /usr/lib/
COPY --from=pg17-builder /usr/lib/libzstd.so.1.5.7 /usr/lib/
COPY --from=pg17-builder /usr/lib/liblz4.so.1.10.0 /usr/lib/
RUN ln -s libpq.so.5.17 /usr/lib/libpq.so.5 && \
ln -s libpq.so.5.17 /usr/lib/libpq.so && \
ln -s libzstd.so.1.5.7 /usr/lib/libzstd.so.1 && \
ln -s liblz4.so.1.10.0 /usr/lib/liblz4.so.1
COPY --from=pg15-builder /usr/local/lib/libpq.so.5.15 /usr/lib/
RUN ln -s libpq.so.5.15 /usr/lib/libpq.so.5 && \
ln -s libpq.so.5.15 /usr/lib/libpq.so
WORKDIR /pgadmin4
ENV PYTHONPATH=/pgadmin4
@@ -192,36 +179,35 @@ COPY pkg/docker/entrypoint.sh /entrypoint.sh
# License files
COPY LICENSE /pgadmin4/LICENSE
COPY DEPENDENCIES /pgadmin4/DEPENDENCIES
# Install runtime dependencies and configure everything in one RUN step
RUN apk add --no-cache \
RUN apk add \
python3 \
bash \
py3-pip \
postfix \
krb5-libs \
libjpeg-turbo \
shadow \
sudo \
tzdata \
libedit \
libldap \
libcap && \
/venv/bin/python3 -m pip install --no-cache-dir gunicorn==23.0.0 && \
/venv/bin/python3 -m pip install --no-cache-dir gunicorn && \
find / -type d -name '__pycache__' -exec rm -rf {} + && \
useradd -r -u 5050 -g root -s /sbin/nologin pgadmin && \
mkdir -p /run/pgadmin /var/lib/pgadmin && \
chown pgadmin:root /run/pgadmin /var/lib/pgadmin && \
mkdir -p /var/lib/pgadmin && \
chown pgadmin:root /var/lib/pgadmin && \
chmod g=u /var/lib/pgadmin && \
touch /pgadmin4/config_distro.py && \
chown pgadmin:root /pgadmin4/config_distro.py && \
chmod g=u /pgadmin4/config_distro.py && \
chmod g=u /etc/passwd && \
setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/python3.12 && \
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
USER 5050
USER pgadmin
# Finish up
VOLUME /var/lib/pgadmin
+1 -5
View File
@@ -1,10 +1,6 @@
pgAdmin 4
=========
This software is released under the PostgreSQL licence.
-------------------------------------------------------------------------------
Copyright (C) 2013 - 2025, The pgAdmin Development Team
Copyright (C) 2013 - 2023, The pgAdmin Development Team
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose, without fee, and without a written agreement is
+55 -77
View File
@@ -26,9 +26,8 @@ CALL :CLEAN || EXIT /B 1
CALL :CREATE_VIRTUAL_ENV || EXIT /B 1
CALL :CREATE_PYTHON_ENV || EXIT /B 1
CALL :CREATE_RUNTIME_ENV || EXIT /B 1
CALL :GENERATE_SBOM || EXIT /B 1
CALL :CREATE_INSTALLER || EXIT /B 1
CALL :VERIFY_SIGNATURE || EXIT /B 1
CALL :SIGN_INSTALLER || EXIT /B 1
EXIT /B %ERRORLEVEL%
REM Main build sequence Ends
@@ -52,22 +51,24 @@ REM Main build sequence Ends
:SET_ENVIRONMENT
ECHO Configuring the environment...
IF "%PGADMIN_PYTHON_DIR%" == "" SET "PGADMIN_PYTHON_DIR=C:\Python313"
IF "%PGADMIN_PYTHON_DIR%" == "" SET "PGADMIN_PYTHON_DIR=C:\Python38"
IF "%PGADMIN_KRB5_DIR%" == "" SET "PGADMIN_KRB5_DIR=C:\Program Files\MIT\Kerberos"
IF "%PGADMIN_POSTGRES_DIR%" == "" SET "PGADMIN_POSTGRES_DIR=C:\Program Files\PostgreSQL\17"
IF "%PGADMIN_POSTGRES_DIR%" == "" SET "PGADMIN_POSTGRES_DIR=C:\Program Files (x86)\PostgreSQL\12"
IF "%PGADMIN_INNOTOOL_DIR%" == "" SET "PGADMIN_INNOTOOL_DIR=C:\Program Files (x86)\Inno Setup 6"
IF "%PGADMIN_VCREDIST_DIR%" == "" SET "PGADMIN_VCREDIST_DIR=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Redist\MSVC\14.40.33807"
IF "%PGADMIN_VCREDIST_FILE%" == "" SET "PGADMIN_VCREDIST_FILE=vc_redist.x64.exe"
IF "%PGADMIN_SIGNTOOL_DIR%" == "" SET "PGADMIN_SIGNTOOL_DIR=C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64"
IF "%PGADMIN_VCREDIST_DIR%" == "" SET "PGADMIN_VCREDIST_DIR=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Redist\MSVC\14.16.27012"
IF "%PGADMIN_SIGNTOOL_DIR%" == "" SET "PGADMIN_SIGNTOOL_DIR=C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64"
REM Set REDIST_NAME (the filename)
set "VCREDIST_FILE=vcredist_x64.exe"
REM Set additional variables we need
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_RELEASE =" %WD%\web\version.py') DO SET APP_MAJOR=%%a
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_REVISION =" %WD%\web\version.py') DO SET APP_MINOR=%%a
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_SUFFIX =" %WD%\web\version.py') DO SET APP_VERSION_SUFFIX=%%a
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_RELEASE =" %WD%\web\config.py') DO SET APP_MAJOR=%%a
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_REVISION =" %WD%\web\config.py') DO SET APP_MINOR=%%a
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_SUFFIX =" %WD%\web\config.py') DO SET APP_VERSION_SUFFIX=%%a
REM remove single quote from the string
SET APP_VERSION_SUFFIX=%APP_VERSION_SUFFIX:'=%
SET APP_NAME=""
FOR /F "tokens=2* DELims='" %%a IN ('findstr /C:"APP_NAME =" web\branding.py') DO SET APP_NAME=%%a
FOR /F "tokens=2* DELims='" %%a IN ('findstr /C:"APP_NAME =" web\config.py') DO SET APP_NAME=%%a
FOR /f "tokens=1 DELims=." %%G IN ('%PGADMIN_PYTHON_DIR%/python.exe -c "print('%APP_NAME%'.lower().replace(' ', ''))"') DO SET APP_SHORTNAME=%%G
SET APP_VERSION=%APP_MAJOR%.%APP_MINOR%
SET INSTALLERNAME=%APP_SHORTNAME%-%APP_MAJOR%.%APP_MINOR%-%APP_VERSION_SUFFIX%-x64.exe
@@ -96,7 +97,7 @@ REM Main build sequence Ends
ECHO PostgreSQL directory: %PGADMIN_POSTGRES_DIR%
ECHO.
ECHO VC++ redist directory: %PGADMIN_VCREDIST_DIR%
ECHO VC++ redist file: %PGADMIN_VCREDIST_FILE%
ECHO VC++ redist file: %VCREDIST_FILE%
ECHO InnoTool directory: %PGADMIN_INNOTOOL_DIR%
ECHO signtool directory: %PGADMIN_SIGNTOOL_DIR%
ECHO.
@@ -215,10 +216,7 @@ REM Main build sequence Ends
ECHO Installing javascript dependencies...
CD "%BUILDROOT%\web"
CALL yarn set version berry || EXIT /B 1
CALL yarn set version 4 || EXIT /B 1
CALL yarn install || EXIT /B 1
CALL npm rebuild || EXIT /B 1
ECHO Bundling javascript...
CALL yarn run bundle || EXIT /B 1
@@ -231,14 +229,13 @@ REM Main build sequence Ends
RD /Q /S "%BUILDROOT%\web\regression" 1> nul 2>&1
ECHO Removing tools...
RD /Q /S "%BUILDROOT%\web\tools" 1> nul 2>&1
ECHO Removing yarn cache...
RD /Q /S "%BUILDROOT%\web\.yarn" 1> nul 2>&1
ECHO Removing any existing configurations...
DEL /q "%BUILDROOT%\web\pgadmin4.db" 1> nul 2>&1
DEL /q "%BUILDROOT%\web\config_local.py" 1> nul 2>&1
ECHO Staging license files...
COPY "%WD%\LICENSE" "%BUILDROOT%\" > nul || EXIT /B 1
COPY "%WD%\DEPENDENCIES" "%BUILDROOT%\" > nul || EXIT /B 1
ECHO Creating config_distro.py
ECHO SERVER_MODE = False > "%BUILDROOT%\web\config_distro.py"
@@ -261,70 +258,57 @@ REM Main build sequence Ends
RD /Q /S "%BUILDROOT%\docs\en_US\html\_sources" 1> nul 2>&1
ECHO Staging runtime components...
MKDIR "%BUILDROOT%\runtime\resources\app"
XCOPY /S /I /E /H /Y "%WD%\runtime\assets" "%BUILDROOT%\runtime\resources\app\assets" > nul || EXIT /B 1
XCOPY /S /I /E /H /Y "%WD%\runtime\src" "%BUILDROOT%\runtime\resources\app\src" > nul || EXIT /B 1
XCOPY /S /I /E /H /Y "%WD%\runtime\assets" "%BUILDROOT%\runtime\assets" > nul || EXIT /B 1
XCOPY /S /I /E /H /Y "%WD%\runtime\src" "%BUILDROOT%\runtime\src" > nul || EXIT /B 1
COPY "%WD%\runtime\package.json" "%BUILDROOT%\runtime\resources\app\" > nul || EXIT /B 1
COPY "%WD%\runtime\.yarnrc.yml" "%BUILDROOT%\runtime\resources\app\" > nul || EXIT /B 1
COPY "%WD%\runtime\package.json" "%BUILDROOT%\runtime\" > nul || EXIT /B 1
CD "%BUILDROOT%\runtime\"
CALL yarn install --production=true || EXIT /B 1
CD "%BUILDROOT%\runtime\resources\app\"
ECHO Downloading NWjs to %TMPDIR%...
REM Get a fresh copy of nwjs.
REM NOTE: The nw download servers seem to be very unreliable, so at the moment we're using wget which retries
CALL yarn set version berry || EXIT /B 1
CALL yarn set version 4 || EXIT /B 1
CALL yarn workspaces focus --production || EXIT /B 1
ECHO Removing yarn cache...
RD /Q /S "%BUILDROOT%\runtime\resources\app\.yarn" 1> nul 2>&1
ECHO Downloading Electron to %TMPDIR%...
REM Get a fresh copy of electron.
REM YARN
REM CALL yarn --cwd "%TMPDIR%" add nw || EXIT /B
REM YARN END
REM WGET
FOR /f "tokens=*" %%i IN ('npm info electron version') DO SET "ELECTRON_VERSION=%%i"
REM Comment out the below for loop as the latest version having
REM some problem to launch on CentOS 7, so for
REM the time being hardcoded the version to 0.72.0
REM FOR /f "tokens=2 delims='" %%i IN ('yarn info nw ^| findstr "latest: "') DO SET "NW_VERSION=%%i"
REM :GET_NW
REM wget https://dl.nwjs.io/v%NW_VERSION%/nwjs-v%NW_VERSION%-win-x64.zip -O "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip"
REM IF %ERRORLEVEL% NEQ 0 GOTO GET_NW
:GET_NW
wget https://github.com/electron/electron/releases/download/v%ELECTRON_VERSION%/electron-v%ELECTRON_VERSION%-win32-x64.zip -O "%TMPDIR%\electron-v%ELECTRON_VERSION%-win32-x64.zip"
IF %ERRORLEVEL% NEQ 0 GOTO GET_NW
SET "NW_VERSION=0.72.0"
wget https://dl.nwjs.io/v%NW_VERSION%/nwjs-v%NW_VERSION%-win-x64.zip -O "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip"
MKDIR "%TMPDIR%\electron-v%ELECTRON_VERSION%-win32-x64" || EXIT /B 1
tar -C "%TMPDIR%\electron-v%ELECTRON_VERSION%-win32-x64" -xvf "%TMPDIR%\electron-v%ELECTRON_VERSION%-win32-x64.zip" || EXIT /B 1
tar -C "%TMPDIR%" -xvf "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip" || EXIT /B 1
REM WGET END
REM XCOPY
XCOPY /S /I /E /H /Y "%TMPDIR%\electron-v%ELECTRON_VERSION%-win32-x64\*" "%BUILDROOT%\runtime" > nul || EXIT /B 1
REM XCOPY END
REM YARN
REM XCOPY /S /I /E /H /Y "%TMPDIR%\node_modules\nw\nwjs\*" "%BUILDROOT%\runtime" > nul || EXIT /B 1
REM YARN END
MOVE "%BUILDROOT%\runtime\electron.exe" "%BUILDROOT%\runtime\pgAdmin4.exe"
REM WGET
XCOPY /S /I /E /H /Y "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64\*" "%BUILDROOT%\runtime" > nul || EXIT /B 1
REM WGET END
ECHO Downloading rcedit.exe...
wget https://github.com/electron/rcedit/releases/download/v2.0.0/rcedit-x64.exe -O "%TMPDIR%\rcedit-x64.exe"
MOVE "%BUILDROOT%\runtime\nw.exe" "%BUILDROOT%\runtime\pgAdmin4.exe"
ECHO Replacing executable icon, description, version...
%TMPDIR%\rcedit-x64.exe "%BUILDROOT%\runtime\pgAdmin4.exe" --set-icon "%WD%\pkg\win32\Resources\pgAdmin4.ico"
%TMPDIR%\rcedit-x64.exe "%BUILDROOT%\runtime\pgAdmin4.exe" --set-version-string "FileDescription" "%APP_NAME%"
%TMPDIR%\rcedit-x64.exe "%BUILDROOT%\runtime\pgAdmin4.exe" --set-version-string "ProductName" "%APP_NAME%"
%TMPDIR%\rcedit-x64.exe "%BUILDROOT%\runtime\pgAdmin4.exe" --set-product-version "%APP_VERSION%""
ECHO Attempting to sign the pgAdmin4.exe...
CALL "%PGADMIN_SIGNTOOL_DIR%\signtool.exe" sign /fd certHash /tr http://timestamp.digicert.com /td SHA256 "%BUILDROOT%\runtime\pgAdmin4.exe"
IF %ERRORLEVEL% NEQ 0 (
ECHO.
ECHO ************************************************************
ECHO * Failed to sign the pgAdmin4.exe
ECHO ************************************************************
PAUSE
)
ECHO Replacing executable icon...
CALL yarn --cwd "%TMPDIR%" add winresourcer || EXIT /B
"%TMPDIR%\node_modules\winresourcer\bin\Resourcer.exe" -op:upd -src:"%BUILDROOT%\runtime\pgAdmin4.exe" -type:Icongroup -name:IDR_MAINFRAME -file:"%WD%\pkg\win32\Resources\pgAdmin4.ico"
ECHO Staging PostgreSQL components...
COPY "%PGADMIN_POSTGRES_DIR%\bin\libpq.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
COPY "%PGADMIN_POSTGRES_DIR%\bin\libcrypto-*-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
COPY "%PGADMIN_POSTGRES_DIR%\bin\libssl-*-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
COPY "%PGADMIN_POSTGRES_DIR%\bin\libcrypto-1_1-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
COPY "%PGADMIN_POSTGRES_DIR%\bin\libssl-1_1-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
IF EXIST "%PGADMIN_POSTGRES_DIR%\bin\libintl-*.dll" COPY "%PGADMIN_POSTGRES_DIR%\bin\libintl-*.dll" "%BUILDROOT%\runtime" > nul
IF EXIST "%PGADMIN_POSTGRES_DIR%\bin\libiconv-*.dll" COPY "%PGADMIN_POSTGRES_DIR%\bin\libiconv-*.dll" "%BUILDROOT%\runtime" > nul
IF EXIST "%PGADMIN_POSTGRES_DIR%\bin\liblz4.dll" COPY "%PGADMIN_POSTGRES_DIR%\bin\liblz4.dll" "%BUILDROOT%\runtime" > nul
IF EXIST "%PGADMIN_POSTGRES_DIR%\bin\libzstd.dll" COPY "%PGADMIN_POSTGRES_DIR%\bin\libzstd.dll" "%BUILDROOT%\runtime" > nul
COPY "%PGADMIN_POSTGRES_DIR%\bin\zlib1.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
COPY "%PGADMIN_POSTGRES_DIR%\bin\zlib.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
COPY "%PGADMIN_POSTGRES_DIR%\bin\pg_dump.exe" "%BUILDROOT%\runtime" > nul || EXIT /B 1
COPY "%PGADMIN_POSTGRES_DIR%\bin\pg_dumpall.exe" "%BUILDROOT%\runtime" > nul || EXIT /B 1L%
COPY "%PGADMIN_POSTGRES_DIR%\bin\pg_restore.exe" "%BUILDROOT%\runtime" > nul || EXIT /B 1
@@ -332,7 +316,7 @@ REM Main build sequence Ends
ECHO Staging VC++ runtime...
MKDIR "%BUILDROOT%\installer" || EXIT /B 1
COPY "%PGADMIN_VCREDIST_DIR%\%PGADMIN_VCREDIST_FILE%" "%BUILDROOT%\installer" > nul || EXIT /B 1
COPY "%PGADMIN_VCREDIST_DIR%\%VCREDIST_FILE%" "%BUILDROOT%\installer" > nul || EXIT /B 1
CD %WD%
EXIT /B 0
@@ -350,13 +334,13 @@ REM Main build sequence Ends
ECHO Processing installer configuration script...
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in" "-o" "%WD%\pkg\win32\installer.iss.in_stage1" "-s" MYAPP_FULLVERSION -r """%APP_VERSION%"""
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage1" "-o" "%WD%\pkg\win32\installer.iss.in_stage2" "-s" MYAPP_VERSION -r """v%APP_MAJOR%"""
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage2" "-o" "%WD%\pkg\win32\installer.iss" "-s" MYAPP_VCDIST -r """%PGADMIN_VCREDIST_DIRNAME%\%PGADMIN_VCREDIST_FILE%"""
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage2" "-o" "%WD%\pkg\win32\installer.iss" "-s" MYAPP_VCDIST -r """%PGADMIN_VCREDIST_DIRNAME%\%VCREDIST_FILE%"""
ECHO Cleaning up...
DEL /s "%WD%\pkg\win32\installer.iss.in_stage*" > nul
ECHO Creating windows installer using INNO tool...
CALL "%PGADMIN_INNOTOOL_DIR%\ISCC.exe" "%WD%\pkg\win32\installer.iss" "/SpgAdminSigntool=%PGADMIN_SIGNTOOL_DIR%\signtool.exe sign /fd certHash /tr http://timestamp.digicert.com /td SHA256 $f" || EXIT /B 1
CALL "%PGADMIN_INNOTOOL_DIR%\ISCC.exe" /q "%WD%\pkg\win32\installer.iss" || EXIT /B 1
ECHO Renaming installer...
MOVE "%WD%\pkg\win32\Output\pgadmin4-setup.exe" "%DISTROOT%\%INSTALLERNAME%" > nul || EXIT /B 1
@@ -367,20 +351,14 @@ REM Main build sequence Ends
CD %WD%
EXIT /B 0
:GENERATE_SBOM
ECHO Generating SBOM...
CALL syft "%BUILDROOT%" -o cyclonedx-json > "%BUILDROOT%\sbom.json"
EXIT /B 0
:VERIFY_SIGNATURE
ECHO Verifying the installer signature...
CALL "%PGADMIN_SIGNTOOL_DIR%\signtool.exe" verify /pa /v "%DISTROOT%\%INSTALLERNAME%"
:SIGN_INSTALLER
ECHO Attempting to sign the installer...
CALL "%PGADMIN_SIGNTOOL_DIR%\signtool.exe" sign /tr http://timestamp.digicert.com "%DISTROOT%\%INSTALLERNAME%"
IF %ERRORLEVEL% NEQ 0 (
ECHO.
ECHO ************************************************************
ECHO * Failed to verify signature of the installer
ECHO * Failed to sign the installer
ECHO ************************************************************
PAUSE
)
+21 -19
View File
@@ -2,36 +2,29 @@
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
# Copyright (C) 2013 - 2023, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
#########################################################################
SHELL = /bin/sh
APP_NAME := $(shell grep ^APP_NAME web/branding.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]' | tr -d "'" | awk '{print tolower($$0)}')
APP_RELEASE := $(shell grep ^APP_RELEASE web/version.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]')
APP_REVISION := $(shell grep ^APP_REVISION web/version.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]')
APP_NAME := $(shell grep ^APP_NAME web/config.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]' | tr -d "'" | awk '{print tolower($$0)}')
APP_RELEASE := $(shell grep ^APP_RELEASE web/config.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]')
APP_REVISION := $(shell grep ^APP_REVISION web/config.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]')
#########################################################################
# High-level targets
#########################################################################
# Include only platform-independent builds in all
all: docs pip src
all: docs pip src runtime
# Add BUILD_OPTS variable to pass arguments
appbundle:
./pkg/mac/build.sh $(BUILD_OPTS)
./pkg/mac/build.sh
install-node:
cd web && yarn install
install-python:
./tools/setup-python-env.sh
install-python-testing:
./tools/setup-python-env.sh --test
cd web && yarn install && npm rebuild
bundle:
cd web && yarn run bundle
@@ -43,7 +36,7 @@ linter:
cd web && yarn run linter
check: install-node bundle linter check-pep8
cd web && yarn run test:js-once && python regression/runtests.py
cd web && yarn run karma start --single-run && python regression/runtests.py
check-audit:
cd web && yarn run audit
@@ -78,18 +71,28 @@ check-feature: install-node bundle
cd web && python regression/runtests.py --pkg feature_tests
check-js: install-node linter
cd web && yarn run test:js-once
cd web && yarn run karma start --single-run
check-js-coverage:
cd web && yarn run test:js-coverage
cd web && yarn run test:karma-coverage
runtime-debug:
cd runtime && qmake CONFIG+=debug && make
runtime:
cd runtime && qmake CONFIG+=release && make
# Include all clean sub-targets in clean
clean: clean-appbundle clean-debian clean-dist clean-docs clean-node clean-pip clean-redhat clean-src
clean: clean-appbundle clean-debian clean-dist clean-docs clean-node clean-pip clean-redhat clean-src clean-runtime
rm -rf web/pgadmin/static/js/generated/*
rm -rf web/pgadmin/static/js/generated/.cache
rm -rf web/pgadmin/static/css/generated/*
rm -rf web/pgadmin/static/css/generated/.cache
clean-runtime:
if [ -f runtime/Makefile ]; then (cd runtime && make clean); fi;
rm -rf build-*
clean-appbundle:
rm -rf mac-build/
@@ -119,7 +122,6 @@ debian:
docker:
echo $(APP_NAME)
git checkout HEAD
docker build --pull -t ${APP_NAME} -t $(APP_NAME):latest -t $(APP_NAME):$(APP_RELEASE) -t $(APP_NAME):$(APP_RELEASE).$(APP_REVISION) .
docs:
+159 -150
View File
@@ -1,7 +1,7 @@
# pgAdmin 4
# pgAdmin 4
pgAdmin 4 is a rewrite of the popular pgAdmin3 management tool for the
PostgreSQL (http://www.postgresql.org) database.
PostgreSQL (http://www.postgresql.org) database.
In the following documentation and examples, *$PGADMIN4_SRC/* is used to denote
the top-level directory of a copy of the pgAdmin source tree, either from a
@@ -9,30 +9,156 @@ tarball or a git checkout.
## Architecture
pgAdmin 4 is written as a web application with Python(Flask) on the server side
and ReactJS, HTML5 with CSS for the client side processing and UI.
pgAdmin 4 is written as a web application in Python, using jQuery and Bootstrap
for the client side processing and UI. On the server side, Flask is being
utilised.
Although developed using web technologies, pgAdmin 4 can be deployed either on
a web server using a browser, or standalone on a workstation. The runtime/
subdirectory contains an Electron based runtime application intended to allow this,
which will fork a Python server process and display the UI.
subdirectory contains an NWjs based runtime application intended to allow this,
which will execute the Python server and display the UI.
## Prerequisites
1. Install Node.js 20 and above (https://nodejs.org/en/download)
2. yarn (https://yarnpkg.com/getting-started/install)
3. Python 3.9 and above (https://www.python.org/downloads/)
4. PostgreSQL server (https://www.postgresql.org/download)
## Building the Runtime
To build the runtime, the following packages must be installed:
* NodeJS 12+
* Yarn
Change into the runtime directory, and run *yarn install*. This will install the
dependencies required.
In order to use the runtime in a development environment, you'll need to copy
*dev_config.json.in* file to *dev_config.json*, and edit the paths to the Python
executable and *pgAdmin.py* file, otherwise the runtime will use the default
paths it would expect to find in the standard package for your platform.
You can then execute the runtime by running something like:
Start by enabling Corepack, if it isn't already;
this will add the yarn binary to your PATH:
```bash
corepack enable
node_modules/nw/nwjs/nw .
```
or on macOS:
```bash
node_modules/nw/nwjs/nwjs.app/Contents/MacOS/nwjs .
```
# Configuring the Python Environment
In order to run the Python code, a suitable runtime environment is required.
Python version 3.6 and later are currently supported. It is recommended that a
Python Virtual Environment is setup for this purpose, rather than using the
system Python environment. On Linux and Mac systems, the process is fairly
simple - adapt as required for your distribution:
1. Create a virtual environment in an appropriate directory. The last argument is
the name of the environment; that can be changed as desired:
```bash
$ python3 -m venv venv
```
2. Now activate the virtual environment:
```bash
$ source venv/bin/activate
```
3. Some of the components used by pgAdmin require a very recent version of *pip*,
so update that to the latest:
```bash
$ pip install --upgrade pip
```
4. Ensure that a PostgreSQL installation's bin/ directory is in the path (so
pg_config can be found for building psycopg2), and install the required
packages:
```bash
(venv) $ PATH=$PATH:/usr/local/pgsql/bin pip install -r $PGADMIN4_SRC/requirements.txt
```
If you are planning to run the regression tests, you also need to install
additional requirements from web/regression/requirements.txt:
```bash
(venv) $ pip install -r $PGADMIN4_SRC/web/regression/requirements.txt
```
5. Create a local configuration file for pgAdmin. Edit
$PGADMIN4_SRC/web/config_local.py and add any desired configuration options
(use the config.py file as a reference - any settings duplicated in
config_local.py will override those in config.py). A typical development
configuration may look like:
```python
from config import *
# Debug mode
DEBUG = True
# App mode
SERVER_MODE = True
# Enable the test module
MODULE_BLACKLIST.remove('test')
# Log
CONSOLE_LOG_LEVEL = DEBUG
FILE_LOG_LEVEL = DEBUG
DEFAULT_SERVER = '127.0.0.1'
UPGRADE_CHECK_ENABLED = True
# Use a different config DB for each server mode.
if SERVER_MODE == False:
SQLITE_PATH = os.path.join(
DATA_DIR,
'pgadmin4-desktop.db'
)
else:
SQLITE_PATH = os.path.join(
DATA_DIR,
'pgadmin4-server.db'
)
```
This configuration allows easy switching between server and desktop modes
for testing.
6. The initial setup of the configuration database is interactive in server
mode, and non-interactive in desktop mode. You can run it either by
running:
```bash
(venv) $ python3 $PGADMIN4_SRC/web/setup.py
```
or by starting pgAdmin 4:
```bash
(venv) $ python3 $PGADMIN4_SRC/web/pgAdmin4.py
```
Whilst it is possible to automatically run setup in desktop mode by running
the runtime, that will not work in server mode as the runtime doesn't allow
command line interaction with the setup program.
At this point you will be able to run pgAdmin 4 from the command line in either
server or desktop mode, and access it from a web browser using the URL shown in
the terminal once pgAdmin has started up.
Setup of an environment on Windows is somewhat more complicated unfortunately,
please see *pkg/win32/README.txt* for complete details.
# Building the Web Assets
pgAdmin is dependent on a number of third party Javascript libraries. These,
along with it's own Javascript code, CSS code and images must be
along with it's own Javascript code, SCSS/CSS code and images must be
compiled into a "bundle" which is transferred to the browser for execution
and rendering. This is far more efficient than simply requesting each
asset as it's needed by the client.
@@ -42,9 +168,9 @@ installed. Then, you can run the following commands on a *nix system to
download the required packages and build the bundle:
```bash
$ cd $PGADMIN4_SRC
$ make install-node
$ make bundle
(venv) $ cd $PGADMIN4_SRC
(venv) $ make install-node
(venv) $ make bundle
```
On Windows systems (where "make" is not available), the following commands
@@ -56,123 +182,21 @@ C:\$PGADMIN4_SRC\web> yarn install
C:\$PGADMIN4_SRC\web> yarn run bundle
```
# Configuring the Python Environment
# Creating pgAdmin themes
In order to run the Python code, a suitable runtime environment is required.
Python version 3.9 and later are currently supported. It is recommended that a
Python Virtual Environment is setup for this purpose, rather than using the
system Python environment. On Linux and Mac systems, the process is fairly
simple - adapt as required for your distribution:
To create a pgAdmin theme, you need to create a directory under
*web/pgadmin/static/scss/resources*.
Copy the sample file *_theme.variables.scss.sample* to the new directory and
rename it to *_theme.variables.scss*. Change the desired hexadecimal values of
the colors and bundle pgAdmin. You can also add a preview image in the theme
directory with the name as *\<dir name>_preview.png*. It is recommended that the
preview image should not be larger in size as it may take time to load on slow
networks. Run the *yarn run bundle* and you're good to go. No other changes are
required, pgAdmin bundle will read the directory and create other required
entries to make them available in preferences.
1. Create a virtual environment in an appropriate directory. The last argument is
the name of the environment; that can be changed as desired:
```bash
$ python3 -m venv venv
```
2. Now activate the virtual environment:
```bash
$ source venv/bin/activate
```
3. Some of the components used by pgAdmin require a very recent version of *pip*,
so update that to the latest:
```bash
(venv) $ pip install --upgrade pip
```
4. Ensure that a PostgreSQL installation's bin/ directory is in the path (so
pg_config can be found for building psycopg3), and install the required
packages:
```bash
(venv) $ PATH=$PATH:/usr/local/pgsql/bin pip install -r $PGADMIN4_SRC/requirements.txt
```
If you are planning to run the regression tests, you also need to install
additional requirements from web/regression/requirements.txt:
```bash
(venv) $ pip install -r $PGADMIN4_SRC/web/regression/requirements.txt
```
5. Create a local configuration file for pgAdmin. Edit
$PGADMIN4_SRC/web/config_local.py and add any desired configuration options
(use the config.py file as a reference - any settings duplicated in
config_local.py will override those in config.py). A typical development
configuration may look like:
```python
import os
import logging
# Change pgAdmin data directory
DATA_DIR = '/Users/myuser/.pgadmin_dev'
#Change pgAdmin server and port
DEFAULT_SERVER = '127.0.0.1'
DEFAULT_SERVER_PORT = 5051
# Switch between server and desktop mode
SERVER_MODE = True
#Change pgAdmin config DB path in case external DB is used.
CONFIG_DATABASE_URI="postgresql://postgres:postgres@localhost:5436/pgadmin"
#Setup SMTP
MAIL_SERVER = 'smtp.gmail.com'
MAIL_PORT = 465
MAIL_USE_SSL = True
MAIL_USERNAME = 'user@gmail.com'
MAIL_PASSWORD = 'xxxxxxxxxx'
# Change log level
CONSOLE_LOG_LEVEL = logging.INFO
FILE_LOG_LEVEL = logging.INFO
# Use a different config DB for each server mode.
if SERVER_MODE == False:
SQLITE_PATH = os.path.join(
DATA_DIR,
'pgadmin4-desktop.db'
)
else:
SQLITE_PATH = os.path.join(
DATA_DIR,
'pgadmin4-server.db'
)
```
This configuration allows easy switching between server and desktop modes
for testing.
6. The initial setup of the configuration database is interactive in server
mode, and non-interactive in desktop mode. You can run it either by
running:
```bash
(venv) $ python3 $PGADMIN4_SRC/web/setup.py
```
or by starting pgAdmin 4:
```bash
(venv) $ python3 $PGADMIN4_SRC/web/pgAdmin4.py
```
Whilst it is possible to automatically run setup in desktop mode by running
the runtime, that will not work in server mode as the runtime doesn't allow
command line interaction with the setup program.
At this point you will be able to run pgAdmin 4 from the command line in either
server or desktop mode, and access it from a web browser using the URL shown in
the terminal once pgAdmin has started up.
Setup of an environment on Windows is somewhat more complicated unfortunately,
please see *pkg/win32/README.txt* for complete details.
The name of the theme is derived from the directory name. Underscores (_) and
hyphens (-) will be replaced with spaces and the result will be camel cased.
# Building the documentation
@@ -193,21 +217,6 @@ The docs can then be built using the Makefile in *$PGADMIN4_SRC*, e.g.
The output can be found in *$PGADMIN4_SRC/docs/en_US/_build/html/index.html*
## Building the Runtime
Change into the runtime directory, and run *yarn install*. This will install the
dependencies required.
In order to use the runtime in a development environment, you'll need to copy
*dev_config.json.in* file to *dev_config.json*, and edit the paths to the Python
executable and *pgAdmin.py* file, otherwise the runtime will use the default
paths it would expect to find in the standard package for your platform.
You can then execute the runtime by running something like:
```bash
yarn run start
```
# Building packages
Most packages can be built using the Makefile in $PGADMIN4_SRC, provided all
@@ -219,7 +228,7 @@ To build a source tarball:
(venv) $ make src
```
To build a PIP Wheel, activate either a Python 3 virtual environment, configured
To build a PIP Wheel, activate either a Python 3 virtual environment, configured
with all the required packages, and then run:
```bash
@@ -257,7 +266,7 @@ See https://www.pgadmin.org/support/ for support options.
If you would like to report a security issue with pgAdmin, please email
**security (at) pgadmin (dot) org**.
Note that this address should only be used for reporting security issues
that you believe you've found in the design or code of pgAdmin, pgAgent,
and the pgAdmin website. It should not be used to ask security questions.
-82
View File
@@ -1,82 +0,0 @@
# Security Policy
## Supported Versions
Only the latest version receives security updates. Users are encouraged to upgrade to the latest stable release.
## Reporting a Vulnerability
We take security seriously and appreciate your efforts to responsibly disclose vulnerabilities. If you believe you have found a vulnerability, please follow the guidelines below to submit a report.
### **What to Include in Your Report**
To help us quickly understand and address the issue, please include the following sections in your report:
#### 1. **Summary**
- A brief description of the vulnerability.
#### 2. **Affected Versions**
- The version(s) of the project affected by the vulnerability.
- Example: "Affects versions 3.4.0 to 3.6.23."
#### 3. **Details**
- A detailed explanation of the vulnerability, including:
- How to reproduce the issue (step-by-step instructions).
- The code or component where the vulnerability exists.
- The expected vs. actual behavior.
#### 4. **Proof of Concept (PoC)**
- Provide a proof of concept to demonstrate the vulnerability. This could be:
- Code snippets.
- Screenshots or videos.
- A minimal reproducible example.
#### 5. **Patches (if applicable)**
- If you have a suggested fix or patch, include it in your report.
- Example: "Sanitize user input using `DOMPurify`."
#### 6. **Impact**
- Describe the potential impact of the vulnerability, such as:
- Remote Code Execution.
- CSRF.
- Data exposure.
- Denial of service.
### **What to Expect**
- **Acknowledgement**: You will receive an acknowledgement of your report within **48 hours**.
- **Timeline**: We will provide a timeline for investigating and addressing the issue.
- **Updates**: You will receive regular updates on the progress of the vulnerability resolution.
- **CVE ID**: If the vulnerability is confirmed, we will request a CVE ID to acknowledge the issue officially and include it in the release notes.
### **Out of Scope**
The following issues are considered out of scope for security reports:
- Vulnerabilities in outdated or unsupported versions.
- Issues related to non-security-impacting bugs or feature requests.
- Vulnerabilities requiring physical access to the device or social engineering.
## Security Updates
We are committed to providing timely security updates for supported versions. Here’s our process:
1. **Assessment**:
- All reported vulnerabilities are assessed for severity and impact.
2. **Patch Development**:
- Patches are developed and tested in a private repository to prevent premature disclosure.
3. **Release**:
- Security patches are released as soon as possible, along with a detailed advisory.
## Acknowledgments
We deeply appreciate the efforts of security researchers and users who help us improve the security of our project.
## Contact
For any questions or concerns regarding security, please contact us at `security@pgadmin.org`.
File diff suppressed because it is too large. Load diff
-96
View File
@@ -1,96 +0,0 @@
Auto-Update of pgAdmin 4 Desktop Application
********************************************
pgAdmin 4's desktop application includes an automated update system built using
Electron's ``autoUpdater`` module. This feature enables users to receive and install
updates seamlessly, ensuring they always have access to the latest features and security fixes.
Supported Platforms
===================
- **macOS:** Fully supported with automatic updates enabled by default
- **Windows:** Not supported
- **Linux:** Not supported
Update Process Overview
=======================
1. **Check for Updates:**
- Automatic check on application startup
- Manual check available via pgAdmin 4 menu > Check for Updates
- Uses Electron's ``autoUpdater`` API to query update server
2. **Download Process:**
- Updates download automatically when detected
- Progress shown via notifications
- Background download prevents interruption of work
3. **Installation Flow:**
- User prompted to Install & Restart or Restart Later when update ready
- Update applied during application restart
The flow chart for the update process is as follows:
.. image:: images/auto_update_desktop_app.png
:alt: Auto-update Desktop App
:align: center
User Interface Components
=========================
1. **Notification Types:**
- Update available
- Download progress
- Update ready to install
- Error notifications
2. **Menu Integration:**
- Check for Updates option in pgAdmin 4 menu
- Restart to Update option when update available
Error Handling
==============
The system includes comprehensive error handling:
1. **Network Errors:**
- Connection timeouts
- Download failures
- Server unavailability
2. **Installation Errors:**
- Corrupted downloads
3. **Recovery Mechanisms:**
- Fallback to manual update
- Error reporting to logs
Security Considerations
=======================
The update system implements below security measures:
1. **Secure Communication:**
- Protected update metadata
Platform-Specific Notes
=======================
1. **macOS:**
- Uses native update mechanisms
- Requires signed packages
References
==========
- `Electron autoUpdater API Documentation <https://www.electronjs.org/docs/latest/api/auto-updater>`_
+20 -104
View File
@@ -67,7 +67,7 @@ Use the fields in the *General* tab to specify parameters for the backup:
* Use the dropdown listbox next to *Rolename* to specify the role that owns the
backup.
Click the *Data Options* tab to continue. Use the fields in the *Data Options*
Click the *Data/Objects* tab to continue. Use the fields in the *Data/Objects*
tab to provide options related to data or pgAdmin objects that correspond to *pg_dump*.
.. image:: images/backup_sections.png
@@ -97,7 +97,7 @@ tab to provide options related to data or pgAdmin objects that correspond to *pg
* Move the switch next to *Only data* towards right position to limit the back
up to data.
* Move the switch next to *Only schemas* to limit the back up to schema-level
* Move the switch next to *Only schema* to limit the back up to schema-level
database objects.
* Move the switch next to *Blobs* towards left position to exclude large
@@ -113,10 +113,10 @@ tab to provide options related to data or pgAdmin objects that correspond to *pg
* Move the switch next to *Owner* towards right position to exclude commands
that set object ownership.
* Move the switch next to *Privileges* towards right position to exclude
* Move the switch next to *Privilege* towards right position to exclude
commands that create access privileges.
* Move the switch next to *Tablespaces* towards right position to exclude
* Move the switch next to *Tablespace* towards right position to exclude
tablespaces.
* Move the switch next to *Unlogged table data* towards right position to
@@ -126,45 +126,25 @@ tab to provide options related to data or pgAdmin objects that correspond to *pg
commands that set the comments. **Note:** This option is visible only for
database server greater than or equal to 11.
* Move the switch next to *Publications* towards right position to exclude
publications.
* Move the switch next to *Subscriptions* towards right position to exclude
subscriptions.
* Move the switch next to *Security labels* towards right position to exclude
Security labels.
* Move the switch next to *Toast compressions* towards right position to exclude
Toast compressions. **Note:** This option is visible only for
database server greater than or equal to 14.
* Move the switch next to *Table access methods* towards right position to exclude
Table access methods. **Note:** This option is visible only for
database server greater than or equal to 15.
Click the *Options* tab to continue. Use these additional fields to specify
options like including ddl statements, verbose message or using set session
authorization corresponding to *pg_dump* options.
.. image:: images/backup_queries.png
:alt: Queries option on backup dialog
:align: center
Click the *Query Options* tab to continue. Use these additional fields to specify
the type of statements that should be included in the backup.
* Move switches in the **Queries** field box to specify the type of statements
that should be included in the backup.
* Move the switch next to *Use INSERT commands* towards right position to
* Move the switch next to *Use Column Inserts* towards right position to dump
the data in the form of INSERT statements and include explicit column
names. Please note: this may make restoration from backup slow.
* Move the switch next to *Use Insert commands* towards right position to
dump the data in the form of INSERT statements rather than using a COPY
command. Please note: this may make restoration from backup slow.
* Use the *Maximum rows per INSERT command* field to controls the maximum
number of rows per INSERT command. **Note:** This option is visible only for
database server greater than or equal to 12.
* Move the switch next to *On conflict do nothing to INSERT command* towards
right position to add ON CONFLICT DO NOTHING to INSERT command.
This option is not valid unless *Use INSERT commands*, *Use Column INSERTS*
or *Maximum rows per INSERT command* is also specified.
**Note:** This option is visible only for database server greater than or
equal to 12.
* Move the switch next to *Include CREATE DATABASE statement* towards right
position to include a command in the backup that creates a new database
when restoring the backup.
@@ -174,59 +154,12 @@ the type of statements that should be included in the backup.
database object with the same name before recreating the object during a
backup.
* Move the switch next to *Include IF EXISTS clause* towards right
position to add an IF EXISTS clause to drop databases and other objects.
This option is not valid unless *Include DROP DATABASE statement* is also set.
.. image:: images/backup_table.png
:alt: Backup dialog tables section
:align: center
Click the *Table Options* tab to continue. Use the fields in the *Table Options*
tab related to tables that should be included in the backup.
* Move the switch next to *Use Column INSERTS* towards right position to dump
the data in the form of INSERT statements and include explicit column
names. Please note: this may make restoration from backup slow.
* Move the switch next to *Load via partition root* towards right position,
* Move the switch next to *Load Via Partition Root* towards right position,
so when dumping a COPY or INSERT statement for a partitioned table, target
the root of the partitioning hierarchy which contains it rather than the
partition itself. **Note:** This option is visible only for database server
greater than or equal to 11.
* Move the switch next to *Enable row security* towards right position to
set row_security to on instead, allowing the user to dump the parts of the
contents of the table that they have access to. This option is relevant
only when dumping the contents of a table which has row security.
* Use the *Include table(s) and Children* field to dump the tables and any partitions
or inheritance child tables of the tables matching the pattern.
**Note:** This option is visible only for database server greater than or
equal to 16.
* The Exclude patterns field is utilized to exclude patterns in the following manner:
* Use the *Table(s)* field to not dump the tables matching the
pattern. Multiple patterns can be given separated by space.
* Use the *Table(s) data* field to not dump data for any tables
matching the pattern. Multiple patterns can be given separated by
spaces.
* Use the *Table(s) and children* field to not dump the tables and any
partitions or inheritance child tables of the tables matching the pattern.
**Note:** This option is visible only for database server greater than or
equal to 16.
* Use the *Table(s) data and children* field to not dump data for the
tables and any partitions or inheritance child tables of the tables matching
the table pattern. **Note:** This option is visible only for database server
greater than or equal to 16.
Click the *Options* tab to continue. Use the fields in the *Options*
tab to provide other backup options.
.. image:: images/backup_disable.png
:alt: Disable option on backup dialog
:align: center
@@ -234,7 +167,7 @@ tab to provide other backup options.
* Move switches in the **Disable** field box to specify the type of statements
that should be excluded from the backup.
* Move the switch next to *Triggers* (active when creating a data-only backup)
* Move the switch next to *Trigger* (active when creating a data-only backup)
towards right position to include commands that will disable triggers on the
target table while the data is being loaded.
@@ -249,6 +182,9 @@ tab to provide other backup options.
* Move switches in the **Miscellaneous** field box to specify miscellaneous
backup options.
* Move the switch next to *With OIDs* towards right position to include object
identifiers as part of the table data for each table.
* Move the switch next to *Verbose messages* towards left position to instruct
*pg_dump* to exclude verbose messages.
@@ -259,26 +195,6 @@ tab to provide other backup options.
position to include a statement that will use a SET SESSION AUTHORIZATION
command to determine object ownership (instead of an ALTER OWNER command).
* Use the *Exclude schema* field to not dump schemas whose name matches
pattern.
* Use the *Extra float digits* field to use the specified value when dumping
floating-point data, instead of the maximum available precision.
* Use the *Lock wait timeout* field to do not wait forever to acquire shared
table locks at the beginning of the dump. Instead, fail if unable to lock a
table within the specified timeout.
Click the *Objects* tab to continue.
.. image:: images/backup_object_selection.png
:alt: Select objects in backup dialog
:align: center
* Select the objects from tree to take backup of selected objects only.
* If Schema is selected then it will take the backup of that selected schema only.
* If any Table, View, Materialized View, Sequences, or Foreign Table is selected then it will take the backup of those selected objects.
When you’ve specified the details that will be incorporated into the pg_dump
command:
@@ -289,4 +205,4 @@ command:
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
tab
+22 -89
View File
@@ -24,27 +24,22 @@ Use the fields in the *General* tab to specify the following:
connection privileges on the selected server. The role will be used for
authentication during the backup.
Click the *Data Options* tab to continue. Use the fields in the *Data Options*
tab to provide options related to data or pgAdmin objects that correspond to *pg_dumpall*.
.. image:: images/backup_server_objects.png
:alt: Type of objects option on backup server dialog
:align: center
Click the *Data/Objects* tab to continue. Use the fields in the *Data/Objects*
tab to provide options related to data or pgAdmin objects that correspond to *pg_dump*.
* Move switches in the **Type of objects** field box to specify details about
the type of objects that will be backed up.
* Move the switch next to *Only data* towards right position to limit the back
up to data.
* Move the switch next to *Only schemas* to limit the back up to schema-level
* Move the switch next to *Only schema* to limit the back up to schema-level
database objects.
* Move the switch next to *Only tablespaces* to limit the back
up to tablespaces only.
* Move the switch next to *Only roles* to limit the back up to roles only.
.. image:: images/backup_server_do_not_save.png
:alt: Do not save option on backup server dialog
:align: center
@@ -55,13 +50,10 @@ tab to provide options related to data or pgAdmin objects that correspond to *pg
* Move the switch next to *Owner* towards right position to exclude commands
that set object ownership.
* Move the switch next to *Role passwords* towards right position to exclude
passwords for roles.
* Move the switch next to *Privileges* towards right position to exclude
* Move the switch next to *Privilege* towards right position to exclude
commands that create access privileges.
* Move the switch next to *Tablespaces* towards right position to exclude
* Move the switch next to *Tablespace* towards right position to exclude
tablespaces.
* Move the switch next to *Unlogged table data* towards right position to
@@ -71,73 +63,26 @@ tab to provide options related to data or pgAdmin objects that correspond to *pg
commands that set the comments. **Note:** This option is visible only for
database server greater than or equal to 11.
* Move the switch next to *Publications* towards right position to exclude
publications.
* Move the switch next to *Subscriptions* towards right position to exclude
subscriptions.
* Move the switch next to *Security labels* towards right position to exclude
Security labels.
* Move the switch next to *Toast compressions* towards right position to exclude
Toast compressions. **Note:** This option is visible only for
database server greater than or equal to 14.
* Move the switch next to *Table access methods* towards right position to exclude
Table access methods. **Note:** This option is visible only for
database server greater than or equal to 15.
.. image:: images/backup_server_queries.png
:alt: Queries option on backup server dialog
:align: center
Click the *Query Options* tab to continue. Use these additional fields to specify
the type of statements that should be included in the backup.
* Move switches in the **Queries** field box to specify the type of statements
that should be included in the backup.
* Move the switch next to *Use INSERT commands* towards right position to
dump the data in the form of INSERT statements rather than using a COPY
command. Please note: this may make restoration from backup slow.
* Move the switch next to *Use Column Inserts* towards right position to dump
the data in the form of INSERT statements and include explicit column
names. Please note: this may make restoration from backup slow.
* Use the *Maximum rows per INSERT command* field to controls the maximum
number of rows per INSERT command. **Note:** This option is visible only for
database server greater than or equal to 12.
* Move the switch next to *On conflict do nothing to INSERT command* towards
right position to add ON CONFLICT DO NOTHING to INSERT command.
This option is not valid unless *Use INSERT commands*, *Use Column INSERTS*
or *Maximum rows per INSERT command* is also specified.
**Note:** This option is visible only for database server greater than or
equal to 12.
* Move the switch next to *Use Insert commands* towards right position to dump
the data in the form of INSERT statements rather than using a COPY command.
Please note: this may make restoration from backup slow.
* Move the switch next to *Include DROP DATABASE statement* towards right
position to include a command in the backup that will drop any existing
database object with the same name before recreating the object during a
backup.
* Move the switch next to *Include IF EXISTS clause* towards right
position to add an IF EXISTS clause to drop databases and other objects.
This option is not valid unless *Include DROP DATABASE statement* is also set.
.. image:: images/backup_server_table.png
:alt: Backup dialog tables section
:align: center
Click the *Table Options* tab to continue. Use the fields in the *Table Options*
tab related to tables that should be included in the backup.
* Move the switch next to *Use Column INSERTS* towards right position to dump
the data in the form of INSERT statements and include explicit column
names. Please note: this may make restoration from backup slow.
* Move the switch next to *Load via partition root* towards right position,
so when dumping a COPY or INSERT statement for a partitioned table, target
the root of the partitioning hierarchy which contains it rather than the
partition itself. **Note:** This option is visible only for database server
greater than or equal to 11.
Click the *Options* tab to continue. Use the fields in the *Options*
tab to provide other backup options.
.. image:: images/backup_server_disable.png
:alt: Disable option on backup server dialog
@@ -146,7 +91,7 @@ tab to provide other backup options.
* Move switches in the **Disable** field box to specify the type of statements
that should be excluded from the backup.
* Move the switch next to *Triggers* (active when creating a data-only backup)
* Move the switch next to *Trigger* (active when creating a data-only backup)
towards right position to include commands that will disable triggers on the
target table while the data is being loaded.
@@ -161,8 +106,11 @@ tab to provide other backup options.
* Move switches in the **Miscellaneous** field box to specify miscellaneous
backup options.
* Move the switch next to *With OIDs* towards right position to include object
identifiers as part of the table data for each table.
* Move the switch next to *Verbose messages* towards left position to instruct
*pg_dumpall* to exclude verbose messages.
*pg_dump* to exclude verbose messages.
* Move the switch next to *Force double quotes on identifiers* towards right
position to force the quoting of all identifiers.
@@ -171,24 +119,9 @@ tab to provide other backup options.
position to include a statement that will use a SET SESSION AUTHORIZATION
command to determine object ownership (instead of an ALTER OWNER command).
* Use the *Exclude database* field to not dump databases whose name matches
pattern.
* Use the *Extra float digits* field to use the specified value when dumping
floating-point data, instead of the maximum available precision.
* Use the *Lock wait timeout* field to do not wait forever to acquire shared
table locks at the beginning of the dump. Instead, fail if unable to lock a
table within the specified timeout.
When you’ve specified the details that will be incorporated into the pg_dumpall
command:
* Click the *Backup* button to build and execute a command that builds a backup
based on your selections on the *Backup Server* dialog.
* Click the *Cancel* button to exit without saving work.
Click the *Backup* button to build and execute a command based on your
selections; click the *Cancel* button to exit without saving work.
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
tab
+1 -1
View File
@@ -14,7 +14,7 @@ root = os.path.realpath(
if sys.path[0] != root:
sys.path.insert(0, root)
import config
from pgadmin.utils import PgAdminModule
target = open('code_snippets.rst', 'w')
-2
View File
@@ -8,7 +8,6 @@ Use *Clear Saved Password* functionality to clear the saved password for the
database server.
.. image:: images/clear_saved_password.png
:alt: Clear saved password
:align: center
*Clear Saved Password* shows in the context menu for the selected server as well
@@ -18,7 +17,6 @@ Use *Clear SSH Tunnel Password* functionality to clear the saved password of SSH
Tunnel to connect to the database server.
.. image:: images/clear_tunnel_password.png
:alt: Clear SSH tunnel password
:align: center
*Clear SSH Tunnel Password* shows in the context menu for the selected server as
+7 -6
View File
@@ -1,12 +1,12 @@
.. _cloud_aws_rds:
******************************************
`Amazon RDS Cloud Deployment`:index:
`Amazon AWS RDS Cloud Deployment`:index:
******************************************
To deploy a PostgreSQL server on the Amazon cloud, follow the below steps.
To deploy a PostgreSQL server on the Amazon AWS cloud, follow the below steps.
.. image:: images/cloud_provider_for_postgresql.png
.. image:: images/cloud_aws_provider.png
:alt: Cloud Deployment Provider
:align: center
@@ -32,7 +32,8 @@ Use the fields from the Instance Specification tab to specify the Instance
details.
* Use the *Instance name* field to add an instance name for the PostgreSQL
server; the name specified will be displayed in the *Object Explorer* too.
server; the name specified will be displayed in the *Browser* tree control
too.
* Use the *Public IP* field to specify the IP Address range for permitting the
inbound traffic.
@@ -62,8 +63,8 @@ details.
Use the fields from the Database Details tab to specify the Instance details.
* Use the drop-down list box in the *Server group* field to select the parent
node for the server; the server will be displayed in the *Object Explorer*
within the specified group.
node for the server; the server will be displayed in the *Browser* tree
control within the specified group.
* Use the *Database name* field to add the database name for the PostgreSQL
server.
@@ -1,16 +1,16 @@
.. cloud_azure_database:
.. _cloud_azure_postgresql:
******************************************
`Azure Database Cloud Deployment`:index:
`Azure PostgreSQL Cloud Deployment`:index:
******************************************
To deploy a PostgreSQL server on the Azure Database, follow the below steps.
To deploy a PostgreSQL server on the Azure cloud, follow the below steps.
.. image:: images/cloud_provider_for_postgresql.png
.. image:: images/cloud_azure_provider.png
:alt: Cloud Deployment
:align: center
Once you launch the tool, select the Azure Database option.
Once you launch the tool, select the Azure PostgreSQL option.
Click on the *Next* button to proceed further.
@@ -41,7 +41,7 @@ Use the fields from the Instance Specification tab to specify the Instance
details.
* Use the *Cluster name* field to add a name for the PostgreSQL
server; the name specified will be displayed in the *Object Explorer* too.
server; the name specified will be displayed in the *Browser* tree control too.
* Select a subscription from the *Subscription* options which are populated based
on user access levels in Azure portal.
@@ -85,8 +85,8 @@ details.
Use the fields from the Database Details tab to specify the PostgreSQL database details.
* Use the drop-down list in the *pgAdmin server group* field to select the parent
node for the server; the server will be displayed in the *Object Explorer*
within the specified group.
node for the server; the server will be displayed in the *Browser* tree
control within the specified group.
* Use the *Admin username* field to add the database name for the PostgreSQL
server.
@@ -103,7 +103,7 @@ Click on the next button to proceed.
:align: center
At the end, review the instance details that you provided. Click on Finish
button to deploy the instance on Azure Database.
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.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

+6 -8
View File
@@ -1,12 +1,11 @@
.. _cloud_deployment:
*************************************
`PostgreSQL Cloud Deployment`:index:
*************************************
******************************
`Cloud Deployment`:index:
******************************
A PostgreSQL server can be deployed on the Amazon, EDB BigAnimal, Azure,
Google cloud using this module. In future more cloud provider options will
be available.
A PostgreSQL server can be deployed on the Amazon AWS and EDB BigAnimal
cloud using this module. In future more cloud options will be available.
To launch the *Cloud Deployment...* tool, right click on the *Server Group* or
*Server* of the tree control, and select *Deploy a Cloud Instance* from the
@@ -17,5 +16,4 @@ To launch the *Cloud Deployment...* tool, right click on the *Server Group* or
cloud_aws_rds
cloud_edb_biganimal
cloud_azure_database
cloud_google_cloud_sql
cloud_azure_postgresql
+6 -8
View File
@@ -6,7 +6,7 @@
To deploy a PostgreSQL server on the EDB BigAnimal cloud, follow the below steps.
.. image:: images/cloud_provider_for_postgresql.png
.. image:: images/cloud_biganimal_provider.png
:alt: Cloud Deployment Provider
:align: center
@@ -27,13 +27,12 @@ and the next button will be enabled. To proceed further, click on the next butto
:alt: Cloud Deployment Provider
:align: center
* Use the *Project* field to choose a project in your Biganimal account.
* Use the *Cluster type* field to choose a cluster type.
* Use the *No. of Standby Replicas* field to specify the replicas if you have selected the High Availability cluster.
* Use the *Cluster provider* field to choose the provider.
* Use the *Cluster provider* field to coose the provider.
.. image:: images/cloud_biganimal_instance.png
@@ -44,7 +43,8 @@ Use the fields from the Instance Specification tab to specify the Instance
details.
* Use the *Cluster name* field to add a cluster name for the PostgreSQL
server; the name specified will be displayed in the *Object Explorer* too.
server; the name specified will be displayed in the *Browser* tree control
too.
* Use the *Region* field to select the region.
@@ -66,8 +66,6 @@ details.
* Use the *Volume IOPS* field to specify the storage IOPS. This field is specific to AWS.
* Use the *Disk throughput* field to specify the disk throughput. This field is specific to AWS.
.. image:: images/cloud_biganimal_database.png
:alt: Cloud Deployment Provider
@@ -76,8 +74,8 @@ details.
Use the fields from the Database Details tab to specify the Instance details.
* Use the drop-down list box in the *Server group* field to select the parent
node for the server; the server will be displayed in the *Object Explorer*
within the specified group.
node for the server; the server will be displayed in the *Browser* tree
control within the specified group.
* Use the *Database type* field to specify the PostgreSQL
type, EnterpriseDB PostgreSQL Advanced Server or PostgreSQL.
-117
View File
@@ -1,117 +0,0 @@
.. cloud_google_cloud_sql:
************************************************
`Google Cloud SQL Deployment`:index:
************************************************
To deploy a PostgreSQL server on the Google Cloud SQL, follow the below steps.
.. image:: images/cloud_provider_for_postgresql.png
:alt: Cloud Deployment
:align: center
Once you launch the tool, select the Google Cloud SQL option.
Click on the *Next* button to proceed further.
.. image:: images/cloud_google_credentials.png
:alt: Cloud Deployment
:align: center
In the Credentials dialog, select client secret file to authenticate
using google.You can download a client secret which is json formatted file
from google cloud console once OAuth2 client ID is created.
.. note:: While creating client OAuth client ID, select Desktop App as application type.
Refer `this <https://support.google.com/cloud/answer/6158849?hl=en/>`_ link for creating client secret.
Clicking the *Click here to authenticate yourself to Google*
button, user will be redirected to the Google authentication page in a
new browser tab.
Once authentication is completed, click on the next button to proceed.
.. image:: images/cloud_google_instance.png
:alt: Cloud Deployment
:align: center
Use the fields from the Instance Specification tab to specify the Instance
details.
* Use the *Cluster name* field to add a name for the PostgreSQL
server; the name specified will be displayed in the *Object Explorer* too.
* Select the project from *project* dropdown under which the
PostgreSQL instance will be created.
* Select the location to deploy PostgreSQL instance from *Location*
options.
* Select the availability zone in specified region to deploy PostgreSQL
instance from *Availability zone* options.
* Use *Database version* options to specify PostgreSQL database version.
* Use the *Instance class* field to allocate the computational and
memory capacity required by planned workload of this DB instance.
* Use the *Instance type* field to select the instance type.
* Specify storage type by selecting option from *Storage type*.
* Use the *Storage capacity* option to specify the storage capacity.
.. image:: images/cloud_google_network.png
:alt: Cloud Deployment
:align: center
* Use the *Public IP* field to specify the list of IP address range
for allowed inbound traffic, for example: 127.0.0.1/32. Add multiple
IP addresses/ranges separated with commas.
* Use the *High Availability* option to specify High Availability
option. This option creates a standby in a select Secondary
Availability Zone.
* Select the secondary availability zone for high availability
from *Secondary Availability zone* options.
.. image:: images/cloud_google_database.png
:alt: Cloud Deployment
:align: center
Use the fields from the Database Details tab to specify the PostgreSQL database details.
* Use the drop-down list in the *pgAdmin server group* field to select the parent
node for the server; the server will be displayed in the *Object Explorer*
within the specified group.
* Admin username field will be default to postgres.
server.
* Use the *Password* field to provide a password that will be supplied when
authenticating with the server.
* Use the *Confirm password* field to repeat the password.
Click on the next button to proceed.
.. image:: images/cloud_google_review.png
:alt: Cloud Deployment
:align: center
At the end, review the instance details that you provided. Click on Finish
button to deploy the instance on Azure PostgreSQL.
Once you click on the finish, one background process will start which will
deploy the instance in the cloud and monitor the progress of the deployment.
You can view all the background process with there running status and logs
on the :ref:`Processes <processes>` tab
The Server will be added to the tree with the cloud deployment icon. Once the
deployment is done, the server details will be updated.
.. image:: images/cloud_google_deployment_tree.png
:alt: Cloud Deployment Provider
:align: center
+6 -5
View File
@@ -5,14 +5,14 @@
**********************
The bulk of pgAdmin is a Python web application written using the Flask framework
on the backend, and HTML5 with CSS3,ReactJS on the front end. A
on the backend, and HTML5 with CSS3, Bootstrap and jQuery on the front end. A
desktop runtime is also included for users that prefer a desktop application to
a web application, which is written using Electron.
a web application, which is written using NWjs (Node Webkit).
Runtime
*******
The runtime is based on Electron which integrates a browser and the Python server
The runtime is based on NWjs which integrates a browser and the Python server
creating a standalone application. The source code can be found in the
**/runtime** directory in the source tree.
@@ -194,7 +194,7 @@ Nodes
*****
Nodes are very similar to modules, it represents an individual node or,
collection object on the object explorer treeview. To recognised as a node module, a
collection object on the browser treeview. To recognised as a node module, a
Python package (along with javascript modules) must be created. This must:
1) Be placed within the **web/pgadmin/browser/** directory, and
@@ -207,7 +207,8 @@ Front End
pgAdmin uses javascript extensively for the front-end implementation. It uses
require.js to allow the lazy loading (or, say load only when required),
ReactJS with CSS and MaterialUI for UI look and feel. We have
bootstrap and MaterialUI for UI look and feel, React for generating
properties/create dialog for selected node. We have
divided each module in small chunks as much as possible. Not all javascript
modules are required to be loaded (i.e. loading a javascript module for
database will make sense only when a server node is loaded completely.) Please
+1 -1
View File
@@ -16,7 +16,7 @@ review process for any changes submitted for inclusion in pgAdmin.
bulk updates every year). The start date should always be 2013, and the end year
the current year, e.g.
Copyright (C) 2013 - 2025, The pgAdmin Development Team
Copyright (C) 2013 - 2023, The pgAdmin Development Team
* Ensure there's a blank line immediately following any copyright headers.
+6 -4
View File
@@ -22,12 +22,14 @@ purpose or how it works if not obvious from a quick review of the code itself.
CSS 3
*****
CSS3 is used for styling and layout throughout the application.
CSS3 is used for styling and layout throughout the application. Extensive use is
made of the Bootstrap Framework to aid in that process, however additional
styles must still be created from time to time.
Most custom styling comes from individual modules which may advertise static
stylesheets to be included in the module that is loading them via hooks.
Styling overrides (for example, to alter the look and feel) will
Styling overrides (for example, to alter the Bootstrap look and feel) will
typically be found in the **overrides.css** file in the main static file
directory for the application.
@@ -62,7 +64,7 @@ All HTML must be HTML 5 compliant.
Javascript
**********
Client-side code is written in Javascript using ReactJS and various plugins.
Client-side code is written in Javascript using jQuery and various plugins.
Whilst much of the code is rendered from static files, there is also code that
is rendered from templates using Jinja2 (often to inject the users settings) or
constructed on the fly from module hooks.
@@ -120,7 +122,7 @@ with the required file header is shown below::
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
# Copyright (C) 2013 - 2023, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################
-11
View File
@@ -40,9 +40,6 @@ settings:
as the existing one, but will be an independent object. If you choose to copy
an existing collation, you cannot modify the collation properties displayed on
this tab.
* Use the drop-down listbox next to *Provider* to select a locale services associated
with the collation. Possible values are: icu, libc and builtin.
**Note:** The builtin option is available from v17 onwards.
* Use the *Locale* field to specify a locale; a locale specifies language and
language formatting characteristics. If you specify this, you cannot specify
either of the following parameters. To view a list of locales supported by
@@ -53,14 +50,6 @@ settings:
* Use the *LC_CTYPE* field to specify a locale with specified character
classification. The locale must be applicable to the current database encoding.
(See CREATE DATABASE for details.)
* Move the switch next to *Deterministic* to *YES* to specify whether the collation should use
deterministic comparisons. By default, this option is set to true. In a
deterministic comparison, strings that are not byte-wise equal are considered
unequal, even if they are considered logically equal in the comparison.
* Use the *Rules* field to specify a rules for customizing the behavior of the collation.
It includes considerations such as character ordering, case sensitivity, and accent
sensitivity.
* Use the *Version* field to specify version string to store with the collation object.
Click the *SQL* tab to continue.
-6
View File
@@ -39,12 +39,6 @@ are disabled if inapplicable.)
a text value.
* Use the drop-down listbox next to *Collation* to apply a collation setting to
the column.
* Use the drop-down listbox next to *Compression* to set the compression method
for the column. Compression is supported only for variable-width data types,
and is used only when the column's storage mode is main or extended. This
option is available from v14 and above.
* Use the drop-down listbox next to *Storage* to set the storage mode for the
column. This option is available from v16 and above.
Click the *Constraints* tab to continue.
+2 -2
View File
@@ -27,8 +27,8 @@ The configuration files are as follows:
needed.
* ``config_local.py``: This file is read after ``config_distro.py`` and is intended
for the owner of the installation to change any default or packaging specific settings
that they may wish to adjust to meet local preferences or standards.This file is optional,
for end users to change any default or packaging specific settings that they may
wish to adjust to meet local preferences or standards.This file is optional,
and may be created by users in the same directory as ``config.py`` if
needed.
-2
View File
@@ -11,7 +11,6 @@ and select *Connect Server...* from the context menu.
.. image:: images/connect_to_server.png
:alt: Connect to server dialog
:align: center
Provide authentication information for the selected server:
@@ -27,7 +26,6 @@ Tunnel and Database server passwords if not already saved.
.. image:: images/connect_to_tunneled_server.png
:alt: Connect to server dialog
:align: center
Provide authentication information for the selected server:
+9 -47
View File
@@ -26,9 +26,9 @@ where *<tag name>* is one of the following:
+==========+===============================================================================+
| latest | The most recent release. |
+----------+-------------------------------------------------------------------------------+
| 8.4 | A specific version (8.4 in this case). |
| 6.14 | A specific version (6.14 in this case). |
+----------+-------------------------------------------------------------------------------+
| 8 | the latest release of a specific major version (major version 8 in this case).|
| 6 | the latest release of a specific major version (major version 6 in this case).|
+----------+-------------------------------------------------------------------------------+
| snapshot | The latest nightly test build. |
+----------+-------------------------------------------------------------------------------+
@@ -42,22 +42,23 @@ maintenance functions to be executed. Multiple versions are included in the
following directories to allow use with different versions of the database
server:
* PostgreSQL 10: */usr/local/pgsql-10*
* PostgreSQL 11: */usr/local/pgsql-11*
* PostgreSQL 12: */usr/local/pgsql-12*
* PostgreSQL 13: */usr/local/pgsql-13*
* PostgreSQL 14: */usr/local/pgsql-14*
* PostgreSQL 15: */usr/local/pgsql-15*
* PostgreSQL 16: */usr/local/pgsql-16*
The default binary paths set in the container are as follows:
.. code-block:: bash
DEFAULT_BINARY_PATHS = {
'pg-17': '/usr/local/pgsql-17',
'pg-16': '/usr/local/pgsql-16',
'pg-15': '/usr/local/pgsql-15',
'pg-14': '/usr/local/pgsql-14',
'pg-13': '/usr/local/pgsql-13'
'pg-13': '/usr/local/pgsql-13',
'pg-12': '/usr/local/pgsql-12',
'pg-11': '/usr/local/pgsql-11',
'pg-10': '/usr/local/pgsql-10'
}
this may be changed in the :ref:`preferences`.
@@ -132,38 +133,7 @@ than using the default.
Override the default file path for the server definition list. See the
/pgadmin4/servers.json mapped file below for more information. See the format
of the `Servers JSON file <https://www.pgadmin.org/docs/pgadmin4/latest/import_export_servers.html#json-format>`_.
**PGADMIN_REPLACE_SERVERS_ON_STARTUP**
*Default: null*
By default, the server definitions are only loaded on first launch, i.e. when initializing the configuration database. See PGADMIN_SERVER_JSON_FILE above.
If this variable is set to True, the server definitions will be replaced on every launch. This can be used to declaratively manage the server definitions.
**PGADMIN_PREFERENCES_JSON_FILE**
*Default: /pgadmin4/preferences.json*
Override the default file path for the preferences customization at the container creation. See the
/pgadmin4/preferences.json mapped file below for more information. See the format
of the `Preferences JSON file <https://www.pgadmin.org/docs/pgadmin4/latest/preferences.html#json-format>`_.
**PGADMIN_CUSTOM_CONFIG_DISTRO_FILE**
*Default: /pgadmin4/config_distro.py*
Override the default file path for the pgadmin configurations file.This can be used while provisioning
container with read only root file system to achieve a more secure pgadmin4 deployment for kubernetes.
Note that if you are externally mapping this file, then environment variables passed using *PGADMIN_CONFIG_*
suffix will be ignored.
**PGPASS_FILE**
*Default: <null>*
This varible should be set to if you want to pass password using pgpass
file for the servers added in pgadmin.
of the `JSON file <https://www.pgadmin.org/docs/pgadmin4/latest/import_export_servers.html#json-format>`_.
**GUNICORN_ACCESS_LOGFILE**
@@ -259,14 +229,6 @@ pgAdmin in the container. Note that server definitions are only loaded on first
launch, i.e. when the configuration database is created, and not on subsequent
launches using the same configuration database.
**/pgadmin4/preferences.json**
If this file is mapped, preferences defined in it will be updated at launch
time. This allows customization of preferences settings into the instance of
pgAdmin in the container. Note that preferences are only set on first
launch, i.e. when the configuration database is created, and not on subsequent
launches using the same configuration database.
**/certs/server.cert**
If TLS is enabled, this file will be used as the servers TLS certificate.
-17
View File
@@ -19,9 +19,6 @@ Use the fields in the *General* tab to identify the database:
* Use the *Database* field to add a descriptive name for the database. The name
will be displayed in the *pgAdmin* tree control.
* Use the *OID* field to specify the object identifier to be used for the new
database. Users can specify the value greater than 16383. This option is available
from v15 and above.
* Select the owner of the database from the drop-down listbox in the *Owner*
field.
* Store notes about the database in the *Comment* field.
@@ -41,25 +38,11 @@ Use the *Definition* tab to set properties for the database:
* Select a tablespace from the drop-down listbox in the *Tablespace* field. The
selected tablespace will be the default tablespace used to contain database
objects.
* Select the strategy from the drop-down listbox in the *Strategy* field while
creating a new database. This option is available from v15 and above.
* Select the locale provider from the drop-down listbox in the *Locale Provider*
field to set the default collation for this database. Possible values are: icu, libc and builtin.
This option is available from v15 and above. **Note:** The icu and libc options are available
from v15 and builtin option is available from v17 onwards.
* Select the collation order from the drop-down listbox in the *Collation* field.
* Select the character classification from the drop-down listbox in the
*Character Type* field. This affects the categorization of characters, e.g.
lower, upper and digit. The default, or a blank field, uses the character
classification of the template database.
* Select the icu locale from the drop-down listbox in the *ICU Locale* to
specifies the ICU locale ID if the ICU locale provider is used.
This option is available from v15 and above.
* Specify the icu rules in the *ICU Rules* field as additional collation
rules to customize the behavior of the default collation of this database.
This option is available from v16 and above.
* Select the builtin locale from the drop-down listbox in the *Builtin Locale* if the
builtin locale provider is used. This option is available from v17 and above.
* Specify a connection limit in the *Connection Limit* field to configure the
maximum number of connection requests. The default value (*-1*) allows
unlimited connections to the database.
-108
View File
@@ -1,108 +0,0 @@
.. _dbms_job:
*****************
`DBMS Job`:index:
*****************
Use the *DBMS Job* dialog to create a DBMS Job.
.. image:: images/dbms_job_general.png
:alt: DBMS Job dialog general tab
:align: center
Use the fields in the *General* tab to create job:
* Use the *Name* field to add a descriptive name for the job. The name will
be displayed in the *pgAdmin* object explorer.
* Use the *Enabled?* switch to indicate that job should be enabled or disabled.
* Use the *Job Type* field to select the type of the job. Type could be SELF-CONTAINED or PRE-DEFINED.
If the Job Type is Self-Contained you need to specify the action and repeat interval in the Action and Repeat tabs respectively.
If the Job Type is Pre-Defined you need to specify the existing Program and Schedule names in the Pre-Defined tab.
* Store notes about the job in the *Comment* field.
Click the *Action* tab to continue.
.. image:: images/dbms_job_action.png
:alt: DBMS Job dialog action tab
:align: center
Use the *Action* tab to select the action for the job. This tab is only enabled when the job type is 'SELF-CONTAINED'.
* Use the *Type* field to select the type of the job. Type could be PLSQL BLOCK or STORED PROCEDURE.
* Use the *Procedure* field to select an existing procedure that executes when the job is invoked.
* *Number of Arguments* field is read-only and indicates the quantity of arguments necessary for the chosen procedure.
Click the *Code* tab to continue.
.. image:: images/dbms_job_code.png
:alt: DBMS Job dialog code tab
:align: center
* Use the *Code* field to write the code that executes when the job is invoked.
This tab is only enabled when the job type is 'SELF-CONTAINED' and type of the action is set to 'PLSQL BLOCK'.
Click the *Arguments* tab to continue.
.. image:: images/dbms_job_arguments.png
:alt: DBMS Job dialog arguments tab
:align: center
* *Arguments* tab outlines the arguments required by the selected procedure in the 'Action' tab. This tab is only enabled when the job type is 'SELF-CONTAINED'.
Click the *Repeat* tab to continue.
.. image:: images/dbms_job_repeat.png
:alt: DBMS Job dialog repeat tab
:align: center
Use the *Repeat* tab to select the repeat interval for the job. This tab is only enabled when the job type is 'SELF-CONTAINED'.
* Use the calendar selector in the *Start* field to specify the starting date
and time for the job.
* Use the calendar selector in the *End* field to specify the ending date and
time for the job.
* Use the *Frequency* field to select the frequency. Frequency is one of the following:
YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY.
* Use the *Date* field to select the date on which job will execute.Date is YYYYMMDD.
* Use the *Months* field to select the months in which the job will execute.
* Use the *Week Days* field to select the days on which the job will execute.
* Use the *Month Days* field to select the numeric days on which the job will
execute.
* Use the *Hours* field to select the hour at which the job will execute.
* Use the *Minutes* field to select the minute at which the job will execute.
Click the *Pre-Defined* tab to continue.
.. image:: images/dbms_job_predefined.png
:alt: DBMS Job dialog predefined tab
:align: center
Use the *Pre-Defined* tab to select the existing program and schedule to create the job.
This tab is only enabled when the job type is 'PRE-DEFINED'.
* Use the *Program Name* field to select the existing program.
* Use the *Schedule Name* field to select an existing schedule.
Click the *SQL* tab to continue.
Your entries in the *DBMS Job* dialog generate a SQL command (see an example below).
Use the *SQL* tab for review; revisit or switch tabs to make any changes to the
SQL command.
**Example**
The following is an example of the sql command generated by user selections in
the *DBMS Job* dialog:
.. image:: images/dbms_job_sql.png
:alt: DBMS Job dialog sql tab
:align: center
* Click the *Info* button (i) to access online help.
* Click the *Help* button (?) to access dialog help.
* Click the *Save* button to save work.
* Click the *Close* button to exit without saving work.
* Click the *Reset* button to restore configuration parameters.
-45
View File
@@ -1,45 +0,0 @@
.. _dbms_job_scheduler:
********************************
`Using EDB Job Scheduler`:index:
********************************
In the past versions of EPAS, DBMS_SCHEDULER or DBMS_JOBS required the configuration
of pgAgent, an essential service for their functionality. Maintaining pgAgent in a
production environment is cumbersome. The need for correct configuration, regular updates,
and ensuring the service’s health added complexity.
EPAS 16 revolutionizes job scheduling by eliminating the need for the pgAgent component.
The new version introduces EDB Job Scheduler which is an extension that runs the job scheduler
as a background process for the DBMS_SCHEDULER and DBMS_JOB packages.
The EDB Job Scheduler has a scheduler process that starts when the database cluster starts.
To start the scheduler process, load the EDB Job Scheduler extension using the **shared_preload_libraries**
parameter. After you load the extension, create the extension **'edb_job_scheduler'** and **'dbms_scheduler'** using
the CREATE EXTENSION command. The database in which you're creating the extension must be listed in the
**edb_job_scheduler.database_list** parameter.
Instructions for configuring the EDB Job Scheduler can be found in the
`Configuring EDB Job Scheduler <https://www.enterprisedb.com/docs/pg_extensions/edb_job_scheduler/configuring/>`_.
.. image:: images/dbms_job_scheduler.png
:alt: DBMS Job Scheduler Object Browser
:align: center
Check the status of all the jobs
********************************
To check the running status of all the jobs select the 'DBMS Job Scheduler' collection node from the object
explorer and select the Properties tab.
.. image:: images/dbms_job_details.png
:alt: DBMS Job Details
:align: center
.. toctree::
:maxdepth: 1
dbms_job
dbms_program
dbms_schedule
-71
View File
@@ -1,71 +0,0 @@
.. _dbms_program:
*********************
`DBMS Program`:index:
*********************
Use the *DBMS Program* dialog to create a DBMS Program.
.. image:: images/dbms_program_general.png
:alt: DBMS Program dialog general tab
:align: center
Use the fields in the *General* tab to create program:
* Use the *Name* field to add a descriptive name for the program. The name will
be displayed in the *pgAdmin* object explorer.
* Use the *Enabled?* switch to indicate that program should be enabled or disabled.
* Store notes about the program in the *Comment* field.
Click the *Action* tab to continue.
.. image:: images/dbms_program_action.png
:alt: DBMS Program dialog action tab
:align: center
Use the *Action* tab to select the action for the program:
* Use the *Type* field to select the type of the program. Type could be PLSQL BLOCK or STORED PROCEDURE.
* Use the *Procedure* field to select an existing procedure that executes when the program is invoked.
* *Number of Arguments* field is read-only and indicates the quantity of arguments necessary for the chosen procedure.
Click the *Code* tab to continue.
.. image:: images/dbms_program_code.png
:alt: DBMS Program dialog code tab
:align: center
* Use the *Code* field to write the code that executes when the program is invoked.
This tab is only enabled when the type of the program is set to 'PLSQL BLOCK'.
Click the *Arguments* tab to continue.
.. image:: images/dbms_program_arguments.png
:alt: DBMS Program dialog arguments tab
:align: center
* *Arguments* tab is a read-only section that outlines the arguments required by the selected procedure in the 'Action' tab.
Click the *SQL* tab to continue.
Your entries in the *DBMS Program* dialog generate a SQL command (see an example below).
Use the *SQL* tab for review; revisit or switch tabs to make any changes to the
SQL command.
**Example**
The following is an example of the sql command generated by user selections in
the *DBMS Program* dialog:
.. image:: images/dbms_program_sql.png
:alt: DBMS Program dialog sql tab
:align: center
* Click the *Info* button (i) to access online help.
* Click the *Help* button (?) to access dialog help.
* Click the *Save* button to save work.
* Click the *Close* button to exit without saving work.
* Click the *Reset* button to restore configuration parameters.
-61
View File
@@ -1,61 +0,0 @@
.. _dbms_schedule:
**********************
`DBMS Schedule`:index:
**********************
Use the *DBMS Schedule* dialog to create a DBMS Schedule.
.. image:: images/dbms_schedule_general.png
:alt: DBMS Schedule dialog general tab
:align: center
Use the fields in the *General* tab to create schedule:
* Use the *Name* field to add a descriptive name for the schedule. The name will
be displayed in the *pgAdmin* object explorer.
* Store notes about the schedule in the *Comment* field.
Click the *Repeat* tab to continue.
.. image:: images/dbms_schedule_repeat.png
:alt: DBMS Schedule dialog repeat tab
:align: center
Use the *Repeat* tab to select the repeat interval for the schedule:
* Use the calendar selector in the *Start* field to specify the starting date
and time for the schedule.
* Use the calendar selector in the *End* field to specify the ending date and
time for the schedule.
* Use the *Frequency* field to select the frequency. Frequency is one of the following:
YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY.
* Use the *Date* field to select the date on which schedule will execute.Date is YYYYMMDD.
* Use the *Months* field to select the months in which the schedule will execute.
* Use the *Week Days* field to select the days on which the schedule will execute.
* Use the *Month Days* field to select the numeric days on which the schedule will
execute.
* Use the *Hours* field to select the hour at which the schedule will execute.
* Use the *Minutes* field to select the minute at which the schedule will execute.
Click the *SQL* tab to continue.
Your entries in the *DBMS Schedule* dialog generate a SQL command (see an example below).
Use the *SQL* tab for review; revisit or switch tabs to make any changes to the
SQL command.
**Example**
The following is an example of the sql command generated by user selections in
the *DBMS Schedule* dialog:
.. image:: images/dbms_schedule_sql.png
:alt: DBMS Schedule dialog sql tab
:align: center
* Click the *Info* button (i) to access online help.
* Click the *Help* button (?) to access dialog help.
* Click the *Save* button to save work.
* Click the *Close* button to exit without saving work.
* Click the *Reset* button to restore configuration parameters.
+19 -24
View File
@@ -61,7 +61,6 @@ values required by the program:
.. image:: images/debug_params.png
:alt: Debugger parameter dialog
:align: center
Use the fields on the *Debugger* dialog to provide a value for each parameter:
@@ -101,29 +100,25 @@ The toolbar options are:
:alt: Debugger navigation toolbar
:align: center
.. table::
:class: longtable
:widths: 1 4 1
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------------------+
| Option | Action | Shortcut |
+=========================+===========================================================================================================+========================+
| *Step into* | Click the *Step into* icon to execute the currently highlighted line of code. | Option/Alt + Shift + I |
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------------------+
| *Step over* | Click the *Step over* icon to execute a line of code, stepping over any sub-functions invoked by the code.| Option/Alt + Shift + O |
| | The sub-function executes, but is not debugged unless it contains a breakpoint. | |
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------------------+
| *Continue/Start* | Click the *Continue/Start* icon to execute the highlighted code, and continue until the program | Option/Alt + Shift + C |
| | encounters a breakpoint or completes. | |
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------------------+
| *Toggle breakpoint* | Use the *Toggle breakpoint* icon to enable or disable a breakpoint (without removing the breakpoint). | Option/Alt + Shift + T |
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------------------+
| *Clear all breakpoints* | Click the *Clear all breakpoints* icon to remove all breakpoints from the program. | Option/Alt + Shift + X |
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------------------+
| *Stop* | Click the *Stop* icon to halt the execution of a program. | Option/Alt + Shift + S |
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------------------+
| *Help* | Click the *Help* icon to open debugger documentation. | |
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------------------+
+-------------------------+-----------------------------------------------------------------------------------------------------------+
| Option | Action |
+=========================+===========================================================================================================+
| *Step into* | Click the *Step into* icon to execute the currently highlighted line of code. |
+-------------------------+-----------------------------------------------------------------------------------------------------------+
| *Step over* | Click the *Step over* icon to execute a line of code, stepping over any sub-functions invoked by the code.|
| | The sub-function executes, but is not debugged unless it contains a breakpoint. |
+-------------------------+-----------------------------------------------------------------------------------------------------------+
| *Continue/Start* | Click the *Continue/Start* icon to execute the highlighted code, and continue until the program |
| | encounters a breakpoint or completes. |
+-------------------------+-----------------------------------------------------------------------------------------------------------+
| *Toggle breakpoint* | Use the *Toggle breakpoint* icon to enable or disable a breakpoint (without removing the breakpoint). |
+-------------------------+-----------------------------------------------------------------------------------------------------------+
| *Clear all breakpoints* | Click the *Clear all breakpoints* icon to remove all breakpoints from the program. |
+-------------------------+-----------------------------------------------------------------------------------------------------------+
| *Stop* | Click the *Stop* icon to halt the execution of a program. |
+-------------------------+-----------------------------------------------------------------------------------------------------------+
| *Help* | Click the *Help* icon to open debugger documentation. |
+-------------------------+-----------------------------------------------------------------------------------------------------------+
The top panel of the debugger window displays the program body; click in the
grey margin next to a line number to add a breakpoint. The highlighted line in
+17 -15
View File
@@ -36,34 +36,43 @@ See :ref:`config_py` for more information on configuration settings.
Desktop Runtime Standalone Application
======================================
The Desktop Runtime is based on `Electron <https://www.electronjs.org/>`_ which integrates a
The Desktop Runtime is based on `NWjs <https://nwjs.io/>`_ which integrates a
browser and the Python server creating a standalone application.
.. image:: images/runtime_standalone.png
:alt: Runtime Standalone
:align: center
Runtime Menu Items
------------------
Runtime Menu
------------
.. image:: images/runtime_menu.png
:alt: Runtime Menu
:align: center
Use the *File Menu* to access the runtime menu items:
Use the *File Menu* to access the *Runtime Menu*:
+-------------------------+---------------------------------------------------------------------------------------------------------+
| Option | Action |
+=========================+=========================================================================================================+
| *View logs...* | Click to open the view log dialog to view the pgAdmin 4 logs. |
| *Configure...* | Click to open configuration dialog to configure fixed port, port number and connection timeout. |
+-------------------------+---------------------------------------------------------------------------------------------------------+
| *Configure runtime...* | Click to open configuration dialog to configure fixed port, port number and connection timeout. |
| *View log...* | Click to open the view log dialog to view the pgAdmin 4 logs. |
+-------------------------+---------------------------------------------------------------------------------------------------------+
| *Enter Full Screen* | Click to enter/exit the full screen mode. Keyboard Shortcuts: OSX (Cmd + Ctrl + F), Other OS (F10). |
+-------------------------+---------------------------------------------------------------------------------------------------------+
| *Actual Size* | Click to change the window size to it original size. Keyboard Shortcuts: OSX (Cmd + 0), |
| | Other OS (Ctrl + 0). |
+-------------------------+---------------------------------------------------------------------------------------------------------+
| *Zoom In* | Click to increase the zoom level. Keyboard Shortcuts: OSX (Cmd + +), Other OS (Ctrl + +). |
+-------------------------+---------------------------------------------------------------------------------------------------------+
| *Zoom Out* | Click to decrease the zoom level. Keyboard Shortcuts: OSX (Cmd + -), Other OS (Ctrl + -). |
+-------------------------+---------------------------------------------------------------------------------------------------------+
Configuration Dialog
--------------------
Use the *Configure runtime...* option to access the *Configuration* dialog:
Use the *Runtime Menu* to access the *Configuration* dialog:
.. image:: images/runtime_configuration.png
:alt: Runtime Configuration
@@ -92,7 +101,7 @@ Timeout*, and 'Open Documentation in Default Browser?' configuration parameters:
Log dialog
----------
Use the *File Menu* to access the *View Logs* dialog:
Use the *Runtime Menu* to access the *Log* dialog:
.. image:: images/runtime_view_log.png
:alt: Runtime View Log
@@ -128,10 +137,3 @@ The configuration settings are stored in *runtime_config.json* file, which
will be available on Unix systems (~/.local/share/pgadmin/),
on Mac OS X (~/Library/Preferences/pgadmin),
and on Windows (%APPDATA%/pgadmin).
For details on the auto-update system for the desktop application, see
.. toctree::
:maxdepth: 1
auto_update_desktop_app
-87
View File
@@ -1,87 +0,0 @@
.. _directory_dialog:
*************************
`Directory Dialog`:index:
*************************
Use the Directory dialog to create an alias for a file system directory path.
To create directories, you must have the CREATE ANY DIRECTORY system privilege.
When you create a directory, you are automatically granted READ and WRITE privileges
on the directory, and you can grant READ and WRITE privileges to other users and roles.
The superuser can also grant these privileges to other users and roles.
Please note that directories are supported when connected to EDB Postgres Advanced Server.
For more information about using directories, please see the EDB Postgres Advanced Server Guide, available at:
https://www.enterprisedb.com/docs/epas/latest/epas_compat_sql/
The *Directory* dialog organizes the definition of a directory through the
following tabs: *General*, *Definition*, *Security*, and *SQL*.
The *SQL* tab displays the SQL code generated by dialog selections.
.. image:: images/directory_general.png
:alt: Directory general tab
:align: center
Use the fields on the *General* tab to specify directory attributes:
* Use the *Name* field to add a directory alias name. This name will be displayed in the object explorer.
* Select the owner of the directory from the drop-down listbox in the *Owner*
field.
Click the *Definition* tab to continue.
.. image:: images/directory_definition.png
:alt: Directory dialog definition tab
:align: center
* Use the *Location* field to specify a fully qualified directory path represented
by the alias name. The CREATE DIRECTORY command doesn't create the operating system directory.
The physical directory must be created independently using operating system commands.
Click the *Security* tab to continue.
.. image:: images/directory_security.png
:alt: Directory dialog security tab
:align: center
NOTE:- This *Security* tab will be only available for EPAS 17.
Use the *Security* tab to assign privileges for the directory.
Use the *Privileges* panel to assign security privileges. Click the *Add* icon
(+) to assign a set of privileges:
* Select the name of the role from the drop-down listbox in the *Grantee* field.
* The current user, who is the default grantor for granting the privilege, is displayed in the *Grantor* field.
* Click inside the *Privileges* field. Check the boxes to the left of one or
more privileges to grant the selected privileges to the specified user.
Click the *Add* icon to assign additional sets of privileges; to discard a
privilege, click the trash icon to the left of the row and confirm deletion in
the *Delete Row* popup.
Click the *SQL* tab to continue.
Your entries in the *Directory* dialog generate a SQL command (see an example
below). Use the *SQL* tab for review; revisit or switch tabs to make any changes
to the SQL command.
Example
*******
The following is an example of the sql command generated by user selections in
the *Directory* dialog:
.. image:: images/directory_sql.png
:alt: Directory dialog sql tab
:align: center
The example shown demonstrates creating a directory named *test1*. It has a
*location* value equal to */home/test_dir*.
* Click the *Info* button (i) to access online help.
* Click the *Save* button to save work.
* Click the *Close* button to exit without saving work.
* Click the *Reset* button to restore configuration parameters.
+3 -19
View File
@@ -5,9 +5,9 @@
`View/Edit Data`:index:
***********************
To view or modify data, right click on a table or view name in the
*Object Explorer*. When the context menu opens, use the *View/Edit Data* menu
to specify the number of rows you would like to display in the editor panel.
To view or modify data, right click on a table or view name in the *Browser*
tree control. When the context menu opens, use the *View/Edit Data* menu to
specify the number of rows you would like to display in the editor panel.
.. image:: images/editgrid.png
:alt: Edit grid window
@@ -212,7 +212,6 @@ To add new column(s) in data sorting grid, click on the [+] icon.
* Use the drop-down *Column* to select the column you want to sort.
* Use the drop-down *Order* to select the sort order for the column.
* Use the drop-down *NULLs* to select the NULL values order for the column.
To delete a row from the grid, click the trash icon.
@@ -223,18 +222,3 @@ To delete a row from the grid, click the trash icon.
:maxdepth: 2
viewdata_filter
Promote View/Edit Data to Query Tool
************************************
A View/Edit Data tab can be converted to a Query Tool Tab just by editing the query. Once you start editing, it will ask if you really want to move away from View/Edit.
.. image:: images/promote_view_edit_data_warning.png
:alt: Promote View/Edit Data tab to Query Tool tab warning
:align: center
You can disable the dialog by selecting the "Don't Ask again" checkbox. If you wish to resume the confirmation dialog, you can do it from "Prefrences -> Query Tool -> Editor -> Show View/Edit Data Promotion Warning?"
Once you chose to continue, you won't be able to use the features of View/Edit mode like the filter and sorting options, limit, etc. It is a one-way conversion. It will be a query tool now.
+8 -31
View File
@@ -12,20 +12,13 @@ The Entity-Relationship Diagram (ERD) tool is a database design tool that provid
* Save the diagram and open it later to continue working on it.
* Generate ready to run SQL from the database design.
* Generate the database diagram for an existing database.
* Drag and drop tables from object explorer to the diagram.
* Drag and drop tables from browser tree to the diagram.
.. image:: images/erd_tool.png
:alt: ERD tool window
:align: center
You can open multiple copies of the ERD tool in individual tabs simultaneously.
You can also generate an ERD from a database, schema or a table.
* The ERD for database will fetch all the tables from all the schemas of the database and plot them with foreign key links.
* The ERD for schema will fetch all the tables from a schema and plot them with foreign key links. If any table refers to a table in another
schema, then that link/foreign key will be removed.
* The ERD for table will fetch all the tables linked directly or indirectly to mentioned table. You can change the depth of traversal from :ref:`Preferences <preferences>`.
You can open multiple copies of the ERD tool in individual tabs simultaneously. To close a copy of the ERD tool, click the *X* in the upper-right hand corner of the tab bar.
Toolbar
*******
@@ -48,9 +41,9 @@ File Options
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
| Icon | Behavior | Shortcut |
+======================+===================================================================================================+================+
| *Open File* | Click the *Open File* icon to load a previously saved diagram. | Cmd/Ctrl + O |
| *Open File* | Click the *Open File* icon to load a previously saved diagram. | Ctrl + O |
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
| *Save* | Click the *Save* icon to perform a quick-save of a previously saved diagram, or to save the | Cmd/Ctrl + S |
| *Save* | Click the *Save* icon to perform a quick-save of a previously saved diagram, or to save the | Ctrl + S |
| | diagram to a file. | |
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
| *Save as* | Click the *Save As* to open a new browser dialog and specify a new location to save the diagram. | Ctrl + Shift + |
@@ -67,13 +60,13 @@ Export Options
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
| Icon | Behavior | Shortcut |
+======================+===================================================================================================+================+
| *Generate SQL* | Click the *Generate SQL* icon to generate the DDL SQL for the diagram and open a query tool | Option/Alt + |
| | with the generated SQL ready for execution. | Ctrl + S |
| *Generate SQL* | Click the *Generate SQL* icon to generate the DDL SQL for the diagram and open a query tool | Option + Ctrl +|
| | with the generated SQL ready for execution. | S |
| | You can select the option *With DROP Table* if you wish to have DROP Table DDL statements before | |
| | each CREATE Table DDL. You can see the option by clicking the down arrow beside the SQL button. | |
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
| *Download image* | Click the *Download image* icon to save the ERD diagram in a image formate | Option/Alt + |
| | | Ctrl + I |
| *Download image* | Click the *Download image* icon to save the ERD diagram in a image formate | Option + Ctrl +|
| | | I |
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
Editing Options
@@ -207,22 +200,6 @@ The table node shows table details in a graphical representation:
* you can click on the node and drag to move on the canvas.
* Upon double click on the table node or by clicking the edit button from the toolbar, the table dialog opens where you can change the table details. Refer :ref:`table dialog <table_dialog>` for information on different fields.
The One to One Link Dialog
***************************
.. image:: images/erd_11_dialog.png
:alt: ERD tool 1-1 dialog
:align: center
The one to one link dialog allows you to:
* Add a one to one relationship between two tables.
* *Local Table* is the table that references a table and has the *one* end point.
* *Local Column* the column that references.
* *Select Constraint* To implement one to one relationship, the *Local Column* must have primaty key or unique constraint. The default is a unique constraint. Please note that this field is visible only when the selected *Local Column* does not have either of the mentioned constraints.
* *Referenced Table* is the table that is being referred and has the *one* end point.
* *Referenced Column* the column that is being referred.
The One to Many Link Dialog
***************************
-91
View File
@@ -1,91 +0,0 @@
.. _export_data_using_query:
***************************************
`Export Data Using Query Dialog`:index:
***************************************
Use the *Export Data Using Query* dialog to copy data to a file.
The *Export Data Using Query* dialog organizes the export of data through the
*General*, *Options* and *Query* tabs.
.. image:: images/export_query_general.png
:alt: Export data using query dialog general tab
:align: center
Use the fields in the *General* tab to specify export preferences:
* Enter the name of the target file in the *Filename* field.
Optionally, select the *Browse* icon (ellipsis) to the right to navigate
into a directory and select a file.
* Use the drop-down listbox in the *Format* field to specify the file type.
Select:
* *binary* for a .bin file.
* *csv* for a .csv file.
* *text* for a .txt file.
* Use the drop-down listbox in the *Encoding* field to specify the type of
character encoding.
.. image:: images/export_query_options.png
:alt: Export data using query dialog options tab
:align: center
* Use the fields in the *Options* tab to specify additional information:
* Move the *Header* switch to the *Yes* position to include the table header
with the data rows. If you include the table header, the first row of the
file will contain the column names.
* If you are exporting data, specify the delimiter that will separate the
columns within the target file in the *Delimiter* field. The separating
character can be a colon, semicolon, a vertical bar, or a tab.
* Specify a quoting character used in the *Quote* field. Quoting can be
applied to string columns only (i.e. numeric columns will not be quoted)
or all columns regardless of data type. The character used for quoting can
be a single quote or a double quote.
* Specify a character that should appear before a data character that matches
the *QUOTE* value in the *Escape* field.
* Use the *NULL String* field to specify a string that will represent a null
value within the source or target file.
Click the *Query* tab to continue.
.. image:: images/export_query.png
:alt: Export data using query dialog query tab
:align: center
Use the fields in the *Query* tab to write the query that will be exported:
* Use the *Export Data Query* field to specifies A SELECT, VALUES, INSERT, UPDATE,
DELETE, or MERGE command whose results are to be copied .
* Use *Force Quote columns* field to forces quoting to be used for all non-NULL
values in each specified column. NULL output is never quoted. This is a creatable
select control. If you would like to quote all columns then provide only '*' in
the field.
After completing the *Export Data Using Query* dialog, click the *OK* button to
perform the export. pgAdmin will notify you when the background
process completes:
.. image:: images/export_query_complete.png
:alt: Export data using query completion notification
:align: center
Use the *View Processes* button on the notification to open the *Process
Watcher* and review detailed information about the execution of the command
that performed the export:
Use the **End Process** button to end the Export process.
.. image:: images/export_query_pw.png
:alt: Export data using query process watcher
:align: center
.. note:: If you are running *pgAdmin* in *Server Mode* you can click on the |sm_icon| icon in the process watcher window to open the file location in the Storage Manager. You can use the :ref:`Storage Manager <storage_manager>` to download the exported file on the client machine .
.. |sm_icon| image:: images/sm_icon.png
+1 -4
View File
@@ -23,9 +23,6 @@ Use the fields in the *General* tab to identify an extension:
* Use the drop-down listbox in the *Name* field to select the extension. Each
extension must have a unique name.
* Move the switch next to *Cascade?* towards right position to automatically
install any extensions that this extension depends on that are not already
installed.
* Store notes about the extension in the *Comment* field.
Click the *Definition* tab to continue.
@@ -58,7 +55,7 @@ the *Extension* dialog:
:align: center
The command creates the *adminpack* extension in the *public* schema. It is
version *2.0* of *adminpack*.
version *1.0* of *adminpack*.
* Click the *Info* button (i) to access online help.
* Click the *Save* button to save work.
+1 -3
View File
@@ -35,10 +35,8 @@ Click the *Definition* tab to continue.
Use the fields in the *Definition* tab to define the function:
* Move the *Custom return type?* switch to provide a user defined return type.
* Use the drop-down listbox next to *Return type* to select the data type
returned by the function, if any. If *Custom return type?* is enabled this field
will change to an input text field.
returned by the function, if any.
* Use the drop-down listbox next to *Language* to select the implementation
language. The default is *sql*.
* Use the fields in the *Arguments* to define an argument. Click the *Add*
Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 284 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Loaded 100 of 3695 files, more files were not shown because too many files have changed in this diff. Show more