| Title: | GitHub Connection for trama |
|---|---|
| Description: | Connects trama to GitHub without git or a terminal: account guide, login by the OAuth device flow, reuse of existing credentials, token kept in the system keyring, and an internal API to create repositories and make atomic commits and tags through the Git data API. It is a trama plugin, not a block collection: it has no nodes. When installed, the trama editor shows a GitHub menu. |
| Authors: | Pedro Mambelli Fernandes [aut, cre] |
| Maintainer: | Pedro Mambelli Fernandes <[email protected]> |
| License: | MIT + file LICENSE |
| Version: | 0.2.2 |
| Built: | 2026-10-22 10:35:41 UTC |
| Source: | https://github.com/uaipedro/trama |
O ambiente github-pages, que o GitHub cria ao ligar o Pages, só aceita
publicação da branch padrão. A publicação do trama sai de um workflow
disparado por tag (vX.Y.Z): sem uma regra para as tags, o deploy é
recusado. A regra é acrescentada, e regra igual já existente não é erro.
tr_github_ambiente_tags( repo, ambiente = "github-pages", padrao = "v*", token = NULL )tr_github_ambiente_tags( repo, ambiente = "github-pages", padrao = "v*", token = NULL )
repo |
Repositório como |
ambiente |
Nome do ambiente. |
padrao |
Padrão de nome das tags que podem publicar. |
token |
Token do GitHub; o padrão é o que |
Invisível, TRUE.
tr_github_api_url() é a API REST (https://api.github.com) e
tr_github_url() é o site (https://github.com), onde moram as páginas do
device flow e do cadastro. Os dois mudam por opção (trama.github.api_url,
trama.github.url) ou variável de ambiente (TRAMA_GITHUB_API_URL,
TRAMA_GITHUB_URL): é assim que os testes apontam para um GitHub falso.
tr_github_api_url() tr_github_url()tr_github_api_url() tr_github_url()
Uma URL sem barra no fim.
Onde o token do trama fica guardado
tr_github_chaveiro()tr_github_chaveiro()
Lista com backend (nome do backend do keyring) e persistente
(FALSE quando o token só vale enquanto o R estiver aberto).
Ordem: getOption("trama.github.client_id"), variável de ambiente
TRAMA_GITHUB_CLIENT_ID e, por fim, o Client ID do app "trama" fixado no
pacote. Só identifica o app; não é segredo.
tr_github_client_id(obrigatorio = TRUE)tr_github_client_id(obrigatorio = TRUE)
obrigatorio |
Se |
O Client ID, ou "" quando não há e obrigatorio = FALSE.
Grava arquivos num repositório sem git instalado: cria os blobs, monta a árvore sobre a do último commit, cria o commit e só então move a branch. Se a rede cair no meio, sobram objetos soltos que o GitHub descarta, e a branch continua onde estava: repetir o envio é seguro.
tr_github_commit( repo, mensagem, arquivos = character(), conteudos = list(), apagar = character(), branch = NULL, manter_outros = TRUE, pular_iguais = FALSE, token = NULL )tr_github_commit( repo, mensagem, arquivos = character(), conteudos = list(), apagar = character(), branch = NULL, manter_outros = TRUE, pular_iguais = FALSE, token = NULL )
repo |
Repositório como |
mensagem |
Mensagem do commit. |
arquivos |
Arquivos locais: vetor nomeado |
conteudos |
Conteúdo em memória: lista nomeada |
apagar |
Caminhos a remover do repositório. |
branch |
Branch; |
manter_outros |
|
pular_iguais |
Não reenviar arquivo que o repositório já tem igual (compara o sha de blob do git, calculado aqui). Custa uma leitura da árvore e poupa o envio de tudo o que não mudou. |
token |
Token do GitHub; o padrão é o que |
Lista com sha, url e mudou (FALSE quando a árvore ficou
igual e nenhum commit foi criado).
tr_github_criar_repo() cria um repositório já com um primeiro commit
(auto_init): a API de dados do Git recusa gravar num repositório vazio.
tr_github_repo() lê um repositório e devolve NULL se ele não existe.
tr_github_criar_repo( nome, privado = TRUE, descricao = NULL, dono = NULL, token = NULL ) tr_github_repo(repo, token = NULL)tr_github_criar_repo( nome, privado = TRUE, descricao = NULL, dono = NULL, token = NULL ) tr_github_repo(repo, token = NULL)
nome |
Nome do repositório (sem o dono). |
privado |
Repositório privado (o padrão) ou público. |
descricao |
Descrição curta, opcional. |
dono |
Organização onde criar; |
token |
Token do GitHub; o padrão é o que |
repo |
Repositório como |
Lista com repo ("dono/nome"), url, privado e branch
(a branch padrão).
O mesmo caminho do gh auth login: o trama pede um código ao GitHub, a
pessoa abre o link no navegador, digita o código e autoriza. Não precisa de
client secret nem de servidor de retorno.
tr_github_device_iniciar(client_id = tr_github_client_id(), escopos = .ESCOPOS) tr_github_device_conferir(pedido) tr_github_entrar(abrir = interactive(), salvar = TRUE)tr_github_device_iniciar(client_id = tr_github_client_id(), escopos = .ESCOPOS) tr_github_device_conferir(pedido) tr_github_entrar(abrir = interactive(), salvar = TRUE)
client_id |
Client ID do OAuth App (ver |
escopos |
Escopos pedidos. |
pedido |
O que |
abrir |
Abrir o link no navegador. |
salvar |
Guardar o token no chaveiro. |
tr_github_device_iniciar() pede o código; tr_github_device_conferir()
pergunta uma vez se a pessoa já autorizou (o editor chama em intervalos sem
travar a tela); tr_github_entrar() faz tudo no console e guarda o token no
chaveiro.
tr_github_device_iniciar(): lista com codigo (o que a pessoa
digita), link, device_code, intervalo (segundos entre conferências)
e expira_em.
tr_github_device_conferir(): lista com estado ("pendente",
"ok", "expirado" ou "negado"), intervalo e, quando "ok", token.
tr_github_entrar(): o usuário conectado (ver tr_github_usuario()),
invisível.
tr_github_execucoes() lista as execuções de um commit (o da tag);
tr_github_falha() diz em que job e etapa uma execução falhou.
tr_github_execucoes(repo, sha = NULL, token = NULL) tr_github_falha(repo, id, token = NULL)tr_github_execucoes(repo, sha = NULL, token = NULL) tr_github_falha(repo, id, token = NULL)
repo |
Repositório como |
sha |
Commit ( |
token |
Token do GitHub; o padrão é o que |
id |
Id da execução. |
tr_github_execucoes(): lista de execuções, cada uma com id,
nome, estado (queued, in_progress, completed...), conclusao
(success, failure... ou NA enquanto roda) e url.
tr_github_falha(): lista com job, etapa e url (do log), ou NULL.
O GitHub exige uma pessoa no cadastro, então o trama não cria a conta: abre a página certa e explica cada passo. O editor mostra os mesmos passos no menu GitHub.
tr_github_guia_conta(abrir = FALSE)tr_github_guia_conta(abrir = FALSE)
abrir |
Abrir a página de cadastro no navegador. |
Lista de passos, cada um com titulo, texto e, quando há,
link e rotulo (texto do link). Invisível quando imprime no console.
tr_github_pages() lê a configuração (NULL se o Pages está desligado).
tr_github_ativar_pages() liga em modo Actions (o site sai do workflow,
não de uma branch) ou, já ligado, troca o modo para Actions. Repositório
privado só tem Pages em plano pago: o GitHub recusa, e o erro diz isso.
tr_github_pages(repo, token = NULL) tr_github_ativar_pages(repo, token = NULL)tr_github_pages(repo, token = NULL) tr_github_ativar_pages(repo, token = NULL)
repo |
Repositório como |
token |
Token do GitHub; o padrão é o que |
Lista com url (endereço do site), modo ("workflow" ou
"legacy") e estado.
Release de uma tag
tr_github_release(repo, tag, token = NULL)tr_github_release(repo, tag, token = NULL)
repo |
Repositório como |
tag |
Nome da tag ( |
token |
Token do GitHub; o padrão é o que |
NULL se a release ainda não existe; senão lista com tag, url
e arquivos (nome -> URL de download).
Traz os arquivos do projeto de volta a como estavam numa versão salva.
Tudo é baixado antes de mexer em qualquer arquivo: se a rede cair, nada
muda. Antes de escrever, o estado atual de cada arquivo que vai ser
trocado ou removido é copiado para .trama/restauracao/<data-hora>/.
Arquivos que não vão em versão (.trama/, dados não marcados) não são
tocados. No trama.json, as chaves versionar e publicacoes ficam como
estão agora: a ligação com o GitHub não volta no tempo.
tr_github_restaurar(root = ".", sha, token = NULL)tr_github_restaurar(root = ".", sha, token = NULL)
root |
Pasta do projeto. |
sha |
Commit da versão (de |
token |
Token do GitHub; o padrão é o que |
Lista com escritos, removidos (caminhos) e copia (pasta com o
estado anterior, ou NA se nada foi trocado).
tr_github_salvar_token() é o que o login faz no fim; serve também para
colar um token criado à mão. tr_github_sair() apaga só o que o trama
guardou: GITHUB_PAT, gh e gitcreds são de outras ferramentas e
continuam valendo.
tr_github_salvar_token(token) tr_github_sair()tr_github_salvar_token(token) tr_github_sair()
token |
Token do GitHub. |
Grava no repositório privado do projeto um commit com exatamente os
arquivos que vão numa versão (ver tr_github_versionar_arquivos()).
Arquivo apagado do projeto, ou dado desmarcado, some da versão nova e
continua nas anteriores. Só o que mudou é enviado.
tr_github_salvar_versao(root = ".", mensagem, token = NULL)tr_github_salvar_versao(root = ".", mensagem, token = NULL)
root |
Pasta do projeto. |
mensagem |
Uma frase sobre o que mudou. |
token |
Token do GitHub; o padrão é o que |
Lista com sha, url, mudou (FALSE se nada mudou desde a
última versão), arquivos e bytes.
Tag já existente é recusada (erro de classe tr_github_erro_tag_existe):
versão publicada nunca muda.
tr_github_tag(repo, tag, sha = NULL, mensagem = NULL, token = NULL)tr_github_tag(repo, tag, sha = NULL, mensagem = NULL, token = NULL)
repo |
Repositório como |
tag |
Nome da tag, por exemplo |
sha |
Commit marcado; |
mensagem |
Com mensagem, cria tag anotada; sem, tag leve. |
token |
Token do GitHub; o padrão é o que |
Lista com tag, sha (do commit) e url.
Tags de um repositório
tr_github_tags(repo, token = NULL)tr_github_tags(repo, token = NULL)
repo |
Repositório como |
token |
Token do GitHub; o padrão é o que |
Vetor de nomes de tag (até 100, as mais recentes primeiro, na ordem da API).
tr_github_token() procura, nesta ordem:
tr_github_token()tr_github_token()
o token que o próprio trama guardou no chaveiro do sistema, no login;
as variáveis de ambiente GITHUB_PAT e GITHUB_TOKEN;
o gh (GitHub CLI), por gh auth token;
o gerenciador de credenciais do git, pelo gitcreds (o mesmo que o
usethis usa).
O token nunca é gravado no fluxo, no projeto ou no pacote publicado: só no
chaveiro (keyring, serviço trama-github).
O token (texto) com o atributo fonte ("chaveiro", "GITHUB_PAT",
"GITHUB_TOKEN", "gh" ou "gitcreds"), ou NULL se não houver.
Usuário conectado
tr_github_usuario(token = NULL)tr_github_usuario(token = NULL)
token |
Token do GitHub; o padrão é o que |
Lista com login, nome, avatar, perfil (URL) e plano.
Classifica os arquivos do projeto. Vão sempre (tipo = "projeto"):
trama.json, fluxos, código (R, Rmd, qmd, py, sql), metadados (md, cff,
yml, toml...) e as imagens das notas. São dados (tipo = "dados") todos
os outros: ficam de fora até serem marcados. Não aparecem, e nunca vão:
.trama/ (store, execuções, token do editor), .git/, arquivos de sessão
do R, .Renviron, .env e chaves.
tr_github_versionar_arquivos(root = ".", dados = NULL)tr_github_versionar_arquivos(root = ".", dados = NULL)
root |
Pasta do projeto. |
dados |
Arquivos de dados marcados; o padrão é o que está salvo no
|
Data frame com caminho, tamanho (bytes), tipo, incluido,
bloqueado (acima de 100 MB: o GitHub recusa) e aviso (texto ou NA).
tr_github_versionar_config() lê a chave versionar do trama.json
(NULL se o projeto nunca foi versionado). tr_github_versionar_marcar()
marca ou desmarca arquivos de dados para entrar nas próximas versões.
tr_github_versionar_config(root = ".") tr_github_versionar_marcar(root = ".", caminhos, incluir = TRUE)tr_github_versionar_config(root = ".") tr_github_versionar_marcar(root = ".", caminhos, incluir = TRUE)
root |
Pasta do projeto. |
caminhos |
Caminhos relativos à pasta do projeto. |
incluir |
|
A configuração (lista), invisível em tr_github_versionar_marcar().
Cria o repositório privado onde ficam as versões do projeto e o registra
no trama.json. É outro repositório, nunca o de uma publicação: o
rascunho não vaza junto com o que se publica.
tr_github_versionar_criar(root = ".", nome = NULL, token = NULL) tr_github_versionar_nome(root = ".")tr_github_versionar_criar(root = ".", nome = NULL, token = NULL) tr_github_versionar_nome(root = ".")
root |
Pasta do projeto. |
nome |
Nome do repositório; o padrão vem do nome da pasta. |
token |
Token do GitHub; o padrão é o que |
A configuração gravada.
tr_github_versionar_nome(): nome sugerido (pasta em minúsculas,
sem acento, com hífens).
Versões salvas
tr_github_versoes(root = ".", n = 30, token = NULL)tr_github_versoes(root = ".", n = 30, token = NULL)
root |
Pasta do projeto. |
n |
Quantas, das mais recentes. |
token |
Token do GitHub; o padrão é o que |
Data frame com sha, mensagem (primeira linha), data
(POSIXct, UTC), autor e url, a mais recente primeiro.
Contrato de plugin do trama (ver trama::tr_plugins()): o editor
carrega inst/trama/github.js e liga o server abaixo a cada sessão. O canal
é próprio: o JS manda input$trama_github ({acao}) e o R responde com a
mensagem trama_github ({tipo, ...}).
trama_plugin()trama_plugin()
Lista com js, css e server.