# Отслеживаемые действия 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 }}