Tutoriais · Plugins
Publicar no GitHub e no npm
Layout do repositório, package.json, npm publish e um workflow do GitHub Actions que publica a cada tag.
Nesta página
Layout do repositório
Um plugin por repositório, com o ade.plugin.json na raiz. É onde o instalador o procura primeiro — e, no pacote npm, é o único lugar: a origem npm não procura em subpastas (a origem git procura até duas pastas abaixo).
meu-plugin/
├── ade.plugin.json ← na RAIZ do repositório
├── package.json
├── README.md
├── LICENSE
├── integrations/
│ └── index.mjs
├── skills/
│ └── minha-skill/
│ └── SKILL.md
├── scripts/
│ └── check-release.mjs
└── .github/
└── workflows/
└── publish.ymlade.plugin.json e package.json
O manifesto descreve o plugin para o Jarvis ADE; o package.json descreve o pacote para o npm. As duas version devem andar juntas.
{
"id": "meu-plugin",
"name": "Meu Plugin",
"version": "0.1.0",
"description": "O que o seu plugin faz, em uma frase.",
"author": "Seu Nome",
"homepage": "https://github.com/SEU-USUARIO/meu-plugin",
"license": "MIT",
"contributes": {
"integrations": [
{
"id": "principal",
"name": "Meu Plugin",
"command": "node",
"args": ["integrations/index.mjs"],
"events": ["board.card_moved"]
}
]
}
}{
"name": "jarvis-plugin-meu-plugin",
"version": "0.1.0",
"description": "O que o seu plugin faz, em uma frase.",
"license": "MIT",
"type": "module",
"keywords": ["jarvis-ade-plugin"],
"repository": {
"type": "git",
"url": "git+https://github.com/SEU-USUARIO/jarvis-plugin-meu-plugin.git"
},
"homepage": "https://github.com/SEU-USUARIO/jarvis-plugin-meu-plugin#readme",
"files": ["ade.plugin.json", "integrations/", "skills/", "README.md", "LICENSE"],
"engines": { "node": ">=18" }
}| Campo | Por quê |
|---|---|
| keywords: ["jarvis-ade-plugin"] | A marca que identifica o pacote como um plugin do Jarvis ADE. |
| repository | Deve apontar para o repositório público no GitHub. O Marketplace confere que o repositório do pacote npm é o mesmo que você cadastrou. |
| files | Lista o que vai no pacote. Inclua o ade.plugin.json e as pastas que ele referencia (integrations/, skills/…). O npm sempre inclui package.json, README e LICENSE. |
| sem dependencies | Plugins não têm dependências em runtime: só a pasta do pacote é copiada para o usuário. |
| sem scripts de instalação | Nada de preinstall, install ou postinstall. O Marketplace avisa quando encontra dependências em runtime ou scripts de instalação. |
| sem private: true | private: true faz o npm publish recusar o pacote. |
| engines | O Node mínimo que o seu sidecar exige. |
Publicar à mão, a primeira vez
Confira o que vai no pacote
terminal npm pack --dry-runA lista precisa ter o
ade.plugin.jsone os arquivos que ele referencia — e nada denode_modules.Entre no npm e publique
terminal npm login npm publish --access public--access publicé necessário na primeira publicação de um pacote com escopo (@usuario/nome), que o npm trata como privado por padrão.Teste a instalação a partir do npm
No Jarvis ADE: Marketplace de Plugins → Instalados → Importar plugin, origem Pacote npm, e o nome do pacote (por exemplo
jarvis-plugin-meu-plugin). Repita com a origem URL git apontando para o repositório. Se o manifesto está na raiz e nada depende denode_modules, as duas funcionam.
Publicar a cada tag com GitHub Actions
Depois da primeira vez, deixe o GitHub publicar. O fluxo: você sobe a versão, cria a tag v0.2.0, e o workflow confere que tag, package.json e ade.plugin.json dizem a mesma versão e que o pacote continua sem dependências nem scripts de instalação — só então publica.
// scripts/check-release.mjs — barra o publish se algo divergir. Sem dependências.
import { readFileSync } from 'node:fs'
const read = (file) => JSON.parse(readFileSync(file, 'utf8'))
const pkg = read('package.json')
const manifest = read('ade.plugin.json')
const tag = (process.env.GITHUB_REF_NAME ?? '').replace(/^v/, '')
const problems = []
if (pkg.version !== tag) problems.push(`package.json (${pkg.version}) != tag (${tag || 'vazia'})`)
if (manifest.version !== tag) problems.push(`ade.plugin.json (${manifest.version}) != tag (${tag || 'vazia'})`)
if (Object.keys(pkg.dependencies ?? {}).length > 0) problems.push('package.json tem "dependencies": plugins são livres de dependências em runtime')
for (const hook of ['preinstall', 'install', 'postinstall']) {
if (pkg.scripts?.[hook]) problems.push(`package.json tem o script de instalação "${hook}"`)
}
if (!pkg.keywords?.includes('jarvis-ade-plugin')) problems.push('falta a keyword "jarvis-ade-plugin"')
if (problems.length > 0) {
for (const p of problems) console.error(`✗ ${p}`)
process.exit(1)
}
console.log(`✓ release ${tag} consistente`)name: Publicar no npm
on:
push:
tags:
- 'v*'
permissions:
contents: read
id-token: write # necessário para --provenance
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
registry-url: https://registry.npmjs.org
- name: Conferir tag, versões e regras do plugin
run: node scripts/check-release.mjs
- name: Ver o que vai no pacote
run: npm pack --dry-run
- name: Publicar
run: npm publish --access public --provenance
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}- Crie o segredo
NPM_TOKENem Settings → Secrets and variables → Actions do repositório, com um token do npm que tenha permissão de publicar esse pacote. id-token: writee--provenanceanexam ao pacote a prova de que ele foi construído por este workflow neste repositório público.- Não há passo
npm install: o plugin não tem dependências, e o workflow não deve precisar delas. (Se você compila TypeScript, adicione o passo de build e versione o resultado, ou publique de uma árvore já compilada.)
# 1. suba a versão nos DOIS arquivos (package.json e ade.plugin.json)
npm version 0.2.0 --no-git-tag-version
# edite "version" em ade.plugin.json para 0.2.0
# 2. commit + tag + push — o workflow publica no npm
git commit -am "release: 0.2.0"
git tag v0.2.0
git push origin main --tagsAntes de registrar no Marketplace
- O repositório do GitHub é público.
- O
ade.plugin.jsonestá na raiz e é válido (veja a referência do manifesto). - O pacote npm está publicado, com
repositoryapontando para esse repositório e a keywordjarvis-ade-plugin. - Sem dependências em runtime e sem scripts de instalação.
Tudo certo? Siga para registrar no Marketplace.