Optimize Frontend Image Build on CI (#1057)

* Always run yarn only on build platform with --platform=$BUILDPLATFORM
* Remove optional dependencies (playwright + chromium) from build with --ignore-optional and move some devDependencies to be optional
* Disable husky pre-commit hook checks on frontend

Co-authored-by: sua yoo <sua@suayoo.com>
This commit is contained in:
Ilya Kreymer 2023-08-09 12:06:20 -07:00 committed by GitHub
parent b494070e43
commit 38f67a6cc0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 21 additions and 16 deletions

View File

@ -40,6 +40,8 @@ jobs:
- name: Build Frontend - name: Build Frontend
uses: docker/build-push-action@v3 uses: docker/build-push-action@v3
env:
HUSKY: 0
with: with:
context: frontend context: frontend
push: true push: true

View File

@ -27,6 +27,8 @@ jobs:
${{ runner.os }}-btrix-frontend-build- ${{ runner.os }}-btrix-frontend-build-
- name: Install dependencies - name: Install dependencies
working-directory: frontend working-directory: frontend
env:
HUSKY: 0
run: yarn install --frozen-lockfile run: yarn install --frozen-lockfile
- name: Unit tests - name: Unit tests
working-directory: frontend working-directory: frontend

View File

@ -37,7 +37,7 @@ jobs:
- -
name: Build Backend name: Build Backend
uses: docker/build-push-action@v3 uses: docker/build-push-action@v4
with: with:
context: backend context: backend
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64
@ -48,7 +48,9 @@ jobs:
- -
name: Build Frontend name: Build Frontend
uses: docker/build-push-action@v3 uses: docker/build-push-action@v4
env:
HUSKY: 0
with: with:
context: frontend context: frontend
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64
@ -61,4 +63,3 @@ jobs:
tags: ${{ env.REPO_PREFIX }}webrecorder/browsertrix-frontend:${{ env.VERSION }}, webrecorder/browsertrix-frontend:latest tags: ${{ env.REPO_PREFIX }}webrecorder/browsertrix-frontend:${{ env.VERSION }}, webrecorder/browsertrix-frontend:latest
cache-from: type=gha,scope=frontend cache-from: type=gha,scope=frontend
cache-to: type=gha,scope=frontend,mode=max cache-to: type=gha,scope=frontend,mode=max

View File

@ -1,17 +1,15 @@
# syntax=docker/dockerfile:1.4 # syntax=docker/dockerfile:1.4
ARG RWP_BASE_URL=https://cdn.jsdelivr.net/npm/replaywebpage/ ARG RWP_BASE_URL=https://cdn.jsdelivr.net/npm/replaywebpage/
FROM docker.io/library/node:16 as build_deps FROM --platform=$BUILDPLATFORM docker.io/library/node:16 as build_deps
WORKDIR /app WORKDIR /app
COPY yarn.lock package.json ./ COPY yarn.lock package.json ./
# Uses `yarn cache clean` to let Docker cache layer instead # Uses `yarn cache clean` to let Docker cache layer instead
# of including yarn cache in the build image # of including yarn cache in the build image
RUN yarn --production --frozen-lockfile --network-timeout 1000000 && \ RUN yarn --production --frozen-lockfile --ignore-optional --network-timeout 1000000 && \
yarn cache clean yarn cache clean
FROM build_deps as build
COPY --link lit-localize.json \ COPY --link lit-localize.json \
postcss.config.js \ postcss.config.js \
tailwind.config.js \ tailwind.config.js \
@ -36,16 +34,16 @@ ENV GIT_COMMIT_HASH=${GIT_COMMIT_HASH} \
VERSION=${VERSION} \ VERSION=${VERSION} \
RWP_BASE_URL=${RWP_BASE_URL} RWP_BASE_URL=${RWP_BASE_URL}
# Prevent Docker caching node_modules # Prevent Docker image including node_modules to save space
RUN yarn build && \ RUN yarn build && \
rm -rf ./node_modules rm -rf ./node_modules
FROM docker.io/library/nginx:1.23.2 FROM docker.io/library/nginx:1.23.2
ARG RWP_BASE_URL ARG RWP_BASE_URL
ENV RWP_BASE_URL=${RWP_BASE_URL} ENV RWP_BASE_URL=${RWP_BASE_URL}
COPY --link --from=build /app/dist /usr/share/nginx/html COPY --link --from=build_deps /app/dist /usr/share/nginx/html
#COPY ./nginx.conf /etc/nginx/nginx.conf #COPY ./nginx.conf /etc/nginx/nginx.conf
COPY --link ./frontend.conf.template /etc/nginx/templates/ COPY --link ./frontend.conf.template /etc/nginx/templates/

View File

@ -73,21 +73,23 @@
"localize:build": "lit-localize build" "localize:build": "lit-localize build"
}, },
"devDependencies": { "devDependencies": {
"@esm-bundle/chai": "^4.3.4-fix.0",
"@lit/localize-tools": "^0.6.9", "@lit/localize-tools": "^0.6.9",
"@open-wc/testing": "^3.2.0",
"@playwright/test": "1.32.1",
"@web/dev-server-esbuild": "^0.3.3", "@web/dev-server-esbuild": "^0.3.3",
"@web/dev-server-import-maps": "^0.0.6", "@web/dev-server-import-maps": "^0.0.6",
"@web/dev-server-rollup": "^0.3.21", "@web/dev-server-rollup": "^0.3.21",
"@web/test-runner": "^0.13.22",
"@web/test-runner-playwright": "^0.8.8",
"chromium": "^3.0.3",
"husky": "^8.0.3", "husky": "^8.0.3",
"lint-staged": "^13.1.0", "lint-staged": "^13.1.0",
"sinon": "^12.0.1", "sinon": "^12.0.1",
"webpack-dev-server": "^4.3.0" "webpack-dev-server": "^4.3.0"
}, },
"optionalDependencies": {
"@esm-bundle/chai": "^4.3.4-fix.0",
"@open-wc/testing": "^3.2.0",
"@playwright/test": "1.32.1",
"@web/test-runner": "^0.13.22",
"@web/test-runner-playwright": "^0.8.8",
"chromium": "^3.0.3"
},
"eslintConfig": { "eslintConfig": {
"parser": "@typescript-eslint/parser", "parser": "@typescript-eslint/parser",
"env": { "env": {