From bf19c5014694e6949f8f4d0ef807d178895b788f Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Wed, 3 Apr 2024 13:54:11 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=9A(CI)=20add=20frontend=20jobs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add the frontend jobs to the CI pipeline. --- .github/workflows/impress-frontend.yml | 152 +++++++++++++++++++++++++ Makefile | 13 ++- docker/auth/realm.json | 53 ++++++++- env.d/development/common.e2e.dist | 3 + 4 files changed, 213 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/impress-frontend.yml create mode 100644 env.d/development/common.e2e.dist diff --git a/.github/workflows/impress-frontend.yml b/.github/workflows/impress-frontend.yml new file mode 100644 index 00000000..6a4e18e8 --- /dev/null +++ b/.github/workflows/impress-frontend.yml @@ -0,0 +1,152 @@ +name: impress Workflow + +on: + push: + branches: + - main + tags: + - 'v*' + pull_request: + branches: + - '*' + +jobs: + install-front: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '18.x' + + - name: Restore the frontend cache + uses: actions/cache@v4 + id: front-node_modules + with: + path: 'src/frontend/**/node_modules' + key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }} + + - name: Install dependencies + if: steps.front-node_modules.outputs.cache-hit != 'true' + run: cd src/frontend/ && yarn install --frozen-lockfile + + - name: Cache install frontend + if: steps.front-node_modules.outputs.cache-hit != 'true' + uses: actions/cache@v4 + with: + path: 'src/frontend/**/node_modules' + key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }} + + build-front: + runs-on: ubuntu-latest + needs: install-front + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Restore the frontend cache + uses: actions/cache@v4 + id: front-node_modules + with: + path: 'src/frontend/**/node_modules' + key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }} + + - name: Build CI App + run: cd src/frontend/ && yarn ci:build + + - name: Cache build frontend + uses: actions/cache@v4 + with: + path: src/frontend/apps/impress/out/ + key: build-front-${{ github.run_id }} + + test-front: + runs-on: ubuntu-latest + needs: install-front + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Restore the frontend cache + uses: actions/cache@v4 + id: front-node_modules + with: + path: 'src/frontend/**/node_modules' + key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }} + + - name: Test App + run: cd src/frontend/ && yarn app:test + + lint-front: + runs-on: ubuntu-latest + needs: install-front + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Restore the frontend cache + uses: actions/cache@v4 + id: front-node_modules + with: + path: 'src/frontend/**/node_modules' + key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }} + + - name: Check linting + run: cd src/frontend/ && yarn lint + + test-e2e: + runs-on: ubuntu-latest + needs: build-front + timeout-minutes: 10 + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set services env variables + run: | + make create-env-files + cat env.d/development/common.e2e.dist >> env.d/development/common + + - name: Restore the frontend cache + uses: actions/cache@v4 + id: front-node_modules + with: + path: 'src/frontend/**/node_modules' + key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }} + + - name: Restore the build cache + uses: actions/cache@v4 + id: cache-build + with: + path: src/frontend/apps/impress/out/ + key: build-front-${{ github.run_id }} + + - name: Build and Start Docker Servers + env: + DOCKER_BUILDKIT: 1 + COMPOSE_DOCKER_CLI_BUILD: 1 + run: | + docker-compose build --pull --build-arg BUILDKIT_INLINE_CACHE=1 + make run + + - name: Apply DRF migrations + run: | + make migrate + + - name: Install Playwright Browsers + run: cd src/frontend/apps/e2e && yarn install + + - name: Run e2e tests + run: cd src/frontend/ && yarn e2e:test + + - uses: actions/upload-artifact@v3 + if: always() + with: + name: playwright-report + path: src/frontend/apps/e2e/report/ + retention-days: 7 + diff --git a/Makefile b/Makefile index bb66f61d..9b070573 100644 --- a/Makefile +++ b/Makefile @@ -68,14 +68,19 @@ data/static: # -- Project +create-env-files: ## Copy the dist env files to env files +create-env-files: \ + env.d/development/common \ + env.d/development/crowdin \ + env.d/development/postgresql \ + env.d/development/kc_postgresql +.PHONY: create-env-files + bootstrap: ## Prepare Docker images for the project bootstrap: \ data/media \ data/static \ - env.d/development/common \ - env.d/development/crowdin \ - env.d/development/postgresql \ - env.d/development/kc_postgresql \ + create-env-files \ build \ run \ migrate \ diff --git a/docker/auth/realm.json b/docker/auth/realm.json index ce18a4fc..c8b72d6c 100644 --- a/docker/auth/realm.json +++ b/docker/auth/realm.json @@ -46,6 +46,9 @@ "users": [ { "username": "impress", + "email": "impress@impress.world", + "firstName": "John", + "lastName": "Doe", "enabled": true, "credentials": [ { @@ -54,6 +57,48 @@ } ], "realmRoles": ["user"] + }, + { + "username": "user-e2e-chromium", + "email": "user@chromium.e2e", + "firstName": "E2E", + "lastName": "Chromium", + "enabled": true, + "credentials": [ + { + "type": "password", + "value": "password-e2e-chromium" + } + ], + "realmRoles": ["user"] + }, + { + "username": "user-e2e-webkit", + "email": "user@webkit.e2e", + "firstName": "E2E", + "lastName": "Webkit", + "enabled": true, + "credentials": [ + { + "type": "password", + "value": "password-e2e-webkit" + } + ], + "realmRoles": ["user"] + }, + { + "username": "user-e2e-firefox", + "email": "user@firefox.e2e", + "firstName": "E2E", + "lastName": "Firefox", + "enabled": true, + "credentials": [ + { + "type": "password", + "value": "password-e2e-firefox" + } + ], + "realmRoles": ["user"] } ], "roles": { @@ -1065,7 +1110,7 @@ }, { "id": "79712bcf-b7f7-4ca3-b97c-418f48fded9b", - "name": "given name", + "name": "first name", "protocol": "openid-connect", "protocolMapper": "oidc-usermodel-property-mapper", "consentRequired": false, @@ -1074,7 +1119,7 @@ "user.attribute": "firstName", "id.token.claim": "true", "access.token.claim": "true", - "claim.name": "given_name", + "claim.name": "first_name", "jsonType.label": "String" } }, @@ -1095,7 +1140,7 @@ }, { "id": "7f741e96-41fe-4021-bbfd-506e7eb94e69", - "name": "family name", + "name": "last name", "protocol": "openid-connect", "protocolMapper": "oidc-usermodel-property-mapper", "consentRequired": false, @@ -1104,7 +1149,7 @@ "user.attribute": "lastName", "id.token.claim": "true", "access.token.claim": "true", - "claim.name": "family_name", + "claim.name": "last_name", "jsonType.label": "String" } }, diff --git a/env.d/development/common.e2e.dist b/env.d/development/common.e2e.dist new file mode 100644 index 00000000..b0faa27d --- /dev/null +++ b/env.d/development/common.e2e.dist @@ -0,0 +1,3 @@ +# For the CI job test-e2e +SUSTAINED_THROTTLE_RATES="200/hour" +BURST_THROTTLE_RATES="200/minute"