Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
name: Validar e publicar portfólio

on:
pull_request:
branches:
- main
types:
- opened
- reopened
- synchronize
- closed

permissions:
contents: read

concurrency:
group: portfolio-${{ github.event.pull_request.number }}
cancel-in-progress: true

jobs:
validar:
name: Validar código
if: github.event.action != 'closed' || github.event.pull_request.merged == true
runs-on: ubuntu-latest
permissions:
contents: read

steps:
- name: Obter código
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
with:
persist-credentials: false

- name: Configurar Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 20
cache: npm

- name: Instalar dependências
run: npm ci

- name: Executar verificações e build
run: npm run check

- name: Executar testes
run: npm run test --if-present

publicar:
name: Publicar no GitHub Pages
if: github.event.action == 'closed' && github.event.pull_request.merged == true
needs: validar
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.publicacao.outputs.page_url }}
permissions:
contents: read
pages: write
id-token: write

steps:
- name: Obter versão integrada na main
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
with:
ref: main
persist-credentials: false

- name: Configurar Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 20
cache: npm

- name: Instalar dependências
run: npm ci

- name: Gerar site de produção
run: npm run build

- name: Configurar GitHub Pages
uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5

- name: Enviar artefato do site
uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3
with:
path: dist

- name: Publicar site
id: publicacao
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4
26 changes: 14 additions & 12 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,23 +1,25 @@
# Diretórios
/dist
/build
/node_modules

# Dependências e arquivos gerados
node_modules/
dist/
coverage/
*.tsbuildinfo

# Arquivos de Logs
# Logs
*.log
*.lock
*.tsbuildinfo

# Editor directories and files
# Variáveis locais
.env
.env.*
!.env.example
*.local

# Configurações de editor e sistema
.vscode/*
!.vscode/extensions.json
.idea
.idea/
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
dist-ssr
*.local
104 changes: 78 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,35 +1,87 @@
<h1 align="center">🔷 Portifólio 🔷</h1>
# dev-macb.github.io

Portfólio estático de Miguel Alves, desenvolvido com React, TypeScript e Vite. A aplicação é publicada no GitHub Pages: [dev-macb.github.io](https://dev-macb.github.io).

<h2 id="objetivo">🎯 Objetivo</h2>
<p>
Neste repositório, você encontrará os arquivos que compõem o meu portfólio web pessoal.
Aqui, estão reunidos todos os elementos necessários para a construção do meu site, desde
o código-fonte até as imagens e estilos utilizados. Este repositório desempenha um papel
fundamental ao permitir que eu mantenha e compartilhe meu portfólio de forma consistente
em diferentes dispositivos. Sinta-se à vontade para explorar e, se desejar, utilizar este
projeto como inspiração para criar o seu próprio portfólio pessoal na web.
</p>
<p align="center">
<a href="https://dev-macb.github.io">Visitar</a>
</p>
<p align="center">🔷</p>
## Stack

| Camada | Tecnologia |
| --- | --- |
| Interface | React 18 |
| Linguagem | TypeScript |
| Roteamento | React Router 6 |
| Build | Vite 5 |
| Qualidade | ESLint 9 |
| Hospedagem | GitHub Pages |

<h2 id="instalação">🔧 Instalação</h2>
<p>
Para clonar o projeto para sua máquina via <a target="_blank" href="https://git-scm.com/">git</a>, execute os comandos a seguir:
</p>
## Requisitos

- Node.js 20 ou superior
- npm 10 ou superior

## Ambiente local

```bash
$ mkdir dev-macb.github.io && cd braz
$ git clone https://github.com/dev-macb/dev-macb.github.io
git clone https://github.com/dev-macb/dev-macb.github.io.git
cd dev-macb.github.io
npm ci
npm run dev
```

O Vite inicia o servidor de desenvolvimento em `http://localhost:5173`.

## Scripts

| Comando | Efeito |
| --- | --- |
| `npm run dev` | Inicia o servidor de desenvolvimento. |
| `npm run lint` | Executa o ESLint. |
| `npm run build` | Executa a checagem de tipos e gera `dist/`. |
| `npm run check` | Executa `lint` e `build`; é o comando de validação padrão. |
| `npm run preview` | Serve localmente a versão gerada em `dist/`. |
| `npm run deploy` | Publica manualmente em `gh-pages`; não é utilizado pelo CI/CD. |

## Organização do código

```text
src/
├── app/ # composição da aplicação, rotas, tema, layouts e estilos globais
├── assets/ # recursos versionados importados pela aplicação
├── pages/ # páginas por rota e seus estilos/recursos locais
└── shared/ui/ # componentes reutilizáveis e independentes de página
```
<p align="center">🔷</p>

- Registre rotas em `src/app/routes.tsx`.
- Mantenha código específico em `src/pages/<pagina>/`.
- Promova um componente para `src/shared/ui/` somente quando for reutilizado por mais de uma página.
- Use `src/app/` para dependências de escopo global, como providers, layouts e configuração de rotas.

### Rotas públicas

| Rota | Página |
| --- | --- |
| `/` | Início |
| `/sobre` | Sobre |
| `/habilidades` | Habilidades |
| `/portifolio` | Portfólio |
| `/contato` | Contato |

## Validação

Antes de abrir um Pull Request, execute:

```bash
npm run check
```

Ainda não há uma suíte de testes automatizados configurada. A pipeline executa `npm run test --if-present`; ao adicionar um script `test` ao `package.json`, ele será executado automaticamente no CI.

## CI/CD

O workflow [`.github/workflows/deploy.yml`](.github/workflows/deploy.yml) é acionado por Pull Requests direcionados à `main`.

- Em abertura, reabertura ou atualização do PR, instala dependências com `npm ci` e executa validação e testes disponíveis.
- Em um PR fechado com merge, recompila a versão integrada da `main` e a publica no GitHub Pages.
- O job de validação tem permissão apenas de leitura. As permissões de publicação (`pages: write` e `id-token: write`) são concedidas exclusivamente no job de deploy após o merge.
- As actions são fixadas em commits imutáveis para reduzir o risco de alterações não revisadas em tags.

<h2 id="licença">📄 Licença</h2>
<p>
O repositório <strong>dev-macb.github.io</strong> utiliza a <strong>licença MIT</strong> em todo seu código, confira suas condições em <a href="https://github.com/Miguel-acb9/dev-macb.github.io/blob/main/LICENSE">LICENSE</a>.
</p>
<p align="center">🔷</p>
No repositório do GitHub, configure **Settings → Pages → Build and deployment → Source** como **GitHub Actions** para habilitar a primeira publicação pelo workflow.
8 changes: 4 additions & 4 deletions eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ import reactRefresh from 'eslint-plugin-react-refresh'
import tseslint from 'typescript-eslint'

export default tseslint.config(
{ ignores: ['dist'] },
{ ignores: ['dist/**', 'coverage/**'] },
{
extends: [js.configs.recommended, ...tseslint.configs.recommended],
files: ['**/*.{ts,tsx}'],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
ecmaVersion: 2020,
globals: globals.browser,
},
plugins: {
'react-hooks': reactHooks,
Expand All @@ -25,4 +25,4 @@ export default tseslint.config(
],
},
},
)
);
6 changes: 5 additions & 1 deletion index.html
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
<!doctype html>

<html lang="pt-br">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/LogoMA.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Miguel Alves</title>
<meta name="theme-color" content="#f5f5f5" />
<meta name="description" content="Portfólio de Miguel Alves, desenvolvedor de software." />

<title>Miguel Alves | Desenvolvedor de Software</title>
</head>

<body>
Expand Down
Loading
Loading