diff --git a/.github/PULL_REQUEST_TEMPLATE.md.md b/.github/PULL_REQUEST_TEMPLATE.md similarity index 100% rename from .github/PULL_REQUEST_TEMPLATE.md.md rename to .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml new file mode 100644 index 0000000..bb3170e --- /dev/null +++ b/.github/workflows/cicd.yml @@ -0,0 +1,65 @@ +name: CI/CD with FastAPI + +on: + pull_request: + branches: ["main"] + push: + branches: ["main"] + workflow_dispatch: + +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +env: + IMAGE: ${{ secrets.DOCKER_USERNAME }}/menu-ai + +jobs: + docker-build-push: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build & Push Docker Image + uses: docker/build-push-action@v6 + with: + context: . + file: ./Dockerfile + push: true + tags: | + ${{ env.IMAGE }}:latest + ${{ env.IMAGE }}:${{ github.sha }} + + deploy: + name: Deploy to Server + needs: docker-build-push + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/main' + + steps: + - name: Deploy via SSH + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.HOST }} + username: ${{ secrets.USER }} + key: ${{ secrets.PRIVATE_KEY }} + script: | + docker pull ${{ env.IMAGE }}:latest + docker stop menu-ai || true + docker rm menu-ai || true + docker run -d --name menu-ai \ + -p 8000:8000 \ + -e OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} \ + -e OPENAI_MODEL=${{ secrets.OPENAI_MODEL }} \ + ${{ env.IMAGE }}:latest \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7a7cca2 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM python:3.11-slim + +WORKDIR /app + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/app/requirements.txt b/requirements.txt similarity index 100% rename from app/requirements.txt rename to requirements.txt