mirror of
https://github.com/junjiem/dify-plugin-repackaging.git
synced 2025-12-08 08:12:59 +08:00
195 lines
5.2 KiB
Bash
195 lines
5.2 KiB
Bash
#!/bin/bash
|
|
# author: Junjie.M
|
|
|
|
DEFAULT_GITHUB_API_URL=https://github.com
|
|
DEFAULT_MARKETPLACE_API_URL=https://marketplace.dify.ai
|
|
DEFAULT_PIP_MIRROR_URL=https://mirrors.aliyun.com/pypi/simple
|
|
|
|
GITHUB_API_URL="${GITHUB_API_URL:-$DEFAULT_GITHUB_API_URL}"
|
|
MARKETPLACE_API_URL="${MARKETPLACE_API_URL:-$DEFAULT_MARKETPLACE_API_URL}"
|
|
PIP_MIRROR_URL="${PIP_MIRROR_URL:-$DEFAULT_PIP_MIRROR_URL}"
|
|
|
|
CURR_DIR=`dirname $0`
|
|
cd $CURR_DIR
|
|
CURR_DIR=`pwd`
|
|
USER=`whoami`
|
|
ARCH_NAME=`uname -m`
|
|
OS_TYPE=$(uname)
|
|
OS_TYPE=$(echo "$OS_TYPE" | tr '[:upper:]' '[:lower:]')
|
|
|
|
CMD_NAME="dify-plugin-${OS_TYPE}-amd64"
|
|
if [[ "arm64" == "$ARCH_NAME" || "aarch64" == "$ARCH_NAME" ]]; then
|
|
CMD_NAME="dify-plugin-${OS_TYPE}-arm64"
|
|
fi
|
|
|
|
PIP_PLATFORM=""
|
|
PACKAGE_SUFFIX="offline"
|
|
|
|
market(){
|
|
if [[ -z "$2" || -z "$3" || -z "$4" ]]; then
|
|
echo ""
|
|
echo "Usage: "$0" market [plugin author] [plugin name] [plugin version]"
|
|
echo "Example:"
|
|
echo " "$0" market junjiem mcp_sse 0.0.1"
|
|
echo " "$0" market langgenius agent 0.0.9"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
echo "From the Dify Marketplace downloading ..."
|
|
PLUGIN_AUTHOR=$2
|
|
PLUGIN_NAME=$3
|
|
PLUGIN_VERSION=$4
|
|
PLUGIN_PACKAGE_PATH=${CURR_DIR}/${PLUGIN_AUTHOR}-${PLUGIN_NAME}_${PLUGIN_VERSION}.difypkg
|
|
PLUGIN_DOWNLOAD_URL=${MARKETPLACE_API_URL}/api/v1/plugins/${PLUGIN_AUTHOR}/${PLUGIN_NAME}/${PLUGIN_VERSION}/download
|
|
echo "Downloading ${PLUGIN_DOWNLOAD_URL} ..."
|
|
curl -L -o ${PLUGIN_PACKAGE_PATH} ${PLUGIN_DOWNLOAD_URL}
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Download failed, please check the plugin author, name and version."
|
|
exit 1
|
|
fi
|
|
echo "Download success."
|
|
repackage ${PLUGIN_PACKAGE_PATH}
|
|
}
|
|
|
|
github(){
|
|
if [[ -z "$2" || -z "$3" || -z "$4" ]]; then
|
|
echo ""
|
|
echo "Usage: "$0" github [Github repo] [Release title] [Assets name (include .difypkg suffix)]"
|
|
echo "Example:"
|
|
echo " "$0" github junjiem/dify-plugin-tools-dbquery v0.0.2 db_query.difypkg"
|
|
echo " "$0" github https://github.com/junjiem/dify-plugin-agent-mcp_sse 0.0.1 agent-mcp_see.difypkg"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
echo "From the Github downloading ..."
|
|
GITHUB_REPO=$2
|
|
if [[ "${GITHUB_REPO}" != "${GITHUB_API_URL}"* ]]; then
|
|
GITHUB_REPO="${GITHUB_API_URL}/${GITHUB_REPO}"
|
|
fi
|
|
RELEASE_TITLE=$3
|
|
ASSETS_NAME=$4
|
|
PLUGIN_NAME="${ASSETS_NAME%.difypkg}"
|
|
PLUGIN_PACKAGE_PATH=${CURR_DIR}/${PLUGIN_NAME}-${RELEASE_TITLE}.difypkg
|
|
PLUGIN_DOWNLOAD_URL=${GITHUB_REPO}/releases/download/${RELEASE_TITLE}/${ASSETS_NAME}
|
|
echo "Downloading ${PLUGIN_DOWNLOAD_URL} ..."
|
|
curl -L -o ${PLUGIN_PACKAGE_PATH} ${PLUGIN_DOWNLOAD_URL}
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Download failed, please check the github repo, release title and assets name."
|
|
exit 1
|
|
fi
|
|
echo "Download success."
|
|
repackage ${PLUGIN_PACKAGE_PATH}
|
|
}
|
|
|
|
_local(){
|
|
echo $2
|
|
if [[ -z "$2" ]]; then
|
|
echo ""
|
|
echo "Usage: "$0" local [difypkg path]"
|
|
echo "Example:"
|
|
echo " "$0" local ./db_query.difypkg"
|
|
echo " "$0" local /root/dify-plugin/db_query.difypkg"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
PLUGIN_PACKAGE_PATH=`realpath $2`
|
|
repackage ${PLUGIN_PACKAGE_PATH}
|
|
}
|
|
|
|
repackage(){
|
|
local PACKAGE_PATH=$1
|
|
PACKAGE_NAME_WITH_EXTENSION=`basename ${PACKAGE_PATH}`
|
|
PACKAGE_NAME="${PACKAGE_NAME_WITH_EXTENSION%.*}"
|
|
echo "Unziping ..."
|
|
install_unzip
|
|
unzip -o ${PACKAGE_PATH} -d ${CURR_DIR}/${PACKAGE_NAME}
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Unzip failed."
|
|
exit 1
|
|
fi
|
|
echo "Unzip success."
|
|
echo "Repackaging ..."
|
|
cd ${CURR_DIR}/${PACKAGE_NAME}
|
|
pip download ${PIP_PLATFORM} -r requirements.txt -d ./wheels --index-url ${PIP_MIRROR_URL} --trusted-host mirrors.aliyun.com
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Pip download failed."
|
|
exit 1
|
|
fi
|
|
if [[ "linux" == "$OS_TYPE" ]]; then
|
|
sed -i '1i\--no-index --find-links=./wheels/' requirements.txt
|
|
elif [[ "darwin" == "$OS_TYPE" ]]; then
|
|
sed -i ".bak" '1i\
|
|
--no-index --find-links=./wheels/
|
|
' requirements.txt
|
|
rm -f requirements.txt.bak
|
|
fi
|
|
IGNORE_PATH=.difyignore
|
|
if [ ! -f "$IGNORE_PATH" ]; then
|
|
IGNORE_PATH=.gitignore
|
|
fi
|
|
if [ -f "$IGNORE_PATH" ]; then
|
|
if [[ "linux" == "$OS_TYPE" ]]; then
|
|
sed -i '/^wheels\//d' "${IGNORE_PATH}"
|
|
elif [[ "darwin" == "$OS_TYPE" ]]; then
|
|
sed -i ".bak" '/^wheels\//d' "${IGNORE_PATH}"
|
|
rm -f "${IGNORE_PATH}.bak"
|
|
fi
|
|
fi
|
|
cd ${CURR_DIR}
|
|
chmod 755 ${CURR_DIR}/${CMD_NAME}
|
|
${CURR_DIR}/${CMD_NAME} plugin package ${CURR_DIR}/${PACKAGE_NAME} -o ${CURR_DIR}/${PACKAGE_NAME}-${PACKAGE_SUFFIX}.difypkg --max-size 5120
|
|
if [ $? -ne 0 ]; then
|
|
echo "Repackage failed."
|
|
exit 1
|
|
fi
|
|
echo "Repackage success."
|
|
}
|
|
|
|
install_unzip(){
|
|
if ! command -v unzip &> /dev/null; then
|
|
echo "Installing unzip ..."
|
|
yum -y install unzip
|
|
if [ $? -ne 0 ]; then
|
|
echo "Install unzip failed."
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
print_usage() {
|
|
echo "usage: $0 [-p platform] [-s package_suffix] {market|github|local}"
|
|
echo "-p platform: python packages' platform. Using for crossing repacking.
|
|
For example: -p manylinux2014_x86_64 or -p manylinux2014_aarch64"
|
|
echo "-s package_suffix: The suffix name of the output offline package.
|
|
For example: -s linux-amd64 or -s linux-arm64"
|
|
exit 1
|
|
}
|
|
|
|
while getopts "p:s:" opt; do
|
|
case "$opt" in
|
|
p) PIP_PLATFORM="--platform ${OPTARG} --only-binary=:all:" ;;
|
|
s) PACKAGE_SUFFIX="${OPTARG}" ;;
|
|
*) print_usage; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
shift $((OPTIND - 1))
|
|
|
|
echo "$1"
|
|
case "$1" in
|
|
'market')
|
|
market $@
|
|
;;
|
|
'github')
|
|
github $@
|
|
;;
|
|
'local')
|
|
_local $@
|
|
;;
|
|
*)
|
|
|
|
print_usage
|
|
exit 1
|
|
esac
|
|
exit 0
|