Skip to content

Refactoring

Refactoring #11

Workflow file for this run

name: CI/CD Pipeline
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
name: Build and Test
runs-on: ubuntu-24.04
steps:
# Проверка репозитория
- name: Checkout code
uses: actions/checkout@v3
# Установка Go
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: 1.23 # Укажите нужную версию Go
# Установка зависимостей
- name: Install dependencies
run: go mod download
# Сборка приложения
- name: Build application
run: go build -ldflags='-s -w -extldflags "-static"' -o ./tg-rss-app
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: tg-rss-app
path: tg-rss-app
# Запуск тестов
- name: Run tests
run: go test ./... -v
docker-build:
name: Build and Push Docker Image
runs-on: ubuntu-24.04
needs: build
steps:
# Проверка репозитория
- name: Checkout code
uses: actions/checkout@v3
# Скачивание артифакта
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: tg-rss-app
# Логин в Docker Hub
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
# Сборка и пуш Docker-образа
- name: Build and Push Docker Image
run: |
docker build -t ${{ secrets.DOCKER_USERNAME }}/news-bot:latest .
docker push ${{ secrets.DOCKER_USERNAME }}/news-bot:latest
deploy:
name: Deploy to Server
runs-on: ubuntu-24.04
needs: docker-build
steps:
# Логин на удаленный сервер
- name: Deploy to server
uses: appleboy/[email protected]
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
port: ${{ secrets.SERVER_PORT }}
script: |
docker pull ${{ secrets.DOCKER_USERNAME }}/news-bot:latest
docker stop news-bot || true
docker rm news-bot || true
docker run -d --name news-bot \
-e TELEGRAM_API_KEY=${{ secrets.TELEGRAM_API_KEY }} \
-e POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} \
-e POSTGRES_PORT=${{ secrets.POSTGRES_PORT }} \
-e POSTGRES_USER=${{ secrets.POSTGRES_USER }} \
-e POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} \
-e POSTGRES_DB=${{ secrets.POSTGRES_DB }} \
-e TZ=Europe/Moscow \
-p 8080:8080 \
--network=news-net \
--restart=always \
--log-opt max-size=10m \
--log-opt max-file=5 \
--health-cmd='curl -f http://localhost:8080/health || exit 1' \
${{ secrets.DOCKER_USERNAME }}/news-bot:latest