Skip to content

Main

Main #123

Workflow file for this run

name: Main
on:
push:
branches: [ main ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
container:
image: cypress/browsers:node18.12.0-chrome106-ff106
options: --user 1001
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18
- name: Cache dependencies
id: cache
uses: actions/cache@v3
with:
path: ./node_modules
key: modules-${{ hashFiles('package-lock.json') }}
- name: Install dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: npm ci
- name: Write Firebase config
run: |
echo ${{ secrets.FIREBASE_CONFIG }} | base64 -d > firebase.config.json
- run: node --version
- run: node -p 'os.cpus()'
- run: npm run build
- run: npm run lint
- run: npm run test:ci
- run: npm run build:test
- name: Save build folder
uses: actions/upload-artifact@v4
with:
name: dist
if-no-files-found: error
path: dist
- name: Save test build folder
uses: actions/upload-artifact@v4
with:
name: dist-test
if-no-files-found: error
path: dist-test
e2e-chrome-tests:
timeout-minutes: 15
runs-on: ubuntu-latest
container:
image: cypress/browsers:node18.12.0-chrome106-ff106
options: --user 1001
needs: build
strategy:
fail-fast: false # https://github.com/cypress-io/github-action/issues/48
matrix:
# https://github.com/languages-learner/web/issues/32 - Disable cypress logs because limit reached
# containers: [ 1, 2 ]
containers: [ 1 ]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18
- name: Cache dependencies
id: cache
uses: actions/cache@v3
with:
path: ./node_modules
key: modules-${{ hashFiles('package-lock.json') }}
- name: Download the build folders
uses: actions/download-artifact@v4
with:
name: dist-test
path: dist
- name: Install dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: npm ci
- name: "Cypress install"
run: yarn cypress install --force
- name: Node info
run: node -v
# - name: __e Dir
# run: ls /__e
- name: "E2E Tests - Chrome"
uses: cypress-io/github-action@v6
with:
install: false
start: npm run preview
wait-on: "http://localhost:8080"
wait-on-timeout: 120
browser: chrome
# https://github.com/languages-learner/web/issues/32 - Disable cypress logs because limit reached
# record: true
# parallel: true
# group: "E2E - Chrome"
spec: cypress/e2e/*
config-file: cypress.config.ts
config: "{\"e2e\":{\"baseUrl\":\"http://localhost:8080\"}}"
env:
TEST_USER_USERNAME: ${{ secrets.TEST_USER_USERNAME_1 }}
TEST_USER_PASSWORD: ${{ secrets.TEST_USER_PASSWORD_1 }}
# https://github.com/languages-learner/web/issues/32 - Disable cypress logs because limit reached
# CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }}
# CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
# COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title }}
# COMMIT_INFO_SHA: ${{ github.event.pull_request.head.sha }}
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
e2e-chrome-mobile-tests:
timeout-minutes: 15
runs-on: ubuntu-latest
container:
image: cypress/browsers:node18.12.0-chrome106-ff106
options: --user 1001
needs: build
strategy:
fail-fast: false # https://github.com/cypress-io/github-action/issues/48
matrix:
# https://github.com/languages-learner/web/issues/32 - Disable cypress logs because limit reached
# containers: [ 1, 2 ]
containers: [ 1 ]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18
- name: Cache dependencies
id: cache
uses: actions/cache@v3
with:
path: ./node_modules
key: modules-${{ hashFiles('package-lock.json') }}
- name: Download the build folders
uses: actions/download-artifact@v4
with:
name: dist-test
path: dist
- name: Install dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: npm ci
- name: "Cypress install"
run: yarn cypress install --force
- name: Node info
run: node -v
# - name: __e Dir
# run: ls /__e
- name: "E2E Tests - Chrome - Mobile"
uses: cypress-io/github-action@v6
with:
install: false
start: npm run preview
wait-on: "http://localhost:8080"
wait-on-timeout: 120
browser: chrome
# https://github.com/languages-learner/web/issues/32 - Disable cypress logs because limit reached
# record: true
# parallel: true
# group: "E2E - Chrome - Mobile"
spec: cypress/e2e/*
config-file: cypress.config.ts
config: "{\"e2e\":{\"baseUrl\":\"http://localhost:8080\",\"viewportWidth\":400,\"viewportHeight\":660}}"
env:
TEST_USER_USERNAME: ${{ secrets.TEST_USER_USERNAME_2 }}
TEST_USER_PASSWORD: ${{ secrets.TEST_USER_PASSWORD_2 }}
# https://github.com/languages-learner/web/issues/32 - Disable cypress logs because limit reached
# CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }}
# CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
# COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title }}
# COMMIT_INFO_SHA: ${{ github.event.pull_request.head.sha }}
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
deploy_live_website:
name: Deploy Prod
needs: [ build, e2e-chrome-tests, e2e-chrome-mobile-tests ]
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- name: Checkout repository
uses: actions/checkout@main
- name: Download artifact
uses: actions/download-artifact@main
with:
name: dist
path: dist
- uses: FirebaseExtended/action-hosting-deploy@v0
with:
repoToken: "${{ secrets.GITHUB_TOKEN }}"
firebaseServiceAccount: "${{ secrets.GOOGLE_SERVICE_ACCOUNT_KEY }}"
projectId: "${{ secrets.GOOGLE_PROJECT_ID }}"
channelId: live