From b1a4f4263fc4e584f827a7d64129dc45dbed5e43 Mon Sep 17 00:00:00 2001 From: Lucas Rayan Date: Fri, 30 Oct 2026 12:39:22 -0300 Subject: [PATCH] release: 1.0.0 changelog and a job that creates the Gitea release CHANGELOG.md in Portuguese, from the project history. The release job builds its notes from the matching section. The new files are excluded from the image hash, so the published image is reused. README points at the Gitea repository. Co-Authored-By: Claude Sonnet 5.5 --- .gitea/workflows/ci.yml | 4 +-- .gitea/workflows/release.yml | 29 +++++++++++++++- CHANGELOG.md | 64 ++++++++++++++++++++++++++++++++++++ README.md | 4 +-- scripts/release-notes.sh | 36 ++++++++++++++++++++ 5 files changed, 132 insertions(+), 5 deletions(-) create mode 100644 CHANGELOG.md create mode 100755 scripts/release-notes.sh diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 7520acf..b355f43 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -5,10 +5,10 @@ name: CI # precisa ser reconstruída; rodar nos dois repetiria a mesma suíte no mesmo commit. on: pull_request: - paths-ignore: ['**.md', 'LICENSE', '.claude/**', '.superset/**'] + paths-ignore: ['**.md', 'LICENSE', '.claude/**', '.superset/**', '.wolf/**', 'scripts/release-notes.sh'] push: branches-ignore: [main] - paths-ignore: ['**.md', 'LICENSE', '.claude/**', '.superset/**'] + paths-ignore: ['**.md', 'LICENSE', '.claude/**', '.superset/**', '.wolf/**', 'scripts/release-notes.sh'] workflow_call: permissions: diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index d2e99b8..44d15a8 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -36,7 +36,7 @@ jobs: REPO: ${{ gitea.repository }} run: | inputs=$(git ls-tree -r HEAD \ - | awk -F'\t' '$2 !~ /^(\.gitea|\.github|\.claude|\.superset|docs)\// && $2 !~ /^(README.*|CLAUDE\.md|DESIGN\.md|LICENSE|\.gitignore)$/' \ + | awk -F'\t' '$2 !~ /^(\.gitea|\.github|\.claude|\.superset|docs)\// && $2 !~ /^(README.*|CLAUDE\.md|DESIGN\.md|LICENSE|\.gitignore|CHANGELOG\.md|scripts\/release-notes\.sh)$/' \ | sha256sum | cut -c1-16) ns="${REPO,,}" token=$(curl -fsS "https://$REGISTRY/v2/token?service=container_registry&scope=repository:$ns:pull" | jq -r .token) @@ -108,3 +108,30 @@ jobs: run: | tags=$(jq -cr '.tags | map("-t " + .) | join(" ")' <<< '${{ steps.meta.outputs.json }}') docker buildx imagetools create $tags "${{ needs.plano.outputs.image }}:inputs-${{ needs.plano.outputs.inputs }}" + + # Cria a entrada em "Releases" quando a execução é de uma tag v*. Roda depois + # de publicar a imagem, com as notas da seção do CHANGELOG.md. + release: + name: Cria a release no Gitea + needs: [plano, publicar] + # Explícito, como o publicar: o ci acima é pulado quando a imagem é + # reaproveitada, e o success() implícito pularia este job também. + if: ${{ !cancelled() && needs.publicar.result == 'success' && startsWith(gitea.ref, 'refs/tags/v') }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Release + env: + TAG: ${{ gitea.ref_name }} + TOKEN: ${{ gitea.token }} + API: ${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }} + IMAGE: ${{ needs.plano.outputs.image }} + run: | + scripts/release-notes.sh "$TAG" "$IMAGE" > notes.md + pre=false; case "$TAG" in *-*) pre=true ;; esac + jq -n --arg tag "$TAG" --arg name "ESPDocs ${TAG#v}" --rawfile body notes.md --argjson pre "$pre" \ + '{tag_name:$tag, name:$name, body:$body, prerelease:$pre}' > release.json + curl -fsS -X POST "$API/releases" -H "Authorization: token $TOKEN" \ + -H 'Content-Type: application/json' -d @release.json diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..311a7ad --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,64 @@ +# Registro de mudanças + +Tudo o que muda de relevante no ESPDocs está aqui. O formato segue o +[Keep a Changelog](https://keepachangelog.com/pt-BR/1.1.0/) e o projeto segue o +[Versionamento Semântico](https://semver.org/lang/pt-BR/). + +## [Não lançado] + +## [1.0.0] - 2026-10-30 + +A primeira versão com tag. O trabalho anterior nunca foi tagueado, então esta +entrada resume tudo desde o primeiro commit, em 2025-10-21, até a imagem Docker. + +### Conteúdo + +- Documentação não oficial do ecossistema ESP32 em português: uma página por + série de chips, com especificações, conexões e consumo, e a página de comparação + lado a lado. +- Diagramas interativos de conexões e componentes, com o esquema de dados de + conexões padronizado. +- Frameworks documentados: ESP-IDF, Arduino, MicroPython, ESP-RainMaker e + ESP-Matter. +- Glossário técnico, página "Sobre" e chamadas para o catálogo. +- Catálogo de placas de desenvolvimento a partir de uma planilha do Google + (`/api/placas`), com filtros e cache de 10 minutos. +- Ferramenta de seleção: perguntas sobre o projeto (Ethernet, tela e outras) e + recomendação da série mais adequada. +- Novos modelos, incluindo o ESP32-H4, e a contagem de componentes e de drivers + (interface, conectividade e áudio) ampliada. + +### Interface e acessibilidade + +- Tema escuro e redesenho das páginas internas no novo sistema de design, com + contraste AAA e auditoria automática de temas e de páginas (`npm run check`). +- Identidade nova: logo, ícones, `manifest` e imagens Open Graph. +- SEO: mapa do site, dados estruturados, trilhas de navegação e favicons. +- Exportação do conteúdo em PDF CMYK e dos slides de treinamento em PDF 16:9, + gerados com Puppeteer (scripts locais). + +### Dados corrigidos + +- Revisão dos dados das séries contra os datasheets oficiais da Espressif: + consumo, temperatura, ADC, PSRAM, memória LP, CAN FD, frequências e versões de + Secure Boot do ESP32, S2, S3, C2, C3, C5, C6, C61, H2, H4, P4 e S31. + +### Implantação + +- Imagem Docker (`node:22-alpine`, build `standalone`, usuário sem privilégio, + `HEALTHCHECK`), pronta para o servidor Oracle, publicada para `linux/arm64` em + `git.lucasrguerra.dev.br/lucasrguerra/espdocs`. A variável `NEXT_OUTPUT=standalone` + liga o empacotamento só dentro da imagem; fora dela o build continua o mesmo + para o `pm2` (`start.config.js`, porta 3001). +- O código passou para o Gitea, com CI em `.gitea/workflows`: lint, auditorias, + Trivy no repositório e na imagem, e teste de que a imagem sobe e responde. O + Release reaproveita a imagem quando nada do que a compõe mudou. + +### Segurança + +- `next` 15.5.28, que corrige a execução remota de código sem autenticação na + otimização de imagens (GHSA-2464-fhr4-w9xw), e `postcss` fixado acima da cópia + embutida no `next`. + +[Não lançado]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/compare/v1.0.0...HEAD +[1.0.0]: https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs/releases/tag/v1.0.0 diff --git a/README.md b/README.md index 048252a..50c2b99 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Documentação não oficial completa do ecossistema ESP32 em português brasilei ```bash # Clone o repositório -git clone https://github.com/lucasrguerra/ESPDocs.git +git clone https://git.lucasrguerra.dev.br/lucasrguerra/ESPDocs.git # Entre no diretório cd ESPDocs @@ -121,7 +121,7 @@ Este é um projeto de documentação não oficial e independente. Não possui ne **Lucas Rayan Guerra** - Website: [Ciência Embarcada](https://cienciaembarcada.com.br) -- GitHub: [@lucasrguerra](https://github.com/lucasrguerra) +- Gitea: [@lucasrguerra](https://git.lucasrguerra.dev.br/lucasrguerra) ## 🤝 Contribuindo diff --git a/scripts/release-notes.sh b/scripts/release-notes.sh new file mode 100755 index 0000000..fec8a71 --- /dev/null +++ b/scripts/release-notes.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# Imprime as notas de uma release: a imagem publicada e a seção do CHANGELOG.md +# daquela versão (ou o log de commits desde a tag anterior, se não houver seção). +# +# scripts/release-notes.sh v1.2.3 git.exemplo.com/dono/projeto +set -euo pipefail + +tag=${1:?uso: release-notes.sh } +image=${2:?uso: release-notes.sh } +version=${tag#v} + +echo "## Imagem" +echo +echo '```' +echo "$image:$version" +echo '```' +echo + +section="" +if [ -f CHANGELOG.md ]; then + section=$(awk -v head="## [$version]" ' + index($0, head) == 1 { found = 1; next } + found && /^## \[/ { exit } + found && /^\[[^]]+\]: / { next } + found { print } + ' CHANGELOG.md) +fi + +if [ -n "$(printf '%s' "$section" | tr -d '[:space:]')" ]; then + printf '%s\n' "$section" +else + previous=$(git describe --tags --abbrev=0 "$tag^" 2>/dev/null || true) + echo "## Mudanças${previous:+ desde $previous}" + echo + git log --no-merges --format='- %s (%h)' "${previous:+$previous..}$tag" +fi