Merge pull request #74 from wizelineacademy/tests-Roberto #5
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
name: KnowX Frontend Deploy | |
on: | |
push: | |
branches: | |
- DEV | |
permissions: | |
actions: write | |
id-token: write | |
contents: read | |
jobs: | |
test-e2e: | |
name: "Frontend E2E Tests" | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install Node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: "20" | |
working-directory: knowx | |
- name: Install Dependencies | |
run: npm install | |
working-directory: knowx | |
- name: Make envfile | |
uses: SpicyPizza/[email protected] | |
with: | |
envkey_API_ROOT_ROUTE: ${{ secrets.API_ROOT_ROUTE }} | |
envkey_DB_URL: ${{ secrets.DEV_DB_URL }} | |
envkey_NEXTAUTH_URL: "http://localhost:3000/" | |
envkey_NEXTAUTH_SECRET: ${{ secrets.NEXTAUTH_SECRET }} | |
envkey_GITHUB_ID: ${{ secrets.NEXTAUTH_GITHUB_ID }} | |
envkey_GITHUB_SECRET: ${{ secrets.NEXTAUTH_GITHUB_SECRET }} | |
envkey_GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} | |
envkey_GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }} | |
envkey_SLACK_CLIENT_ID: ${{ secrets.SLACK_CLIENT_ID }} | |
envkey_SLACK_CLIENT_SECRET: ${{ secrets.SLACK_CLIENT_SECRET }} | |
envkey_EMAIL_SERVER_HOST: ${{ secrets.EMAIL_SERVER_HOST }} | |
envkey_EMAIL_SERVER_PORT: ${{ secrets.EMAIL_SERVER_PORT }} | |
envkey_EMAIL_SERVER_USER: ${{ secrets.EMAIL_SERVER_USER }} | |
envkey_EMAIL_SERVER_PASSWORD: ${{ secrets.EMAIL_SERVER_PASSWORD }} | |
envkey_EMAIL_FROM: ${{ secrets.EMAIL_FROM }} | |
envkey_SENDGRID_API_KEY: ${{ secrets.SENDGRID_API_KEY }} | |
directory: knowx | |
- name: Run Server | |
run: npm run dev & | |
working-directory: knowx | |
- name: Run Tests | |
uses: cypress-io/github-action@v6 | |
with: | |
browser: chrome | |
headed: true | |
wait-on: "http://localhost:3000" | |
working-directory: knowx | |
env: | |
CYPRESS_CACHE_FOLDER: ~/.cache/Cypress | |
- name: Upload screenshots | |
uses: actions/upload-artifact@v4 | |
if: failure() | |
with: | |
name: cypress-screenshots | |
path: /home/runner/work/itesm-socioformador-feb-jun-2024-Croods/itesm-socioformador-feb-jun-2024-Croods/knowx/cypress/screenshots | |
- name: Send Deploy Failure Message | |
if: failure() | |
run: curl -s -X POST "${{ secrets.DISCORD_WEBHOOK }}" -d "content=💥 Front Testing Failed" | |
- name: Send Deploy Success Message | |
if: success() | |
run: | | |
curl -s -X POST "${{ secrets.DISCORD_WEBHOOK }}" -d "content=🧪 Front Testing Successful" | |
unit-tests: | |
name: "Frontend Unit Tests" | |
needs: test-e2e | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: knowx | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Node setup | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
- name: install dependencies | |
run: npm install | |
- name: run tests | |
run: npm run test:ci | |
deploy: | |
needs: [test-e2e, unit-tests] | |
name: "Deploy to AWS - DEV" | |
environment: dev | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Cofigure AWS | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
aws-region: us-east-1 | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
- name: Install SST | |
run: | | |
ls | |
wget https://github.com/sst/ion/releases/download/v0.0.193/sst-linux-amd64.deb | |
sudo dpkg -i sst-linux-amd64.deb | |
sst version | |
- name: Copy Secrets | |
run: | | |
sst secret set APIRootRoute $API_ROOT_ROUTE --stage dev | |
sst secret set DBUrl $DB_URL --stage dev | |
sst secret set NextAuthUrl $NEXTAUTH_URL --stage dev | |
sst secret set NextAuthSecret $NEXTAUTH_SECRET --stage dev | |
sst secret set GithubId $GITHUB_ID --stage dev | |
sst secret set GithubSecret $GITHUB_SECRET --stage dev | |
sst secret set GoogleClientId $GOOGLE_CLIENT_ID --stage dev | |
sst secret set GoogleClientSecret $GOOGLE_CLIENT_SECRET --stage dev | |
sst secret set SlackClientId $SLACK_CLIENT_ID --stage dev | |
sst secret set SlackClientSecret $SLACK_CLIENT_SECRET --stage dev | |
sst secret set EmailServerHost $EMAIL_SERVER_HOST --stage dev | |
sst secret set EmailServerPort $EMAIL_SERVER_PORT --stage dev | |
sst secret set EmailServerUser $EMAIL_SERVER_USER --stage dev | |
sst secret set EmailServerPassword $EMAIL_SERVER_PASSWORD --stage dev | |
sst secret set EmailFrom $EMAIL_FROM --stage dev | |
sst secret set SendgridApiKey $SENDGRID_API_KEY --stage dev | |
working-directory: knowx | |
env: | |
API_ROOT_ROUTE: ${{ secrets.API_ROOT_ROUTE }} | |
DB_URL: ${{ secrets.DB_URL }} | |
NEXTAUTH_URL: ${{ secrets.NEXTAUTH_URL }} | |
NEXTAUTH_SECRET: ${{ secrets.NEXTAUTH_SECRET }} | |
GITHUB_ID: ${{ secrets.NEXTAUTH_GITHUB_ID }} | |
GITHUB_SECRET: ${{ secrets.NEXTAUTH_GITHUB_SECRET }} | |
GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} | |
GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }} | |
SLACK_CLIENT_ID: ${{ secrets.SLACK_CLIENT_ID }} | |
SLACK_CLIENT_SECRET: ${{ secrets.SLACK_CLIENT_SECRET }} | |
EMAIL_SERVER_HOST: ${{ secrets.EMAIL_SERVER_HOST }} | |
EMAIL_SERVER_PORT: ${{ secrets.EMAIL_SERVER_PORT }} | |
EMAIL_SERVER_USER: ${{ secrets.EMAIL_SERVER_USER }} | |
EMAIL_SERVER_PASSWORD: ${{ secrets.EMAIL_SERVER_PASSWORD }} | |
EMAIL_FROM: ${{ secrets.EMAIL_FROM }} | |
SENDGRID_API_KEY: ${{ secrets.SENDGRID_API_KEY }} | |
- name: NPM install | |
run: npm install | |
working-directory: knowx | |
- name: Deploy | |
id: deploy | |
run: | | |
sst deploy --stage dev > deployment_output.txt | |
echo "deployment_output_path=deployment_output.txt" >> $GITHUB_OUTPUT | |
working-directory: knowx | |
- name: Extract URL from Deployment Output | |
id: extract_url | |
run: | | |
output=$(cat ${{ steps.deploy.outputs.deployment_output_path }}) | |
urls=$(echo "$output" | grep -oE 'https?://[^ ]+') | |
last_url=$(echo "$urls" | tail -n1) | |
echo "url=$last_url" >> $GITHUB_OUTPUT | |
working-directory: knowx | |
- name: Send Deploy Failure Message | |
if: failure() | |
run: curl -s -X POST "${{ secrets.DISCORD_WEBHOOK }}" -d "content=🚨 Frontend Deploy Failed" | |
- name: Send Deploy Success Message | |
if: success() | |
run: | | |
curl -s -X POST "${{ secrets.DISCORD_WEBHOOK }}" -d "content=✅ Frontend DEV Deploy Successful" | |
url=${{ steps.extract_url.outputs.url }} | |
curl -s -X POST "${{ secrets.DISCORD_WEBHOOK }}" -d "content=🚀 Deployment DEV URL: $url" |