O portal
O portal é onde contratos e implementações ficam para outras pessoas usarem. Ele é opcional: uma task vinda de um diretório do próprio repositório, resolvida por caminho, não precisa de portal nenhum. É assim que se escreve um worker antes de publicá-lo.
Quando existe, ele guarda duas coisas: o catálogo e quem pode escrever nele.
Apontar para um
Seção intitulada “Apontar para um”export OREN_REGISTRY=https://seu-portalOu, no projeto, .oren/config.json — que se commita quando a equipe compartilha
o mesmo catálogo. Ver Instalação.
O portal serve para resolver, não para executar. Depois do oren install,
nada mais toca a rede: é o oren.lock que garante que uma execução não depende
do portal estar no ar. Ver Reprodutibilidade.
oren loginAbra no navegador: https://seu-portal/dispositivoe informe o código: WDJB-MJHT
aguardando autorização…✓ autenticado como voceÉ o device flow (RFC 8628): a CLI mostra um código curto, você autentica no navegador, e a CLI espera a aprovação. A CLI nunca vê a sua senha — é o que permite gerenciador de senhas, segundo fator e conta federada, nenhum dos quais cabe num prompt de terminal.
O que fica na sua máquina é um token revogável, em
~/.oren/credenciais.json com modo 600. Um por registry, então máquinas que
falam com portais diferentes não se confundem.
Entrando por um provedor de identidade
Seção intitulada “Entrando por um provedor de identidade”Se quem hospeda o portal configurou um, a tela de entrar mostra um botão para ele — e só nesse caso. Um portal sem provedor mostra só o formulário de senha.
Qualquer provedor OpenID Connect serve; é configuração, não código:
spring.security.oauth2.client.provider.oidc.issuer-uri=https://idp.exemplo/realms/acmespring.security.oauth2.client.registration.oidc.client-id=oren-portalspring.security.oauth2.client.registration.oidc.client-secret=...spring.security.oauth2.client.registration.oidc.scope=openid,email,profilespring.security.oauth2.client.registration.oidc.client-name=Entrar com a AcmeA identidade é o par (emissor, assunto) do token, e não o e-mail: o sub é
estável e opaco, enquanto um e-mail muda quando alguém troca de sobrenome, de
time ou de domínio.
Se o e-mail já tem conta local aqui, a identidade do provedor é vinculada a ela automaticamente só quando o provedor afirma ter verificado o endereço. Caso contrário você entra com a senha uma vez e vincula pela tela da sua conta — um provedor que não verifica endereços deixaria qualquer um que cadastrasse o seu e-mail lá entrar na sua conta aqui.
Contas locais continuam funcionando nos dois casos. Ter os dois — senha e provedor na mesma conta — é suportado, e se administra em Conta → Formas de entrar. É lá também que se completa o vínculo recusado acima: entra com a senha e vincula por ali, onde a posse da conta já foi provada pela sessão.
Desvincular é recusado quando é a única forma que resta de entrar. Uma conta criada pelo provedor não tem senha, e não existe caminho de recuperação — o portal não manda e-mail.
Duas alternativas, quando o navegador não está à mão:
oren login --token # cola um token criado na interfaceecho $TOKEN | oren login --tokenEm CI não se usa nenhuma das duas: OREN_TOKEN com um token emitido antes.
A CLI nunca pede senha. Esse caminho existiu e saiu: com SSO no portal, uma conta federada não tem senha a digitar.
Organizações
Seção intitulada “Organizações”Publicar exige ser membro de uma organização, com papel publicador ou admin.
O namespace dela é o que aparece em toda referência: techlite/analyze-commits.
Conta e organização são coisas diferentes. Criar a conta techlite não cria
a organização techlite — quem tenta publicar sem ela recebe
organizacao.nao_encontrada.
A organização se cria na interface, em Conta → Organizações. Quem cria vira admin.
| Papel | O que pode |
|---|---|
leitor |
ver o catálogo privado da organização |
publicador |
publicar versões novas |
admin |
além de publicar, administrar quem entra |
O namespace é imutável. Ele aparece em cada oren.yaml que referencia uma
task sua, e renomear quebraria todos.
Mantenedores
Seção intitulada “Mantenedores”Uma task pode ter mantenedores. Quando tem, só eles publicam nela — mesmo outros publicadores da organização.
É restrição, nunca concessão: quem não publica na organização não passa a publicar por virar mantenedor. E ausência de mantenedor é ausência de restrição, não o contrário — senão a primeira execução dessa regra trancaria todas as tasks que já existem.
Serve também para reservar: atribuir mantenedor a uma task que ainda não tem versão nenhuma garante que ninguém publique a v1 no lugar do time certo.
Publicar
Seção intitulada “Publicar”oren publish ./meu-worker --dry-run # o que sairiaoren publish ./meu-workerO diretório precisa de um task.yaml, e as implementações vêm de impl.yaml
ou de impl-<variante>/impl.yaml.
O contrato vai sempre primeiro: uma implementação só é aceita se o contrato que ela satisfaz já existir no catálogo.
Implementações com build: são recusadas — quem consome receberia uma
referência a um diretório que não existe do lado dele. Publique a imagem e troque
por image:. Ver Publicando.
O que nunca volta atrás
Seção intitulada “O que nunca volta atrás”Três coisas, e todas por causa de quem já depende:
Versão publicada é imutável. Não há --force nem republicação. Para
corrigir, suba metadata.version e publique de novo. É o que permite ao
oren.lock prometer que o mesmo pipeline executa o mesmo código.
Publicado não é apagado, é depreciado. Uma versão depreciada continua resolvível e continua entregando o mesmo conteúdo; a CLI só avisa ao usá-la.
Privado pode virar público; o contrário, não. Uma task privada é visível só para a organização. Torná-la pública é uma decisão sem volta — retirar depois quebraria todo pipeline que passasse a referenciá-la. O banco recusa a operação inversa, não só a interface.
oren token listoren token revoke <id>O valor em claro aparece uma vez, na emissão, e nunca mais — o servidor guarda só o hash. A lista mostra o prefixo, a descrição e o último uso, que é como se descobre um token esquecido num runner antigo.
Revogar é imediato e definitivo. oren logout é outra coisa: esquece a
credencial local e deixa o token válido no servidor.
Hospedar o seu
Seção intitulada “Hospedar o seu”O portal é um jar e um Postgres. Mesmo software, sem versão reduzida — nada sai da sua rede, e task privada continua privada porque o servidor é seu.
Ele serve tudo (interface e API) sob um prefixo configurável, para conviver com outras aplicações atrás do mesmo proxy:
server.servlet.context-path=/oren