Releases automatizados compilam e publicam um plugin sandboxed quando você envia uma tag de versão ou inicia um workflow do GitHub Actions manualmente. Sua conta Atmosphere continua proprietária do perfil do pacote e dos registros de release. O GitHub identifica o workflow aprovado, e o serviço de release verifica a build e grava o release por meio de uma delegação restrita. O repositório não armazena uma credencial de conta Atmosphere.
Use emdash-plugin publish para um release iniciado do seu computador. Use este guia quando o GitHub Actions deve compilar e publicar releases.
Pré-requisitos
Prepare o seguinte antes de começar:
- Um repositório GitHub público contendo um plugin EmDash sandboxed.
@emdash-cms/plugin-cliinstalado como dependência de desenvolvimento. Plugins criados com a CLI já o incluem.- Um
emdash-plugin.jsoncválido comslug,publisher,license, um autor e um contato de segurança. Definarepocomo a URL canônica do GitHub, ou confirme o remoto GitHub detectado durante a configuração interativa. - Uma versão em
package.json, ou ememdash-plugin.jsoncpara um plugin somente de registro. - A conta Atmosphere nomeada por
publisher. - Um navegador que suporte passkeys. A aprovação de release exige verificação do usuário.
Execute a verificação do manifesto antes de configurar o workflow:
pnpm exec emdash-plugin validate
Configurar releases automatizados
-
Entre na CLI do plugin com a conta Atmosphere proprietária do pacote.
pnpm exec emdash-plugin login alice.example.comA CLI armazena esta sessão local de publicação fora do projeto. O GitHub Actions nunca a recebe.
-
Prepare o perfil do pacote e gere o workflow a partir do diretório do plugin.
pnpm exec emdash-plugin release setupO comando lê os metadados do pacote em
emdash-plugin.jsonc. Se o perfil do pacote estiver ausente, oferece criá-lo. Se o perfil existir sem configurações de delegated-release, oferece adicioná-las preservando os metadados existentes do pacote.Em um monorepo, execute o comando dentro do pacote do plugin ou passe
--dir <plugin-directory>. Se o manifesto não contiverrepo, a configuração detecta o remoto GitHuborigine pré-preenche o prompt do repositório.A configuração pergunta quando um release precisa de aprovação:
- When plugin permissions increase é o padrão. Um release espera aprovação quando seu acesso declarado se expande em relação ao último release.
- For every release exige aprovação para cada versão.
A configuração também pergunta se os releases exigem provenance verificável. Require provenance é o padrão para releases automatizados. Escolha Allow releases without provenance somente quando o mesmo perfil também precisar aceitar releases publicados diretamente de um ambiente local confiável.
A conta Atmosphere com a qual você entrou torna-se o aprovador inicial. O perfil vincula o pacote à URL canônica do repositório GitHub e registra a política de provenance selecionada.
Execute apenas a etapa do perfil quando um arquivo de workflow já existir:
pnpm exec emdash-plugin profile setupApós publicar o perfil do pacote, este comando mostra os comandos de release manual e do GitHub Actions.
Em um terminal não interativo, passe
--yespara aceitar as políticas padrão. Passe--repository <https-url>quando nem o manifesto nem o remoto Git fornecerem o repositório,--provenance optionalpara permitir releases sem provenance, e--confirmation alwayspara exigir aprovação em cada release. -
Revise e confirme o workflow gerado.
O comando cria
.github/workflows/emdash-release.yml. Ele não envia o arquivo e não substitui um workflow existente a menos que você passe--force.Se o repositório contiver
.changeset/config.json, a configuração interativa oferece Follow Changesets releases. Quando o Changesets libera um pacote contendoemdash-plugin.jsonc, o workflow reutilizável do EmDash publica a mesma versão. Conecte-o ao workflow Changesets existente conforme descrito abaixo. Caso contrário, o workflow gerado é executado para tags de pacote que correspondem a<slug>@<version>. Ambas as variantes suportam execuções manuais e podem ser selecionadas explicitamente com--trigger changesets|tags|manual.O workflow concede a cada job apenas as permissões
contents,id-tokeneattestationsnecessárias; fixa Actions de terceiros em identificadores de commit completos; executa a versão exata da CLI do plugin que gerou o arquivo; resolve cada pacote a partir do seu manifesto; constrói um bundle do plugin; cria provenance de build do GitHub para esses bytes exatos; e passa ambos os arquivos para a Action de release do EmDash.O workflow fica na raiz do repositório e é compartilhado por todos os pacotes de plugin desse repositório. Executar
release setupa partir de um pacote aninhado ainda escreve.github/workflows/emdash-release.ymlna raiz. -
Abra o painel do serviço de release e entre com a mesma conta Atmosphere.
Selecione Authorize publishing. Seu provedor de conta mostra a permissão delegada exata. A concessão retida pode criar registros de release de pacote e enviar blobs de pacote ou de imagem de listagem. Ela não pode criar ou editar perfis de pacote, atualizar ou excluir releases, nem escrever em outra collection.
-
Inicie o workflow de release.
Com Changesets, faça o merge do pull request de versão e deixe o job de publicação concluir. A Action Changesets passa os pacotes que liberou para o workflow reutilizável do EmDash. Pacotes npm comuns são ignorados; pacotes contendo
emdash-plugin.jsoncpublicam a mesma versão no EmDash.Com o gatilho de tag de pacote, atualize a versão do pacote antes de criar a tag de versão. Os seguintes comandos iniciam um release
1.2.3:git tag gallery@1.2.3 git push origin gallery@1.2.3Você também pode selecionar Run workflow na página GitHub Actions do repositório.
-
Aprove cada escopo de ref do repositório na primeira execução.
O serviço verifica que o perfil do pacote iniciador nomeia o repositório GitHub antes de criar uma solicitação de conexão. A Action escreve um link no resumo do job do GitHub e espera. Abra o link e confirme o repositório, o arquivo de workflow, a branch ou tag e o ambiente.
Para uma execução acionada por tag, escolha All package version tags ou Only this tag. Uma execução manual solicita aprovação na primeira vez que sua branch é usada. Confirmar outro escopo de tag ou branch o adiciona à conexão do repositório sem remover escopos existentes. O serviço armazena os IDs do repositório e do proprietário do GitHub, bem como os refs e ambientes aprovados. Pacotes posteriores reutilizam esses escopos somente quando seus perfis assinados nomeiam o mesmo repositório.
Aprovações de pacote criadas por workflows gerados mais antigos permanecem limitadas aos pacotes originais. O primeiro pacote ou ref sem correspondência solicita uma conexão de repositório; o serviço não amplia automaticamente uma aprovação de pacote existente.
-
Aprove o release quando necessário.
Um release que expande as permissões do plugin, ou um perfil configurado para confirmação em cada release, entra em Awaiting approval. Abra a URL de aprovação a partir da saída da Action ou do painel de releases. Cadastre uma passkey se a conta aprovadora ainda não tiver uma, revise a alteração de permissão e aprove ou rejeite o release.
A configuração padrão da Action retorna com sucesso quando o release alcança Awaiting approval. O workflow do serviço continua aguardando a decisão do navegador e publica após a aprovação.
Conectar um workflow Changesets
O .github/workflows/emdash-release.yml gerado aceita o JSON de pacotes publicados da Action Changesets por meio de workflow_call. Adicione uma saída ao job Changesets existente e, em seguida, chame o workflow EmDash a partir de um job dependente. Substitua release e changesets quando o job ou passo existente usar outro ID.
Changesets Action v2 usa a saída published-packages. Adicione a seguinte saída de job e o chamador a um workflow que use Changesets CLI v3:
jobs:
release:
# Keep the existing runner, permissions, and steps.
outputs:
published: ${{ steps.changesets.outputs.published }}
published-packages: ${{ steps.changesets.outputs['published-packages'] }}
publish-emdash-plugins:
needs: release
if: needs.release.outputs.published == 'true'
uses: ./.github/workflows/emdash-release.yml
with:
published-packages: ${{ needs.release.outputs['published-packages'] }}
permissions:
contents: read
id-token: write
attestations: write
Changesets Action v1 usa a saída do passo em camel-case publishedPackages. Use esta expressão para um workflow que use Changesets CLI v2:
jobs:
release:
# Keep the existing runner, permissions, and steps.
outputs:
published: ${{ steps.changesets.outputs.published }}
published-packages: ${{ steps.changesets.outputs.publishedPackages }}
publish-emdash-plugins:
needs: release
if: needs.release.outputs.published == 'true'
uses: ./.github/workflows/emdash-release.yml
with:
published-packages: ${{ needs.release.outputs['published-packages'] }}
permissions:
contents: read
id-token: write
attestations: write
Mantenha o Changesets responsável pelo pull request de versão e pela publicação do pacote. O chamador EmDash é executado somente quando o Changesets reporta published: true. Para pacotes privados somente EmDash, defina privatePackages.version e privatePackages.tag como true em .changeset/config.json. Adicione aplicações privadas não relacionadas e fixtures de teste a ignore.
Adicionar outro pacote
Prepare o perfil do pacote a partir do seu diretório de origem. O workflow raiz existente e a conexão do repositório são reutilizados:
pnpm exec emdash-plugin profile setup --dir packages/comments
Com Changesets, adicione o pacote a um changeset e faça o merge do pull request de versão. Com o gatilho de tag de pacote, atualize a versão do pacote e envie sua tag:
git tag comments@1.0.0
git push origin comments@1.0.0
O workflow resolve comments para um emdash-plugin.jsonc, verifica a versão selecionada e confirma que o perfil assinado nomeia o repositório conectado antes de aceitar uploads de artefatos. IDs de pacote duplicados e divergências de versão falham antes da attestation.
O que o serviço de release verifica
O serviço conclui estas verificações antes de gravar um release:
- O token OpenID Connect (OIDC) do GitHub nomeia um repositório, proprietário, workflow, ref, ambiente, commit, execução e runner hospedado no GitHub autorizados.
- O perfil do pacote existe, está assinado pelo publisher, contém configurações de delegated-release e nomeia o mesmo repositório GitHub canônico.
- O pacote e a versão solicitados correspondem ao bundle do plugin compilado.
- A checksum do pacote corresponde aos bytes enviados.
- A provenance do GitHub cobre o mesmo bundle, repositório, workflow, commit e execução.
- O acesso declarado do registro de release corresponde ao manifesto do bundle.
- O registro de versão ainda não existe.
- Qualquer aprovação por passkey necessária cobre o resultado exato da verificação e a revisão atual do perfil.
A Action solicita um token OIDC do GitHub novo para cada chamada ao serviço. Arquivos de bundle e provenance entram em armazenamento transitório privado somente após a autorização do workflow. O serviço envia bytes verificados de pacote e imagem para o personal data server (PDS) do publisher, cria o registro de release lá e expõe a provenance verificada por meio de uma URL imutável endereçada por checksum.
Limites de autoridade
Cada credencial tem uma função:
| Credential | Used by | Authority |
|---|---|---|
| Local CLI OAuth session | emdash-plugin profile setup | Create or update the publisher-owned package profile after local confirmation. |
| GitHub OIDC token | Release Action | Identify one GitHub workflow run to the service. It grants no AT Protocol write access. |
| Release-service delegation | Release service | Create package release records and upload the required blobs. |
| Publisher application session | Release dashboard | Authorise workflow connections and revoke delegated publishing. |
| Approver session and passkey | Approval page | Approve or reject one checksum-bound release verification. |
| Cloudflare Access identity | Service operator console | Operate the hosted service. It does not represent a publisher or approver. |
O serviço armazena o estado do publisher e do aprovador separadamente. Entrar para ver seus releases não concede acesso de operador, e uma identidade de operador não pode aprovar um release como publisher.
Comportamento da Action
O workflow gerado usa a Action de apps/release-action. A Action aceita um bundle compilado mais provenance Sigstore bruta, ou um release-file de compatibilidade contendo fontes de artefatos HTTPS vinculadas a checksum. Não combine release-file com entradas de bundle ou provenance.
O workflow gerado padrão fornece estas entradas. Elas são mostradas aqui para que você possa revisar o arquivo gerado sem precisar inferir o que cada valor autoriza:
| Input | Value |
|---|---|
service-url | Release-service HTTPS origin. |
publisher-did | DID that owns the package profile and releases. |
bundle-file | The single tarball produced by emdash-plugin release prepare. |
provenance-file | Raw bundle-path output from actions/attest-build-provenance. |
A Action retorna estas saídas:
| Output | Meaning |
|---|---|
connection-url | Browser URL for first-run workflow approval. |
intent-id | Release intent identifier. |
state | Published, terminal, or awaiting_approval state. |
approval-url | Browser URL when passkey approval is required. |
release-uri | Published release AT URI. |
release-cid | Published release record CID. |
reason-code | Stable reason for a terminal intent. |
Consulte a referência da Action para entradas opcionais, workflows com fontes URL personalizadas, controles de polling e o comportamento exato das saídas.
Solução de problemas
PACKAGE_PROFILE_REQUIRED
O perfil do pacote está ausente, não tem configurações de delegated-release, usa uma URL de repositório não canônica ou nomeia um repositório diferente do workflow do GitHub.
Execute a configuração do perfil localmente com a conta do publisher e inicie o workflow novamente:
pnpm exec emdash-plugin profile setup
Esta verificação é executada antes de o serviço aceitar uploads de bundle ou provenance.
Repositório público necessário
O GitHub usa uma raiz de confiança Sigstore privada para repositórios privados e internos. O verificador de release atualmente confia apenas em provenance pública do GitHub. Mova o workflow de release para um repositório público ou publique localmente com emdash-plugin publish.
WORKLOAD_NOT_ALLOWED
O repositório, proprietário, arquivo de workflow, ref ou ambiente do GitHub não corresponde à política de workflow aprovada. Abra o painel de releases e aprove uma nova conexão de workflow com o escopo pretendido.
PROFILE_FETCH_FAILED
O serviço não pôde verificar o perfil a partir do PDS do publisher. Tente novamente quando o provedor da conta estiver disponível. Execute emdash-plugin profile setup se o perfil foi removido ou alterado.
POLL_TIMEOUT
A Action atingiu timeout-minutes antes que a aprovação do workflow, a aprovação do release ou a publicação fossem concluídas. Verifique o estado do intent no painel de releases antes de executar novamente. Uma nova execução da mesma execução do GitHub Actions reutiliza sua chave de idempotência.
Revogar a publicação automatizada
Selecione Turn off automated publishing no painel de releases. A revogação limpa a delegação de release retida. Perfis de pacote existentes, releases, rótulos de moderação, plugins instalados e o login do painel não mudam.
Reconecte a publicação e aprove o workflow novamente antes do próximo release automatizado.
Documentação relacionada
- Bundling and publishing cobre publicação local e validação de bundles.
- The plugin manifest define metadados do pacote e acesso declarado.
- Capabilities and security explica as permissões revisadas durante a aprovação do release e a instalação.
- The plugin registry explica descoberta, moderação e verificação da instalação.