Skip to content

Commit 9b69e58

Browse files
committed
Adiciona CI/CD com GitHub Actions para build e publicação no GHCR
- Cria workflow para build automático da imagem Docker - Publica no GitHub Container Registry (ghcr.io) - Suporte para multi-arquitetura (amd64 e arm64) - Tags automáticas baseadas em branches e versões - Cache otimizado para acelerar builds - Atualiza .env para usar imagem do GHCR por padrão - Adiciona .gitignore para proteger arquivos sensíveis - Documenta processo de CI/CD no README - Inclui instruções para tornar pacote público no GHCR
1 parent 99fd347 commit 9b69e58

5 files changed

Lines changed: 227 additions & 4 deletions

File tree

.env

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Container Configuration
22
CONTAINER_NAME=recording
3-
IMAGE_NAME=nextcloud-talk
4-
IMAGE_TAG=0.2.1
3+
IMAGE_NAME=ghcr.io/librecodecoop/nextcloud-talk-recording
4+
IMAGE_TAG=latest
55

66
# Nextcloud Configuration
77
# Domain do seu servidor Nextcloud

.github/workflows/README.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# GitHub Actions Workflows
2+
3+
Este diretório contém os workflows de CI/CD para o projeto.
4+
5+
## docker-build.yml
6+
7+
Workflow responsável por build e publicação da imagem Docker no GitHub Container Registry (GHCR).
8+
9+
### Triggers
10+
11+
- **Push na branch main**: Build automático da imagem com tag `latest` e `main`
12+
- **Tags v***: Build automático com versionamento semântico (ex: `v0.2.1` gera tags `0.2.1`, `0.2`, `0`)
13+
- **Pull Requests**: Build de teste sem publicação
14+
- **Manual**: Pode ser disparado manualmente via interface do GitHub Actions
15+
16+
### Recursos
17+
18+
- **Multi-arquitetura**: Builds para `linux/amd64` e `linux/arm64`
19+
- **Cache otimizado**: Usa GitHub Actions cache para acelerar builds subsequentes
20+
- **Metadata automático**: Extrai tags e labels baseado em convenções
21+
- **Artifact attestation**: Gera atestados de proveniência para rastreabilidade
22+
23+
### Permissões necessárias
24+
25+
O workflow requer as seguintes permissões:
26+
27+
- `contents: read` - Ler o código do repositório
28+
- `packages: write` - Publicar no GitHub Container Registry
29+
- `id-token: write` - Gerar artifact attestation
30+
31+
Essas permissões são configuradas automaticamente no GitHub Actions.
32+
33+
### Imagens publicadas
34+
35+
As imagens são publicadas em: `ghcr.io/librecodecoop/nextcloud-talk-recording`
36+
37+
Para usar:
38+
39+
```bash
40+
docker pull ghcr.io/librecodecoop/nextcloud-talk-recording:latest
41+
```
42+
43+
### Visibilidade do pacote
44+
45+
Por padrão, pacotes no GHCR são privados. Para tornar público:
46+
47+
1. Vá para https://github.com/orgs/LibreCodeCoop/packages
48+
2. Encontre o pacote `nextcloud-talk-recording`
49+
3. Acesse **Package settings**
50+
4. Em **Danger Zone**, clique em **Change visibility**
51+
5. Selecione **Public**
52+
53+
### Verificar builds
54+
55+
Para verificar o status dos builds:
56+
57+
1. Acesse https://github.com/LibreCodeCoop/nextcloud-talk-recording/actions
58+
2. Clique no workflow **Build and Push Docker Image**
59+
3. Veja o histórico de execuções
60+
61+
### Troubleshooting
62+
63+
**Build falha com erro de permissão:**
64+
- Verifique se as GitHub Actions estão habilitadas no repositório
65+
- Confirme que o repositório tem permissões para publicar pacotes
66+
67+
**Imagem não aparece no GHCR:**
68+
- Verifique se o workflow foi executado com sucesso
69+
- Confirme que não foi um build de PR (PRs não publicam)
70+
- Verifique se o token GITHUB_TOKEN tem permissões adequadas
71+
72+
**Build muito lento:**
73+
- O primeiro build sempre é mais lento (sem cache)
74+
- Builds subsequentes devem ser mais rápidos com cache
75+
- Multi-arch builds levam mais tempo (2 arquiteturas)

.github/workflows/docker-build.yml

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
name: Build and Push Docker Image
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
tags:
8+
- 'v*'
9+
pull_request:
10+
branches:
11+
- main
12+
workflow_dispatch:
13+
14+
env:
15+
REGISTRY: ghcr.io
16+
IMAGE_NAME: ${{ github.repository }}
17+
18+
jobs:
19+
build-and-push:
20+
runs-on: ubuntu-latest
21+
permissions:
22+
contents: read
23+
packages: write
24+
id-token: write
25+
26+
steps:
27+
- name: Checkout repository
28+
uses: actions/checkout@v4
29+
30+
- name: Set up Docker Buildx
31+
uses: docker/setup-buildx-action@v3
32+
33+
- name: Log in to GitHub Container Registry
34+
if: github.event_name != 'pull_request'
35+
uses: docker/login-action@v3
36+
with:
37+
registry: ${{ env.REGISTRY }}
38+
username: ${{ github.actor }}
39+
password: ${{ secrets.GITHUB_TOKEN }}
40+
41+
- name: Extract metadata (tags, labels) for Docker
42+
id: meta
43+
uses: docker/metadata-action@v5
44+
with:
45+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
46+
tags: |
47+
type=ref,event=branch
48+
type=ref,event=pr
49+
type=semver,pattern={{version}}
50+
type=semver,pattern={{major}}.{{minor}}
51+
type=semver,pattern={{major}}
52+
type=raw,value=latest,enable={{is_default_branch}}
53+
type=sha,prefix={{branch}}-
54+
55+
- name: Build and push Docker image
56+
uses: docker/build-push-action@v5
57+
with:
58+
context: .
59+
platforms: linux/amd64,linux/arm64
60+
push: ${{ github.event_name != 'pull_request' }}
61+
tags: ${{ steps.meta.outputs.tags }}
62+
labels: ${{ steps.meta.outputs.labels }}
63+
cache-from: type=gha
64+
cache-to: type=gha,mode=max
65+
66+
- name: Generate artifact attestation
67+
if: github.event_name != 'pull_request'
68+
uses: actions/attest-build-provenance@v1
69+
with:
70+
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
71+
subject-digest: ${{ steps.build.outputs.digest }}
72+
push-to-registry: true

.gitignore

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Environment files with secrets
2+
.env.local
3+
.env.*.local
4+
5+
# Backup files
6+
*.backup
7+
*.bak
8+
9+
# Docker volumes
10+
/tmp/
11+
/conf/
12+
13+
# Editor files
14+
.vscode/
15+
.idea/
16+
*.swp
17+
*.swo
18+
*~
19+
20+
# OS files
21+
.DS_Store
22+
Thumbs.db

README.md

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,32 @@ MEMORY_RESERVATION=2048M
114114
SHM_SIZE=2147483648 # 2GB
115115
```
116116

117-
## Build da imagem
117+
### 6. Configurar imagem Docker
118118

119-
Build a imagem Docker:
119+
Por padrão, o `.env` usa a imagem publicada no GitHub Container Registry:
120120

121121
```bash
122+
IMAGE_NAME=ghcr.io/librecodecoop/nextcloud-talk-recording
123+
IMAGE_TAG=latest
124+
```
125+
126+
**Opções de tags disponíveis:**
127+
- `latest` - Última versão da branch main
128+
- `main` - Branch main (mesma coisa que latest)
129+
- `v0.2.1` - Versão específica (quando criar tags)
130+
- `main-<sha>` - Commit específico
131+
132+
**Build local (opcional):**
133+
134+
Se preferir fazer build localmente:
135+
136+
```bash
137+
# Build da imagem
122138
docker build -t nextcloud-talk:0.2.1 .
139+
140+
# Ajuste o .env para usar a imagem local
141+
IMAGE_NAME=nextcloud-talk
142+
IMAGE_TAG=0.2.1
123143
```
124144

125145
## Executar o serviço
@@ -214,6 +234,16 @@ docker compose --env-file .env.local --profile talk-recording down
214234

215235
### Atualizar a imagem
216236

237+
```bash
238+
# Pull da última versão
239+
docker compose --env-file .env.local --profile talk-recording pull
240+
241+
# Restart com a nova imagem
242+
docker compose --env-file .env.local --profile talk-recording up -d
243+
```
244+
245+
Se estiver usando build local:
246+
217247
```bash
218248
# Rebuild
219249
docker build -t nextcloud-talk:0.2.1 .
@@ -258,6 +288,30 @@ O container executa com:
258288
- Xvfb (X virtual framebuffer)
259289
- PulseAudio (áudio)
260290

291+
## CI/CD
292+
293+
Este repositório possui GitHub Actions configurado para:
294+
295+
- **Build automático**: A cada push na branch `main`
296+
- **Multi-arquitetura**: Builds para `linux/amd64` e `linux/arm64`
297+
- **Publicação no GHCR**: Imagens disponíveis em `ghcr.io/librecodecoop/nextcloud-talk-recording`
298+
- **Tagging automático**: Quando criar tags `v*`, gera versões semânticas
299+
- **Cache otimizado**: Usa GitHub Actions cache para acelerar builds
300+
- **Artifact attestation**: Verificação de proveniência da imagem
301+
302+
### Tags geradas automaticamente:
303+
304+
- `latest` - Última versão da branch main
305+
- `main` - Branch main
306+
- `main-<sha>` - Commit específico (ex: `main-a1b2c3d`)
307+
- `v0.2.1`, `v0.2`, `v0` - Quando criar tag de versão
308+
309+
### Disparar build manual:
310+
311+
1. Vá para **Actions** no GitHub
312+
2. Selecione **Build and Push Docker Image**
313+
3. Clique em **Run workflow**
314+
261315
## Suporte
262316

263317
Para problemas ou dúvidas:

0 commit comments

Comments
 (0)