Skip to content

Commit a088289

Browse files
committed
Merge remote-tracking branch 'upstream/develop' into feat/observability-stack
# Conflicts: # backend/src/app.ts # backend/src/modules/auth/providers/linkedin.ts # package-lock.json
2 parents 4af399a + c131cdd commit a088289

118 files changed

Lines changed: 21395 additions & 8167 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
---
2+
name: abrir-pr-jobs-scraper
3+
description: Use quando o usuario pedir para abrir PR, criar PR, enviar PR, submeter PR, fazer pull request, ou similar no projeto Jobs Scraper Global
4+
---
5+
6+
# Abrir PR Padronizado — Jobs Scraper Global
7+
8+
Skill para criar Pull Requests padronizados no GitHub, integrando com o Linear para buscar dados da task.
9+
10+
## Pre-requisitos
11+
12+
Antes de iniciar, verifique se todas as ferramentas estao disponiveis:
13+
14+
| Ferramenta | Como verificar | Se ausente |
15+
|---|---|---|
16+
| MCP Linear | Checar se ferramentas `mcp__linear-server__*` estao disponiveis | Informar: "O MCP do Linear nao esta configurado. Adicione o server `linear-server` nas configuracoes do Claude Code." e parar |
17+
| GitHub CLI | Rodar `gh --version` | Informar: "O GitHub CLI (gh) nao esta instalado. Instale com `brew install gh`." e parar |
18+
| Git | Rodar `git --version` | Informar: "Git nao esta instalado." e parar |
19+
| npm | Rodar `npm --version` | Informar: "npm nao esta instalado." e parar |
20+
21+
Se qualquer ferramenta estiver ausente, informe ao usuario qual esta faltando e **pare a execucao**.
22+
23+
## Fluxo
24+
25+
Siga os passos abaixo na ordem, sem pular etapas.
26+
27+
### Passo 0: Verificar pre-requisitos
28+
29+
Rode os comandos de verificacao da tabela acima. Se algum falhar, informe e pare.
30+
31+
### Passo 1: Identificar task Linear
32+
33+
1. Obter o nome da branch atual: `git branch --show-current`
34+
2. Tentar extrair o padrao `PAV-\d+` (case insensitive) do nome da branch
35+
3. **Se encontrou** um codigo PAV-XX:
36+
- Perguntar ao usuario: "A task desenvolvida foi a **PAV-XX**?"
37+
- Se confirmar, usar esse codigo
38+
- Se negar, perguntar qual e a task
39+
4. **Se nao encontrou** padrao na branch:
40+
- Perguntar ao usuario: "Qual e o codigo da task no Linear? (ex: PAV-42)"
41+
42+
### Passo 2: Buscar dados da task no Linear
43+
44+
1. Usar `mcp__linear-server__get_issue` com o codigo da task
45+
2. Extrair: **titulo** e **URL** da task
46+
3. **Se a task nao for encontrada:**
47+
- Informar ao usuario
48+
- Sugerir: "Deseja criar uma nova task usando `/criar-task-linear`?"
49+
- Alternativamente, permitir continuar com titulo e descricao manuais
50+
51+
### Passo 3: Verificar commits
52+
53+
> **Importante:** Este projeto usa um modelo de fork. O remote `origin` aponta para o fork do
54+
> desenvolvedor (ex: `jeremiassnts/Jobs_Scraper_Global`) e o remote `upstream` aponta para o
55+
> repositorio principal (`Benevanio/Jobs_Scraper_Global`). O PR sempre deve ser criado do fork
56+
> (origin) para o upstream, usando a flag `--head` do `gh pr create`.
57+
58+
1. Buscar os commits da branch que estao a frente de develop:
59+
```bash
60+
git fetch upstream develop
61+
git log upstream/develop..HEAD --oneline
62+
```
63+
2. **Se nao houver commits a frente de develop:**
64+
- Informar: "Esta branch nao tem commits a frente de develop. Nao ha mudancas para abrir PR."
65+
- Parar a execucao
66+
3. **Se ja existir um PR aberto para essa branch:**
67+
- Detectar o owner do fork: `gh repo view --json owner -q .owner.login` (rodado no diretorio do projeto, que aponta para origin)
68+
- Verificar com: `gh pr list --head <owner-do-fork>:$(git branch --show-current) --repo Benevanio/Jobs_Scraper_Global --state open`
69+
- Se existir, informar ao usuario e perguntar se quer atualizar o PR existente ou parar
70+
71+
### Passo 4: Rodar testes
72+
73+
1. Rodar testes do backend:
74+
```bash
75+
cd backend && npm test 2>&1
76+
```
77+
2. Rodar testes do frontend:
78+
```bash
79+
cd frontend && npm test 2>&1
80+
```
81+
3. Consolidar os resultados em uma string, ex:
82+
- Se todos passaram: "Testes unitarios passando — Backend: 305/305 | Frontend: 42/42"
83+
- Se houve falhas: "Backend: 300/305 (5 falhando) | Frontend: 42/42"
84+
4. **Se testes falharem:** nao bloquear. Mostrar o resultado no preview — o usuario decide se prossegue.
85+
86+
### Passo 5: Gerar descricao do PR
87+
88+
1. Obter o diff completo contra develop:
89+
```bash
90+
git diff upstream/develop..HEAD
91+
```
92+
2. Obter a lista de commits:
93+
```bash
94+
git log upstream/develop..HEAD --oneline
95+
```
96+
3. Gerar um **resumo curto em linguagem natural** das mudancas:
97+
- Foco no que foi desenvolvido
98+
- Como as mudancas se relacionam com a task e o projeto
99+
- Texto conciso (3-5 frases no maximo)
100+
101+
### Passo 6: Montar e mostrar preview
102+
103+
Montar o PR completo e mostrar ao usuario:
104+
105+
**Titulo:**
106+
```
107+
PAV-XX: <titulo da task no Linear>
108+
```
109+
110+
**Target:**
111+
```
112+
Benevanio/Jobs_Scraper_Global (branch develop)
113+
```
114+
115+
**Body:**
116+
```markdown
117+
## Descricao
118+
<resumo gerado no passo 5>
119+
120+
## Linear link
121+
<URL da task no Linear>
122+
123+
## Como foi testado
124+
<resultado dos testes do passo 4>
125+
```
126+
127+
Mostrar tudo formatado e perguntar: **"O PR esta correto? Confirma a criacao? (s/n)"**
128+
129+
### Passo 7: Confirmar ou editar
130+
131+
- **Se o usuario confirmar:** seguir para o passo 8
132+
- **Se o usuario nao confirmar:**
133+
- Perguntar o que deseja alterar
134+
- Ajustar os campos conforme solicitado
135+
- Mostrar o preview novamente (voltar ao passo 6)
136+
137+
### Passo 8: Criar o PR
138+
139+
> **Modelo de fork:** O PR e criado do fork (origin) para o upstream (Benevanio/Jobs_Scraper_Global).
140+
> E necessario usar `--head <owner-do-fork>:<branch>` para que o GitHub identifique corretamente
141+
> a branch de origem no fork.
142+
143+
1. Verificar se a branch foi enviada ao remote (origin = fork):
144+
```bash
145+
git ls-remote --heads origin $(git branch --show-current)
146+
```
147+
- **Se a branch nao existe no remote:** perguntar ao usuario: "A branch ainda nao foi enviada ao remote. Deseja fazer push agora? (s/n)"
148+
- Se confirmar, rodar: `git push -u origin $(git branch --show-current)`
149+
- Se negar, parar a execucao
150+
2. Detectar o owner do fork:
151+
```bash
152+
FORK_OWNER=$(gh repo view --json owner -q .owner.login)
153+
```
154+
3. Criar o PR via GitHub CLI:
155+
```bash
156+
gh pr create \
157+
--repo Benevanio/Jobs_Scraper_Global \
158+
--base develop \
159+
--head "$FORK_OWNER:$(git branch --show-current)" \
160+
--title "PAV-XX: <titulo>" \
161+
--body "<body completo>"
162+
```
163+
4. Confirmar ao usuario com o link do PR criado
164+
165+
## Erros comuns
166+
167+
- **Nao verificar pre-requisitos** — sempre verificar antes de iniciar
168+
- **Nao confirmar a task com o usuario** — sempre perguntar, mesmo que a branch seja sugestiva
169+
- **Criar PR sem preview** — sempre mostrar preview e aguardar confirmacao
170+
- **Bloquear por causa de testes falhando** — mostrar as falhas, mas deixar o usuario decidir
171+
- **Esquecer de buscar upstream/develop atualizado** — sempre rodar `git fetch upstream develop` antes de comparar
172+
- **Nao usar --head no gh pr create** — como o projeto usa fork, e obrigatorio passar `--head <owner-do-fork>:<branch>` para o PR ser criado corretamente
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
---
2+
name: criar-task-linear
3+
description: Use quando o usuario pedir para criar uma task, issue, card ou tarefa no Linear, ou quando mencionar criar trabalho no backlog do projeto Painel Vagas
4+
---
5+
6+
# Criar Task no Linear
7+
8+
Skill para criar tasks padronizadas no Linear, no time **Painel Vagas (PAV)**.
9+
10+
## Pre-requisito: MCP do Linear
11+
12+
Esta skill depende do MCP server `linear-server` estar configurado. Se as ferramentas `mcp__linear-server__*` nao estiverem disponiveis, informe ao usuario:
13+
14+
> O MCP do Linear nao esta configurado. Para usar esta skill, adicione o server `linear-server` nas configuracoes do Claude Code. Consulte a documentacao do MCP para configurar.
15+
16+
## Padrao obrigatorio
17+
18+
Toda task criada deve seguir esta estrutura:
19+
20+
| Campo | Valor |
21+
|---|---|
22+
| **Team** | `Painel Vagas` |
23+
| **State** | `Backlog` |
24+
| **Priority** | `4` (Low) — perguntar ao usuario se deseja alterar |
25+
| **Title** | Titulo objetivo e claro, em portugues |
26+
| **Description** | Markdown com descricao + criterios de aceite |
27+
28+
## Fluxo
29+
30+
```dot
31+
digraph flow {
32+
"Usuario pede task" -> "Coletar informacoes";
33+
"Coletar informacoes" -> "Titulo claro?";
34+
"Titulo claro?" -> "Montar descricao" [label="sim"];
35+
"Titulo claro?" -> "Perguntar ao usuario" [label="nao"];
36+
"Perguntar ao usuario" -> "Montar descricao";
37+
"Montar descricao" -> "Perguntar prioridade";
38+
"Perguntar prioridade" -> "Criar no Linear";
39+
"Criar no Linear" -> "Confirmar ao usuario";
40+
}
41+
```
42+
43+
1. Extrair ou perguntar: o que a task deve resolver
44+
2. Redigir titulo objetivo (portugues, sem prefixos como "Task:" ou "feat:")
45+
3. Montar descricao em Markdown com secoes obrigatorias (ver template)
46+
4. **Perguntar ao usuario** se quer manter prioridade Low ou alterar (Urgent=1, High=2, Medium=3, Low=4)
47+
5. Criar a issue via `mcp__linear-server__save_issue`
48+
6. Confirmar com o identificador (ex: PAV-42) e link
49+
50+
## Template de descricao
51+
52+
```markdown
53+
## Contexto
54+
[O que motivou essa task e qual problema ela resolve]
55+
56+
## O que deve ser feito
57+
[Descricao clara do trabalho esperado]
58+
59+
## Criterios de aceite
60+
- [ ] [Criterio 1]
61+
- [ ] [Criterio 2]
62+
- [ ] [Criterio 3]
63+
```
64+
65+
## Exemplo de chamada
66+
67+
```
68+
mcp__linear-server__save_issue(
69+
team: "Painel Vagas",
70+
title: "Adicionar validacao de email no formulario de registro",
71+
description: "## Contexto\nO formulario de registro aceita emails invalidos...\n\n## O que deve ser feito\nAdicionar validacao de formato de email...\n\n## Criterios de aceite\n- [ ] Emails invalidos exibem mensagem de erro\n- [ ] Emails validos passam sem bloqueio\n- [ ] Testes unitarios cobrem os cenarios",
72+
state: "Backlog",
73+
priority: 4
74+
)
75+
```
76+
77+
## Prioridades disponiveis
78+
79+
| Valor | Nome |
80+
|---|---|
81+
| 1 | Urgente |
82+
| 2 | Alta |
83+
| 3 | Media |
84+
| 4 | Baixa (padrao) |
85+
86+
## Erros comuns
87+
88+
- **Nao perguntar a prioridade** — sempre perguntar antes de criar
89+
- **Titulo vago** — "Corrigir bug" nao serve; use "Corrigir erro de autenticacao ao fazer login com Google"
90+
- **Sem criterios de aceite** — toda task deve ter pelo menos 2 criterios verificaveis
91+
- **Idioma errado** — titulo e descricao devem ser em portugues
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
name: Block PRs to Master
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- master
7+
8+
jobs:
9+
block:
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
- name: Check source branch and block if not develop
14+
uses: actions/github-script@v7
15+
with:
16+
script: |
17+
const sourceBranch = context.payload.pull_request.head.ref;
18+
19+
if (sourceBranch === 'develop') {
20+
console.log(`✅ PR de ${sourceBranch} para master permitido.`);
21+
return;
22+
}
23+
24+
await github.rest.issues.createComment({
25+
owner: context.repo.owner,
26+
repo: context.repo.repo,
27+
issue_number: context.issue.number,
28+
body: `❌ Pull Requests diretamente para **master** são permitidos apenas a partir da branch **develop**.
29+
Origem detectada: \`${sourceBranch}\`.
30+
Por favor, primeiro faça o merge da sua branch na \`develop\` e então abra um PR de \`develop\` para \`master\`.`
31+
});
32+
33+
await github.rest.pulls.update({
34+
owner: context.repo.owner,
35+
repo: context.repo.repo,
36+
pull_number: context.payload.pull_request.number,
37+
state: 'closed'
38+
});

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,4 @@ backend/coverage/
2121

2222
# Dist-electron
2323
dist-electron/.sfdx/
24+
pnpm-lock.yaml

.husky/commit-msg

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/usr/bin/env sh
2+
set -eu
3+
4+
npm exec -- commitlint --edit "$1"

.husky/pre-commit

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/usr/bin/env sh
2+
set -eu
3+
4+
npm exec -- lint-staged

.husky/pre-push

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/usr/bin/env sh
2+
set -eu
3+
4+
npm run validate

AGENTS.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Regras do Projeto
2+
3+
## Git
4+
5+
- NUNCA faça commits automaticamente. Sempre pergunte ao usuario antes de commitar.
6+
- Mensagens de commit devem ser escritas em português.

0 commit comments

Comments
 (0)