Skip to content

Commit

Permalink
WIP: run e2e on CI
Browse files Browse the repository at this point in the history
  • Loading branch information
tsubik committed Mar 6, 2024
1 parent ec016bc commit ecf2892
Show file tree
Hide file tree
Showing 7 changed files with 112 additions and 27 deletions.
3 changes: 3 additions & 0 deletions .env.default
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ DOCUMENTS_MINDATE=
// Transifex token
TX_TOKEN=

// CI server
CI_SERVER=false

// Sentry DSN
SENTRY_DSN
// for development env to disable pushing release to sentry
Expand Down
123 changes: 102 additions & 21 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -1,59 +1,140 @@
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_PORT_5432_TCP_ADDR: localhost
POSTGRES_PORT_5432_TCP_PORT: 5432
APP_URL: http://localhost:3000
RAILS_ENV: e2e
SECRET_KEY_BASE: f54c9d76c42e397e17cbc0d0a024da5a762a7a0d934839b417a77dac6fda65a49a37b32bcd229ac5fd5c1fedef8ed6acf7a57ed6465d6339862cdc0dfab8886f
AUTH_SECRET: secret
CONTACT_EMAIL: [email protected]
RESPONSIBLE_EMAIL: [email protected]
CI_SERVER: true
CYPRESS_API_PATH: ../otp_api

name: Run tests

on: push

jobs:
test:
name: Testing build
name: E2E Tests
runs-on: ubuntu-latest
if: false # skip for now, until we configure repository

services:
postgres:
image: postgis/postgis:12-3.1-alpine
env:
POSTGRES_USER: ${{ env.POSTGRES_USER }}
POSTGRES_PASSWORD: ${{ env.POSTGRES_PASSWORD }}
ports: ["5432:5432"]

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
repository: wri/fti_api
ref: chore/upgrade-rails
path: otp_api

- name: Install API dependencies
run: |
sudo apt update --fix-missing
sudo apt-get -yqq install libpq-dev build-essential libcurl4-openssl-dev gdal-bin
npm install -g mjml
- name: Setup API Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
working-directory: otp_api

- name: Setup API
working-directory: otp_api
run: |
bin/rails e2e:setup
- name: Read API Access Token
id: api_key
working-directory: otp_api
run: |
bin/rails runner 'puts "OTP_API_KEY=\"Bearer #{User.find_by(email: "[email protected]").api_key.access_token}\""' > $GITHUB_OUTPUT
# - name: Run API Server
# working-directory: otp_api
# run: |
# bin/rails s &

- uses: actions/checkout@v4

- name: ls 2
run: cd ../..; ls;

- name: Read .nvmrc
id: nvm
run: echo "##[set-output name=NVMRC;]$(cat .nvmrc)"
run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT

- uses: actions/setup-node@v2
with:
node-version: "${{ steps.nvm.outputs.NVMRC }}"

- run: yarn install

- name: Cache Node Modules
id: cache-node-modules
uses: actions/cache@v2
id: cache-portal-modules
uses: actions/cache@v3
with:
path: node_modules
key: node-modules-${{ hashFiles('yarn.lock') }}

- name: Install Dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: yarn install --frozen-lockfile
# - name: Install Portal Dependencies
# if: steps.cache-portal-modules.outputs.cache-hit != 'true'
# run: yarn install --immutable

# - name: Cache Node Modules
# id: cache-e2e-modules
# uses: actions/cache@v3
# with:
# path: e2e/node_modules
# key: e2e-node-modules-${{ hashFiles('e2e/yarn.lock') }}

# - name: Install E2E Dependencies
# if: steps.cache-e2e-modules.outputs.cache-hit != 'true'
# working-directory: e2e
# run: yarn install --immutable

- name: Set Sample ENV Variables
run: |
echo "
PORT=4000
NODE_ENV=production
ENV=production
SECRET=some_secret
OTP_API_KEY=Bearer jwttoken
SECRET=${{ env.AUTH_SECRET }}
OTP_COUNTRIES='COG,CMR,COD,CAF,GAB'
OTP_COUNTRIES_IDS='7,47,45,188,53'
OTP_API=http://localhost:3000
OTP_API_KEY=${{ steps.api_key.outputs.OTP_API_KEY }}
TRANSIFEX_URL=https://www.transifex.com/api/2/project
TRANSIFEX_PROJECT=open-timber-portal
TRANSIFEX_SLUG=open-timber-portal
" > .env
- name: Pull translations from transifex
env:
TRANSIFEX_TOKEN: ${{ secrets.transifex-token }}
run: |
echo 'Pulling the translations…'
TRANSIFEX_API_TOKEN=${{ env.TRANSIFEX_API_TOKEN }} yarn transifex:pull
- name: read .env
run: cat .env

- name: ls
run: ls

# - name: Pull translations from transifex
# env:
# TRANSIFEX_TOKEN: ${{ secrets.transifex-token }}
# run: |
# echo 'Pulling the translations…'
# TRANSIFEX_API_TOKEN=${{ env.TRANSIFEX_API_TOKEN }} yarn transifex:pull

# - name: Build Portal
# run: yarn build

# - name: Start Portal
# run: yarn start &

- name: Run Build
run: yarn build
# - name: Run E2E Tests
# working-directory: e2e
# run: yarn cypress run
3 changes: 2 additions & 1 deletion e2e/cypress/support/commands.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,6 @@ Cypress.Commands.add('selectOption', (selector, text, option) => {
});

Cypress.Commands.add('resetDB', () => {
cy.exec('./restore-db.sh');
const apiPath = Cypress.env('API_PATH') || '../../otp-api';
cy.exec(`cd ${apiPath}; RAILS_ENV=e2e bin/rails e2e:db_reset`);
});
3 changes: 0 additions & 3 deletions e2e/restore-db.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,5 @@
set -e

cd ../../otp-api
# ./restore-test.sh test_db_backup.dump fti_api_cypress
RAILS_ENV=e2e bundle exec rails e2e:db_reset

# cd ../otp-api
# POSTGRES_DATABASE=fti_api_cypress bundle exec rails db:migrate
1 change: 0 additions & 1 deletion e2e/start-server.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ set -e
echo 'Starting API...'

cd ../../otp-api
# POSTGRES_DATABASE=fti_e2e bundle exec rails db:migrate
RAILS_ENV=e2e bundle exec rails e2e:setup
RAILS_ENV=e2e bundle exec rails s &

Expand Down
1 change: 1 addition & 0 deletions next.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ const config = {
GOOGLE_TAG_MANAGER_KEY: process.env.GOOGLE_TAG_MANAGER_KEY,
OSANO_ID: process.env.OSANO_ID,
DISABLE_HOTJAR: process.env.DISABLE_HOTJAR,
CI_SERVER: process.env.CI_SERVER,
},
i18n: {
locales: ['en', 'fr', 'pt', 'zh', 'ja', 'ko', 'vi'],
Expand Down
5 changes: 4 additions & 1 deletion pages/_app.js
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,10 @@ class MyApp extends App {
user = state.user;
}

const languageFile = language === 'zh' ? 'zh_CN' : language;
let languageFile = language === 'zh' ? 'zh_CN' : language;
if (process.env.CI_SERVER === 'true') {
languageFile = 'zu';
}
const messages = await import(`lang/${languageFile}.json`);

store.dispatch(setLanguage(language));
Expand Down

0 comments on commit ecf2892

Please sign in to comment.