276 lines
No EOL
10 KiB
YAML
276 lines
No EOL
10 KiB
YAML
# Отслеживаемые действия
|
||
on:
|
||
push:
|
||
branches:
|
||
- develop
|
||
# - main
|
||
|
||
# Создадим глобальный .env
|
||
env:
|
||
REPO_NAME_WITH_OWNER: ${{ gitea.repository }}
|
||
BRANCH: ${{ github.ref_name }}
|
||
|
||
jobs:
|
||
info:
|
||
runs-on: docker
|
||
outputs:
|
||
REPO_NAME: ${{ steps.set-repo-name.outputs.REPO_NAME }}
|
||
steps:
|
||
- name: Job info
|
||
run: |
|
||
echo "Starting a pipeline triggered by a ${{ github.event_name }} event"
|
||
echo "This job is now running on a ${{ runner.os }} server hosted by Gitea!"
|
||
echo "The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
|
||
echo "${{ github.workflow }}"
|
||
|
||
- name: Get repository name
|
||
id: set-repo-name
|
||
run: |
|
||
# Записываем имя репозитория
|
||
echo "${{ gitea.repository }}" | cut -d "/" -f 2 > repo.txt
|
||
echo "REPO_NAME=$(cat repo.txt)" >> $GITHUB_OUTPUT
|
||
rm -rf repo.txt
|
||
|
||
ci:
|
||
needs: [info]
|
||
runs-on: docker
|
||
env:
|
||
REPO_NAME: ${{ needs.info.outputs.REPO_NAME }}
|
||
steps:
|
||
- name: Update project via SSH on remote server
|
||
uses: https://github.com/appleboy/ssh-action@v1.0.3
|
||
with:
|
||
host: ${{ secrets.SERVER_DOMAIN }}
|
||
username: ${{ secrets.SERVER_USER }}
|
||
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||
port: ${{ secrets.SERVER_PORT }}
|
||
script: |
|
||
# Переходим в директорию с проектами
|
||
mkdir -p ${{ secrets.PROJECT_PATH }}
|
||
cd ${{ secrets.PROJECT_PATH }}
|
||
|
||
# Создаем общую директорию для репозитория
|
||
mkdir -p ${{ env.REPO_NAME }}
|
||
cd ${{ env.REPO_NAME }}
|
||
|
||
# Создаем директорию для ветки
|
||
mkdir -p ${{ env.BRANCH }}
|
||
cd ${{ env.BRANCH }}
|
||
|
||
# Клонируем репозиторий, если необходимо, иначе добавляем последние изменения
|
||
if [ -z "$(ls -A)" ]; then
|
||
echo "Repository ${{ env.REPO_NAME }} not found. Cloning from GitHub..."
|
||
GIT_SSH_COMMAND="ssh -i ~/.ssh/deploy_key_rostelecom_back" git clone --branch ${{ env.BRANCH }} ssh://git@api.statanly.com:2222/${{ env.REPO_NAME_WITH_OWNER }}.git .
|
||
else
|
||
GIT_SSH_COMMAND="ssh -i ~/.ssh/deploy_key_rostelecom_back" git pull --ff-only
|
||
fi
|
||
|
||
# Добавим права доступа
|
||
chmod -R u+rwx ./logging_service
|
||
chmod u+rwx ./data/add_default_data.sh
|
||
|
||
autotests:
|
||
needs: [info, ci]
|
||
runs-on: docker
|
||
env:
|
||
REPO_NAME: ${{ needs.info.outputs.REPO_NAME }}
|
||
steps:
|
||
- name: Run autotests via SSH on remote server
|
||
uses: https://github.com/appleboy/ssh-action@v1.0.3
|
||
with:
|
||
host: ${{ secrets.SERVER_DOMAIN }}
|
||
username: ${{ secrets.SERVER_USER }}
|
||
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||
port: ${{ secrets.SERVER_PORT }}
|
||
command_timeout: 3h
|
||
script: |
|
||
# Переходим в директорию сервиса
|
||
cd ${{ secrets.PROJECT_PATH }}/${{ env.REPO_NAME }}/${{ env.BRANCH }}
|
||
|
||
# Запустим автотесты
|
||
#docker compose \
|
||
#--env-file ./src_backend/.env \
|
||
#--env-file ./src_backend/.env.test \
|
||
#-f docker-compose-test.yaml \
|
||
#up --build --abort-on-container-exit --exit-code-from api
|
||
|
||
sleep 1
|
||
|
||
delete_test_service:
|
||
needs: [info, autotests]
|
||
if: ${{needs.autotests.result == 'success' || failure() && needs.autotests.result == 'failure'}}
|
||
runs-on: docker
|
||
env:
|
||
REPO_NAME: ${{ needs.info.outputs.REPO_NAME }}
|
||
steps:
|
||
- name: Delete test service
|
||
uses: https://github.com/appleboy/ssh-action@v1.0.3
|
||
with:
|
||
host: ${{ secrets.SERVER_DOMAIN }}
|
||
username: ${{ secrets.SERVER_USER }}
|
||
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||
port: ${{ secrets.SERVER_PORT }}
|
||
script: |
|
||
# Переходим в директорию сервиса
|
||
cd ${{ secrets.PROJECT_PATH }}/${{ env.REPO_NAME }}/${{ env.BRANCH }}
|
||
|
||
# После проверок удалим тестовую версию сервиса
|
||
docker compose \
|
||
--env-file ./src_backend/.env \
|
||
--env-file ./src_backend/.env.test \
|
||
-f docker-compose-test.yaml \
|
||
down
|
||
|
||
undo-changes:
|
||
needs: [info, autotests]
|
||
if: ${{ failure() && needs.autotests.result == 'failure' }}
|
||
runs-on: docker
|
||
env:
|
||
REPO_NAME: ${{ needs.info.outputs.REPO_NAME }}
|
||
steps:
|
||
- name: Remove last commit
|
||
uses: https://github.com/appleboy/ssh-action@v1.0.3
|
||
with:
|
||
host: ${{ secrets.SERVER_DOMAIN }}
|
||
username: ${{ secrets.SERVER_USER }}
|
||
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||
port: ${{ secrets.SERVER_PORT }}
|
||
script: |
|
||
# Переходим в директорию сервиса
|
||
cd ${{ secrets.PROJECT_PATH }}/${{ env.REPO_NAME }}/${{ env.BRANCH }}
|
||
|
||
# Удаляем изменения последнего коммита
|
||
git reset --hard HEAD~1
|
||
|
||
cd:
|
||
needs: [info, autotests]
|
||
runs-on: docker
|
||
env:
|
||
REPO_NAME: ${{ needs.info.outputs.REPO_NAME }}
|
||
steps:
|
||
- name: Deploy verified code
|
||
uses: https://github.com/appleboy/ssh-action@v1.0.3
|
||
with:
|
||
host: ${{ secrets.SERVER_DOMAIN }}
|
||
username: ${{ secrets.SERVER_USER }}
|
||
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||
port: ${{ secrets.SERVER_PORT }}
|
||
command_timeout: 3h
|
||
script: |
|
||
# Переходим в директорию сервиса
|
||
cd ${{ secrets.PROJECT_PATH }}/${{ env.REPO_NAME }}/${{ env.BRANCH }}
|
||
|
||
# Поднимаем новый контейнер нужной версии
|
||
if [ ${{ env.BRANCH }} = "main" ]; then
|
||
docker compose \
|
||
--env-file ./src_backend/.env \
|
||
--env-file ./src_backend/.env.prod \
|
||
--env-file ./src_backend/.env.compose_vars \
|
||
down
|
||
|
||
docker compose \
|
||
--env-file ./src_backend/.env \
|
||
--env-file ./src_backend/.env.prod \
|
||
--env-file ./src_backend/.env.compose_vars \
|
||
up --build -d
|
||
|
||
sleep 15
|
||
|
||
# Добавляем базовые данные, если необходимо
|
||
data/add_default_data.sh \
|
||
--env_files src_backend/.env src_backend/.env.prod src_backend/.env.compose_vars \
|
||
--weights_archieve_name weights.tar.gz \
|
||
--default_data_dir ../default_data
|
||
|
||
else
|
||
docker compose \
|
||
--env-file ./src_backend/.env \
|
||
--env-file ./src_backend/.env.dev \
|
||
--env-file ./src_backend/.env.compose_vars \
|
||
down
|
||
|
||
docker compose \
|
||
--env-file ./src_backend/.env \
|
||
--env-file ./src_backend/.env.dev \
|
||
--env-file ./src_backend/.env.compose_vars \
|
||
up --build -d
|
||
|
||
sleep 15
|
||
|
||
# Добавляем базовые данные, если необходимо
|
||
data/add_default_data.sh \
|
||
--env_files src_backend/.env src_backend/.env.dev src_backend/.env.compose_vars \
|
||
--weights_archieve_name weights.tar.gz \
|
||
--default_data_dir ../default_data
|
||
|
||
fi
|
||
|
||
cd_astra:
|
||
needs: [info, cd]
|
||
if: github.ref_name == 'develop'
|
||
runs-on: docker
|
||
env:
|
||
REPO_NAME: ${{ needs.info.outputs.REPO_NAME }}
|
||
steps:
|
||
- name: Deploy verified code
|
||
uses: https://github.com/appleboy/ssh-action@v1.0.3
|
||
with:
|
||
host: ${{ secrets.SERVER_DOMAIN }}
|
||
username: ${{ secrets.SERVER_USER }}
|
||
key: ${{ secrets.SSH_ASTRA_PRIVATE_KEY }}
|
||
port: ${{ secrets.ASTRA_SERVER_PORT }}
|
||
command_timeout: 3h
|
||
script: |
|
||
# Переходим в директорию с проектами
|
||
mkdir -p ${{ secrets.ASTRA_PROJECT_PATH }}
|
||
cd ${{ secrets.ASTRA_PROJECT_PATH }}
|
||
|
||
# Создаем общую директорию для репозитория
|
||
mkdir -p ${{ env.REPO_NAME }}
|
||
cd ${{ env.REPO_NAME }}
|
||
|
||
# Создаем директорию для ветки
|
||
mkdir -p ${{ env.BRANCH }}
|
||
cd ${{ env.BRANCH }}
|
||
|
||
# Клонируем репозиторий, если необходимо, иначе добавляем последние изменения
|
||
if [ -z "$(ls -A)" ]; then
|
||
echo "Repository ${{ env.REPO_NAME }} not found. Cloning from GitHub..."
|
||
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa" git clone --branch ${{ env.BRANCH }} ssh://git@api.statanly.com:2222/${{ env.REPO_NAME_WITH_OWNER }}.git .
|
||
else
|
||
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa" git pull --ff-only
|
||
fi
|
||
|
||
# Поднимаем нужную dev версию сервиса
|
||
docker compose \
|
||
--env-file ./src_backend/.env \
|
||
--env-file ./src_backend/.env.astra \
|
||
--env-file ./src_backend/.env.compose_vars \
|
||
down
|
||
|
||
docker compose \
|
||
--env-file ./src_backend/.env \
|
||
--env-file ./src_backend/.env.astra \
|
||
--env-file ./src_backend/.env.compose_vars \
|
||
up --build -d
|
||
|
||
push-to-gitverse:
|
||
needs: [cd]
|
||
runs-on: docker
|
||
container:
|
||
image: node:20-bullseye
|
||
env:
|
||
GITVERSE_TOKEN: ${{ secrets.GITVERSE_TOKEN }}
|
||
steps:
|
||
- name: Checkout code
|
||
uses: actions/checkout@v4
|
||
with:
|
||
fetch-depth: 0
|
||
|
||
- name: Print last 5 commits
|
||
run: git log -n 5 --oneline
|
||
|
||
- name: Push to Gitverse
|
||
run: |
|
||
git remote add gitverse https://${{ env.GITVERSE_TOKEN }}@gitverse.ru/${{ env.REPO_NAME_WITH_OWNER }}.git
|
||
git push gitverse ${{ env.BRANCH }} |