Galena Fingerprint

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.

Prefere 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

  1. Dê dois cliques no aplicativo.

    Seu navegador abre com a lista dos seus repositórios, encontrados automaticamente.

  2. Escolha 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.

  3. 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

  1. No seu repositório em github.com: Add file e depois Create new file.
  2. Nomeie como .github/workflows/galena-fingerprint.yml.
  3. Cole o workflow abaixo e faça o commit.
  4. Vá à aba Actions, abra "Galena Fingerprint" e clique em Run workflow.
  5. 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

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 →