Skip to content

Ronbragaglia/copa26

Repository files navigation

🏆 copa26

CLI, GitHub Action e dataset aberto da Copa do Mundo FIFA 2026 (USA, Canadá, México).

CI CodeQL npm version License: MIT OpenSSF Best Practices

npx copa26 next BRA
   ___           ___      ___   __
  / __\___  ___ / _ \__ _|_  ) / /
 / /__/ _ \/ _ \ /_)/ _` |/ / / _ \
 \____/\___/ .__/ ___/\__,_/___\___/
          |_|

  27 dias para a abertura. 2026-06-11

╭─────────────────────────────────────────────────╮
│ Próximo jogo de 🇧🇷 Brasil                       │
├─────────────────────────────────────────────────┤
│ Jogo:    🇧🇷 Brasil  x  TBD 🏳️                    │
│ Quando:  qua 17 jun, 16:00 (America/New_York)   │
│ Onde:    MetLife Stadium, Nova York/NJ          │
│ Status:  scheduled                              │
╰─────────────────────────────────────────────────╯

✨ Por que esse projeto?

A Copa do Mundo de 2026 é histórica:

  • 🏟️ Primeira edição com 48 seleções (era 32)
  • 🌎 Três países-sede: EUA, México, Canadá
  • 104 jogos (era 64)
  • 🏆 16 cidades-sede entre os três países

copa26 entrega, em um único pacote:

  • CLI no terminal com npx copa26
  • Widget para o seu README do GitHub
  • GitHub Action que atualiza o seu perfil automaticamente
  • Dataset aberto (JSON e TypeScript) para usar em qualquer projeto

🚀 Instalação

Sem instalar (npx)

npx copa26 next BRA

Global

npm install -g copa26
copa26 --help

Como dependência

npm install copa26
import { TEAMS, GROUPS, STADIUMS, KEY_DATES } from 'copa26';

console.log(`Total de seleções: ${TEAMS.length}`);

📖 Comandos

Comando O que faz
copa26 Banner e próximo jogo geral
copa26 next [team] Próximo jogo geral ou de uma seleção
copa26 groups [A-L] Todos os 12 grupos ou um específico
copa26 teams [code] Lista das 48 seleções ou detalhe de uma
copa26 stadiums [USA/MEX/CAN] 16 sedes (filtra por país opcional)
copa26 countdown Contagem regressiva para 11 de junho de 2026
copa26 --version Versão instalada
copa26 --help Ajuda

Exemplos:

copa26 next BRA           # Próximo jogo do Brasil
copa26 teams Brasil       # Detalhes da seleção
copa26 groups C           # Apenas o grupo C
copa26 stadiums MEX       # Sedes no México
copa26 countdown          # Dias e horas restantes

🎨 Widget para o seu README

Cole isso no seu profile README (Ronbragaglia/Ronbragaglia/README.md):

<!-- COPA26:START -->
![Copa 2026, Brasil](https://raw.githubusercontent.com/Ronbragaglia/copa26/main/widgets/BRA.svg)
<!-- COPA26:END -->

O widget é atualizado automaticamente todos os dias por uma GitHub Action. Ele mostra os dias restantes até a abertura e o próximo jogo da seleção.

Para trocar de seleção, substitua BRA por ARG, POR, JPN e qualquer outro dos 48 códigos disponíveis.

🤖 GitHub Action

Quer que o seu próprio repositório atualize um README com a seleção que você escolher?

# .github/workflows/copa26.yml
name: Atualizar widget Copa 2026
on:
  schedule: [{ cron: '0 9 * * *' }]
  workflow_dispatch:

permissions:
  contents: write

jobs:
  update:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: Ronbragaglia/copa26@v0.1.0
        with:
          team: BRA
          readme: README.md
      - run: |
          git config user.name 'github-actions[bot]'
          git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
          git add README.md
          git diff --cached --quiet || (git commit -m "chore: atualiza widget copa26" && git push)

⚠️ Segurança: em produção, fixe a action por SHA, nunca por tag. Exemplo: Ronbragaglia/copa26@<sha>.

📊 Dataset aberto

Todos os dados estão em TypeScript com tipos. A versão JSON também fica disponível em data/:

import { TEAMS, type Team } from 'copa26';

const sulamericanos = TEAMS.filter((t) => t.confederation === 'CONMEBOL');
// 6 seleções: ARG, BRA, COL, ECU, PAR, URU

Estrutura:

  • TEAMS, 48 seleções (sede, classificada ou em repescagem)
  • GROUPS, 12 grupos da fase de grupos (A até L)
  • STADIUMS, 16 estádios com capacidade e coordenadas
  • MATCHES, calendário de jogos
  • KEY_DATES, abertura, fases e final

Sentiu falta de algo? Abra uma issue ou mande um PR.

🤖 Auto-atualização durante a Copa

Entre 1 de junho e 31 de julho de 2026, um workflow agendado roda a cada 2 horas, busca resultados na API pública football-data.org e abre um Pull Request automático quando detecta novos jogos ou placares atualizados.

Como funciona:

  1. Workflow auto-sync.yml dispara a cada 2 horas (cron).
  2. Verifica se estamos na janela da Copa, senão faz skip gracioso.
  3. Chama scripts/sync-results.mjs, que valida cada match contra um schema rígido (códigos de seleção, score >= 0 e <= 99, data dentro da janela).
  4. Se houver diferença com src/data/schedule.ts, abre PR com label auto-sync.
  5. CI valida o PR (CodeQL + tests + lint) antes de qualquer merge.
  6. Maintainer revisa e mergeia. Nunca há push direto no main.

Por que PR e não commit direto?

  • main tem branch protection: linear history, sem force-push, status checks obrigatórios.
  • Um bug na API ou em parsing nunca contamina a main sem revisão.
  • Audit trail completo: cada atualização vira PR com diff visível.

Para ativar no fork:

  1. Crie conta gratuita em https://www.football-data.org/client/register
  2. Adicione o token como secret FOOTBALL_DATA_TOKEN em Settings, Secrets and variables, Actions.
  3. O workflow começa a rodar no próximo cron.

Sem token? O script faz skip gracioso (sem quebrar o CI).

🔒 Segurança

copa26 é tratado como SaaS de verdade: zero erros para usuários.

  • Sem fetch externo em runtime, tudo estático, zero SSRF
  • Input sanitization rigorosa, regex allowlist /^[A-Za-z0-9-]+$/
  • XML escape obrigatório em todos os SVGs gerados
  • Sem eval, sem Function(...), sem child_process em runtime
  • CodeQL security-and-quality semanal e em todo PR
  • npm provenance ativo (verifique com npm view copa26 --json)
  • Dependências auditadas semanalmente (Dependabot)
  • GitHub Actions pinadas por SHA (sem tag mutável)
  • harden-runner em todos os workflows (egress audit)
  • --ignore-scripts em todo npm ci do CI
  • Auto-sync via PR, nunca push direto: dados externos passam por validação de schema antes de virar PR para review humano

Política completa: SECURITY.md

Reportar vulnerabilidade: GitHub Security Advisories (canal privado).

🤝 Contribuir

PRs são muito bem-vindos, especialmente:

  • Atualizar grupos após o sorteio oficial
  • Adicionar resultados dos jogos
  • Atualizar repescagem quando definida
  • Traduzir as mensagens do CLI

Veja CONTRIBUTING.md.

🧰 Stack

  • TypeScript 5 com strict: true e noUncheckedIndexedAccess
  • Zero dependências de runtime além de kleur (cores no terminal, sem deps transitivas)
  • node:test nativo, sem framework externo
  • ESLint com --max-warnings 0
  • GitHub Actions com hardening completo (CodeQL, Dependabot, harden-runner, pinning por SHA)

📅 Datas-chave

Evento Data Local
Abertura 11 jun 2026 Estádio Azteca, Cidade do México
Fim da fase de grupos 27 jun 2026
16 avos (novidade!) 28 jun 2026
Oitavas 04 jul 2026
Quartas 09 jul 2026
Semifinais 14 jul 2026
Disputa de 3º lugar 18 jul 2026
Final 19 jul 2026 MetLife Stadium, Nova York/NJ

📜 Licença

MIT © Rone Bragaglia

Feito com ⚽ no Brasil. Boa Copa! 🇧🇷

About

CLI, GitHub Action e dataset aberto da Copa do Mundo FIFA 2026 (USA, Canadá, México). Rode npx copa26 e descubra quando o Brasil joga.

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors