Skip to content

Commit

Permalink
Maintenance: #478: Verify vite bundle size
Browse files Browse the repository at this point in the history
  • Loading branch information
Benjamin Scharf committed May 3, 2024
1 parent 1b552ce commit bde8b8d
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 3 deletions.
2 changes: 1 addition & 1 deletion .gitlab/ci/__includes__/cache.yml
Expand Up @@ -5,7 +5,7 @@
files:
- Gemfile.lock
paths:
- vendor/ruby
- vendor/bundle

# Cache node_modules likewise
.cache_nodejs: &cache_nodejs
Expand Down
9 changes: 9 additions & 0 deletions .gitlab/ci/lint.yml
Expand Up @@ -101,11 +101,20 @@
before_script:
- cp yarn.lock tmp/yarn.lock # Save original state of yarn.lock
- !reference [.scripts, yarn_install]
- !reference [.scripts, source_rvm]
script:
- echo "Checking if yarn.lock is up-to-date"
- "if ! diff yarn.lock tmp/yarn.lock; then echo 'Error: yarn.lock is not up-to-date'; exit 1; fi"
- echo "ESLint check…"
- yarn lint
- yarn analyse:vite-bundle -t list -o ./tmp/vite-bundle-stats.yml
- .gitlab/verify_vite_bundle_size.rb
# Artifacts are stored for failed jobs
artifacts:
expire_in: 1 week
when: on_failure
paths:
- tmp/vite-bundle-stats.yml

# Must be a separate job because it may fail and is only executed manually.
'lint: orphaned ruby gems':
Expand Down
28 changes: 28 additions & 0 deletions .gitlab/verify_vite_bundle_size.rb
@@ -0,0 +1,28 @@
#!/usr/bin/env ruby
# Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/

require 'yaml'
require 'pathname'

class VerifyViteBundleSize

FILENAME = Pathname.new(__dir__).join('../tmp/vite-bundle-stats.yml')
MAX_CHUNK_SIZE = 500 * 1_024

def self.run
puts 'Verifying vite bundle size…'
YAML.load(FILENAME.read).each_pair do |chunk_name, chunk_files|
chunk_size = 0
chunk_files.each_value do |v|
chunk_size += + v['gzip']
end
if chunk_size > MAX_CHUNK_SIZE
raise "Chunk #{chunk_name} has a size of #{chunk_size}, which is higher than the allowed #{MAX_CHUNK_SIZE}.\n"
end
end

puts "All chunks are smaller than the allowed #{MAX_CHUNK_SIZE}."
end
end

VerifyViteBundleSize.run
4 changes: 3 additions & 1 deletion package.json
Expand Up @@ -14,7 +14,8 @@
"test:ct": "CY_OPEN=true yarn --cwd ./.cypress cypress open --component --project ../ --config-file .cypress/cypress.config.mjs",
"test:ci:ct": "CI=true yarn --cwd ./.cypress cypress run --component --project ../ --config-file .cypress/cypress.config.mjs --browser electron",
"cypress:snapshots": "sh .cypress/visual-regression/snapshots.sh",
"cypress:install": "yarn --cwd ./.cypress install"
"cypress:install": "yarn --cwd ./.cypress install",
"analyse:vite-bundle": "npx vite-bundle-visualizer"
},
"engines": {
"node": ">=18.12.0"
Expand Down Expand Up @@ -140,6 +141,7 @@
"tiptap-text-direction": "^0.3.1",
"ua-parser-js": "^1.0.37",
"uuid": "^9.0.1",
"vite-bundle-visualizer": "^1.1.0",
"vue": "^3.4.21",
"vue-advanced-cropper": "^2.8.8",
"vue-easy-lightbox": "1.19.0",
Expand Down
58 changes: 57 additions & 1 deletion yarn.lock
Expand Up @@ -6406,11 +6406,24 @@ import-fresh@^3.2.1, import-fresh@^3.3.0:
parent-module "^1.0.0"
resolve-from "^4.0.0"

import-from-esm@^1.3.3:
version "1.3.4"
resolved "https://registry.yarnpkg.com/import-from-esm/-/import-from-esm-1.3.4.tgz#39e97c84085e308fe66cf872a667046b45449df0"
integrity sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg==
dependencies:
debug "^4.3.4"
import-meta-resolve "^4.0.0"

import-from@4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2"
integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==

import-meta-resolve@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#f9db8bead9fafa61adb811db77a2bf22c5399706"
integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==

imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
Expand Down Expand Up @@ -8946,6 +8959,16 @@ rollup-plugin-terser@^7.0.0:
serialize-javascript "^4.0.0"
terser "^5.0.0"

rollup-plugin-visualizer@^5.11.0:
version "5.12.0"
resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz#661542191ce78ee4f378995297260d0c1efb1302"
integrity sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==
dependencies:
open "^8.4.0"
picomatch "^2.3.1"
source-map "^0.7.4"
yargs "^17.5.1"

rollup@^2.43.1:
version "2.79.1"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7"
Expand Down Expand Up @@ -9331,6 +9354,11 @@ source-map@^0.6.0:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==

source-map@^0.7.4:
version "0.7.4"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656"
integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==

source-map@^0.8.0-beta.0:
version "0.8.0-beta.0"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11"
Expand Down Expand Up @@ -9946,6 +9974,11 @@ tmp@^0.0.33:
dependencies:
os-tmpdir "~1.0.2"

tmp@^0.2.1:
version "0.2.3"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae"
integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==

to-fast-properties@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
Expand Down Expand Up @@ -10357,6 +10390,16 @@ value-or-promise@^1.0.12:
resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.12.tgz#0e5abfeec70148c78460a849f6b003ea7986f15c"
integrity sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==

vite-bundle-visualizer@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/vite-bundle-visualizer/-/vite-bundle-visualizer-1.1.0.tgz#2f9d3fe0a764104196c56a6e52dd98d95248dbb0"
integrity sha512-cmi5OuS7Eta5keTJmCTEbBBA7gOsUQ4K44W5dbsP+n/X0GIilIIFbJeXF120MQpTxdiZ/GIx4A9zkPEcKpPAog==
dependencies:
cac "^6.7.14"
import-from-esm "^1.3.3"
rollup-plugin-visualizer "^5.11.0"
tmp "^0.2.1"

vite-node@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.5.2.tgz#9e5fb28bd8bc68fe36e94f9156c3ae67796c002a"
Expand Down Expand Up @@ -11023,7 +11066,7 @@ yargs-parser@^18.1.2:
camelcase "^5.0.0"
decamelize "^1.2.0"

yargs-parser@^21.0.0:
yargs-parser@^21.0.0, yargs-parser@^21.1.1:
version "21.1.1"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
Expand Down Expand Up @@ -11058,6 +11101,19 @@ yargs@^17.0.0:
y18n "^5.0.5"
yargs-parser "^21.0.0"

yargs@^17.5.1:
version "17.7.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
dependencies:
cliui "^8.0.1"
escalade "^3.1.1"
get-caller-file "^2.0.5"
require-directory "^2.1.1"
string-width "^4.2.3"
y18n "^5.0.5"
yargs-parser "^21.1.1"

yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
Expand Down

0 comments on commit bde8b8d

Please sign in to comment.