167 lines
4.3 KiB
Bash
Executable File
167 lines
4.3 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
if [[ -a ".env" ]]; then
|
|
source .env
|
|
fi
|
|
|
|
function help-table() {
|
|
CMD_WIDTH=10
|
|
OPT_WIDTH=6
|
|
DESC_WIDTH=40
|
|
COLUMN="| %-${CMD_WIDTH}s | %-${OPT_WIDTH}s | %-${DESC_WIDTH}s |\n"
|
|
|
|
printf "$COLUMN" "Command" "Option" "Description"
|
|
echo "|$(printf '%*s' $((CMD_WIDTH + 2)) '' | tr ' ' '-')|$(printf '%*s' $((OPT_WIDTH + 2)) '' | tr ' ' '-')|$(printf '%*s' $((DESC_WIDTH + 2)) '' | tr ' ' '-')|"
|
|
printf "$COLUMN" "all" "" "Run all tasks."
|
|
printf "$COLUMN" "install" "" "Setup the local environment."
|
|
printf "$COLUMN" "lint" "" "Run pre-commit."
|
|
printf "$COLUMN" "build" "" "Build python packages with whool."
|
|
printf "$COLUMN" "publish" "" "Publish python packages to PyPi."
|
|
printf "$COLUMN" "docs" "" "Update index.html."
|
|
}
|
|
|
|
function help() {
|
|
echo
|
|
if [ -n "$1" ]; then
|
|
help-table | grep -i "$1" | column -t -s'|'
|
|
else
|
|
echo "task <command> [options]"
|
|
echo
|
|
echo "commands:"
|
|
echo
|
|
help-table
|
|
fi
|
|
echo
|
|
}
|
|
|
|
if [ -d "$HOME/taskfile.build/bin" ]; then
|
|
for file in "$HOME/taskfile.build/bin/"*; do
|
|
if [ -f "$file" ]; then
|
|
source "$file"
|
|
fi
|
|
done
|
|
fi
|
|
|
|
function install() {
|
|
echo "Setup venv and install python dependencies"
|
|
uv venv env
|
|
source env/bin/activate
|
|
uv pip install pre-commit git+https://github.com/OCA/maintainer-tools
|
|
}
|
|
|
|
function lint() {
|
|
source env/bin/activate
|
|
|
|
echo "Run pre-commit"
|
|
pre-commit run --all-files --show-diff-on-failure --color=always
|
|
}
|
|
|
|
build() {
|
|
source env/bin/activate
|
|
|
|
ROOT_DIR="$(pwd)"
|
|
METAPACKAGE_DIR="$ROOT_DIR/setup/_metapackage"
|
|
PUBLISH_DIR="$ROOT_DIR/dist"
|
|
mkdir -p "$PUBLISH_DIR"
|
|
rm -rf "$PUBLISH_DIR"/*
|
|
|
|
SERVER_NAME="$(basename "$ROOT_DIR")"
|
|
METAPACKAGE_NAME="odoo-apps-$(echo "$SERVER_NAME" | sed 's/_/-/g')"
|
|
oca-gen-metapackage "$METAPACKAGE_NAME"
|
|
|
|
ADDONS=()
|
|
mapfile -t ADDONS < <(find . -maxdepth 2 -type f -name "pyproject.toml" | xargs dirname | sed 's|^\./||')
|
|
for ADDON in "${ADDONS[@]}"; do
|
|
cd "$ROOT_DIR/$ADDON"
|
|
echo "Building $ADDON"
|
|
uv build
|
|
cp dist/*.whl "$PUBLISH_DIR/"
|
|
cp dist/*.tar.gz "$PUBLISH_DIR/"
|
|
cd "$ROOT_DIR"
|
|
done
|
|
|
|
echo "Installing local wheels for metapackage resolution..."
|
|
uv pip install "$PUBLISH_DIR"/*.whl 2>/dev/null || true
|
|
|
|
cd "$METAPACKAGE_DIR"
|
|
echo "Building $METAPACKAGE_NAME"
|
|
uv build
|
|
cp dist/*.whl "$PUBLISH_DIR/"
|
|
cp dist/*.tar.gz "$PUBLISH_DIR/"
|
|
|
|
ls "$PUBLISH_DIR/"
|
|
}
|
|
|
|
publish() {
|
|
source env/bin/activate
|
|
ROOT_DIR="$(pwd)"
|
|
PUBLISH_DIR="$ROOT_DIR/dist"
|
|
|
|
set +e
|
|
echo "Publishing from $PUBLISH_DIR to PyPI..."
|
|
|
|
for WHEEL in "$PUBLISH_DIR"/*.whl; do
|
|
if [ ! -f "$WHEEL" ]; then
|
|
continue
|
|
fi
|
|
|
|
echo "Publishing: $WHEEL"
|
|
uv publish "$WHEEL" --username "__token__" --password "$PYPI_TOKEN"
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "Failed to publish $WHEEL."
|
|
fi
|
|
done
|
|
|
|
echo "All wheels published successfully."
|
|
}
|
|
|
|
function docs() {
|
|
source env/bin/activate
|
|
|
|
echo "Update index.html for all modules"
|
|
for MODULE in ./*; do
|
|
if [ -f "$MODULE/README.rst" ]; then
|
|
cd "$MODULE" || exit
|
|
rst2html5 README.rst static/description/index.html
|
|
cd .. || exit
|
|
fi
|
|
done
|
|
|
|
# Find marker in readme and clear content after
|
|
echo "Clear modules table in README.md"
|
|
MARKER="## Available modules"
|
|
sed -i "/$MARKER/Q" "README.md"
|
|
echo "$MARKER" >> "README.md"
|
|
echo "" >> "README.md"
|
|
echo "| Module | Summary |" >> "README.md"
|
|
echo "| --- | --- |" >> "README.md"
|
|
|
|
MANIFEST_FILES="./*/__manifest__.py"
|
|
for MANIFEST_FILE in $MANIFEST_FILES; do
|
|
MODULE_DIR=$(dirname "$MANIFEST_FILE")
|
|
MODULE_NAME=$(basename "$MODULE_DIR")
|
|
echo "Add summary of $MODULE_NAME to readme file."
|
|
SUMMARY=$(grep 'summary' "$MANIFEST_FILE" -A 1 | tail -1)
|
|
echo "| [$MODULE_NAME]($MODULE_NAME) | $SUMMARY |" >> "README.md"
|
|
done
|
|
}
|
|
|
|
if declare -f "$1" > /dev/null; then
|
|
"$1" "${@:2}"
|
|
else
|
|
case "$1" in
|
|
all)
|
|
install
|
|
lint
|
|
docs
|
|
;;
|
|
*)
|
|
echo "Unknown command: $1"
|
|
help task
|
|
exit 1
|
|
;;
|
|
esac
|
|
fi
|