Skip to content

feat: include broker plugin builds in hub deploy pipeline #476

Description

@zeroasterisk

Problem

The hub deploy script (scripts/starter-hub/gce-start-hub.sh) builds and installs the main scion binary but does not build or install any broker plugin binaries (e.g., scion-plugin-telegram, scion-plugin-discord). These plugins live under extras/scion-*/ with their own go.mod and must be built separately.

This means:

  • Every deploy can silently remove a working plugin if the host was reprovisioned
  • Setting up a new plugin requires manual SSH access to build from source and install to $PATH
  • There's no automated way to keep plugin binaries in sync with the hub binary across updates
  • Plugin version skew (old plugin binary vs new hub binary) can cause RPC/interface mismatches

Current Behavior

# gce-start-hub.sh only builds the main binary:
go build -o scion ./cmd/scion
sudo mv scion /usr/local/bin/scion
# No plugin builds at all

Proposed Solution

Add a plugin build step after the main binary build:

# Build broker plugin binaries
for plugin_src in extras/scion-telegram extras/scion-discord; do
    plugin_name="scion-plugin-$(basename "$plugin_src" | sed 's/^scion-//')"
    if [ -d "${plugin_src}/cmd/${plugin_name}" ]; then
        go build -o "${plugin_name}" "./cmd/${plugin_name}/"
    fi
done

# Install alongside the main binary
for plugin_bin in scion-plugin-*; do
    sudo install -m 755 "$plugin_bin" /usr/local/bin/
done

A patch has been prepared in the working tree that implements this.

Additional Context

This was discovered while debugging a broken Telegram integration on the aiopm hub. The plugin binary was never in the deploy pipeline, so it disappeared after infrastructure updates. Combined with #475 (settings.yaml overwrite), this made the entire Telegram integration silently non-functional with no errors in the hub logs — the plugin simply wasn't loaded because the binary didn't exist.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions