okf-gem · blog
Engenharia · Distribuição

Rode o okf em qualquer lugar: a imagem Docker

RS Rodrigo Serradura · ·4 min de leitura
🇺🇸 Read in English

O gem foi feito para ser leve. Roda em todo Ruby desde o 2.4, o piso que um sistema operacional já traz, com duas dependências em Ruby puro e nenhum passo de build. Essa leveza sempre foi o ponto, e mesmo assim ela deixa uma suposição de pé: a de que o Ruby da máquina é seu para usar.

A barreira nunca foi a ferramenta, foi o runtime

Nem todo ambiente é um ambiente Ruby. Um job de CI de um projeto Go ou Rust, um passo de Kubernetes, um pipeline de dados, uma pessoa no time que nunca digitou gem install: em cada um deles, adicionar um toolchain de Ruby só para alcançar um validador de Markdown é mais atrito do que o validador vale. O pedido que deu início a isso veio de alguém construindo em cima do OKF que não queria assumir uma dependência de Ruby, e era o pedido certo. Um formato feito para ser portável tem que ser alcançável sem adotar a linguagem em que ele por acaso foi escrito.

Uma imagem, a CLI inteira

Então o okf agora vem como uma imagem oficial em ghcr.io/serradura/okf. É a mesma CLI, entrypoint e tudo, com o seu bundle montado em /data:

docker run --rm -v "$PWD:/data" ghcr.io/serradura/okf validate .
docker run --rm -v "$PWD:/data" ghcr.io/serradura/okf lint .
docker run --rm -v "$PWD:/data" ghcr.io/serradura/okf search . "graph server"

O que você digitaria depois de okf, você digita depois do nome da imagem. Nada é instalado no host, e nada fica para trás. O --rm joga o container fora; o mount é o seu diretório, lido como ..

O grafo, servido de dentro de um container

O grafo ao vivo também funciona, com um detalhe. O servidor escuta em 127.0.0.1 por padrão, o que é invisível de fora de um container, então escute em 0.0.0.0 e publique a porta:

docker run --rm -v "$PWD:/data" -p 8808:8808 \
  ghcr.io/serradura/okf server . --bind 0.0.0.0

Abra http://127.0.0.1:8808 e o grafo está lá. Como o servidor lê cada corpo do disco a cada requisição, edições no bundle montado aparecem no próximo clique, então essa é uma boa forma de navegar por um bundle que você está escrevendo agora.

Dispense o prefixo do docker

Se a linha inteira do docker run é mais do que você quer digitar, instale o comando. Ele entra no seu PATH como okf, monta o seu diretório e, no caso do servidor, publica a porta e abre o bind sozinho. Como se chama okf, a skill do agente e todos os seus hábitos continuam funcionando, sem Docker à vista:

curl -fsSL https://docker.okfgem.com/install.sh | sh
okf validate .
okf server .

Os mesmos comandos da CLI, sem instalar nada além de um script pequeno que você pode ler antes.

Construída a partir do código, publicada a cada release

A imagem não é um embrulho conveniente em volta do gem install. Ela é construída a partir do código do próprio gem a cada tag de release, então a versão dentro dela é exatamente o commit de onde ela saiu, sem nenhuma janela em que a imagem e o gem discordem. É publicada para linux/amd64 e linux/arm64, então roda igual num runner de CI e num laptop Apple Silicon. Fixe :1.6.0 quando quiser que a CI fique parada, ou acompanhe :latest.

Tudo o que o gem faz, ele continua fazendo 100% local. A imagem muda como você alcança o okf, não o que ele é: sem conta, sem telemetria, o seu conhecimento nunca sai da máquina.

Baixe e aponte para um repositório

Um comando, sem Ruby, o seu bundle em /data. A página de docs tem a referência completa; a demo é a mesma ferramenta servindo um bundle real.