Skip to content

Commit 0f1be14

Browse files
committed
ci: add Docker image auto-build and publish workflow
- Add .github/workflows/docker.yml for automatic Docker image building - Publish images to GitHub Container Registry (ghcr.io) - Images tagged with: latest, main branch, and commit SHA - Update README.md with Docker image instructions: - Recommend using pre-built image (ghcr.io/tkavelli/reezonly-space-openapi:latest) - Provide local build alternative - Document CI/CD pipelines (pages.yml + docker.yml) - Add GitHub Actions status check links Now users can: 1. Pull ready-to-use Docker image: docker pull ghcr.io/tkavelli/reezonly-space-openapi:latest 2. Or build locally: docker build -t reezonly-space-openapi . Every push to main triggers: - GitHub Pages deployment (documentation) - Docker image build and push to ghcr.io
1 parent 9e40b63 commit 0f1be14

2 files changed

Lines changed: 112 additions & 16 deletions

File tree

.github/workflows/docker.yml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
name: Build and Push Docker Image
2+
3+
on:
4+
push:
5+
branches: [main]
6+
workflow_dispatch:
7+
8+
permissions:
9+
contents: read
10+
packages: write
11+
12+
jobs:
13+
build:
14+
runs-on: ubuntu-latest
15+
steps:
16+
- name: Checkout
17+
uses: actions/checkout@v4
18+
19+
- name: Set up Docker Buildx
20+
uses: docker/setup-buildx-action@v3
21+
22+
- name: Log in to GitHub Container Registry
23+
uses: docker/login-action@v3
24+
with:
25+
registry: ghcr.io
26+
username: ${{ github.actor }}
27+
password: ${{ secrets.GITHUB_TOKEN }}
28+
29+
- name: Extract metadata
30+
id: meta
31+
uses: docker/metadata-action@v5
32+
with:
33+
images: ghcr.io/${{ github.repository }}
34+
tags: |
35+
type=ref,event=branch
36+
type=semver,pattern={{version}}
37+
type=semver,pattern={{major}}.{{minor}}
38+
type=sha
39+
type=raw,value=latest,enable={{is_default_branch}}
40+
41+
- name: Build and push
42+
uses: docker/build-push-action@v5
43+
with:
44+
context: .
45+
push: true
46+
tags: ${{ steps.meta.outputs.tags }}
47+
labels: ${{ steps.meta.outputs.labels }}
48+
cache-from: type=gha
49+
cache-to: type=gha,mode=max

README.md

Lines changed: 63 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,19 @@
66

77
## Быстрый старт (Docker)
88

9-
Самый простой способ поднять проект локально:
9+
### Вариант 1: Готовый образ (рекомендуется)
10+
11+
Образ автоматически собирается при каждом push в main:
12+
13+
```bash
14+
# запуск контейнера на порту 3000 с готовым образом из GitHub Container Registry
15+
docker run -p 3000:80 ghcr.io/tkavelli/reezonly-space-openapi:latest
16+
17+
# открыть в браузере
18+
open http://localhost:3000
19+
```
20+
21+
### Вариант 2: Собрать образ локально
1022

1123
```bash
1224
# сборка образа
@@ -164,30 +176,51 @@ reezonly-space-openapi/
164176

165177
## Docker
166178

167-
### Собрать образ
179+
### Использовать готовый образ (рекомендуется)
180+
181+
Образ автоматически собирается в GitHub Actions при каждом push:
168182

169183
```bash
170-
docker build -t reezonly-space-openapi .
171-
```
184+
# запустить готовый образ с Docker Hub
185+
docker run -d -p 3000:80 --name space-api ghcr.io/tkavelli/reezonly-space-openapi:latest
172186

173-
### Запустить контейнер
187+
# проверить логи
188+
docker logs -f space-api
174189

175-
```bash
176-
docker run -d -p 3000:80 --name space-api reezonly-space-openapi
190+
# остановить контейнер
191+
docker stop space-api && docker rm space-api
177192
```
178193

179-
### Проверить логи
194+
### Собрать образ локально
180195

181196
```bash
197+
# собрать образ
198+
docker build -t reezonly-space-openapi .
199+
200+
# запустить контейнер
201+
docker run -d -p 3000:80 --name space-api reezonly-space-openapi
202+
203+
# проверить логи
182204
docker logs -f space-api
205+
206+
# остановить контейнер
207+
docker stop space-api && docker rm space-api
183208
```
184209

185-
### Остановить контейнер
210+
### Доступные образы
211+
212+
При каждом push в `main` GitHub Actions автоматически собирает и публикует образ:
213+
- `ghcr.io/tkavelli/reezonly-space-openapi:latest` — последняя версия из main
214+
- `ghcr.io/tkavelli/reezonly-space-openapi:main` — текущий branch
215+
- `ghcr.io/tkavelli/reezonly-space-openapi:sha-<commit>` — конкретный коммит
186216

217+
Скачать образ:
187218
```bash
188-
docker stop space-api && docker rm space-api
219+
docker pull ghcr.io/tkavelli/reezonly-space-openapi:latest
189220
```
190221

222+
Проверить статус сборки: https://github.com/tkavelli/reezonly-space-openapi/actions
223+
191224
---
192225

193226
## Дополнительная документация
@@ -198,15 +231,29 @@ docker stop space-api && docker rm space-api
198231

199232
---
200233

201-
## Continuous Integration (GitHub Pages)
234+
## Continuous Integration (CI/CD)
235+
236+
### GitHub Pages (pages.yml)
237+
238+
При push в `main`:
239+
1. Восстанавливает зависимости: `npm ci && npm ci --prefix tools`
240+
2. Генерирует документацию: `npm run build-docs`
241+
3. Деплоит в GitHub Pages: https://tkavelli.github.io/reezonly-space-openapi
242+
243+
### Docker Image (docker.yml)
202244

203245
При push в `main`:
204-
1. GitHub Actions запускает `.github/workflows/pages.yml`
205-
2. Восстанавливает зависимости: `npm ci && npm ci --prefix tools`
206-
3. Генерирует документацию: `npm run build-docs`
207-
4. Деплоит в GitHub Pages: https://tkavelli.github.io/reezonly-space-openapi
246+
1. Собирает Docker образ
247+
2. Публикует в GitHub Container Registry (ghcr.io)
248+
3. Доступен на: `ghcr.io/tkavelli/reezonly-space-openapi:latest`
208249

209-
Проверить статус: https://github.com/tkavelli/reezonly-space-openapi/actions
250+
### Проверить статус
251+
252+
Все workflows: https://github.com/tkavelli/reezonly-space-openapi/actions
253+
254+
Что происходит:
255+
- `pages.yml` — деплой на GitHub Pages (через nginx в докере)
256+
- `docker.yml` — сборка и публикация Docker образа
210257

211258
---
212259

0 commit comments

Comments
 (0)