Refactoring #11
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |