|
1 | | -#!/bin/bash |
| 1 | +#!/usr/bin/env bash |
2 | 2 | set -e |
3 | 3 |
|
4 | | -if [[ -a ".env" ]]; then |
| 4 | +if [[ -a '.env' ]]; then |
5 | 5 | source .env |
6 | 6 | fi |
7 | 7 |
|
8 | | -function help-table() { |
9 | | - CMD_WIDTH=10 |
10 | | - OPT_WIDTH=6 |
11 | | - DESC_WIDTH=40 |
12 | | - COLUMN="| %-${CMD_WIDTH}s | %-${OPT_WIDTH}s | %-${DESC_WIDTH}s |\n" |
13 | | - |
14 | | - printf "$COLUMN" "Command" "Option" "Description" |
15 | | - echo "|$(printf '%*s' $((CMD_WIDTH + 2)) '' | tr ' ' '-')|$(printf '%*s' $((OPT_WIDTH + 2)) '' | tr ' ' '-')|$(printf '%*s' $((DESC_WIDTH + 2)) '' | tr ' ' '-')|" |
16 | | - printf "$COLUMN" "all" "" "Run all tasks." |
17 | | - printf "$COLUMN" "install" "" "Setup the local environment." |
18 | | - printf "$COLUMN" "lint" "" "Run pre-commit." |
19 | | - printf "$COLUMN" "docs" "" "Update index.html." |
| 8 | +help-table() { |
| 9 | + local cmd_width=10 |
| 10 | + local opt_width=6 |
| 11 | + local desc_width=40 |
| 12 | + local column="| %-${cmd_width}s | %-${opt_width}s | %-${desc_width}s |\n" |
| 13 | + |
| 14 | + printf "$column" 'Command' 'Option' 'Description' |
| 15 | + echo "|$(printf '%*s' $((cmd_width + 2)) '' | tr ' ' '-')|$(printf '%*s' $((opt_width + 2)) '' | tr ' ' '-')|$(printf '%*s' $((desc_width + 2)) '' | tr ' ' '-')|" |
| 16 | + printf "$column" 'all' '' 'Run all tasks.' |
| 17 | + printf "$column" 'install' '' 'Setup the local environment.' |
| 18 | + printf "$column" 'lint' '' 'Run pre-commit.' |
| 19 | + printf "$column" 'build' '' 'Build python packages with whool.' |
| 20 | + printf "$column" 'publish' '' 'Publish python packages to PyPi.' |
| 21 | + printf "$column" 'docs' '' 'Update index.html.' |
20 | 22 | } |
21 | 23 |
|
22 | | -function help() { |
| 24 | +help() { |
23 | 25 | echo |
24 | | - if [ -n "$1" ]; then |
| 26 | + if [[ -n "$1" ]]; then |
25 | 27 | help-table | grep -i "$1" | column -t -s'|' |
26 | 28 | else |
27 | | - echo "task <command> [options]" |
| 29 | + echo 'task <command> [options]' |
28 | 30 | echo |
29 | | - echo "commands:" |
| 31 | + echo 'commands:' |
30 | 32 | echo |
31 | 33 | help-table |
32 | 34 | fi |
33 | 35 | echo |
34 | 36 | } |
35 | 37 |
|
36 | | -if [ -d "$HOME/taskfile.build/bin" ]; then |
| 38 | +if [[ -d "$HOME/taskfile.build/bin" ]]; then |
37 | 39 | for file in "$HOME/taskfile.build/bin/"*; do |
38 | | - if [ -f "$file" ]; then |
| 40 | + if [[ -f "$file" ]]; then |
39 | 41 | source "$file" |
40 | 42 | fi |
41 | 43 | done |
42 | 44 | fi |
43 | 45 |
|
44 | | -function install() { |
45 | | - echo "Setup venv and install python dependencies" |
46 | | - uv venv env |
47 | | - source env/bin/activate |
| 46 | +install() { |
| 47 | + echo 'Setup .venv and install python dependencies' |
| 48 | + uv venv --clear |
| 49 | + source .venv/bin/activate |
48 | 50 | uv pip install pre-commit git+https://github.com/OCA/maintainer-tools |
49 | 51 | } |
50 | 52 |
|
51 | | -function lint() { |
52 | | - source env/bin/activate |
| 53 | +lint() { |
| 54 | + source .venv/bin/activate |
53 | 55 |
|
54 | | - echo "Run pre-commit" |
| 56 | + echo 'Run pre-commit' |
55 | 57 | pre-commit run --all-files --show-diff-on-failure --color=always |
56 | 58 | } |
57 | 59 |
|
58 | | -function docs() { |
59 | | - source env/bin/activate |
| 60 | +build() { |
| 61 | + source .venv/bin/activate |
| 62 | + |
| 63 | + local root_dir="$(pwd)" |
| 64 | + local metapackage_dir="$root_dir/setup/_metapackage" |
| 65 | + local publish_dir="$root_dir/dist" |
| 66 | + mkdir -p "$publish_dir" |
| 67 | + rm -rf "$publish_dir"/* |
| 68 | + |
| 69 | + local server_name="$(basename "$root_dir")" |
| 70 | + local metapackage_name="odoo-apps-$(echo "$server_name" | sed 's/_/-/g')" |
| 71 | + oca-gen-metapackage "$metapackage_name" |
| 72 | + |
| 73 | + local addons=() |
| 74 | + mapfile -t addons < <(find . -maxdepth 2 -type f -name 'pyproject.toml' | xargs dirname | sed 's|^\./||') |
| 75 | + for addon in "${addons[@]}"; do |
| 76 | + cd "$root_dir/$addon" |
| 77 | + echo "Building $addon" |
| 78 | + uv build |
| 79 | + cp dist/*.whl "$publish_dir/" |
| 80 | + cp dist/*.tar.gz "$publish_dir/" |
| 81 | + cd "$root_dir" |
| 82 | + done |
| 83 | + |
| 84 | + echo 'Installing local wheels for metapackage resolution...' |
| 85 | + uv pip install "$publish_dir"/*.whl 2>/dev/null || true |
| 86 | + |
| 87 | + cd "$metapackage_dir" |
| 88 | + echo "Building $metapackage_name" |
| 89 | + uv build |
| 90 | + cp dist/*.whl "$publish_dir/" |
| 91 | + cp dist/*.tar.gz "$publish_dir/" |
| 92 | + |
| 93 | + ls "$publish_dir/" |
| 94 | +} |
| 95 | + |
| 96 | +publish() { |
| 97 | + source .venv/bin/activate |
| 98 | + local root_dir="$(pwd)" |
| 99 | + local publish_dir="$root_dir/dist" |
| 100 | + |
| 101 | + set +e |
| 102 | + echo "Publishing from $publish_dir to PyPI..." |
60 | 103 |
|
61 | | - echo "Update index.html for all modules" |
62 | | - for MODULE in ./*; do |
63 | | - if [ -f "$MODULE/README.rst" ]; then |
64 | | - cd "$MODULE" || exit |
| 104 | + for wheel in "$publish_dir"/*.whl; do |
| 105 | + if [[ ! -f "$wheel" ]]; then |
| 106 | + continue |
| 107 | + fi |
| 108 | + |
| 109 | + echo "Publishing: $wheel" |
| 110 | + uv publish "$wheel" --username '__token__' --password "$PYPI_TOKEN" |
| 111 | + |
| 112 | + if (( $? != 0 )); then |
| 113 | + echo "Failed to publish $wheel." |
| 114 | + fi |
| 115 | + done |
| 116 | + |
| 117 | + echo 'All wheels published successfully.' |
| 118 | +} |
| 119 | + |
| 120 | +docs() { |
| 121 | + source .venv/bin/activate |
| 122 | + |
| 123 | + echo 'Update index.html for all modules' |
| 124 | + for module in ./*; do |
| 125 | + if [[ -f "$module/README.rst" ]]; then |
| 126 | + cd "$module" || exit |
65 | 127 | rst2html5 README.rst static/description/index.html |
66 | 128 | cd .. || exit |
67 | 129 | fi |
68 | 130 | done |
69 | 131 |
|
70 | 132 | # Find marker in readme and clear content after |
71 | | - echo "Clear modules table in README.md" |
72 | | - MARKER="## Available modules" |
73 | | - sed -i "/$MARKER/Q" "README.md" |
74 | | - echo "$MARKER" >> "README.md" |
75 | | - echo "" >> "README.md" |
76 | | - echo "| Module | Summary |" >> "README.md" |
77 | | - echo "| --- | --- |" >> "README.md" |
78 | | - |
79 | | - MANIFEST_FILES="./*/__manifest__.py" |
80 | | - for MANIFEST_FILE in $MANIFEST_FILES; do |
81 | | - MODULE_DIR=$(dirname "$MANIFEST_FILE") |
82 | | - MODULE_NAME=$(basename "$MODULE_DIR") |
83 | | - echo "Add summary of $MODULE_NAME to readme file." |
84 | | - SUMMARY=$(grep 'summary' "$MANIFEST_FILE" -A 1 | tail -1) |
85 | | - echo "| [$MODULE_NAME]($MODULE_NAME) | $SUMMARY |" >> "README.md" |
| 133 | + echo 'Clear modules table in README.md' |
| 134 | + local marker='## Available modules' |
| 135 | + sed -i "/$marker/Q" 'README.md' |
| 136 | + echo "$marker" >> 'README.md' |
| 137 | + echo '' >> 'README.md' |
| 138 | + echo '| Module | Summary |' >> 'README.md' |
| 139 | + echo '| --- | --- |' >> 'README.md' |
| 140 | + |
| 141 | + local manifest_files='./*/__manifest__.py' |
| 142 | + for manifest_file in $manifest_files; do |
| 143 | + local module_dir=$(dirname "$manifest_file") |
| 144 | + local module_name=$(basename "$module_dir") |
| 145 | + echo "Add summary of $module_name to readme file." |
| 146 | + local summary=$(grep 'summary' "$manifest_file" -A 1 | tail -1) |
| 147 | + echo "| [$module_name]($module_name) | $summary |" >> 'README.md' |
86 | 148 | done |
87 | 149 | } |
88 | 150 |
|
|
94 | 156 | install |
95 | 157 | lint |
96 | 158 | docs |
| 159 | + build |
97 | 160 | ;; |
98 | 161 | *) |
99 | 162 | echo "Unknown command: $1" |
|
0 commit comments