diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml index e03a3bd45..9048afb3c 100644 --- a/.github/workflows/cd.yaml +++ b/.github/workflows/cd.yaml @@ -48,7 +48,7 @@ jobs: aws_account_id: ${{ env.AWS_ACCOUNT_ID_DEV }} should_publish: true ecr_image_repo_name: promethai-dev-backend-promethai-backend-memory - dockerfile_location: ./level_2 + dockerfile_location: level_2/. - name: Export Docker image tag id: export-promethai-docker-tag run: | diff --git a/.github/workflows/cd_prd.yaml b/.github/workflows/cd_prd.yaml index 97b943ad2..5b7f0247a 100644 --- a/.github/workflows/cd_prd.yaml +++ b/.github/workflows/cd_prd.yaml @@ -23,38 +23,38 @@ jobs: steps: - name: Take code from repo uses: actions/checkout@v3 - - name: Set environment variable for stage - id: set-env - run: | - if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then - echo "STAGE=prd" >> $GITHUB_ENV - echo "::set-output name=stage::prd" - else - echo "STAGE=dev" >> $GITHUB_ENV - echo "::set-output name=stage::dev" - fi - - name: Use output - run: echo "The stage is ${{ steps.set-env.outputs.stage }}" - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v1 - with: - role-to-assume: ${{ env.AWS_ROLE_DEV_CICD }} - aws-region: eu-west-1 - - name: Create Docker image and push to ECR - uses: ./.github/actions/image_builder - id: generate-promethai-docker - with: - stage: prd - aws_account_id: ${{ env.AWS_ACCOUNT_ID_DEV }} - should_publish: true - ecr_image_repo_name: promethai-prd-backend-promethai-backend-memory - dockerfile_location: ./level_2 - - name: Export Docker image tag - id: export-promethai-docker-tag - run: | - export DOCKER_TAG=$(cat /tmp/.DOCKER_IMAGE_VERSION) - echo "Docker tag is: $DOCKER_TAG" - echo "promethai_docker_tag_backend=$DOCKER_TAG" >> $GITHUB_OUTPUT +# - name: Set environment variable for stage +# id: set-env +# run: | +# if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then +# echo "STAGE=prd" >> $GITHUB_ENV +# echo "::set-output name=stage::prd" +# else +# echo "STAGE=dev" >> $GITHUB_ENV +# echo "::set-output name=stage::dev" +# fi +# - name: Use output +# run: echo "The stage is ${{ steps.set-env.outputs.stage }}" +# - name: Configure AWS credentials +# uses: aws-actions/configure-aws-credentials@v1 +# with: +# role-to-assume: ${{ env.AWS_ROLE_DEV_CICD }} +# aws-region: eu-west-1 +# - name: Create Docker image and push to ECR +# uses: ./.github/actions/image_builder +# id: generate-promethai-docker +# with: +# stage: prd +# aws_account_id: ${{ env.AWS_ACCOUNT_ID_DEV }} +# should_publish: true +# ecr_image_repo_name: promethai-prd-backend-promethai-backend-memory +# dockerfile_location: ./level_2 +# - name: Export Docker image tag +# id: export-promethai-docker-tag +# run: | +# export DOCKER_TAG=$(cat /tmp/.DOCKER_IMAGE_VERSION) +# echo "Docker tag is: $DOCKER_TAG" +# echo "promethai_docker_tag_backend=$DOCKER_TAG" >> $GITHUB_OUTPUT # - name: Create Tag and Release # runs-on: ubuntu-latest @@ -78,8 +78,8 @@ jobs: # with: # tag_name: ${{ steps.bump_version_and_push_tag.outputs.tag }} # release_name: Release ${{ steps.bump_version_and_push_tag.outputs.tag }} - outputs: - promethai_docker_tag_backend: ${{ steps.export-promethai-docker-tag.outputs.promethai_docker_tag_backend }} +# outputs: +# promethai_docker_tag_backend: ${{ steps.export-promethai-docker-tag.outputs.promethai_docker_tag_backend }} # apply_tf: # name: Trigger terraform apply workflow diff --git a/assets/topoteretes_logo.png b/assets/topoteretes_logo.png new file mode 100644 index 000000000..ebdbc9a20 Binary files /dev/null and b/assets/topoteretes_logo.png differ diff --git a/bin/dockerize b/bin/dockerize index 8949bd773..a8f465360 100755 --- a/bin/dockerize +++ b/bin/dockerize @@ -1,3 +1,9 @@ +set -euo pipefail + +AWS_REGION=${region:-eu-west-1} +AWS_DEPLOYMENT_ACCOUNT=${account:-463722570299} +AWS_REPOSITORY=${repo:-"${AWS_DEPLOYMENT_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com"} + STAGE=${stage:-"dev"} SHA_SHORT="$(git rev-parse --short HEAD)" CUR_DATE="$(date +%Y%m%d%H%M%S)" @@ -6,7 +12,7 @@ IMAGE_NAME=${image_name:-promethai-${STAGE}-promethai-backend-memory} REPO_NAME="${AWS_REPOSITORY}/${IMAGE_NAME}" FULL_IMAGE_NAME="${REPO_NAME}:${VERSION}" -APP_DIR=${app_dir:-"./level_2"} # Updated this line +APP_DIR=${app_dir:-"level_2/"} # Updated this line PUBLISH=${publish:-false} diff --git a/level_2/api.py b/level_2/api.py index 083e87e9d..8ddc33686 100644 --- a/level_2/api.py +++ b/level_2/api.py @@ -23,7 +23,11 @@ load_dotenv() OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "") app = FastAPI(debug=True) +from auth.cognito.JWTBearer import JWTBearer +from auth.auth import jwks +auth = JWTBearer(jwks) +from fastapi import Depends class ImageResponse(BaseModel): success: bool message: str diff --git a/level_2/entrypoint.sh b/level_2/entrypoint.sh index e711b832f..6eabf9c7c 100755 --- a/level_2/entrypoint.sh +++ b/level_2/entrypoint.sh @@ -1,6 +1,6 @@ #!/bin/bash export ENVIRONMENT -#python fetch_secret.py +python fetch_secret.py # Start Gunicorn gunicorn -w 2 -k uvicorn.workers.UvicornWorker -t 120 --bind=0.0.0.0:8000 --bind=0.0.0.0:443 --log-level debug api:app \ No newline at end of file diff --git a/level_2/fetch_secret.py b/level_2/fetch_secret.py new file mode 100644 index 000000000..6c422d1af --- /dev/null +++ b/level_2/fetch_secret.py @@ -0,0 +1,75 @@ +import os +from dotenv import load_dotenv +from api import start_api_server + +# API_ENABLED = os.environ.get("API_ENABLED", "False").lower() == "true" +import boto3 + +environment = os.getenv("AWS_ENV", "dev") + + + +def fetch_secret(secret_name, region_name, env_file_path): + session = boto3.session.Session() + client = session.client(service_name="secretsmanager", region_name=region_name) + + try: + response = client.get_secret_value(SecretId=secret_name) + except Exception as e: + print(f"Error retrieving secret: {e}") + return None + + if "SecretString" in response: + secret = response["SecretString"] + else: + secret = response["SecretBinary"] + + with open(env_file_path, "w") as env_file: + env_file.write(secret) + + if os.path.exists(env_file_path): + print(f"The .env file is located at: {os.path.abspath(env_file_path)}") + load_dotenv() + PINECONE_API_KEY = os.getenv("PINECONE_API_KEY", "") + + print("LEN OF PINECONE_API_KEY", len(PINECONE_API_KEY)) + else: + print("The .env file was not found.") + return "Success in loading env files" + + +env_file = ".env" +if os.path.exists(env_file): + # Load default environment variables (.env) + load_dotenv() + print("Talk to the AI!") + + +else: + secrets = fetch_secret( + f"promethai-{environment}-backend-secretso-promethaijs-dotenv", + "eu-west-1", + ".env", + ) + if secrets: + print(secrets) + load_dotenv() + + +# Check if "dev" is present in the task ARN +if "dev" in environment: + # Fetch the secret + secrets = fetch_secret( + f"promethai-dev-backend-secretso-promethaijs-dotenv", + "eu-west-1", + ".env", + ) + load_dotenv() +elif "prd" in environment: + # Fetch the secret + secrets = fetch_secret( + f"promethai-prd-backend-secretso-promethaijs-dotenv", + "eu-west-1", + ".env", + ) + load_dotenv()