diff --git a/.github/workflows/deploy_functions_prod.yml b/.github/workflows/deploy_functions_prod.yml new file mode 100644 index 0000000..9986960 --- /dev/null +++ b/.github/workflows/deploy_functions_prod.yml @@ -0,0 +1,78 @@ +name: Deploy firebase functions to PROD + +on: + push: + branches: + - main + paths: + - "backend/**" + - ".github/workflows/deploy_functions_prod.yml" + workflow_dispatch: + +jobs: + build_and_deploy: + runs-on: ubuntu-latest + steps: + # Step 1: Checkout the code + - uses: actions/checkout@v3 + + # Step 1.5: Environment variables + - name: create env file + working-directory: backend + run: | + cd functions + touch .env + echo "${{ secrets.FUNCTIONS_ENV_VARS_PROD }}" >> .env + + # Step 2: Set up Python environment + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + # Step 3: Set up Node.js environment + - name: Set up Node + uses: actions/setup-node@v3 + with: + node-version: 19.7.0 + + # Step 3.5: Download the ZIP file from Google Drive + - name: Download Models ZIP + run: | + wget "${{ secrets.LINK_TO_MODEL_FILES_PROD }}" -O models.zip + + - name: List Directory Contents + run: ls -lh models.zip + - name: Check File Type + run: file models.zip + + # Step 3.5.2: Extract the ZIP file + - name: Extract Models ZIP + run: | + unzip models.zip -d backend/functions/ml_logic + + # Step 3.5.3: Clean up + - name: Clean Up + run: rm models.zip + + # Step 4: Create Service Account Key and Set Env Variables + - name: Create SA key and set env variables + run: | + echo '${{ secrets.FIREBASE_SERVICE_ACCOUNT_SCHEMESSG_V3_PROD }}' > ${{ runner.temp }}/gcloud.json + echo "GOOGLE_APPLICATION_CREDENTIALS=${{ runner.temp }}/gcloud.json" >> $GITHUB_ENV + + # Step 5: Prepare the environment + - name: Prepare the environment + working-directory: backend/functions + run: | + python3.10 -m venv venv + . venv/bin/activate + npx firebase-tools --version + python3.10 -m pip install -r requirements.txt + + # Step 6: deploy functions + - name: Deploy functions + working-directory: backend + env: + GOOGLE_APPLICATION_CREDENTIALS: ${{ runner.temp }}/gcloud.json + run: npx firebase-tools deploy --only functions --debug --token "${{ secrets.FIREBASE_TOKEN_SCHEMESSG_V3_PROD }}"