#!/bin/bash # SPDX-License-Identifier: GPL-2.0+ # Packages a U-Boot tool # # Usage: make_pip.sh [--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/ # # 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"