mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
134 lines
3.2 KiB
Bash
Executable File
134 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
BCYAN="\033[1;36m"
|
|
BYELLOW="\033[1;33m"
|
|
BGREEN="\033[1;32m"
|
|
BRED="\033[1;31m"
|
|
RED="\033[31m"
|
|
RESET="\033[0m"
|
|
|
|
function git_show {
|
|
git show -s --format=oneline --abbrev-commit "$1" | cat
|
|
}
|
|
|
|
if [[ ! -z "${VIRTUAL_ENV}" ]]; then
|
|
# we can't just call 'deactivate' because this function is not exported
|
|
# to the environment of this script from the bash process that runs the script
|
|
echo -e "${BRED}A virtual environment is activated. Please deactivate it before proceeding.${RESET}"
|
|
exit -1
|
|
fi
|
|
|
|
cd "$(dirname "$0")"
|
|
|
|
VERSION=$(
|
|
cd ..
|
|
python3 -c "from invokeai.version import __version__ as version; print(version)"
|
|
)
|
|
VERSION="v${VERSION}"
|
|
|
|
if [[ ! -z ${CI} ]]; then
|
|
echo
|
|
echo -e "${BCYAN}CI environment detected${RESET}"
|
|
echo
|
|
else
|
|
echo
|
|
echo -e "${BYELLOW}This script must be run from the installer directory!${RESET}"
|
|
echo "The current working directory is $(pwd)"
|
|
read -p "If that looks right, press any key to proceed, or CTRL-C to exit..."
|
|
echo
|
|
fi
|
|
|
|
echo -e "${BGREEN}HEAD${RESET}:"
|
|
git_show HEAD
|
|
echo
|
|
|
|
# ---------------------- FRONTEND ----------------------
|
|
|
|
pushd ../invokeai/frontend/web >/dev/null
|
|
echo "Installing frontend dependencies..."
|
|
echo
|
|
pnpm i --frozen-lockfile
|
|
echo
|
|
if [[ ! -z ${CI} ]]; then
|
|
echo "Building frontend without checks..."
|
|
# In CI, we have already done the frontend checks and can just build
|
|
pnpm vite build
|
|
else
|
|
echo "Running checks and building frontend..."
|
|
# This runs all the frontend checks and builds
|
|
pnpm build
|
|
fi
|
|
echo
|
|
popd
|
|
|
|
# ---------------------- BACKEND ----------------------
|
|
|
|
echo
|
|
echo "Building wheel..."
|
|
echo
|
|
|
|
# install the 'build' package in the user site packages, if needed
|
|
# could be improved by using a temporary venv, but it's tiny and harmless
|
|
if [[ $(python3 -c 'from importlib.util import find_spec; print(find_spec("build") is None)') == "True" ]]; then
|
|
pip install --user build
|
|
fi
|
|
|
|
rm -rf ../build
|
|
|
|
python3 -m build --outdir dist/ ../.
|
|
|
|
# ----------------------
|
|
|
|
echo
|
|
echo "Building installer zip files for InvokeAI ${VERSION}..."
|
|
echo
|
|
|
|
# get rid of any old ones
|
|
rm -f *.zip
|
|
rm -rf InvokeAI-Installer
|
|
|
|
# copy content
|
|
mkdir InvokeAI-Installer
|
|
for f in templates *.txt *.reg; do
|
|
cp -r ${f} InvokeAI-Installer/
|
|
done
|
|
mkdir InvokeAI-Installer/lib
|
|
cp lib/*.py InvokeAI-Installer/lib
|
|
|
|
# Install scripts
|
|
# Mac/Linux
|
|
cp install.sh.in InvokeAI-Installer/install.sh
|
|
chmod a+x InvokeAI-Installer/install.sh
|
|
|
|
# Windows
|
|
cp install.bat.in InvokeAI-Installer/install.bat
|
|
cp WinLongPathsEnabled.reg InvokeAI-Installer/
|
|
|
|
FILENAME=InvokeAI-installer-$VERSION.zip
|
|
|
|
# Zip everything up
|
|
zip -r ${FILENAME} InvokeAI-Installer
|
|
|
|
echo
|
|
echo -e "${BGREEN}Built installer: ./${FILENAME}${RESET}"
|
|
echo -e "${BGREEN}Built PyPi distribution: ./dist${RESET}"
|
|
|
|
# clean up, but only if we are not in a github action
|
|
if [[ -z ${CI} ]]; then
|
|
echo
|
|
echo "Cleaning up intermediate build files..."
|
|
rm -rf InvokeAI-Installer tmp ../invokeai/frontend/web/dist/
|
|
fi
|
|
|
|
if [[ ! -z ${CI} ]]; then
|
|
echo
|
|
echo "Setting GitHub action outputs..."
|
|
echo "INSTALLER_FILENAME=${FILENAME}" >>$GITHUB_OUTPUT
|
|
echo "INSTALLER_PATH=installer/${FILENAME}" >>$GITHUB_OUTPUT
|
|
echo "DIST_PATH=installer/dist/" >>$GITHUB_OUTPUT
|
|
fi
|
|
|
|
exit 0
|