macOS build (build-functions.sh): _notarize_pkg only printed "Notarization failed." on rejection, giving no indication why. Print the actual REQUEST_STATUS and fetch the full notary log via `notarytool log` so future failures are actually diagnosable from the Jenkins console instead of just "status: Invalid". Linux build (build-functions.sh): _create_python_virtualenv creates venvs with --system-site-packages, which pulls in the entire system site-packages dir - including any stale, improperly-uninstalled package's namespace-package .pth hook. That legacy pip/setuptools mechanism runs at interpreter startup, before core stdlib is guaranteed to resolve; a leftover sphinxcontrib-jsmath nspkg.pth on the el-10 build node corrupted sys.path early enough to break pip's own subprocess bootstrap, failing the whole build with a misleading "No module named 'importlib'"/"'traceback'" error (pgadmin4-rpm-build #176). Remove that exact known-broken file before creating the venv - not every *-nspkg.pth, since this touches the *system* Python install on a build node shared by other jobs, and any other such file could still be load-bearing for something unrelated. --system-site-packages itself is left untouched - it's required so venvs can see OS-provided packages not available as clean pip wheels on every target platform.
pgAdmin macOS Builds
Required Packages
Either build the sources or get them from macports or similar:
-
Yarn & NodeJS
-
PostgreSQL 12 or above from http://www.postgresql.org/
-
Python 3.6+ (required for building). The build environment should run this version of python in response to the python command.
Building
-
To bundle a different version of Python from the default of 3.13.1, set the PGADMIN_PYTHON_VERSION environment variable, e.g:
export PGADMIN_PYTHON_VERSION=3.13.11 -
If a path different from the default of /usr/local/pgsql for the PostgreSQL installation has been used, set the PGADMIN_POSTGRES_DIR environment variable appropriately, e.g:
export PGADMIN_POSTGRES_DIR=/opt/local/pgsql -
If you want to codesign the appbundle, copy codesign.conf.in to codesign.conf and set the values accordingly.
-
If you want to notarize the appbundle, copy notarization.conf.in to notarization.conf and set the values accordingly. Note that notarization will fail if the code isn't signed.
-
To build only DMG file, go to pgAdmin4 source root directory and execute:
make appbundleTo build both DMG and ZIP files, go to pgAdmin4 source root directory and execute:
make appbundle BUILD_OPTS="--zip"This will create the python virtual environment and install all the required python modules mentioned in the requirements file using pip, build the runtime code and finally create the app bundle and the DMG and/or ZIP in ./dist directory.