name: Setup Docker Action
on:
  push:
    branches:
      - main
      - dev
      - feature/*
jobs:
  setup_docker:
    if: contains(github.event.head_commit.message, '@docker')
    runs-on: self-hosted
    strategy:
      matrix:
        python:
          - 3.12.7
          
    steps:
      - name: Fix Permission
        run: | 
          sudo chown -R $(whoami):$(whoami) /home/$(whoami)/actions-runner  && \
          sudo chmod -R 755 /home/$(whoami)/actions-runner
          
      - name: Checkout Repository
        uses: actions/checkout@v4
        with:
          ref: ${{ github.ref_name }}
      - name: Clean up Virtual Environment
        run: ./setup/clean_up_virtualenvs.sh 0
        
      - name: Create Virtual Environment
        run: pyenv virtualenv "${{ github.ref_name }}-$(git rev-parse --short "$GITHUB_SHA")"

      - name: Install dotenv
        run: pip install python-dotenv

      - name: Update Tag
        run: make update_tag CURR_BRANCH=${{ github.ref_name }}

      - name: Stop Server Docker
        run: make stop_server_docker

      - name: Generate Config
        run: make gen_config_docker

      - name: Build Image
        run: make build_image

      - name: Start Server
        run: make run_server_docker
      - name: Sleep for 30 seconds
        run: sleep 30s   

      - name: Restore Database
        run: make restore_database_docker

      - name: Run Tests
        run: make run_test_docker
        
      - name: Login Docker hub
        run: echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USER }} --password-stdin ${{ secrets.DOCKER_HUB }}
      - name: Push Image
        run: make push_image

      - name: Clean Up
        run: make clean_up