I am trying to deploy my functions. I added a second one and refactored the first and now I can't deploy. I tried deploying manually bypassing CI/CD but it still is giving the error. This is a 2.0 function and I did run tsc. Since I last deployed I did reinstall the firebase-tools package. Other than what I mentioned, nothing is different from when it did work.
Here are the output of firebase deploy --only functions
:
i deploying functions
Running command: npm --prefix "$RESOURCE_DIR" run lint
> lint
> eslint --ext .js,.ts .
Running command: npm --prefix "$RESOURCE_DIR" run build
> build
> tsc
✔ functions: Finished running predeploy script.
i functions: preparing codebase default for deployment
i functions: ensuring required API cloudfunctions.googleapis.com is enabled...
i functions: ensuring required API cloudbuild.googleapis.com is enabled...
i artifactregistry: ensuring required API artifactregistry.googleapis.com is enabled...
✔ functions: required API cloudbuild.googleapis.com is enabled
✔ functions: required API cloudfunctions.googleapis.com is enabled
✔ artifactregistry: required API artifactregistry.googleapis.com is enabled
i functions: Loading and anaylzing source code for codebase default to determine what to deploy
Serving at port 8907
shutdown requested via /__/quitquitquit
Error: Functions codebase could not be analyzed successfully. It may have a syntax or runtime error
And my code:
/* eslint-disable max-len */
import "dotenv/config";
import { initializeApp } from "firebase-admin/app";
import { getFirestore } from "firebase-admin/firestore";
import { onDocumentCreated, onDocumentDeleted } from "firebase-functions/v2/firestore";
const accountSid = process.env.TWILIO_ACCOUNT_SID;
const authToken = process.env.TWILIO_AUTH_TOKEN;
const twilioPhoneNumber = process.env.TWILIO_PHONE_NUMBER;
// eslint-disable-next-line @typescript-eslint/no-var-requires
const client = require("twilio")(accountSid, authToken);
export const sendSMSOnContactWrite = onDocumentCreated("/contact/{contactSubmissionId}", async (event) => {
const data = event.data?.data();
console.log(data);
return await client.messages.create({
// eslint-disable-next-line
"body": `New contact submission from ${data?.name} at ${data?.email} with message: ${data?.message}. ${data?.name} said ${data?.hasWebsite} when asked if they have a website.${data?.hasWebsite === "yes" ? " Their website is at " + data?.websiteAddress : ""}`,
"from": twilioPhoneNumber,
"to": process.env.MY_PHONE_NUMBER,
});
});
export const sendSMSOnContentItemDelete = onDocumentDeleted("/websites/{websiteId}/content/{contentGroupId}/data/{contentId}", async (event) => {
initializeApp();
const db = getFirestore();
const websiteDocRef = db.doc("websites/" + event.params.websiteId);
const websiteDoc = await websiteDocRef.get();
const websiteDocData = websiteDoc.data();
if (!websiteDocData) {
// TODO: Log error
return;
}
const users = websiteDocData["users"];
for (const userId of users) {
const userDocRef = db.doc("users/" + userId);
const userDoc = await userDocRef.get();
const userDocData = userDoc.data();
if (!userDocData) {
// TODO: Log error
return;
}
const deletionPreference = userDocData["preferences"]["deletion_sms"];
if (deletionPreference) {
const data = event.data?.data();
console.log(data);
return await client.messages.create({
"body": `Content item with title ${data?.title} was deleted from website ${websiteDocData["url"]}`,
"from": twilioPhoneNumber,
"to": userDocData["phone_number"],
});
} else {
return;
}
}
});
It can be caused by different things, to know precisely what the issue is for your case, run with the --debug
option.
So it will result in something like firebase deploy --only functions --debug
Then check the last paragraph before the message Error: Functions codebase could not be analyzed successfully
Hope it will help.
In my case, I had to move const firestore = admin.firestore();
inside the function instead of having it outside the function.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With