push sheeet
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s

This commit is contained in:
Dark Steveneq
2025-10-09 14:15:47 +02:00
commit 646b892680
49168 changed files with 5897842 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
--- a/web/pgadmin/evaluate_config.py 2023-04-11 17:36:46.000000000 +0200
+++ b/web/pgadmin/evaluate_config.py 2023-04-14 09:54:33.496434314 +0200
@@ -76,6 +76,12 @@
custom_config_settings.update(config_system_settings)
except ImportError:
pass
+ except PermissionError:
+ print(f"Permission denied to open {str(system_config_dir + '/config_system.py')}. \n \
+ If you are running pgadmin4-desktopmode please make sure you disable \n \
+ the pgadmin NixOS module first. If you rely on settings in \n \
+ {str(system_config_dir + '/config_system.py')}, please check the correct permissions.")
+ pass
def evaluate_and_patch_config(config: dict) -> dict:

View File

@@ -0,0 +1,40 @@
diff --git a/pkg/pip/setup_pip.py b/pkg/pip/setup_pip.py
index c65795b10..e56b6a6f3 100644
--- a/pkg/pip/setup_pip.py
+++ b/pkg/pip/setup_pip.py
@@ -101,7 +101,7 @@ setup(
entry_points={
'console_scripts': ['pgadmin4=pgadmin4.pgAdmin4:main',
- 'pgadmin4-cli=pgadmin4.setup:main'],
+ 'pgadmin4-cli=pgadmin4.setup:app'],
},
)
diff --git a/web/pgadmin/model/__init__.py b/web/pgadmin/model/__init__.py
index 4c36dd1..a492365 100644
--- a/web/pgadmin/model/__init__.py
+++ b/web/pgadmin/model/__init__.py
@@ -23,7 +23,6 @@ from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.ext.mutable import MutableDict
import sqlalchemy.types as types
import uuid
-import config
##########################################################################
#
@@ -41,10 +40,12 @@ SCHEMA_VERSION = 35
#
##########################################################################
+# hardcode poolsize and max_overflow due to a circular import (config imports model,
+# model now tries to import config)
db = SQLAlchemy(
engine_options={
- 'pool_size': config.CONFIG_DATABASE_CONNECTION_POOL_SIZE,
- 'max_overflow': config.CONFIG_DATABASE_CONNECTION_MAX_OVERFLOW})
+ 'pool_size': 5,
+ 'max_overflow': 100})
USER_ID = 'user.id'

View File

@@ -0,0 +1,43 @@
{
"@img/sharp-darwin-arm64@npm:0.34.3": "c5ed848f3cecaced50be6d1805cfb23586299f119a9917880c3f590b7ddd54b930e493c73480d13452503101168f92a0dc85ccc5b19b330470a5fe69e1fcf206",
"@img/sharp-darwin-x64@npm:0.34.3": "7e892ca052c8eb9002fb6e86e0a7893aff909e0f203f6ada7a67f4ca7e189631203189700a498ab3401280f5c042f5b08c3f7bc713192a97228864e9c4527743",
"@img/sharp-libvips-darwin-arm64@npm:1.2.0": "35d0d475da11fdfd7f5b5f7f1de4376ac04de6d6e0879833f71b2fa305b9d58c96ee464cf234060506ef9b1e2eabe5c09c302e818f8899b2ced1fcb7f85c01eb",
"@img/sharp-libvips-darwin-x64@npm:1.2.0": "e853f3b8a19d815af553b703e1d6d70abec525c61f3f19cc8a9d50d3749bc563b7f255307709b7c0836f76b110948489d3a9a3932d2fbc1775a083a56979bf56",
"@img/sharp-libvips-linux-arm64@npm:1.2.0": "ec53e3e62c9351e28ea0e4c26a1d8ab257ac003e8184b1757b79c2a240baecec2452e0dbca08c8227fd01c498801c428230261fdb86198e873e07347d741c3c7",
"@img/sharp-libvips-linux-arm@npm:1.2.0": "a2f9822cb2ac5b315f2a02c59ebdb235f6c45251207795f83f1a92db696a9deced882dc752bdddd1eab98da5d7d1d1e9968ae142313ff09960b7ae30b760ba07",
"@img/sharp-libvips-linux-ppc64@npm:1.2.0": "e90e1c46e6020f3a96562dd526549af2fabff46a1576f2e7af003be4b5efeb6fc8caa8e303e2eeb58129c938be31e0bf067736072479f2298152230cecd5fce4",
"@img/sharp-libvips-linux-s390x@npm:1.2.0": "2cf62c8b285effd3a3ec8854bc5fd78af162459294a6d9847af33d6bdeacfbad81cb0bec68b76889b148306a8a28492b4d44e6c96b778d0879349180191d758d",
"@img/sharp-libvips-linux-x64@npm:1.2.0": "ca342d07d1f0d22559f26bdcc0354f87a845ef19c69c22e37d9e23d71de15159f50d01183e8e7ea75e0ccfb6c7be9406741414a1f3534ec4aba10e51f0d7dffd",
"@img/sharp-libvips-linuxmusl-arm64@npm:1.2.0": "aa248f0c8602b0a17fdb5c1b00ce7dbb09f05b94a45ee7f226eaebfa459d4ee3fd407c62244902e15699927943c511a7fe045b575185ecc9b585987b64ae6cb1",
"@img/sharp-libvips-linuxmusl-x64@npm:1.2.0": "811071647c5129a1ead1e54b8f4672061bbbc1177d1d49127c755848e81f21bcbf5bf438c0e53118e731be5e000235904de3b5cf305053de015b56609a059371",
"@img/sharp-linux-arm64@npm:0.34.3": "3e8d53f54789b3d98dc14bf696917ff50f8c8c355aedc0dc90890ca764259bafec7390eabe262ce843eab8b74e0c128858128ce614e0b85dcba28d6b9ce3ea3f",
"@img/sharp-linux-arm@npm:0.34.3": "563c48ee129e5f3c6afed71ffba9c79a4369e7967e7b3a4a97d9b1e5aefa511873d3cd7a568ec42cd5968ea76f89ab93ee65c1363170af50559b620bfdb89d5b",
"@img/sharp-linux-ppc64@npm:0.34.3": "5973f8c522f33f826efff4052e253ec554882db54421a00f2636594e9ccc27e16dfb865f8de101678cb07b1a2d31b516ce4a88b65132ecc1101d07b6cc1bd571",
"@img/sharp-linux-s390x@npm:0.34.3": "284d2fcd9cc297b27ec135b0c63d5a6170cb17be378d92c75ec19b6034e7ed5801cab04ca17d445a80b073d67c4f9fe809334f5d4edf533c2d81d66d5d882ef3",
"@img/sharp-linux-x64@npm:0.34.3": "a370c04ca6d4145e6d6529d84b133d80e88d408e4483ba168e5993e5b4c0cbd2db57d4e53aca0bfa43320b571ff8bd70c22d8d7f5fadb5e5df1ded91393ae71d",
"@img/sharp-linuxmusl-arm64@npm:0.34.3": "c63d8afda1a7d4810bdc19473b6235313d923f8763a8dfc182465b63b8e4805769a9e92a8b2136f0235e07ae1b1ab63adfa904bb833d64f0495108dfc180a475",
"@img/sharp-linuxmusl-x64@npm:0.34.3": "9500e8f5d0ab96395a8d522920f25d4376d928ec58e88b3a5dbce5249c26efec046d20845bee8e9233fbff5287cfa979cfc079bc608342d257a6827be6cc0322",
"@img/sharp-wasm32@npm:0.34.3": "840dd97d3151b2189c3d0ee0746c139cbdd0441d5d5dfc87d2dd9970fc2c5448a3815c3110c64009998d165ca6dc7b5d58811b98b2c1e4ab0a1eb5ad97275f1e",
"@img/sharp-win32-arm64@npm:0.34.3": "adc7d18a8334ca1fea09c877dc9493e75a9018f73dc63038c8ccef7535a272c0aa3c2a9867a49a223703747149fb1fe57ef8580dd6098f0f33c602a876a48e1b",
"@img/sharp-win32-ia32@npm:0.34.3": "eef220adf1240429f72d9a9aadc22ccb741889785fa025396cfed41603364990b5f3841cee4d60525b22e65f36c7416297581300c873268fe2b7bb67087ada73",
"@img/sharp-win32-x64@npm:0.34.3": "5a5d2624bea7a31393b5a89738ad22a2b020a67f5e5b9eb40063510b514e8516b0fb4e320ff9eb1d32fa2ee3b4c3a0387333d051da28d93957116cbbd63b5fe0",
"@unrs/resolver-binding-android-arm-eabi@npm:1.11.1": "04dd38b694c1680bfec192b499e188700398a414886a08a8a7c72815db56ac147df03d88c73ff6fff7ac3e0a01dc41978054b3622b49463e0d684c5168557fcc",
"@unrs/resolver-binding-android-arm64@npm:1.11.1": "763626adc34dd2b4af677b5ced6493e7b2b1935351a5c9137f1c9561d11faf97b94015e6876e57e85c33ff563564314c92c0882a4780a57f2225cbbd779a695d",
"@unrs/resolver-binding-darwin-arm64@npm:1.11.1": "03b477fdfec55dbabe488fe0962417bddaa38b028d2670053469f1d24163907b097aac15b565f6974449bee398a38d5e3e1525f2b515ce57e243149021b7aa2f",
"@unrs/resolver-binding-darwin-x64@npm:1.11.1": "3aeff9aaf4ef6d786c517d9017b5c41b0af180cdbaf705d08e6e5b5ba9d5410d28ef6754c5f8a865f0bb5efd460dc1c4156b5e2201032c0a604a6c734ddbc848",
"@unrs/resolver-binding-freebsd-x64@npm:1.11.1": "b9f7a3e03db9edfc3480db056dd25229f901f21840ee768b69f349b66676a995a404e60617b3bcbd984f57f2199eb352dd6fad0f4420c3084ceef5e3293cdad5",
"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1": "4d03b8bcef5a90586a846d6d332f39cee211f3d330b6e10036969894b6ecfb70b047265e985d572def93b84f38621dec30e4b4bb42699dd784adbae3ca5e7bea",
"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1": "9f3a3c2e5e6418a5a78294fa042824f5c270e993c1a99e82dd6b0ee0d2869929bb62dd154a0acc1e4ef16273e8073e0e257901208c062e6bdd49d586d07bb419",
"@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1": "05228d6fd669f404f0e3164ccf2430a52cc7b3bbd211367527b5d726b1220a1816bab70159bed55694d9b7543553f6002379e7e186c605d7055c5156977da022",
"@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1": "8115802143396d4992bb2f6f0acb6e8bc141a57864c5fd84cbc70577c25784cb08dd163b753b1fc0decc02582cf4cb1e30d04faaf763048babbbe706bdfa26ea",
"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1": "50f9f54b2eafb1ea023671cc3070692b2b15f6e49105b08b3f588033e65e8de4183f76e080b798de710f9c41df1bf5515c01868866a21cbd35db179b4ac9f23b",
"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1": "8f8222f938cc2025ed3971e0e303f4ff5aa5df74474b835442830ebe942d050ba3f8bbb67095da64099e6fc69bb5bb73ca63db54e059c95e51aa8909880fb207",
"@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1": "5c8987f7dcaf38ef27ec67dcf118141502d5ac75d28429da6d1b7037f3e5a5351f32f55094472fde11784e65d01f1da4dafd7c0fdca28423fbc8de2c2c51d16c",
"@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1": "17aed6472880a82e5a05147a55efb6f0d968f5dcb584845addf89acec3824534ee741d4b162686124d17daf9131373c469c57843996a5ee2db4f1b1b55e1d11e",
"@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1": "9495c08fc42f2d4a33e33c64adbcbf51588cd7ea07478eacb2e9143d955a760122440f4a3ac48b086cc2563ca2b2464d72ed0336fcc20c0a89ddc356f956eda8",
"@unrs/resolver-binding-linux-x64-musl@npm:1.11.1": "c84fadfee66eeebd16eb7cce7c4b5a1ec90260c724d0064111e9f43a1341ebfede61627cb68fd3a9735e4c10b25606fb472a4d13143cc569867b80d85c4a9824",
"@unrs/resolver-binding-wasm32-wasi@npm:1.11.1": "655a3990ed9b238e8f0c4858f87ca84bd3d81db300f7730c885162333055170e11207af7789ff38f619e261178718f6977729e42ce7978cc9e6ac7b6d93822d5",
"@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1": "983f800ff8b5181247a7d460ab5c9704cd425d0182e93290f69fb969d93efe17be6a27c22b97546d36e9a9d9aeda96d5f753bc938b3d9a00f32c10fc228ce5a9",
"@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1": "383d639e3b08fc9e4ba18127ef55610172d2d1d6adb83e1466fff2b223552384cdc6217051f749829e0c90a757ea5631e8c4ad2cfeb59bdee2bb033fbd526854",
"@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1": "c862561f6495c0dbffb94d421e5727b25c1b61d98e22383bff23e6719a6c0125bb0b7df3be7220f5480bf54f5a605ea572f10fff1cce14fda24d42e396559940"
}

View File

@@ -0,0 +1,277 @@
{
lib,
python3,
fetchFromGitHub,
zlib,
nixosTests,
postgresqlTestHook,
postgresql,
yarn-berry_4,
nodejs,
autoconf,
automake,
libtool,
libpng,
nasm,
pkg-config,
stdenv,
server-mode ? true,
}:
let
pname = "pgadmin";
version = "9.8";
yarnHash = "sha256-NvQlrDXn9sa4MpytFYPsC4bKO8Thx/MuqG8M6VIa2ig=";
src = fetchFromGitHub {
owner = "pgadmin-org";
repo = "pgadmin4";
rev = "REL-${lib.versions.major version}_${lib.versions.minor version}";
hash = "sha256-gnVrMuxWV7lAol1gyONbhtuUL4EEOfOPkRUM2esMgi0=";
};
# keep the scope, as it is used throughout the derivation and tests
# this also makes potential future overrides easier
pythonPackages = python3.pkgs.overrideScope (final: prev: { });
# don't bother to test kerberos authentication
# skip tests on macOS which fail due to an error in keyring, see https://github.com/NixOS/nixpkgs/issues/281214
skippedTests = builtins.concatStringsSep "," (
[ "browser.tests.test_kerberos_with_mocking" ]
++ lib.optionals stdenv.hostPlatform.isDarwin [
"browser.server_groups.servers.tests.test_all_server_get"
"browser.server_groups.servers.tests.test_check_connect"
"browser.server_groups.servers.tests.test_check_ssh_mock_connect"
"browser.server_groups.servers.tests.test_is_password_saved"
]
);
in
pythonPackages.buildPythonApplication rec {
inherit pname version src;
missingHashes = ./missing-hashes.json;
offlineCache = yarn-berry_4.fetchYarnBerryDeps {
inherit missingHashes;
src = src + "/web";
hash = yarnHash;
};
# from Dockerfile
CPPFLAGS = "-DPNG_ARM_NEON_OPT=0";
format = "setuptools";
patches = [
# Expose setup.py for later use
./expose-setup.py.patch
# check for permission of /etc/pgadmin/config_system and don't fail
./check-system-config-dir.patch
];
postPatch = ''
# patching Makefile, so it doesn't try to build sphinx documentation here
# (will do so later)
substituteInPlace Makefile \
--replace-fail 'LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 $(MAKE) -C docs/en_US -f Makefile.sphinx html' "true"
# fix document which refers a non-existing document and fails
substituteInPlace docs/en_US/contributions.rst \
--replace-fail "code_snippets" ""
# relax dependencies
sed 's|==|>=|g' -i requirements.txt
# fix extra_require error with "*" in match
sed 's|*|0|g' -i requirements.txt
substituteInPlace pkg/pip/setup_pip.py \
--replace-fail "req = req.replace('psycopg[c]', 'psycopg[binary]')" "req = req"
${lib.optionalString (!server-mode) ''
substituteInPlace web/config.py \
--replace-fail "SERVER_MODE = True" "SERVER_MODE = False"
''}
'';
dontYarnBerryInstallDeps = true;
preBuild = ''
# Adapted from pkg/pip/build.sh
echo Creating required directories...
mkdir -p pip-build/pgadmin4/docs
echo Building the documentation
cd docs/en_US
sphinx-build -W -b html -d _build/doctrees . _build/html
# Build the clean tree
cd ..
cp -r * ../pip-build/pgadmin4/docs
for DIR in `ls -d ??_??/`
do
if [ -d ''${DIR}_build/html ]; then
mkdir -p ../pip-build/pgadmin4/docs/''${DIR}_build
cp -R ''${DIR}_build/html ../pip-build/pgadmin4/docs/''${DIR}_build
fi
done
cd ../
echo Building the web frontend...
cd web
(
export LD=$CC # https://github.com/imagemin/optipng-bin/issues/108
yarnBerryConfigHook
)
yarn webpacker
cp -r * ../pip-build/pgadmin4
# save some disk space
rm -rf ../pip-build/pgadmin4/node_modules
cd ..
echo Creating distro config...
echo HELP_PATH = \'../../docs/en_US/_build/html/\' > pip-build/pgadmin4/config_distro.py
echo MINIFY_HTML = False >> pip-build/pgadmin4/config_distro.py
echo Creating manifest...
echo recursive-include pgadmin4 \* > pip-build/MANIFEST.in
echo Building wheel...
cd pip-build
# copy non-standard setup.py to local directory
# so setuptools-build-hook can call it
cp -v ../pkg/pip/setup_pip.py setup.py
'';
nativeBuildInputs = with pythonPackages; [
cython
pip
sphinx
yarn-berry_4
yarn-berry_4.yarnBerryConfigHook
nodejs
];
buildInputs = [
zlib
pythonPackages.wheel
];
propagatedBuildInputs = with pythonPackages; [
flask
flask-login
flask-mail
flask-migrate
flask-sqlalchemy
flask-wtf
flask-compress
passlib
pytz
simplejson
sqlparse
wtforms
flask-paranoid
psutil
psycopg
python-dateutil
sqlalchemy
itsdangerous
flask-security
bcrypt
cryptography
sshtunnel
ldap3
flask-babel
gssapi
flask-socketio
eventlet
user-agents
wheel
authlib
qrcode
pillow
pyotp
botocore
boto3
azure-mgmt-subscription
azure-mgmt-rdbms
azure-mgmt-resource
azure-identity
sphinxcontrib-youtube
dnspython
google-auth-oauthlib
google-api-python-client
keyring
typer
rich
jsonformatter
libgravatar
setuptools
];
passthru.tests = {
inherit (nixosTests) pgadmin4;
};
nativeCheckInputs = [
postgresqlTestHook
postgresql
pythonPackages.testscenarios
pythonPackages.selenium
];
# sandboxing issues on aarch64-darwin, see https://github.com/NixOS/nixpkgs/issues/198495
doCheck = !postgresqlTestHook.meta.broken;
checkPhase = ''
runHook preCheck
## Setup ##
# pgadmin needs a home directory to save the configuration
export HOME=$TMPDIR
cd pgadmin4
# set configuration for postgresql test
# also ensure Server Mode is set to false. If not, the tests will fail, since pgadmin expects read/write permissions
# in /var/lib/pgadmin and /var/log/pgadmin
# see https://github.com/pgadmin-org/pgadmin4/blob/fd1c26408bbf154fa455a49ee5c12895933833a3/web/regression/runtests.py#L217-L226
cp -v regression/test_config.json.in regression/test_config.json
substituteInPlace regression/test_config.json --replace-fail "localhost" "$PGHOST"
substituteInPlace regression/runtests.py --replace-fail "builtins.SERVER_MODE = None" "builtins.SERVER_MODE = False"
## Browser test ##
python regression/runtests.py --pkg browser --exclude ${skippedTests}
## Reverse engineered SQL test ##
python regression/runtests.py --pkg resql
runHook postCheck
'';
meta = {
description = "Administration and development platform for PostgreSQL${
lib.optionalString (!server-mode) ". Desktop Mode"
}";
longDescription = ''
pgAdmin 4 is designed to meet the needs of both novice and experienced Postgres users alike,
providing a powerful graphical interface that simplifies the creation, maintenance and use of database objects.
${
if server-mode then
''
This version is build with SERVER_MODE set to True (the default). It will require access to `/var/lib/pgadmin`
and `/var/log/pgadmin`. This is the default version for the NixOS module `services.pgadmin`.
This should NOT be used in combination with the `pgadmin4-desktopmode` package as they will interfere.
''
else
''
This version is build with SERVER_MODE set to False. It will require access to `~/.pgadmin/`. This version is suitable
for single-user deployment or where access to `/var/lib/pgadmin` cannot be granted or the NixOS module cannot be used (e.g. on MacOS).
This should NOT be used in combination with the NixOS module `pgadmin` as they will interfere.
''
}
'';
homepage = "https://www.pgadmin.org/";
license = lib.licenses.mit;
changelog = "https://www.pgadmin.org/docs/pgadmin4/latest/release_notes_${lib.versions.major version}_${lib.versions.minor version}.html";
maintainers = with lib.maintainers; [ gador ];
mainProgram = "pgadmin4";
platforms = lib.platforms.unix;
};
}

View File

@@ -0,0 +1,69 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl wget jq common-updater-scripts yarn-berry_4 yarn-berry_4.yarn-berry-fetcher
set -eu -o pipefail
TMPDIR=/tmp/pgadmin-update-script
cleanup() {
if [ -e $TMPDIR/.done ]
then
rm -rf "$TMPDIR"
else
echo
read -p "Script exited prematurely. Do you want to delete the temporary directory $TMPDIR ? " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]
then
rm -rf "$TMPDIR"
fi
fi
}
trap cleanup EXIT
scriptDir=$(cd "${BASH_SOURCE[0]%/*}" && pwd)
nixpkgs=$(realpath "$scriptDir"/../../../..)
newest_version="$(curl -s https://www.pgadmin.org/versions.json | jq -r .pgadmin4.version)"
old_version=$(nix-instantiate --eval -E "(import \"$nixpkgs\" { config = {}; overlays = []; }).pgadmin4.version" | tr -d '"')
url="https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v${newest_version}/source/pgadmin4-${newest_version}.tar.gz"
if [[ $newest_version == $old_version ]]; then
printf "Already at latest version $newest_version\n"
exit 0
fi
printf "New version: $newest_version \n"
# don't use mktemp, so if a network error happens, we can resume from there
mkdir -p $TMPDIR
pushd $TMPDIR
wget -c $url
tar -xzf "pgadmin4-$newest_version.tar.gz"
cd "pgadmin4-$newest_version/web"
printf "Will now generate the hash. This will download the packages to the nix store and also take some time\n"
yarn-berry-fetcher missing-hashes yarn.lock > missing-hashes.json
if [[ $(wc -l <missing-hashes.json) -ge 2 ]]; then
YARN_HASH=$(yarn-berry-fetcher prefetch yarn.lock missing-hashes.json)
else
YARN_HASH=$(yarn-berry-fetcher prefetch yarn.lock)
fi
printf "Done\n"
if [[ -f missing-hashes.json ]]; then
if [[ ! -f "$nixpkgs/pkgs/by-name/pg/pgadmin4/missing-hashes.json" ]]; then
printf "PLEASE NOTE: FIRST TIME OF FINDING MISSING HASHES!"
printf "Please add \"missingHashes = ./missing-hashes.json\" to pgadmin derivation"
fi
printf "Copy files to nixpkgs\n"
cp missing-hashes.json "$nixpkgs/pkgs/by-name/pg/pgadmin4"
fi
printf "Done\n"
popd
sed -i -E -e "s#yarnHash = \".*\"#yarnHash = \"$YARN_HASH\"#" ${scriptDir}/package.nix
update-source-version pgadmin4 "$newest_version" --print-changes
touch $TMPDIR/.done