From 66a005b4b2ad6e100adca13129501c185919ea01 Mon Sep 17 00:00:00 2001 From: Mangiang Date: Mon, 15 Nov 2021 21:22:51 -0500 Subject: [PATCH 01/11] tests: Use Nginx instead of yarn start --- .drone-docker.yml | 38 ++++++++++---------------------------- .drone-kubernetes.yml | 38 ++++++++++---------------------------- 2 files changed, 20 insertions(+), 56 deletions(-) diff --git a/.drone-docker.yml b/.drone-docker.yml index 728c7a1..5907b62 100644 --- a/.drone-docker.yml +++ b/.drone-docker.yml @@ -31,26 +31,27 @@ steps: - sed -i 's/{{ DEPLOY_SSH_KEY_PASSPHRASE }}/'"$DEPLOY_SSH_KEY_PASSPHRASE"'/g' ./.ansible-items/inventory - sed -i 's/{{ DEPLOY_USER }}/'"$DEPLOY_USER"'/g' ./.ansible-items/inventory - - name: install frontend dependencies + - name: install dependencies and build frontend image: node:lts-alpine3.14 commands: - node -v - npm -v - yarn --version - yarn --cwd ./items/frontend install + - yarn --cwd ./items/frontend build --pure-lockfile + - rm -rf ./items/api/public/static/* + - cp ./items/frontend/build/* ./items/api/public + - rm ./items/api/public/index.html depends_on: - replace hosts and user variables - name: frontend - image: node:lts-alpine3.14 + image: nginx:1.21.4-alpine commands: - - node -v - - npm -v - - yarn --version - - yarn --cwd ./items/frontend start + - cp ./items/frontend/build/* /usr/share/nginx/html detach: true depends_on: - - install frontend dependencies + - install dependencies and build frontend - name: test frontend image: cypress/browsers:node16.5.0-chrome94-ff93 @@ -60,25 +61,7 @@ steps: - yarn --version - yarn --cwd ./items/frontend cy:run depends_on: - - install frontend dependencies - - - name: build frontend - image: node:lts-alpine3.14 - commands: - - node -v - - npm -v - - yarn --version - - yarn --cwd ./items/frontend build --pure-lockfile - - rm -rf ./items/api/public/static/* - - mv ./items/frontend/build/* ./items/api/public - - rm ./items/api/public/index.html - depends_on: - - test frontend - when: - branch: - - main - - master - - development + - install dependencies and build frontend - name: check ansible syntax image: plugins/ansible:3 @@ -111,8 +94,7 @@ steps: SPT_ITEMS_PATH: from_secret: deploy_path depends_on: - - check ansible syntax - - build frontend + - test frontend when: branch: - master diff --git a/.drone-kubernetes.yml b/.drone-kubernetes.yml index a9239a1..7b62c8c 100644 --- a/.drone-kubernetes.yml +++ b/.drone-kubernetes.yml @@ -31,26 +31,27 @@ steps: - sed -i 's/{{ DEPLOY_SSH_KEY_PASSPHRASE }}/'"$DEPLOY_SSH_KEY_PASSPHRASE"'/g' ./.ansible-items/inventory - sed -i 's/{{ DEPLOY_USER }}/'"$DEPLOY_USER"'/g' ./.ansible-items/inventory - - name: install frontend dependencies + - name: install dependencies and build frontend image: node:lts-alpine3.14 commands: - node -v - npm -v - yarn --version - yarn --cwd ./items/frontend install + - yarn --cwd ./items/frontend build --pure-lockfile + - rm -rf ./items/api/public/static/* + - cp ./items/frontend/build/* ./items/api/public + - rm ./items/api/public/index.html depends_on: - replace hosts and user variables - name: frontend - image: node:lts-alpine3.14 + image: nginx:1.21.4-alpine commands: - - node -v - - npm -v - - yarn --version - - yarn --cwd ./items/frontend start + - cp ./items/frontend/build/* /usr/share/nginx/html detach: true depends_on: - - install frontend dependencies + - install dependencies and build frontend - name: test frontend image: cypress/browsers:node16.5.0-chrome94-ff93 @@ -60,25 +61,7 @@ steps: - yarn --version - yarn --cwd ./items/frontend cy:run depends_on: - - install frontend dependencies - - - name: build frontend - image: node:lts-alpine3.14 - commands: - - node -v - - npm -v - - yarn --version - - yarn --cwd ./items/frontend build --pure-lockfile - - rm -rf ./items/api/public/static/* - - mv ./items/frontend/build/* ./items/api/public - - rm ./items/api/public/index.html - depends_on: - - test frontend - when: - branch: - - main - - master - - development + - install dependencies and build frontend - name: check ansible syntax image: plugins/ansible:3 @@ -111,8 +94,7 @@ steps: SPT_ITEMS_PATH: from_secret: deploy_path depends_on: - - check ansible syntax - - build frontend + - test frontend when: branch: - master -- 2.47.1 From 0bfc57000ddbaf1340053021d7e451594e527448 Mon Sep 17 00:00:00 2001 From: Mangiang Date: Mon, 15 Nov 2021 21:26:58 -0500 Subject: [PATCH 02/11] tests: fix copy directory --- .drone-kubernetes.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone-kubernetes.yml b/.drone-kubernetes.yml index 7b62c8c..aa8a5f1 100644 --- a/.drone-kubernetes.yml +++ b/.drone-kubernetes.yml @@ -40,7 +40,7 @@ steps: - yarn --cwd ./items/frontend install - yarn --cwd ./items/frontend build --pure-lockfile - rm -rf ./items/api/public/static/* - - cp ./items/frontend/build/* ./items/api/public + - cp -r ./items/frontend/build/* ./items/api/public - rm ./items/api/public/index.html depends_on: - replace hosts and user variables -- 2.47.1 From 972ddd70cb44bb5869f30ab8d4437382dd35f27c Mon Sep 17 00:00:00 2001 From: Mangiang Date: Mon, 15 Nov 2021 21:40:45 -0500 Subject: [PATCH 03/11] tests: fix copy directory --- .drone-kubernetes.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone-kubernetes.yml b/.drone-kubernetes.yml index aa8a5f1..1b78b75 100644 --- a/.drone-kubernetes.yml +++ b/.drone-kubernetes.yml @@ -48,7 +48,7 @@ steps: - name: frontend image: nginx:1.21.4-alpine commands: - - cp ./items/frontend/build/* /usr/share/nginx/html + - cp -r ./items/frontend/build/* /usr/share/nginx/html detach: true depends_on: - install dependencies and build frontend -- 2.47.1 From e4d8cb7663133bc63b3452c1873b3573692548f1 Mon Sep 17 00:00:00 2001 From: Mangiang Date: Mon, 15 Nov 2021 21:47:29 -0500 Subject: [PATCH 04/11] tests: fix nginx setup --- .drone-kubernetes.yml | 3 ++- items/frontend/package.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.drone-kubernetes.yml b/.drone-kubernetes.yml index 1b78b75..d86eb09 100644 --- a/.drone-kubernetes.yml +++ b/.drone-kubernetes.yml @@ -49,6 +49,7 @@ steps: image: nginx:1.21.4-alpine commands: - cp -r ./items/frontend/build/* /usr/share/nginx/html + - nginx -g daemon off; detach: true depends_on: - install dependencies and build frontend @@ -59,7 +60,7 @@ steps: - node -v - npm -v - yarn --version - - yarn --cwd ./items/frontend cy:run + - yarn --cwd ./items/frontend cy:ci depends_on: - install dependencies and build frontend diff --git a/items/frontend/package.json b/items/frontend/package.json index 460cf14..8c3f923 100644 --- a/items/frontend/package.json +++ b/items/frontend/package.json @@ -43,7 +43,7 @@ "cy:verify": "cypress verify", "cy:run:ci": "cross-env CYPRESS_BASE_URL=http://frontend:3000 cypress run --browser chrome", "cy:open": "yarn run cy:start:wait -- \"cypress open\"", - "cy:run": "yarn run wait-on http-get://frontend:3000 && yarn run cy:install && yarn run cy:verify && yarn run cy:run:ci", + "cy:ci": "yarn run wait-on http-get://frontend && yarn run cy:install && yarn run cy:verify && yarn run cy:run:ci", "eject": "react-scripts eject" }, "eslintConfig": { -- 2.47.1 From bf1db24b342af81b43d0c772c0c8072504eea19d Mon Sep 17 00:00:00 2001 From: Mangiang Date: Mon, 15 Nov 2021 21:55:38 -0500 Subject: [PATCH 05/11] tests: fix nginx setup --- .drone-kubernetes.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone-kubernetes.yml b/.drone-kubernetes.yml index d86eb09..6858373 100644 --- a/.drone-kubernetes.yml +++ b/.drone-kubernetes.yml @@ -49,7 +49,7 @@ steps: image: nginx:1.21.4-alpine commands: - cp -r ./items/frontend/build/* /usr/share/nginx/html - - nginx -g daemon off; + - nginx -g "daemon off;" detach: true depends_on: - install dependencies and build frontend -- 2.47.1 From 0c637ef92e565cd37ce67b84cb8c0b07ce3305e8 Mon Sep 17 00:00:00 2001 From: Mangiang Date: Mon, 15 Nov 2021 22:00:35 -0500 Subject: [PATCH 06/11] tests: fix nginx setup --- items/frontend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/items/frontend/package.json b/items/frontend/package.json index 8c3f923..ce25159 100644 --- a/items/frontend/package.json +++ b/items/frontend/package.json @@ -41,7 +41,7 @@ "cy:start:wait": "start-server-and-test cy:start:app http://localhost:3000", "cy:install": "cypress install", "cy:verify": "cypress verify", - "cy:run:ci": "cross-env CYPRESS_BASE_URL=http://frontend:3000 cypress run --browser chrome", + "cy:run:ci": "cross-env CYPRESS_BASE_URL=http://frontend cypress run --browser chrome", "cy:open": "yarn run cy:start:wait -- \"cypress open\"", "cy:ci": "yarn run wait-on http-get://frontend && yarn run cy:install && yarn run cy:verify && yarn run cy:run:ci", "eject": "react-scripts eject" -- 2.47.1 From 2a61366bcf3474d3209abc39e7ad60e29b63227e Mon Sep 17 00:00:00 2001 From: Mangiang Date: Mon, 15 Nov 2021 22:09:11 -0500 Subject: [PATCH 07/11] tests: fix nginx setup --- items/frontend/src/cypress/integration/url-check.spec.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/items/frontend/src/cypress/integration/url-check.spec.tsx b/items/frontend/src/cypress/integration/url-check.spec.tsx index 802a7dd..22910fc 100644 --- a/items/frontend/src/cypress/integration/url-check.spec.tsx +++ b/items/frontend/src/cypress/integration/url-check.spec.tsx @@ -39,7 +39,7 @@ describe('Url check', () => { describe('Check page not found', () => { it('Invalid url should redirect to page not found', () => { - cy.visit('/ABC') + cy.visit('/ABC', {failOnStatusCode: false}).its('status').should('equal', 404) cy.get('#not-found-message').contains("This page does not exist !"); }) }) -- 2.47.1 From a8a34dbd70b67b7fde58ffb1c1b727245d7494e6 Mon Sep 17 00:00:00 2001 From: Mangiang Date: Mon, 15 Nov 2021 22:32:26 -0500 Subject: [PATCH 08/11] tests: fix nginx setup --- .drone-kubernetes.yml | 1 + items/frontend/src/cypress/fixtures/default.conf | 15 +++++++++++++++ .../src/cypress/integration/url-check.spec.tsx | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 items/frontend/src/cypress/fixtures/default.conf diff --git a/.drone-kubernetes.yml b/.drone-kubernetes.yml index 6858373..758bc55 100644 --- a/.drone-kubernetes.yml +++ b/.drone-kubernetes.yml @@ -49,6 +49,7 @@ steps: image: nginx:1.21.4-alpine commands: - cp -r ./items/frontend/build/* /usr/share/nginx/html + - cp ./items/frontend/src/cypress/fixtures/default.conf /etc/nginx/conf.d/default.conf - nginx -g "daemon off;" detach: true depends_on: diff --git a/items/frontend/src/cypress/fixtures/default.conf b/items/frontend/src/cypress/fixtures/default.conf new file mode 100644 index 0000000..40b9650 --- /dev/null +++ b/items/frontend/src/cypress/fixtures/default.conf @@ -0,0 +1,15 @@ +server { + listen 80; + server_name localhost; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} diff --git a/items/frontend/src/cypress/integration/url-check.spec.tsx b/items/frontend/src/cypress/integration/url-check.spec.tsx index 22910fc..802a7dd 100644 --- a/items/frontend/src/cypress/integration/url-check.spec.tsx +++ b/items/frontend/src/cypress/integration/url-check.spec.tsx @@ -39,7 +39,7 @@ describe('Url check', () => { describe('Check page not found', () => { it('Invalid url should redirect to page not found', () => { - cy.visit('/ABC', {failOnStatusCode: false}).its('status').should('equal', 404) + cy.visit('/ABC') cy.get('#not-found-message').contains("This page does not exist !"); }) }) -- 2.47.1 From 2d7b814700a57c422e211519f4fdbdeab1af39a7 Mon Sep 17 00:00:00 2001 From: Mangiang Date: Mon, 15 Nov 2021 22:41:10 -0500 Subject: [PATCH 09/11] tests: fix nginx testing setup --- .drone-docker.yml | 8 +++++--- .drone-kubernetes.yml | 2 +- .../src/cypress/{fixtures => nginx_config}/default.conf | 0 3 files changed, 6 insertions(+), 4 deletions(-) rename items/frontend/src/cypress/{fixtures => nginx_config}/default.conf (100%) diff --git a/.drone-docker.yml b/.drone-docker.yml index 5907b62..130dc28 100644 --- a/.drone-docker.yml +++ b/.drone-docker.yml @@ -40,7 +40,7 @@ steps: - yarn --cwd ./items/frontend install - yarn --cwd ./items/frontend build --pure-lockfile - rm -rf ./items/api/public/static/* - - cp ./items/frontend/build/* ./items/api/public + - cp -r ./items/frontend/build/* ./items/api/public - rm ./items/api/public/index.html depends_on: - replace hosts and user variables @@ -48,7 +48,9 @@ steps: - name: frontend image: nginx:1.21.4-alpine commands: - - cp ./items/frontend/build/* /usr/share/nginx/html + - cp -r ./items/frontend/build/* /usr/share/nginx/html + - cp ./items/frontend/src/cypress/nginx_config/default.conf /etc/nginx/conf.d/default.conf + - nginx -g "daemon off;" detach: true depends_on: - install dependencies and build frontend @@ -59,7 +61,7 @@ steps: - node -v - npm -v - yarn --version - - yarn --cwd ./items/frontend cy:run + - yarn --cwd ./items/frontend cy:ci depends_on: - install dependencies and build frontend diff --git a/.drone-kubernetes.yml b/.drone-kubernetes.yml index 758bc55..f0c8d9d 100644 --- a/.drone-kubernetes.yml +++ b/.drone-kubernetes.yml @@ -49,7 +49,7 @@ steps: image: nginx:1.21.4-alpine commands: - cp -r ./items/frontend/build/* /usr/share/nginx/html - - cp ./items/frontend/src/cypress/fixtures/default.conf /etc/nginx/conf.d/default.conf + - cp ./items/frontend/src/cypress/nginx_config/default.conf /etc/nginx/conf.d/default.conf - nginx -g "daemon off;" detach: true depends_on: diff --git a/items/frontend/src/cypress/fixtures/default.conf b/items/frontend/src/cypress/nginx_config/default.conf similarity index 100% rename from items/frontend/src/cypress/fixtures/default.conf rename to items/frontend/src/cypress/nginx_config/default.conf -- 2.47.1 From cb016f4b0e27ce3c881246bcf8c854984617b590 Mon Sep 17 00:00:00 2001 From: Mangiang Date: Mon, 15 Nov 2021 22:57:50 -0500 Subject: [PATCH 10/11] docs: Update documentation --- items/docs/Walkthrough.md | 58 ++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 32 deletions(-) diff --git a/items/docs/Walkthrough.md b/items/docs/Walkthrough.md index 4ec88bc..b3e9094 100644 --- a/items/docs/Walkthrough.md +++ b/items/docs/Walkthrough.md @@ -7,10 +7,9 @@ * [Triggers](#triggers) * [Steps](#steps) * [Replace hosts and user variables](#replace-hosts-and-user-variables) - * [Install frontend dependencies](#install-frontend-dependencies) + * [Install frontend dependencies and build it](#install-frontend-dependencies-and-build-it) * [Run the frontend](#run-the-frontend) * [Test frontend](#test-frontend) - * [Build frontend](#build-frontend) * [Check ansible syntax](#check-ansible-syntax) * [Apply ansible playbook](#apply-ansible-playbook) * [Playbook definition](#playbook-definition) @@ -88,32 +87,42 @@ The following environment variables are injected using Drone secrets: Using `sed` makes temporary changes in the container/pod instead of commiting secrets in the repo in plain text. \ The changes are never pushed and are discarded when the container/pod is terminated. -### Install frontend dependencies +### Install frontend dependencies and build it ```yml -- name: install frontend dependencies +- name: install dependencies and build frontend image: node:lts-alpine3.14 commands: - node -v - npm -v - yarn --version - yarn --cwd ./items/frontend install + - yarn --cwd ./items/frontend build --pure-lockfile + - rm -rf ./items/api/public/static/* + - cp -r ./items/frontend/build/* ./items/api/public + - rm ./items/api/public/index.html depends_on: - replace hosts and user variables ``` +Executed on every push. \ +Since the PHP backend serves the ReactJS frontend, the former is built and moved in the latter. +Notes: +* `yarn --cwd ` executes the command in the specified file +* `rm -rf ./api/public/static/*` deletes the static files to make sure no old JavaScript files remain +* `rm ./api/public/invdex.html` ReactJS is bundled with a `index.html`. It is discarded to use [](https://dev.sp-tarkov.com/Rev/spt-items-api/raw/branch/master/resources/views/app.blade.php) instead. ### Run the frontend ```yaml - name: frontend - image: node:lts-alpine3.14 + image: nginx:1.21.4-alpine commands: - - node -v - - npm -v - - yarn --version - - yarn --cwd ./items/frontend start + - cp -r ./items/frontend/build/* /usr/share/nginx/html + - cp ./items/frontend/src/cypress/nginx_config/default.conf /etc/nginx/conf.d/default.conf + - nginx -g "daemon off;" detach: true depends_on: - - install frontend dependencies + - install dependencies and build frontend ``` +Copies the frontend and the nginx conf in the container to be able to test it. The frontend is run and `detach` is specified so the End-to-End tests (using cypress) can run on it ### Test frontend @@ -124,32 +133,12 @@ The frontend is run and `detach` is specified so the End-to-End tests (using cyp - node -v - npm -v - yarn --version - - yarn --cwd ./items/frontend cy:run + - yarn --cwd ./items/frontend cy:ci depends_on: - - install frontend dependencies + - install dependencies and build frontend ``` Run frontend tests using Cypress -### Build frontend -```yml -- name: build frontend - image: node:lts-alpine3.14 - commands: - - node -v - - npm -v - - yarn --version - - yarn --cwd ./items/frontend build --pure-lockfile - - rm -rf ./items/api/public/static/* - - mv ./items/frontend/build/* ./items/api/public - - rm ./items/api/public/index.html -``` -Executed on every push. \ -Since the PHP backend serves the ReactJS frontend, the former is built and moved in the latter. -Notes: - * `yarn --cwd ` executes the command in the specified file - * `rm -rf ./api/public/static/*` deletes the static files to make sure no old JavaScript files remain - * `rm ./api/public/index.html` ReactJS is bundled with a `index.html`. It is discarded to use [](https://dev.sp-tarkov.com/Rev/spt-items-api/raw/branch/master/resources/views/app.blade.php) instead. - ### Check ansible syntax ```yml - name: check ansible syntax @@ -159,6 +148,9 @@ Notes: inventory: ./.ansible-items/inventory galaxy: ./.ansible-items/requirements.yml syntax_check: true + when: + branch: + - development ``` Executed on every push. \ Check the Ansible syntax in [playbook.yml](../../.ansible-items/playbook.yml), [inventory](../../.ansible-items/inventory) and [requirements.yml](../../.ansible-items/requirements.yml). The check is executed on every push since we want to detect any error before validating the build using the promotion. @@ -184,6 +176,8 @@ Check the Ansible syntax in [playbook.yml](../../.ansible-items/playbook.yml), [ from_secret: deploy_user_group SPT_ITEMS_PATH: from_secret: deploy_path + depends_on: + - test frontend when: branch: - master -- 2.47.1 From 113416b1f96466a04780e16711a5c8de0f54c65b Mon Sep 17 00:00:00 2001 From: Mangiang Date: Thu, 2 Dec 2021 10:43:32 -0500 Subject: [PATCH 11/11] feat: Change standard favicon to Christmas favicon --- items/frontend/public/favicon.ico | Bin 1032 -> 2259 bytes items/frontend/public/favicon.svg | 112 ++---------------------------- 2 files changed, 4 insertions(+), 108 deletions(-) diff --git a/items/frontend/public/favicon.ico b/items/frontend/public/favicon.ico index 66862a5a75ca7de793bb4c9aa14709c0144e7339..3ff79900ac31d4799889e6382833824f4f599ac2 100644 GIT binary patch delta 2246 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 diff --git a/items/frontend/public/favicon.svg b/items/frontend/public/favicon.svg index e7ee889..a7f33e5 100644 --- a/items/frontend/public/favicon.svg +++ b/items/frontend/public/favicon.svg @@ -1,109 +1,5 @@ - - - - - - - - - - - - - - - - - - + + + + -- 2.47.1