Files
pgadmin4/pkg/pip/build.sh
T
Ashesh Vashi 1993109475 fix: pin Yarn version from packageManager field in remaining build scripts (#10175)
#10156 fixed CI build failures caused by Yarn 4.x fetching a newer patch
with different builtin compat hashes, breaking --immutable lockfile
validation, but only patched pkg/linux/build-functions.sh and the GHA
workflows. Make.bat, pkg/mac/build-functions.sh, pkg/pip/build.sh, and
Dockerfile still hardcoded 'yarn set version 4', which is what broke the
Windows Jenkins snapshot build (job 1669).
2026-07-23 13:06:29 +05:30

132 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2026, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
#########################################################################
# Runtime checks
if [ ! -d runtime ] && [ ! -d web ]; then
echo This script must be run from the top-level directory of the source tree.
exit 1
fi
if [ ! -d .git ] && [ ! -f .git/config ]; then
echo This script must be run from a git checkout of the source tree.
exit 1
fi
# Get the required package info
APP_RELEASE=$(grep "^APP_RELEASE" web/version.py | cut -d"=" -f2 | sed 's/ //g')
APP_REVISION=$(grep "^APP_REVISION" web/version.py | cut -d"=" -f2 | sed 's/ //g')
APP_NAME=$(grep "^APP_NAME" web/branding.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //')
APP_LONG_VERSION=${APP_RELEASE}.${APP_REVISION}
APP_SUFFIX=$(grep "^APP_SUFFIX" web/version.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g")
if [ -n "${APP_SUFFIX}" ]; then
export APP_LONG_VERSION=${APP_LONG_VERSION}-${APP_SUFFIX}
fi
# Output basic details to show we're working
echo Building tarballs for "${APP_NAME}" version "${APP_LONG_VERSION}"...
# Create/clearout the build directory
echo Creating/cleaning required directories...
if [ ! -d pip-build ]; then
mkdir pip-build
fi
if [ -d pip-build/pgadmin4 ]; then
rm -rf pip-build/pgadmin4
fi
mkdir pip-build/pgadmin4
mkdir pip-build/pgadmin4/docs
# Build the clean tree
cd web || exit
for FILE in $(git ls-files|grep -v regression)
do
echo Adding "${FILE}"
# We use tar here to preserve the path, as Mac (for example) doesn't support cp --parents
# shellcheck disable=SC2164
tar cf - "${FILE}" | (cd ../pip-build/pgadmin4; tar xf -)
done
YARN_VERSION=$(node -p "require('./package.json').packageManager.split('@')[1]")
if [ -z "${YARN_VERSION}" ]; then
echo "ERROR: Could not determine Yarn version from package.json packageManager field."
exit 1
fi
yarn set version berry
yarn set version "${YARN_VERSION}"
yarn install
yarn run bundle
# Copy the commit_hash file, it doesn't show up in git ls-files
echo Adding "commit_hash"
tar cf - "commit_hash" | (cd ../pip-build/pgadmin4; tar xf -)
for FILE in pgadmin/static/js/generated/*
do
echo Adding "${FILE}"
# shellcheck disable=SC2164
tar cf - "${FILE}" | (cd ../pip-build/pgadmin4; tar xf -)
done
cd ../docs || exit
for FILE in $(git ls-files)
do
echo Adding "${FILE}"
# We use tar here to preserve the path, as Mac (for example) doesn't support cp --parents
# shellcheck disable=SC2164
tar cf - "${FILE}" | (cd ../pip-build/pgadmin4/docs; tar xf -)
done
for DIR in ./??_??/
do
if [ -d "${DIR}"/_build/html ]; then
mkdir -p "../pip-build/pgadmin4/docs/${DIR}/_build"
cp -R "${DIR}/_build/html" "../pip-build/pgadmin4/docs/${DIR}/_build"
fi
done
cd ../
for FILE in LICENSE README.md
do
echo Adding ${FILE}
# We use tar here to preserve the path, as Mac (for example) doesn't support cp --parents
# shellcheck disable=SC2164
tar cf - ${FILE} | (cd pip-build/pgadmin4; tar xf -)
done
# Generating SBOM
echo Generating SBOM...
cp requirements.txt pip-build/pgadmin4
syft pip-build/pgadmin4 -o cyclonedx-json > pip-build/pgadmin4/sbom.json
rm pip-build/pgadmin4/requirements.txt
# Create the distro config
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
# Create the manifest
echo Creating manifest...
echo recursive-include pgadmin4 \* > pip-build/MANIFEST.in
# Run the build
echo Building wheel...
cd pip-build || exit
python ../pkg/pip/setup_pip.py bdist_wheel
cd ../
# Get the build
if [ ! -d dist ]; then
mkdir dist
fi
cp pip-build/dist/*.whl dist/