u-boot/scripts/make_pip.sh
Simon Glass 01feeec559 tools/make_pip: Add mention of u_boot_pylib in tool list
This is not a tool but it is handled by the script, so update the help
to include it.

Signed-off-by: Simon Glass <sjg@chromium.org>
2023-12-13 18:39:06 -05:00

128 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
# SPDX-License-Identifier: GPL-2.0+
# Packages a U-Boot tool
#
# Usage: make_pip.sh <tool_name> [--real]
#
# Where tool_name is one of patman, buildman, dtoc, binman, u_boot_pylib
#
# and --real means to upload to the real server (otherwise the test one is used)
#
# The username for upload is always __token__ so set TWINE_PASSWORD to your
# password before running this script:
#
# export TWINE_PASSWORD=pypi-xxx
#
# To test your new packages:
#
# pip install -i https://test.pypi.org/simple/ <tool_name>
#
# DO NOT use patman or binman
set -xe
# Repo to upload to
repo="--repository testpypi"
# Non-empty to do the actual upload
upload=1
# Non-empty to delete files used for testing
delete_testfiles=1
tool="$1"
shift
flags="$*"
if [[ "${tool}" =~ ^(patman|buildman|dtoc|binman|u_boot_pylib)$ ]]; then
echo "Building dist package for tool ${tool}"
else
echo "Unknown tool ${tool}: use u_boot_pylib, patman, buildman, dtoc or binman"
exit 1
fi
for flag in "${flags}"; do
if [ "${flag}" == "--real" ]; then
echo "Using real server"
repo=
fi
if [ "${flag}" == "-n" ]; then
echo "Doing dry run"
upload=
fi
done
if [ -n "${upload}" ]; then
if [ -z "${TWINE_PASSWORD}" ]; then
echo "Please set TWINE_PASSWORD to your password and retry"
exit 1
fi
fi
if [[ "${tool}" =~ ^(patman|u_boot_pylib)$ ]]; then
# Leave test_util.py and patman test files alone
delete_testfiles=
fi
# Create a temp dir to work in
dir=$(mktemp -d)
# Copy in some basic files
cp -v tools/${tool}/pyproject.toml ${dir}
cp -v Licenses/gpl-2.0.txt ${dir}/LICENSE
readme="tools/${tool}/README.*"
# Copy in the README, dropping some Sphinx constructs that PyPi doesn't like
cat ${readme} | sed -E 's/:(doc|ref):`.*`//; /sectionauthor/d; /toctree::/d' \
> ${dir}/$(basename ${readme})
# Copy the top-level Python and doc files
dest=${dir}/src/${tool}
mkdir -p ${dest}
cp -v tools/$tool/{*.py,*.rst} ${dest}
# Copy over the subdirectories, including any sub files. Drop any cache files
# and other such things
pushd tools/${tool}
for subdir in $(find . -maxdepth 1 -type d | \
grep -vE "(__pycache__|home|usr|scratch|\.$|pyproject)"); do
pathname="${dest}/${subdir}"
echo "Copy ${pathname}"
cp -a ${subdir} ${pathname}
done
popd
# Remove cache files that accidentally made it through
find ${dest} -name __pycache__ -type f -exec rm {} \;
find ${dest} -depth -name __pycache__ -exec rmdir 112 \;
# Remove test files
if [ -n "${delete_testfiles}" ]; then
rm -rfv ${dest}/*test*
fi
mkdir ${dir}/tests
cd ${dir}
# Make sure the tools are up to date
python3 -m pip install --upgrade build
python3 -m pip install --upgrade twine
# Build the PyPi package
python3 -m build
echo "Completed build of ${tool}"
# Use --skip-existing to work even if the version is already present
if [ -n "${upload}" ]; then
echo "Uploading from ${dir}"
python3 -m twine upload ${repo} -u __token__ dist/*
echo "Completed upload of ${tool}"
fi
rm -rf "${dir}"
echo -e "done\n\n"