From 893894c41cd70cfcfbc824b378c25dbb6e73eb28 Mon Sep 17 00:00:00 2001 From: Cullen Watson Date: Mon, 28 Aug 2023 07:57:09 -0500 Subject: [PATCH] add docker workflow --- .github/workflows/docker-build.yml | 47 +++++++++++++++++++++++++++++ Dockerfile | 15 +++++++++ api/core/formatters/csv/__init__.py | 18 +++++++---- settings.py | 8 ++--- 4 files changed, 78 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/docker-build.yml create mode 100644 Dockerfile diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml new file mode 100644 index 0000000..2615332 --- /dev/null +++ b/.github/workflows/docker-build.yml @@ -0,0 +1,47 @@ +name: Build and Push Docker Image + +on: + push: + branches: + - docker_workflow + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to GitHub Docker Registry + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.DOCKER_TOKEN }} + + - name: Build and Push Image + uses: docker/build-push-action@v2 + with: + context: . + file: ./Dockerfile + push: true + tags: ghcr.io/${{ github.repository }}/jobspy_api:latest + + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token + with: + tag_name: ${{ github.sha }} + release_name: Release ${{ github.sha }} + draft: false + prerelease: false + + - name: Attach Docker Image to Release + run: | + echo "Image ghcr.io/${{ github.repository }}/jobspy_api:latest is available under assets in the release." diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7a2e04e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM python:3.10-slim + +WORKDIR /app + +COPY . /app + +RUN apt-get update && \ + apt-get install -y jq && \ + pip install --no-cache-dir -r requirements.txt + +EXPOSE 8000 + +ENV PORT=8000 + +CMD sh -c "uvicorn main:app --host 0.0.0.0 --port $PORT" diff --git a/api/core/formatters/csv/__init__.py b/api/core/formatters/csv/__init__.py index 28ab38e..640870c 100644 --- a/api/core/formatters/csv/__init__.py +++ b/api/core/formatters/csv/__init__.py @@ -1,10 +1,12 @@ -import gspread -from oauth2client.service_account import ServiceAccountCredentials - +import json import csv from io import StringIO + +import gspread +from google.oauth2.service_account import Credentials from datetime import datetime + from ...jobs import * from ...scrapers import * from settings import * @@ -19,9 +21,13 @@ def upload_to_google_sheet(csv_data: str): "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive", ] - credentials = ServiceAccountCredentials.from_json_keyfile_name( - GSHEET_JSON_KEY_PATH, scope - ) + if not GSHEET_SECRET_JSON: + raise ValueError("GSHEET_SECRET_JSON not provided!") + + secret_dict = json.loads(GSHEET_SECRET_JSON) + + credentials = Credentials.from_service_account_info(secret_dict, scopes=scope) + gc = gspread.authorize(credentials) sh = gc.open(GSHEET_NAME) diff --git a/settings.py b/settings.py index 069212b..5558628 100644 --- a/settings.py +++ b/settings.py @@ -2,11 +2,11 @@ import os load_dotenv() -# gsheets (template to copy at https://docs.google.com/spreadsheets/d/1HAnn-aPv-BO4QTEzfIWc-5iw50duyMoTgX8o3RsEOWs/edit?usp=sharing) -GSHEET_JSON_KEY_PATH = "client_secret.json" -GSHEET_NAME = "JobSpy" +# Google sheets output_format +GSHEET_NAME = os.environ.get("GSHEET_NAME", "JobSpy") +GSHEET_SECRET_JSON = os.environ.get("GSHEET_SECRET_JSON") -# optional autha +# optional auth AUTH_REQUIRED = False SUPABASE_URL = os.environ.get("SUPABASE_URL") SUPABASE_KEY = os.environ.get("SUPABASE_KEY")