|
1 | 1 | #!/bin/bash |
2 | | -# Homeboy project registration for the installed WordPress site. |
| 2 | +# Homeboy project registration plus optional WordPress extension readiness. |
| 3 | + |
| 4 | +HOMEBOY_EXTENSIONS_SOURCE_DEFAULT="https://github.com/Extra-Chill/homeboy-extensions.git" |
| 5 | +HOMEBOY_WORDPRESS_READY=false |
3 | 6 |
|
4 | 7 | homeboy_slugify() { |
5 | 8 | printf '%s' "$1" | sed 's|https\?://||; s|/.*$||; s|\..*$||' | \ |
@@ -79,14 +82,65 @@ ensure_homeboy_local_server() { |
79 | 82 | fi |
80 | 83 | } |
81 | 84 |
|
| 85 | +homeboy_wordpress_extension_ready() { |
| 86 | + command -v homeboy >/dev/null 2>&1 || return 1 |
| 87 | + |
| 88 | + local list_json |
| 89 | + list_json=$(homeboy extension list 2>/dev/null) || return 1 |
| 90 | + |
| 91 | + printf '%s' "$list_json" | python3 -c ' |
| 92 | +import json, sys |
| 93 | +try: |
| 94 | + data = json.load(sys.stdin) |
| 95 | +except Exception: |
| 96 | + sys.exit(1) |
| 97 | +extensions = data.get("data", {}).get("extensions", []) |
| 98 | +for extension in extensions: |
| 99 | + if extension.get("id") == "wordpress": |
| 100 | + if extension.get("ready") is True and extension.get("compatible") is not False: |
| 101 | + sys.exit(0) |
| 102 | + sys.exit(1) |
| 103 | +sys.exit(1) |
| 104 | +' >/dev/null 2>&1 |
| 105 | +} |
| 106 | + |
| 107 | +homeboy_wordpress_extension_linked() { |
| 108 | + command -v homeboy >/dev/null 2>&1 || return 1 |
| 109 | + |
| 110 | + local show_json |
| 111 | + show_json=$(homeboy extension show wordpress 2>/dev/null) || return 1 |
| 112 | + |
| 113 | + printf '%s' "$show_json" | python3 -c ' |
| 114 | +import json, sys |
| 115 | +try: |
| 116 | + data = json.load(sys.stdin) |
| 117 | +except Exception: |
| 118 | + sys.exit(1) |
| 119 | +sys.exit(0 if data.get("data", {}).get("extension", {}).get("linked") is True else 1) |
| 120 | +' >/dev/null 2>&1 |
| 121 | +} |
| 122 | + |
| 123 | +homeboy_required() { |
| 124 | + [ "${HOMEBOY_MODE:-auto}" = "enabled" ] || [ "${WITH_HOMEBOY:-false}" = true ] |
| 125 | +} |
| 126 | + |
| 127 | +homeboy_handle_failure() { |
| 128 | + local message="$1" |
| 129 | + if homeboy_required; then |
| 130 | + error "$message" |
| 131 | + fi |
| 132 | + warn "$message" |
| 133 | + return 0 |
| 134 | +} |
| 135 | + |
82 | 136 | setup_homeboy_project() { |
83 | 137 | if [ "${HOMEBOY_MODE:-auto}" = "disabled" ]; then |
84 | 138 | log "Skipping Homeboy project setup (--no-homeboy)" |
85 | 139 | return 0 |
86 | 140 | fi |
87 | 141 |
|
88 | 142 | if ! command -v homeboy >/dev/null 2>&1; then |
89 | | - if [ "${HOMEBOY_MODE:-auto}" = "enabled" ]; then |
| 143 | + if homeboy_required; then |
90 | 144 | error "Homeboy project setup requested, but the 'homeboy' command was not found" |
91 | 145 | fi |
92 | 146 | log "Skipping Homeboy project setup (homeboy not installed)" |
@@ -122,3 +176,97 @@ setup_homeboy_project() { |
122 | 176 | log "Created Homeboy project '$project_id'" |
123 | 177 | fi |
124 | 178 | } |
| 179 | + |
| 180 | +configure_homeboy_wordpress_extension() { |
| 181 | + HOMEBOY_WORDPRESS_READY=false |
| 182 | + |
| 183 | + if [ "${HOMEBOY_MODE:-auto}" = "disabled" ]; then |
| 184 | + sync_homeboy_availability |
| 185 | + recompose_agents_md_for_homeboy |
| 186 | + return 0 |
| 187 | + fi |
| 188 | + |
| 189 | + if ! command -v homeboy >/dev/null 2>&1; then |
| 190 | + homeboy_handle_failure "Homeboy is not callable from this setup/runtime PATH; skipping Homeboy WordPress extension setup." |
| 191 | + sync_homeboy_availability |
| 192 | + recompose_agents_md_for_homeboy |
| 193 | + return 0 |
| 194 | + fi |
| 195 | + |
| 196 | + log "Detected Homeboy: $(command -v homeboy)" |
| 197 | + |
| 198 | + if ! homeboy_required; then |
| 199 | + if homeboy_wordpress_extension_ready; then |
| 200 | + HOMEBOY_WORDPRESS_READY=true |
| 201 | + log "Homeboy WordPress extension is installed and ready." |
| 202 | + else |
| 203 | + warn "Homeboy is callable, but the WordPress extension is not ready. Run setup with --with-homeboy to install and verify it." |
| 204 | + fi |
| 205 | + sync_homeboy_availability |
| 206 | + recompose_agents_md_for_homeboy |
| 207 | + return 0 |
| 208 | + fi |
| 209 | + |
| 210 | + local source="${HOMEBOY_EXTENSIONS_SOURCE:-$HOMEBOY_EXTENSIONS_SOURCE_DEFAULT}" |
| 211 | + |
| 212 | + if [ "$DRY_RUN" = true ]; then |
| 213 | + echo -e "${BLUE}[dry-run]${NC} homeboy extension install $source --id wordpress" |
| 214 | + echo -e "${BLUE}[dry-run]${NC} homeboy extension update wordpress # if already installed and not linked" |
| 215 | + echo -e "${BLUE}[dry-run]${NC} homeboy extension setup wordpress" |
| 216 | + echo -e "${BLUE}[dry-run]${NC} homeboy extension list" |
| 217 | + echo -e "${BLUE}[dry-run]${NC} $WP_CMD option update datamachine_code_homeboy_available 1" |
| 218 | + print_homeboy_verification_commands |
| 219 | + return 0 |
| 220 | + fi |
| 221 | + |
| 222 | + if homeboy extension show wordpress >/dev/null 2>&1; then |
| 223 | + if homeboy_wordpress_extension_linked; then |
| 224 | + log "Homeboy WordPress extension is linked locally — skipping git update." |
| 225 | + else |
| 226 | + log "Updating Homeboy WordPress extension..." |
| 227 | + homeboy extension update wordpress >/dev/null || homeboy_handle_failure "Homeboy WordPress extension update failed." |
| 228 | + fi |
| 229 | + else |
| 230 | + log "Installing Homeboy WordPress extension from $source..." |
| 231 | + homeboy extension install "$source" --id wordpress >/dev/null || homeboy_handle_failure "Homeboy WordPress extension install failed from $source." |
| 232 | + fi |
| 233 | + |
| 234 | + log "Running Homeboy WordPress extension setup..." |
| 235 | + homeboy extension setup wordpress >/dev/null || homeboy_handle_failure "Homeboy WordPress extension setup failed." |
| 236 | + |
| 237 | + if homeboy_wordpress_extension_ready; then |
| 238 | + HOMEBOY_WORDPRESS_READY=true |
| 239 | + log "Homeboy WordPress extension is ready." |
| 240 | + else |
| 241 | + homeboy_handle_failure "Homeboy WordPress extension did not pass readiness verification." |
| 242 | + fi |
| 243 | + |
| 244 | + sync_homeboy_availability |
| 245 | + recompose_agents_md_for_homeboy |
| 246 | + print_homeboy_verification_commands |
| 247 | +} |
| 248 | + |
| 249 | +recompose_agents_md_for_homeboy() { |
| 250 | + if [ "$DRY_RUN" = true ]; then |
| 251 | + echo -e "${BLUE}[dry-run]${NC} $WP_CMD datamachine memory compose AGENTS.md $WP_ROOT_FLAG" |
| 252 | + return 0 |
| 253 | + fi |
| 254 | + |
| 255 | + if [ ! -f "$SITE_PATH/wp-config.php" ] && [ ! -f "$SITE_PATH/wp-load.php" ]; then |
| 256 | + return 0 |
| 257 | + fi |
| 258 | + |
| 259 | + if (cd "$SITE_PATH" && $WP_CMD datamachine memory compose AGENTS.md $WP_ROOT_FLAG >/dev/null 2>&1); then |
| 260 | + log "AGENTS.md recomposed after Homeboy availability sync." |
| 261 | + else |
| 262 | + homeboy_handle_failure "Could not recompose AGENTS.md after Homeboy availability sync." |
| 263 | + fi |
| 264 | +} |
| 265 | + |
| 266 | +print_homeboy_verification_commands() { |
| 267 | + log "Homeboy verification commands:" |
| 268 | + echo " homeboy extension list" |
| 269 | + echo " homeboy extension show wordpress" |
| 270 | + echo " homeboy project show <project-id>" |
| 271 | + echo " homeboy project components list <project-id>" |
| 272 | +} |
0 commit comments