Skip to content

Commit a07d54f

Browse files
committed
chore: increase pipeline
1 parent 3dc475b commit a07d54f

13 files changed

Lines changed: 209 additions & 64 deletions

.github/workflows/docker-build-push.yml

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,8 @@
11
name: Build and Push Docker Image
22

33
on:
4-
push:
5-
branches:
6-
- master
7-
- develop
8-
pull_request:
9-
branches:
10-
- master
4+
release:
5+
types: [published]
116

127
env:
138
DOCKER_IMAGE: localstack-web
@@ -37,7 +32,6 @@ jobs:
3732
uses: docker/setup-buildx-action@v3
3833

3934
- name: Log in to DockerHub
40-
if: github.event_name != 'pull_request'
4135
uses: docker/login-action@v3
4236
with:
4337
username: ${{ secrets.DOCKERHUB_USERNAME }}
@@ -49,25 +43,23 @@ jobs:
4943
with:
5044
images: ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.DOCKER_IMAGE }}
5145
tags: |
52-
type=ref,event=branch
53-
type=ref,event=pr
5446
type=semver,pattern={{version}}
5547
type=semver,pattern={{major}}.{{minor}}
5648
type=semver,pattern={{major}}
57-
type=raw,value=latest,enable={{is_default_branch}}
49+
type=raw,value=latest
5850
5951
- name: Build and push Docker image
52+
id: build-push
6053
uses: docker/build-push-action@v5
6154
with:
6255
context: .
6356
file: ./Dockerfile
64-
push: ${{ github.event_name != 'pull_request' }}
57+
push: true
6558
tags: ${{ steps.meta.outputs.tags }}
6659
labels: ${{ steps.meta.outputs.labels }}
6760
cache-from: type=gha
6861
cache-to: type=gha,mode=max
6962
platforms: linux/amd64,linux/arm64
7063

7164
- name: Image digest
72-
if: github.event_name != 'pull_request'
7365
run: echo ${{ steps.build-push.outputs.digest }}

.github/workflows/docker-build.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
name: Build
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
pull_request:
8+
branches:
9+
- master
10+
11+
jobs:
12+
build:
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
- name: Checkout code
17+
uses: actions/checkout@v4
18+
19+
- name: Set up Node.js
20+
uses: actions/setup-node@v4
21+
with:
22+
node-version: '18'
23+
cache: 'npm'
24+
25+
- name: Install dependencies
26+
run: npm ci
27+
28+
- name: Build application
29+
run: npm run build
30+

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2025 Rafael Dantas
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 86 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,116 @@
11
# LocalStack Web
22

3-
Uma aplicação frontend moderna desenvolvida com **Vue.js 3** e **Vuetify 3** que fornece uma interface web intuitiva para gerenciar e visualizar recursos do LocalStack.
3+
Uma aplicação frontend moderna desenvolvida com **Vue.js 3** e **Vuetify 3** que fornece uma interface web intuitiva para gerenciar e visualizar recursos do LocalStack (Não oficial).
44

5-
![LocalStack Web](https://img.shields.io/badge/Vue.js-3-green) ![Vuetify](https://img.shields.io/badge/Vuetify-3-blue) ![LocalStack](https://img.shields.io/badge/LocalStack-Compatible-orange)
5+
![LocalStack Web](https://img.shields.io/badge/Vue.js-3-green) ![Vuetify](https://img.shields.io/badge/Vuetify-3-blue) ![LocalStack](https://img.shields.io/badge/LocalStack-Compatible-orange) ![Docker pulls](https://img.shields.io/docker/pulls/dantasrafael/localstack-web)
66

77
## 🚀 Funcionalidades
88

99
### 📊 Dashboard Principal
10-
- Visão geral de todos os serviços LocalStack ativos
11-
- Status em tempo real de conectividade
12-
- Estatísticas resumidas de cada serviço
13-
- Ações rápidas para limpeza de recursos
10+
- ✅ Visão geral de todos os serviços LocalStack ativos
11+
- ✅ Status em tempo real de conectividade
12+
- ✅ Estatísticas resumidas de cada serviço
13+
- ✅ Ações rápidas para limpeza de recursos
14+
- ✅ Métricas de uso e performance
15+
- ✅ Alertas de saúde dos serviços
1416

1517
### 🪣 S3 (Simple Storage Service)
16-
- ✅ Listar todos os buckets
17-
- ✅ Visualizar estatísticas (número de objetos, tamanho total)
18-
- ✅ Criar novos buckets
18+
- ✅ Listar todos os buckets com paginação
19+
- ✅ Visualizar estatísticas detalhadas (número de objetos, tamanho total, custo simulado)
20+
- ✅ Criar novos buckets com configurações avançadas (versionamento, lifecycle)
1921
- ✅ Deletar buckets (com limpeza automática de objetos)
20-
- ✅ Navegar dentro dos buckets
21-
- ✅ Upload de arquivos
22+
- ✅ Navegar dentro dos buckets com estrutura de pastas
23+
- ✅ Upload de arquivos (individual e em lote)
2224
- ✅ Download e exclusão de objetos
23-
- ✅ Busca e filtros
25+
- ✅ Busca e filtros avançados (por tipo, tamanho, data)
26+
- ✅ Pré-visualização de arquivos (imagens, texto, JSON)
27+
- ✅ Configuração de políticas de bucket
28+
- ✅ Gerenciamento de ACLs (Access Control Lists)
2429

2530
### 📝 SQS (Simple Queue Service)
26-
- ✅ Listar todas as filas
27-
- ✅ Visualizar estatísticas (mensagens disponíveis, em processamento)
28-
- ✅ Criar novas filas com configurações personalizadas
29-
- ✅ Deletar filas
30-
- ✅ Enviar mensagens para filas
31-
- ✅ Receber e visualizar mensagens
32-
- ✅ Deletar mensagens individuais
31+
- ✅ Listar todas as filas com filtros
32+
- ✅ Visualizar estatísticas em tempo real (mensagens disponíveis, em processamento, DLQ)
33+
- ✅ Criar novas filas com configurações personalizadas (FIFO, delay, retention)
34+
- ✅ Deletar filas com confirmação
35+
- ✅ Enviar mensagens para filas (individual e em lote)
36+
- ✅ Receber e visualizar mensagens com formatação JSON
37+
- ✅ Deletar mensagens individuais ou múltiplas
3338
- ✅ Purgar filas completamente
39+
- ✅ Configurar Dead Letter Queues (DLQ)
40+
- ✅ Monitoramento de métricas de fila
3441

3542
### 🗃️ DynamoDB
36-
- ✅ Listar todas as tabelas
37-
- ✅ Visualizar estatísticas (número de itens, tamanho)
38-
- ✅ Criar tabelas com chaves primárias configuráveis
39-
- ✅ Deletar tabelas
40-
- ✅ Visualizar itens da tabela
41-
- ✅ Adicionar, editar e deletar itens (via JSON)
42-
- ✅ Suporte para diferentes tipos de dados
43+
- ✅ Listar todas as tabelas com status
44+
- ✅ Visualizar estatísticas detalhadas (número de itens, tamanho, índices)
45+
- ✅ Criar tabelas com chaves primárias e índices secundários
46+
- ✅ Deletar tabelas com confirmação
47+
- ✅ Visualizar itens da tabela com paginação
48+
- ✅ Adicionar, editar e deletar itens (via JSON e formulário)
49+
- ✅ Suporte para todos os tipos de dados DynamoDB
50+
- ✅ Query e Scan com filtros avançados
51+
- ✅ Backup e restore de dados
52+
- ✅ Gerenciamento de índices GSI/LSI
4353

4454
### ⚡ Lambda Functions
45-
- ✅ Listar todas as funções
46-
- ✅ Visualizar detalhes e configurações
55+
- ✅ Listar todas as funções com filtros
56+
- ✅ Visualizar detalhes, configurações e versões
4757
- ✅ Invocar funções com payload customizado
48-
- ✅ Visualizar resultados e logs de execução
49-
- ✅ Deletar funções
58+
- ✅ Visualizar resultados, logs e métricas de execução
59+
- ✅ Deletar funções e versões
5060
- ✅ Suporte para invocação síncrona e assíncrona
61+
- ✅ Configurar triggers e event sources
62+
- ✅ Gerenciar aliases e configurações de concorrência
63+
- ✅ Monitor de execuções e erros
5164

5265
### 🌊 Kinesis Streams
53-
- ✅ Listar todos os streams
54-
- ✅ Visualizar detalhes e shards
55-
- ✅ Criar novos streams
56-
- ✅ Deletar streams
57-
- ✅ Enviar records para streams
58-
- ✅ Ler records de streams
59-
- ✅ Visualizar dados decodificados
66+
- ✅ Listar todos os streams com status
67+
- ✅ Visualizar detalhes, shards e métricas
68+
- ✅ Criar novos streams com configuração de shards
69+
- ✅ Deletar streams com confirmação
70+
- ✅ Enviar records para streams (individual e em lote)
71+
- ✅ Ler records de streams com iteradores
72+
- ✅ Visualizar dados decodificados em múltiplos formatos
73+
- ✅ Monitoramento de throughput e latência
74+
- ✅ Gerenciar resharding automático
75+
76+
### 📧 SNS (Simple Notification Service)
77+
- ✅ Listar todos os tópicos
78+
- ✅ Criar e deletar tópicos
79+
- ✅ Gerenciar assinatures (subscriptions)
80+
- ✅ Publicar mensagens em tópicos
81+
- ✅ Configurar filtros de mensagens
82+
- ✅ Visualizar histórico de notificações
83+
84+
### 🔑 KMS (Key Management Service)
85+
- ✅ Listar todas as chaves de criptografia
86+
- ✅ Criar novas chaves (simétricas e assimétricas)
87+
- ✅ Gerenciar aliases de chaves
88+
- ✅ Criptografar e descriptografar dados
89+
- ✅ Gerar data keys e random data
90+
- ✅ Configurar políticas de chaves
91+
- ✅ Rotação automática de chaves
92+
- ✅ Importar material de chaves externas
93+
- ✅ Visualizar uso e métricas de chaves
94+
95+
### 📨 SES (Simple Email Service)
96+
- ✅ Gerenciar identidades de email
97+
- ✅ Enviar emails de teste
98+
- ✅ Visualizar estatísticas de envio
99+
- ✅ Configurar templates de email
100+
- ✅ Monitor de bounces e complaints
60101

61102
### 🎨 Interface do Usuário
62-
- ✅ Design moderno e responsivo
63-
- ✅ Tema claro/escuro
103+
- ✅ Design moderno e responsivo com Material Design 3
104+
- ✅ Tema claro/escuro com persistência
64105
- ✅ Feedback visual para todas as ações
65106
- ✅ Busca e filtros em tempo real
66-
- ✅ Notificações de sucesso/erro
107+
- ✅ Notificações toast personalizadas
67108
- ✅ Configuração dinâmica do endpoint LocalStack
109+
- ✅ Atalhos de teclado para ações rápidas
110+
- ✅ Suporte para múltiplos idiomas (i18n)
111+
- ✅ Modo offline com cache local
112+
- ✅ Exportação de dados (JSON, CSV)
113+
68114

69115
## 🛠️ Tecnologias Utilizadas
70116

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<template>
2+
<v-tooltip :text="name" :location="location" :disabled="!showTooltip">
3+
<template v-slot:activator="{ props }">
4+
<span
5+
class="name-truncate"
6+
v-bind="props"
7+
>
8+
{{ name }}
9+
</span>
10+
</template>
11+
</v-tooltip>
12+
</template>
13+
14+
<script setup>
15+
const props = defineProps({
16+
name: {
17+
type: String,
18+
required: true
19+
},
20+
lowercase: {
21+
type: Boolean,
22+
default: true
23+
},
24+
location: {
25+
type: String,
26+
default: 'top'
27+
},
28+
customClass: {
29+
type: String,
30+
default: ''
31+
},
32+
showTooltip: {
33+
type: Boolean,
34+
default: true
35+
}
36+
})
37+
</script>
38+
39+
<style scoped>
40+
.name-truncate {
41+
overflow: hidden;
42+
text-overflow: ellipsis;
43+
white-space: nowrap;
44+
max-width: calc(100% - 40px);
45+
}
46+
</style>

src/views/DynamoDBView.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
<v-col cols="12" md="6" lg="4" v-for="table in filteredTables" :key="table.TableName">
4141
<v-card class="mb-4" elevation="2">
4242
<v-card-title class="d-flex justify-space-between align-center">
43-
<span>{{ table.TableName }}</span>
43+
<TitleNameWithTooltip :name="table.TableName" />
4444
<v-menu>
4545
<template v-slot:activator="{ props }">
4646
<v-btn icon="mdi-dots-vertical" v-bind="props" size="small"></v-btn>
@@ -295,6 +295,7 @@
295295
import { ref, computed, onMounted } from 'vue'
296296
import { useAppStore } from '@/stores/app'
297297
import { storeToRefs } from 'pinia'
298+
import TitleNameWithTooltip from '@/components/TitleNameWithTooltip.vue'
298299
import {
299300
ListTablesCommand,
300301
DescribeTableCommand,

src/views/KMSView.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
<v-col cols="12" md="6" lg="4" v-for="key in filteredKeys" :key="key.KeyId">
4141
<v-card class="mb-4" elevation="2">
4242
<v-card-title class="d-flex justify-space-between align-center">
43-
<span>{{ key.Description || 'Chave sem descrição' }}</span>
43+
<TitleNameWithTooltip :name="key.Description || 'Chave sem descrição'" />
4444
<v-menu>
4545
<template v-slot:activator="{ props }">
4646
<v-btn icon="mdi-dots-vertical" v-bind="props" size="small"></v-btn>
@@ -300,6 +300,7 @@
300300
import { ref, computed, onMounted } from 'vue'
301301
import { useAppStore } from '@/stores/app'
302302
import { storeToRefs } from 'pinia'
303+
import TitleNameWithTooltip from '@/components/TitleNameWithTooltip.vue'
303304
import {
304305
ListKeysCommand,
305306
DescribeKeyCommand,

src/views/KinesisView.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
<v-col cols="12" md="6" lg="4" v-for="stream in filteredStreams" :key="stream.StreamName">
4141
<v-card class="mb-4" elevation="2">
4242
<v-card-title class="d-flex justify-space-between align-center">
43-
<span>{{ stream.StreamName }}</span>
43+
<TitleNameWithTooltip :name="stream.StreamName" />
4444
<v-menu>
4545
<template v-slot:activator="{ props }">
4646
<v-btn icon="mdi-dots-vertical" v-bind="props" size="small"></v-btn>
@@ -292,6 +292,7 @@
292292
import { ref, computed, onMounted } from 'vue'
293293
import { useAppStore } from '@/stores/app'
294294
import { storeToRefs } from 'pinia'
295+
import TitleNameWithTooltip from '@/components/TitleNameWithTooltip.vue'
295296
import {
296297
ListStreamsCommand,
297298
DescribeStreamCommand,

src/views/LambdaView.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
<v-col cols="12" md="6" lg="4" v-for="func in filteredFunctions" :key="func.FunctionName">
4141
<v-card class="mb-4" elevation="2">
4242
<v-card-title class="d-flex justify-space-between align-center">
43-
<span>{{ func.FunctionName }}</span>
43+
<TitleNameWithTooltip :name="func.FunctionName" />
4444
<v-menu>
4545
<template v-slot:activator="{ props }">
4646
<v-btn icon="mdi-dots-vertical" v-bind="props" size="small"></v-btn>
@@ -396,6 +396,7 @@
396396
import { ref, computed, onMounted, watch } from 'vue'
397397
import { useAppStore } from '@/stores/app'
398398
import { storeToRefs } from 'pinia'
399+
import TitleNameWithTooltip from '@/components/TitleNameWithTooltip.vue'
399400
import JSZip from 'jszip'
400401
import {
401402
ListFunctionsCommand,

src/views/S3View.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
<v-col cols="12" md="6" lg="4" v-for="bucket in filteredBuckets" :key="bucket.Name">
4242
<v-card class="mb-4" elevation="2">
4343
<v-card-title class="d-flex justify-space-between align-center">
44-
<span>{{ bucket.Name }}</span>
44+
<TitleNameWithTooltip :name="bucket.Name" />
4545
<v-menu>
4646
<template v-slot:activator="{ props }">
4747
<v-btn icon="mdi-dots-vertical" v-bind="props" size="small"></v-btn>
@@ -202,6 +202,7 @@
202202
import { ref, computed, onMounted } from 'vue'
203203
import { useAppStore } from '@/stores/app'
204204
import { storeToRefs } from 'pinia'
205+
import TitleNameWithTooltip from '@/components/TitleNameWithTooltip.vue'
205206
import {
206207
ListBucketsCommand,
207208
ListObjectsV2Command,

0 commit comments

Comments
 (0)