u-boot/scripts/make_pip.sh
Simon Glass f12465ce91 tools: Keep test_util and patman test files in the pip release
The test_util module is actually imported by some tools, e.g. binman so
include it in the pip release.

The patman tool uses its test code when starting up, so keep that too.

Show a list of deleted files so it is clear what is happening.

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 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"