Files
cursos/README.md
Francismar Nascimento da Silva 48d038d803 fix(deploy): aulas em Markdown pelo proxy do nginx, sem CORS
O Gitea nao envia Access-Control-Allow-Origin, entao o navegador bloqueava a
leitura do Markdown a partir de cursos.overia.com.br e toda aula mostrava
"Failed to fetch". Novo /aulas/<caminho>.md no nginx busca o arquivo no Gitea e o
serve no proprio dominio. So aceita GET/HEAD de .md sob courses/ do repositorio
ai-bot/cursos, rejeita "..", resolve o DNS em tempo de execucao (o nginx nao deixa
de subir se o Gitea estiver fora) e nao repassa cookies.

No banco, as 8 aulas passaram a apontar para /aulas (backup das linhas em
~/backups/learnhouse-20261003 no NAS4). README: GITEA_RAW_BASE agora deve ser
https://cursos.overia.com.br/aulas, senao uma nova publicacao desfaz a correcao.

O conf tambem referencia theme-toggle.js, que entra no commit seguinte.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 23:46:08 -03:00

1.3 KiB

cursos

Pipeline + conteúdo de cursos para publicar em cursos.overia.com.br (LearnHouse), um curso por tecnologia.

Estrutura

courses/<slug>/course.json
courses/<slug>/<NN> - <Nome do Capítulo>/<NN> - <Nome da Aula>.md

course.json guarda os metadados do curso (name, description, about, public). Nome de capítulo/aula vem do nome da pasta/arquivo, prefixado por um número de ordem (ex: 01 - Introdução, 02 - Instalando o Python.md).

.env

LEARNHOUSE_API_TOKEN=
LEARNHOUSE_BASE_URL=
LEARNHOUSE_ORG_ID=
LEARNHOUSE_ORG_SLUG=
GITEA_RAW_BASE=

GITEA_RAW_BASE é a base usada pra montar a URL de cada aula Markdown. Use https://cursos.overia.com.br/aulas: o nginx do LearnHouse repassa /aulas/<caminho>.md pra https://git.xenserver.com.br/ai-bot/cursos/raw/branch/main/courses/<caminho>.md. Não use a URL raw do Gitea direto: ela não envia Access-Control-Allow-Origin e o navegador bloqueia a leitura (a aula mostra "Failed to fetch").

Uso

uv run python -m scripts.publish <slug> [--dry-run|--publish]
  • --dry-run: mostra a árvore de curso/capítulos/aulas e as URLs geradas, sem chamar a API.
  • --publish: além de criar/atualizar o curso, marca atividades e curso como publicados. Sem essa flag, tudo fica em rascunho.