Avalie seu código morto, sem fazer upload.
Rode uma pequena ferramenta open source na sua máquina. Ela lê seu repositório localmente, escreve um resumo de um único arquivo (contagens e hashes, nunca seu código) e você decide se envia.
Rode isto no seu terminal:
curl -fsSL https://galenadata.com/fingerprint.sh | shPor que um comando e não um download? O macOS bloqueia apps não assinados baixados pelo navegador. Esta rota evita isso, e ainda verifica os checksums.
Rode isto no seu terminal:
curl -fsSL https://galenadata.com/fingerprint.sh | shPrefere o terminal?curl -fsSL https://galenadata.com/fingerprint.sh | shnpx galena-fingerprintbrew install galenadata/tap/fingerprintCódigo só no GitHub? →
Zero chamadas de rede.
Não existe cliente HTTP no binário. Verifique com strace -f -e trace=network.
Seu código nunca sai da sua máquina.
O manifesto contém contagens, hashes e estatísticas; nunca código-fonte.
Segredos são contados, nunca lidos.
A detecção de credenciais reporta contagens por classe de regra; os valores encontrados não são registrados em lugar nenhum.
Você revisa antes de qualquer envio.
A ferramenta escreve um arquivo local e para. Enviar é um ato seu, separado e manual.
Open source, ~4.600 linhas, sem dependências.
Leia cada linha no GitHub. Ver o código-fonte →
O que acontece quando você roda
Dê dois cliques no aplicativo.
Seu navegador abre com a lista dos seus repositórios, encontrados automaticamente.
Seus repositórios
3 repositórios encontrados nesta máquina
acme-app · main · 214 commitsFazer fingerprint deste repobilling-service · main · 892 commitslegacy-site · master · 3.401 commitsEscolha um.
Ele faz o fingerprint do repositório localmente; históricos grandes levam cerca de um minuto.
── galena-fingerprint v0.4.0 ───────────────────────────────── repo main @ c53aa0cce23a commits 12 over 1877 days · 2 authors · 1 merges (1 PR merges) head 21 files · 11.9 KB · 125 LOC raw · test ratio 0.10 source 94 LOC in 7 files (75% of raw) · 31 LOC excluded: data 8, snapshot 5, vendored 4, asset 3, … languages JavaScript (6.1 KB), Text/Other (4.8 KB), Binary/Other (528 B), JSON (152 B) deps npm: 3 direct · 33% pinned · lockfile ✓ deps pip: 3 direct · 33% pinned · NO LOCKFILE licenses GPL-3.0×1, MIT×1 ⚠ copyleft license inside a vendored tree secrets ⚠ 3 potential credential hits across 3 rule classes (counts only — values not recorded) aws_access_key_id head:0 hist:1 connection_string_with_creds head:0 hist:1 stripe_key head:0 hist:1 risk paths ⚠ env:1 sql-dumps:1 sqlite:1 keys:0 cred-files:0 vendored node_modules files:1 vendor files:2 committed at HEAD churn +128/-3 lines · median commit 3 · p90 13 · 0% huge · 1.0x rework messages 0% conventional · 0% one-word · 0 reverts · mean 23 chars tickets forge-issues · 1 distinct refs · 8% of commits reference one · 0% claim a fix provenance 75% of commits and 98% of added lines predate 2023-01-01 signatures not checked (-verify-signatures) · 2 timezones · dates are self-reported (verify via SWHIDs) ai assist 2 commits (17%) carry an AI co-author trailer: Claude 1, GitHub Copilot 1 first 2024-03-04 · +2 lines on those commits · a floor, not a share: trailers are optional, so untagged commits may also be assisted blobs 21 at HEAD (3 historical-only) — hashes usable as SWHIDs minhash 2 file sketches + repo sketch output galena-manifest.json (106 ms)Saída real do nosso repositório de demonstração, que tem credenciais falsas plantadas de propósito. "head:0 hist:1" significa que uma credencial foi commitada e depois apagada: ela continua vivendo no histórico do git, e a ferramenta detecta isso sem nunca ler o valor.
Revise e então envie.
O resumo é um arquivo JSON no seu disco. Olhe por dentro se quiser, e depois envie na página de avaliação. Envie para receber uma avaliação →
Meu código só está no GitHub
- No seu repositório em github.com: Add file e depois Create new file.
- Nomeie como .github/workflows/galena-fingerprint.yml.
- Cole o workflow abaixo e faça o commit.
- Vá à aba Actions, abra "Galena Fingerprint" e clique em Run workflow.
- Quando terminar, baixe o artefato galena-manifest e envie na página de avaliação.
# Galena Fingerprint — run entirely inside YOUR GitHub account.
# Your code never leaves GitHub's runners; only the summary manifest
# is produced, and it lands as a downloadable artifact on this run.
#
# To use (no local install needed):
# 1. In your repo on github.com: Add file → Create new file
# 2. Name it: .github/workflows/galena-fingerprint.yml
# 3. Paste this file's contents, commit.
# 4. Actions tab → "Galena Fingerprint" → Run workflow.
# 5. When it finishes, download the "galena-manifest" artifact and
# upload it at https://galenadata.com/valuation
name: Galena Fingerprint
on:
workflow_dispatch:
permissions:
contents: read
jobs:
fingerprint:
runs-on: ubuntu-latest
steps:
- name: Check out full history
uses: actions/checkout@v4
with:
# CRITICAL: the default shallow clone would gut every history
# metric (commits, authors, deleted-secret detection).
fetch-depth: 0
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.22'
- name: Build fingerprint tool from public source
run: |
git clone --depth 1 https://github.com/galenadata/fingerprint /tmp/fp
cd /tmp/fp && go build -o /tmp/galena-fingerprint .
- name: Run fingerprint (zero network calls; counts only, never values)
run: /tmp/galena-fingerprint -o galena-manifest.json .
- name: Upload manifest as artifact
uses: actions/upload-artifact@v4
with:
name: galena-manifest
path: galena-manifest.json
# Optional: submit automatically instead of downloading the artifact.
# Create a repository secret GALENA_SUBMIT_TOKEN (from your valuation
# page) and uncomment:
#
# - name: Submit manifest to Galena
# run: |
# curl -fsS -X POST https://galenadata.com/api/valuation \
# -H "Authorization: Bearer ${{ secrets.GALENA_SUBMIT_TOKEN }}" \
# -F "[email protected]"
O workflow faz checkout com fetch-depth: 0 de propósito: um checkout raso deixaria as métricas de histórico incompletas, e o manifesto se marca sozinho se isso acontecer. Tudo roda dentro da sua conta do GitHub; seu código nunca toca nossos servidores.
O que há no manifesto
- Forma do repo
- Branches, tamanho e contagem de arquivos no HEAD
- Histórico de commits
- Atividade ao longo do tempo e autores, com e-mails hasheados
- Linguagens e testes
- Mistura de linguagens por bytes e proporção de testes
- Linhas de código reais
- As linhas que você escreveu de fato, contando à parte código de terceiros, lockfiles, bundles e arquivos gerados
- Dependências
- Dependências diretas, fixação de versões, presença de lockfile
- Licenças
- Licenças detectadas, incluindo alertas de copyleft
- Segredos
- Contagens de credenciais por classe de regra; valores nunca registrados
- Arquivos de risco
- Arquivos .env, dumps SQL, bancos de dados e chaves, por contagem
- Hashes de arquivos
- Hashes de conteúdo para checar exposição pública (SWHIDs)
- Qualidade dos commits
- Linhas por commit, proporção de retrabalho, disciplina nas mensagens
- Tickets
- Referências a issues extraídas das mensagens de commit e o que alegam fechar
- Procedência
- Quanto foi escrito antes de 2023, atividade por ano, sinais de adulteração de datas
- Assistência de IA
- Commits assinados por um assistente de código, por ano; é um piso, porque essas assinaturas são opcionais
Ver um manifesto de exemplo →Ver um grande: 1,2 M de linhas brutas, 269k de código real, modo snapshot (1,6 MB) →
O exemplo grande é um repositório público de código aberto (BBC simorgh, Apache-2.0, sem afiliação), analisado a partir de um ZIP baixado: por isso roda em modo snapshot e não tem histórico de commits.
Até os caminhos de arquivo parecem sensíveis? Rode com --redact-paths e os caminhos também são hasheados.
Dúvidas
É seguro rodar?+
Sim. É open source (~4.600 linhas de Go, sem dependências), faz zero chamadas de rede e você mesmo pode verificar com strace -f -e trace=network. O binário não consegue enviar nada: ele não tem cliente HTTP.
E se meu repo tiver segredos?+
A ferramenta conta possíveis credenciais por classe de regra; os valores encontrados nunca são lidos para o manifesto. Essas contagens são exatamente o que uma avaliação precisa saber, e os valores nunca saem da sua máquina.
Preciso ter git instalado?+
A ferramenta usa git para ler o histórico. O macOS oferece instalar as ferramentas de desenvolvedor na primeira vez. No Windows, instale o git com a linha abaixo. Ou use o caminho do GitHub sem instalar nada.
Linha única para Windows:winget install Git.Git
Posso ver o que é enviado?+
Sim. O resultado é um arquivo JSON no seu disco; abra em qualquer editor. Nada é enviado até você mesmo fazer o upload na página de avaliação.
Meu código é antigo, ou nunca esteve no git. Ainda vale?+
Sim. Se o código vivia em SVN, CVS, Mercurial ou TFS, converta para git primeiro (git svn clone, cvs2git, hg-fast-export, git-tfs): o histórico completo vem junto, e uma década de histórico real vale mais, não menos. Se nunca esteve em controle de versão, ou você só tem um ZIP baixado, rode a ferramenta com -snapshot: ela faz o fingerprint dos arquivos como estão, e o manifesto fica marcado como snapshot_mode para ninguém confundir com um histórico completo. Sua pasta nunca é modificada.
O que acontece depois do upload?+
Revisamos o manifesto, voltamos com uma faixa indicativa, e todo o resto segue o mesmo processo com NDA de qualquer outro anúncio. Envie para receber uma avaliação →