name: Backend Service CI/CD on: push: branches: [main] paths: - 'backend/**' - 'backend/.github/workflows/backend.yml' pull_request: branches: [main] paths: - 'backend/**' - 'backend/.github/workflows/backend.yml' defaults: run: working-directory: backend jobs: test: name: Lint & Test runs-on: ubuntu-latest strategy: fail-fast: true matrix: python-version: ['3.11'] steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Cache pip dependencies uses: actions/cache@v4 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-backend-${{ hashFiles('backend/requirements.txt') }} restore-keys: | ${{ runner.os }}-pip-backend- - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt pip install pytest flake8 - name: Run lint run: flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics - name: Run tests run: pytest --tb=short -q deploy: name: Deploy Backend Service needs: test if: github.event_name == 'push' && github.ref == 'refs/heads/main' runs-on: ubuntu-latest steps: - name: Deploy via SSH uses: appleboy/ssh-action@v1 with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USER }} port: ${{ secrets.SSH_PORT }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | cd /opt/myproject/backend git pull origin main sudo systemctl restart backend