Route raw Mix test and precommit aliases through the plugin wrapper workflow. Document that normal plugin checks should use plugin test or plugin precommit.
2.7 KiB
Aether
aether is an external Tribes plugin that provides the social@1
capability.
Getting Started
Install deps and run the test suite:
mix deps.get
scripts/plugin test
If you are using the shared tribes devenv, run the plugin through the local plugin helper instead:
devenv shell -- plugin validate
devenv shell -- plugin test
devenv shell -- plugin precommit
Development
For local development alongside a Tribes checkout:
# Symlink into the host plugins directory once
cd /path/to/tribes
ln -s /path/to/tribes-plugin-aether plugins/aether
# Start the Tribes dev server
iex --sname dev -S mix phx.server
Then edit aether in its own repo. In development, the Tribes host watches
symlinked external plugins and automatically:
- runs
mix compilefor Elixir, HEEx, manifest, and migration changes - runs
npm run build --prefix assets - reloads the plugin in the running Tribes VM
- triggers a Phoenix browser reload after the rebuild finishes
That means the normal loop is:
cd /path/to/tribes-plugin-aether
mix deps.get
# in another terminal
cd /path/to/tribes
iex --sname dev -S mix phx.server
Inside the plugin repo's devenv shell, the plugin helper forwards to the host devenv automatically:
plugin validate
plugin test
plugin precommit
Use plugin test / plugin precommit for host-backed tests. Plain mix test
and mix precommit print this guidance; use mix raw_test /
mix raw_precommit only for deliberate low-level debugging after setting the
same host environment yourself.
Project Structure
aether/
├── manifest.json
├── mix.exs
├── lib/
│ ├── aether/
│ │ ├── application.ex
│ │ └── plugin.ex
│ └── aether_web/
│ └── live/
├── assets/
│ ├── css/aether.css
│ ├── js/aether.js
│ ├── package.json
│ └── package-lock.json
├── priv/
└── test/
Manifest
manifest.json declares the plugin contract:
{
"name": "aether",
"version": "0.1.0",
"entry_module": "Tribes.Plugins.Aether.Plugin",
"host_api": "1",
"otp_app": "aether",
"provides": ["social@1"],
"requires": ["ui@1"],
"enhances_with": [],
"assets": {
"global_js": ["aether.js"],
"global_css": ["aether.css"]
}
}
See the host plugin docs in PLUGINS.md for the full manifest and runtime contract.
Building for Release
MIX_ENV=prod mix compile
npm run build --prefix assets
Guix packaging assembles the plugin artifact from the compiled BEAM output,
priv/, and manifest.json. Enable it from the guix-tribes channel-side node
configuration.