Files
Odoo-Build/templates/task
T
Janik von Rotz a0382add31 feat(task): refactor taskfile template for improved consistency and readability
- Replace `#!/bin/bash` shebang with `#!/usr/bin/env bash` for portability
- Standardize conditional checks using `[[ ]]` instead of `[ ]`
- Remove `function` keyword from all function declarations
- Use `local` keyword for variables inside functions to limit scope
- Convert variable names to snake_case for consistency
- Improve quoting consistency by using single quotes where appropriate
- Enhance readability of help table generation and command descriptions
- Update string comparisons and loop conditions for better clarity
- Refactor build and publish functions to use local variables
- Improve error handling and output messages in publish function
- Standardize directory traversal and file checking logic in docs function
2025-11-05 17:04:47 +01:00

168 lines
4.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
if [[ -a '.env' ]]; then
source .env
fi
help-table() {
local cmd_width=10
local opt_width=6
local desc_width=40
local 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.'
}
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
install() {
echo 'Setup .venv and install python dependencies'
uv venv
source .venv/bin/activate
uv pip install pre-commit git+https://github.com/OCA/maintainer-tools
}
lint() {
source .venv/bin/activate
echo 'Run pre-commit'
pre-commit run --all-files --show-diff-on-failure --color=always
}
build() {
source .venv/bin/activate
local root_dir="$(pwd)"
local metapackage_dir="$root_dir/setup/_metapackage"
local publish_dir="$root_dir/dist"
mkdir -p "$publish_dir"
rm -rf "$publish_dir"/*
local server_name="$(basename "$root_dir")"
local metapackage_name="odoo-apps-$(echo "$server_name" | sed 's/_/-/g')"
oca-gen-metapackage "$metapackage_name"
local 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 .venv/bin/activate
local root_dir="$(pwd)"
local 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 (( $? != 0 )); then
echo "Failed to publish $wheel."
fi
done
echo 'All wheels published successfully.'
}
docs() {
source .venv/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'
local marker='## Available modules'
sed -i "/$marker/Q" 'README.md'
echo "$marker" >> 'README.md'
echo '' >> 'README.md'
echo '| Module | Summary |' >> 'README.md'
echo '| --- | --- |' >> 'README.md'
local manifest_files='./*/__manifest__.py'
for manifest_file in $manifest_files; do
local module_dir=$(dirname "$manifest_file")
local module_name=$(basename "$module_dir")
echo "Add summary of $module_name to readme file."
local 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
build
;;
*)
echo "Unknown command: $1"
help task
exit 1
;;
esac
fi