-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Github actions to create dist in server
- Loading branch information
Showing
38 changed files
with
1,502 additions
and
59 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
name: Deploy to Vercel | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
|
||
jobs: | ||
deploy-frontend: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Checkout repository | ||
uses: actions/checkout@v3 | ||
|
||
- name: Set up Node.js | ||
uses: actions/setup-node@v3 | ||
with: | ||
node-version: "21.2.0" | ||
|
||
- name: Install Vercel CLI | ||
run: npm install -g vercel@latest | ||
|
||
- name: List files in client directory | ||
run: ls -la ./client | ||
|
||
- name: Link and pull Vercel project for frontend | ||
run: | | ||
vercel link --yes --project ${{ secrets.FRONTEND_PROJECT_ID }} --scope ${{ secrets.VERCEL_TEAM }} --token=${{ secrets.VERCEL_TOKEN }} | ||
vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }} | ||
working-directory: ./client | ||
|
||
- name: Install frontend dependencies | ||
run: npm install | ||
working-directory: ./client | ||
|
||
- name: Build frontend | ||
run: npm run build | ||
working-directory: ./client | ||
|
||
- name: Deploy frontend to Vercel | ||
run: vercel --token ${{ secrets.VERCEL_TOKEN }} | ||
working-directory: ./client | ||
|
||
deploy-backend: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Checkout repository | ||
uses: actions/checkout@v3 | ||
|
||
- name: Set up Node.js | ||
uses: actions/setup-node@v3 | ||
with: | ||
node-version: "21.2.0" | ||
|
||
- name: Install Vercel CLI | ||
run: npm install -g vercel@latest | ||
|
||
- name: List files in server directory | ||
run: ls -la ./server | ||
|
||
- name: Link and pull Vercel project for backend | ||
run: | | ||
vercel link --yes --project ${{ secrets.BACKEND_PROJECT_ID }} --scope ${{ secrets.VERCEL_TEAM }} --token=${{ secrets.VERCEL_TOKEN }} | ||
vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }} | ||
working-directory: ./server | ||
|
||
- name: Install backend dependencies | ||
run: npm install | ||
working-directory: ./server | ||
|
||
- name: Build backend | ||
run: npm run build | ||
working-directory: ./server | ||
|
||
- name: List files in client directory | ||
run: ls -la ./server | ||
|
||
- name: Deploy backend to Vercel | ||
run: vercel --token ${{ secrets.VERCEL_TOKEN }} | ||
working-directory: ./server |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,7 +12,6 @@ dev | |
dist-ssr | ||
client/dist | ||
*.local | ||
dist | ||
|
||
# Editor directories and files | ||
.vscode/* | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
.vercel |
This file was deleted.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
.vercel |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
import dotenv from "dotenv"; | ||
dotenv.config(); | ||
//////////////////////////////////// | ||
import admin from "firebase-admin"; | ||
// Importa el archivo de credenciales de Firebase Admin | ||
const serviceAccount = { | ||
type: process.env.FIREBASE_TYPE, | ||
project_id: process.env.FIREBASE_PROJECT_ID, | ||
private_key_id: process.env.FIREBASE_PRIVATE_KEY_ID, | ||
private_key: (process.env.FIREBASE_PRIVATE_KEY || "").replace(/\\n/g, "\n"), | ||
client_email: process.env.FIREBASE_CLIENT_EMAIL, | ||
client_id: process.env.FIREBASE_CLIENT_ID, | ||
auth_uri: process.env.FIREBASE_AUTH_URI, | ||
token_uri: process.env.FIREBASE_TOKEN_URI, | ||
auth_provider_x509_cert_url: process.env.FIREBASE_AUTH_PROVIDER_X509_CERT_URL, | ||
client_x509_cert_url: process.env.FIREBASE_CLIENT_X509_CERT_URL, | ||
}; | ||
// Verifica si la aplicación ya ha sido inicializada | ||
if (!admin.apps.length) { | ||
try { | ||
admin.initializeApp({ | ||
credential: admin.credential.cert(serviceAccount), | ||
databaseURL: process.env.FIREBASE_DB, | ||
}); | ||
console.log("Firebase Admin initialized successfully"); | ||
// Verifica si se puede conectar a Firebase Auth | ||
admin | ||
.auth() | ||
.listUsers(1) | ||
.then(() => { | ||
console.log("Successfully connected to Firebase Auth"); | ||
}) | ||
.catch((error) => { | ||
console.error("Error connecting to Firebase Auth:", error); | ||
}); | ||
} | ||
catch (error) { | ||
console.error("Error initializing Firebase Admin:", error); | ||
} | ||
} | ||
export default admin; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
import admin from "firebase-admin"; | ||
// Función para obtener UID por correo electrónico | ||
export const getUidByEmail = async (email) => { | ||
try { | ||
const userRecord = await admin.auth().getUserByEmail(email); | ||
return userRecord.uid; | ||
} | ||
catch (error) { | ||
console.error("Error fetching user data:", error); | ||
return null; | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
import dotenv from "dotenv"; | ||
dotenv.config(); | ||
///////////////////////////////////////////////////////////// | ||
import mailchimp from "@mailchimp/mailchimp_marketing"; | ||
import axios from "axios"; | ||
// Id de la lista publica de contactos en Mailchimp | ||
const listId = process.env.MAILCHIMP_LIST_ID; | ||
// Id del grupo de intereses en Mailchimp | ||
const groupId = process.env.MAILCHIMP_GROUP_ID; | ||
// Api key de Mailchimp y prefijo del servidor | ||
const mailchimpKey = process.env.MAILCHIMP_API_KEY; | ||
const serverPrefix = mailchimpKey.split("-").pop(); | ||
// Configuracion del cliente de la API de Mailchimp marketing | ||
mailchimp.setConfig({ | ||
apiKey: mailchimpKey, | ||
server: serverPrefix, | ||
}); | ||
// Convierte los errores de Mailchimp a objeto de javascript | ||
function mailchimpErrors(error) { | ||
return JSON.parse(error.response.text); | ||
} | ||
async function addInterestToCategory(interestCategoryId, interestName) { | ||
const url = `https://${serverPrefix}.api.mailchimp.com/3.0/lists/${listId}/interest-categories/${interestCategoryId}/interests`; | ||
const data = { | ||
name: interestName, | ||
}; | ||
try { | ||
// El user puede ser cualquier string, no importa | ||
const response = await axios.post(url, data, { | ||
auth: { | ||
username: "admin", | ||
password: mailchimpKey, | ||
}, | ||
}); | ||
return response.data; | ||
} | ||
catch (error) { | ||
if (axios.isAxiosError(error) && error.response) { | ||
throw { status: error.response.status, message: error.response.data }; | ||
} | ||
else { | ||
throw { status: 500, message: "Unexpected error occurred" }; | ||
} | ||
} | ||
} | ||
async function deleteInterestCategory(interestCategoryId) { | ||
const url = `https://${serverPrefix}.api.mailchimp.com/3.0/lists/${listId}/interest-categories/${groupId}/interests/${interestCategoryId}`; | ||
try { | ||
// El user puede ser cualquier string, no importa | ||
const response = await axios.delete(url, { | ||
auth: { | ||
username: "admin", | ||
password: mailchimpKey, | ||
}, | ||
}); | ||
console.log(response.data); | ||
return response; | ||
} | ||
catch (error) { | ||
console.log(error); | ||
if (axios.isAxiosError(error) && error.response) { | ||
throw { status: error.response.status, message: error.response.data }; | ||
} | ||
else { | ||
throw { status: 500, message: "Unexpected error occurred" }; | ||
} | ||
} | ||
} | ||
export { listId, mailchimpErrors, mailchimp, addInterestToCategory, deleteInterestCategory, groupId }; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
import dotenv from "dotenv"; | ||
dotenv.config(); | ||
import { Resend } from "resend"; | ||
// Configurar el cliente de Mandrill | ||
const resend = new Resend(process.env.RESEND_API_KEY); | ||
const admin = process.env.ADMIN_GMAIL; | ||
// Enviar nota de contact us a el administrador | ||
export async function submitNote(note) { | ||
try { | ||
return await resend.emails.send({ | ||
from: "no-reply@thefluentspanishhouse.com", | ||
to: [admin], | ||
subject: note.subject, | ||
html: ` | ||
<p>The user <strong>${note.username}</strong> with email ${note.email_user} sent you this message:</p><br /><p>${note.note}</p>`, | ||
headers: { | ||
"Reply-To": note.email_user, | ||
}, | ||
}); | ||
} | ||
catch (error) { | ||
console.error("Error sending email", error); | ||
throw error; | ||
} | ||
} | ||
// // Enviar email de nuevo estuidiante a el administrador | ||
export async function submitEmailStudent(newstudent) { | ||
try { | ||
return await resend.emails.send({ | ||
from: "no-reply@thefluentspanishhouse.com", | ||
to: [admin], | ||
subject: `New student on TheFluentSpanishHouse ${newstudent.name} ${newstudent.lastname}`, | ||
html: `<p>The user <b>${newstudent.name} ${newstudent.lastname}</b> wants to be a new student:</p><br /> | ||
<p>He wants to sign up for <b>${newstudent.class}<b/><p/>`, | ||
}); | ||
} | ||
catch (error) { | ||
console.error("Error sending email", error); | ||
throw error; | ||
} | ||
} | ||
// Enviar email de nuevo comentario a el administrador | ||
export async function submitEmailComment(note, originUrl) { | ||
try { | ||
return await resend.emails.send({ | ||
from: `no-reply@thefluentspanishhouse.com`, | ||
to: [admin], | ||
subject: note.subject, | ||
html: `<p>The user <strong>${note.username} ${note.email_user}</strong> says:</p><br> | ||
<p>${note.note}</p><br /> | ||
<p>From the post: ${originUrl}</p><br />User: ${note.email_user}`, | ||
}); | ||
} | ||
catch (error) { | ||
console.error("Error sending email", error); | ||
throw error; | ||
} | ||
} |
Oops, something went wrong.