From b86aefc03886e6b25f5871fefe18967ad8242bd3 Mon Sep 17 00:00:00 2001 From: Gusted Date: Fri, 11 Apr 2025 15:12:50 +0000 Subject: [PATCH] chore: use `sharp` to generate images (#7512) - `tools/generate-images.js` is used to convert SVGs to resized optimized SVGs and resized optimized PNG. Although it would be best to drop generating images from SVG, the usage of these images do not accept a SVG. - The script relied on two dependencies being installed on-the-fly, this is suboptimal as it means its integrity was not saved in package-lock.json and no specific version was specified which makes reproducible builds harder. `imagemin-zopfli` was not updated in 4 years and seems to use dependency that generate funny message about memory leaks and using no longer maintained dependencies. - Use [`sharp`](https://sharp.pixelplumbing.com/) to do the image conversion, this installs two binaries on Linux (glibc/musl) and are responsible for 5% of the `node_modules` directory size. Add this to package.json as a dev dependencies to ensure the integrity can be verified and help reproducible builds. - Drop the `gitea` conversion, I cannot find this being used within Forgejo (my best guess is that e20cd83bc5479bd76ff1a248f0e28ef0bea6742b dropped the usage of it). - Resolves forgejo/forgejo#7232 Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7512 Reviewed-by: 0ko <0ko@noreply.codeberg.org> Reviewed-by: Michael Kriese Co-authored-by: Gusted Co-committed-by: Gusted --- Makefile | 3 +- package-lock.json | 491 +++++++++++++++++++++++++ package.json | 1 + public/assets/img/apple-touch-icon.png | Bin 2709 -> 1571 bytes public/assets/img/avatar_default.png | Bin 3189 -> 1568 bytes public/assets/img/favicon.png | Bin 2968 -> 1500 bytes public/assets/img/gitea.svg | 1 - public/assets/img/logo.png | Bin 6747 -> 3776 bytes routers/install/routes_test.go | 2 +- tools/generate-images.js | 36 +- 10 files changed, 500 insertions(+), 34 deletions(-) delete mode 100644 public/assets/img/gitea.svg diff --git a/Makefile b/Makefile index 942605aa19..13ddc369b7 100644 --- a/Makefile +++ b/Makefile @@ -1017,8 +1017,7 @@ generate-gomock: .PHONY: generate-images generate-images: | node_modules - npm install --no-save fabric@6 imagemin-zopfli@7 - node tools/generate-images.js $(TAGS) + node tools/generate-images.js .PHONY: generate-manpage generate-manpage: diff --git a/package-lock.json b/package-lock.json index 0250d2a364..0a67ed0b43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -92,6 +92,7 @@ "license-checker-rseidelsohn": "4.4.2", "markdownlint-cli": "0.44.0", "postcss-html": "1.8.0", + "sharp": "0.34.1", "stylelint": "16.17.0", "stylelint-declaration-block-no-ignored-properties": "2.8.0", "stylelint-declaration-strict-value": "1.10.11", @@ -1338,6 +1339,403 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.1.tgz", + "integrity": "sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.1.0" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.1.tgz", + "integrity": "sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.1.0" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz", + "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz", + "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz", + "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz", + "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz", + "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz", + "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz", + "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz", + "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz", + "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.1.tgz", + "integrity": "sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.1.0" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.1.tgz", + "integrity": "sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.1.0" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.1.tgz", + "integrity": "sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.1.0" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.1.tgz", + "integrity": "sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.1.0" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.1.tgz", + "integrity": "sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.1.0" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.1.tgz", + "integrity": "sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.1.0" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.1.tgz", + "integrity": "sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.4.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.1.tgz", + "integrity": "sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.1.tgz", + "integrity": "sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -5016,6 +5414,20 @@ "typo-js": "*" } }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -5034,6 +5446,17 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -6018,6 +6441,16 @@ "node": ">=6" } }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/devlop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", @@ -12476,6 +12909,47 @@ "node": ">=8" } }, + "node_modules/sharp": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.1.tgz", + "integrity": "sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.7.1" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.1", + "@img/sharp-darwin-x64": "0.34.1", + "@img/sharp-libvips-darwin-arm64": "1.1.0", + "@img/sharp-libvips-darwin-x64": "1.1.0", + "@img/sharp-libvips-linux-arm": "1.1.0", + "@img/sharp-libvips-linux-arm64": "1.1.0", + "@img/sharp-libvips-linux-ppc64": "1.1.0", + "@img/sharp-libvips-linux-s390x": "1.1.0", + "@img/sharp-libvips-linux-x64": "1.1.0", + "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", + "@img/sharp-libvips-linuxmusl-x64": "1.1.0", + "@img/sharp-linux-arm": "0.34.1", + "@img/sharp-linux-arm64": "0.34.1", + "@img/sharp-linux-s390x": "0.34.1", + "@img/sharp-linux-x64": "0.34.1", + "@img/sharp-linuxmusl-arm64": "0.34.1", + "@img/sharp-linuxmusl-x64": "0.34.1", + "@img/sharp-wasm32": "0.34.1", + "@img/sharp-win32-ia32": "0.34.1", + "@img/sharp-win32-x64": "0.34.1" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -12605,6 +13079,23 @@ "node": ">=12" } }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true, + "license": "MIT" + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", diff --git a/package.json b/package.json index 44591d8286..0109a52de5 100644 --- a/package.json +++ b/package.json @@ -91,6 +91,7 @@ "license-checker-rseidelsohn": "4.4.2", "markdownlint-cli": "0.44.0", "postcss-html": "1.8.0", + "sharp": "0.34.1", "stylelint": "16.17.0", "stylelint-declaration-block-no-ignored-properties": "2.8.0", "stylelint-declaration-strict-value": "1.10.11", diff --git a/public/assets/img/apple-touch-icon.png b/public/assets/img/apple-touch-icon.png index 1f6c1544f80bcd94adfa05ef4683537266de020c..2b1413bd6cf02a49c06976761ae39c207d8bdbda 100644 GIT binary patch delta 1555 zcmV+u2JHEj6{8H0BYyxtP)t-s)Bph485I9=74^u-{`B$v<=*a|Cv?hYir_JS>8ZE@k9WS!T-?!000SaNLh0L01FcU01FcV z0GgZ_000GwNklJIW_&SS;O%|bMr#{&nAH!dXN0Hfg^?%wm-H;qJOHPuQhTjnt!H%2$C3D42`Ep?az`E6Ij(Lp}9BlmPcMxV4wknBy=)Bx%Rz;0_r0b zw3uR6+jRa9<%8w}EJS=dQ@s7O476;3acx)fTjx(RK*N-A93TeJN+jjoe56`a7J3NC zdX=GhP`0is4-r^l@QMpjG=Wu-sTcBOD09W+BKvTg9Djc)XBrRI#*R!DE12S#Um9WD zfOi3;Xsmm8_SP@ua@QowxCxm0Tqd$X8_y_V?euFlr~pg{?GZTaAVt8pG+Mdyz8Rpe1y$I33}NX|qvKe5g0Vr~Z69s?lJS(>Tg6>&Pbx_PIh>qd2EQS0c|2`vue;5fjFShJZ?N(2U??fjv zZcsQH1}(xT!}Xvgf*1{kHaOG)gC6{v&A6Z~ihtMvgl-Z_nzi#fj^ny$#j`?3ZtY%( zXG&gd1#*+&!!IZo)A zxNH=Kph1;~CT{cebx~+Vu53XE&B(R2*q~PrXd-Gt3)bp+S)Qr-$9$N*0$&bjuI7)CgaTX`w~yNxaE`pT!hj6k4ss+g_stdsm4n2(3ncWTG9h za481eQUEfcuIx?=L9>;B>@$T3n5a`g^O*pRJM#`J0IevLd30A&`JsDFz_z-}Y?U3F zlCOh)kPxHp%|T{)gfSmrjiBly3ObZ|SAWXAXP2yTI+%Iq%+VcN5<*8XlaZfq9d$^(P zF^D4(^xR>FexPtP5Spe5(Pg0{c7GeypdaDeI&9GT8=)C)XzJG?{{rX*IW!VUCxBMp z2+eRq8x%P_2{gwIecY?}&?hIAoz&iX>*40-R#Wpx#R8fzMF z9gklyv;|XpdQzTZs;56n(|<*rbev{P(7WB%q8MZCig^>@x34X_vn7!aK2LNn-1UleVz7FC1Ew*fgPxsq49KfNGg_HU}UF?ZvtjW15$9vKDVK@mS}MAEkF zaKF{Nkhtq@bzb@wuO$ckdRwK}>;K+v(|Xpe5?w9(1HF70|3{yS-3$N#002ovPDHLk FV1l<|^~eAK delta 2702 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 Cnc8Cj literal 3189 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 I1NZ2E0VOn}g8%>k diff --git a/public/assets/img/favicon.png b/public/assets/img/favicon.png index eda0347effabb1b681c3816cfd3580b82227c063..209a01fa1fa3fdfd59d82142835181644ea80489 100644 GIT binary patch delta 1483 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 diff --git a/public/assets/img/gitea.svg b/public/assets/img/gitea.svg deleted file mode 100644 index 804b05e284..0000000000 --- a/public/assets/img/gitea.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/assets/img/logo.png b/public/assets/img/logo.png index 1b2d9b4023427395448912e39a9883c279dc1618..30b06350f6a21cac1cd937aa31ec57f6a075c642 100644 GIT binary patch literal 3776 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 literal 6747 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 yox+U;9_d=qPhd|d8=p;?J#1|3xTc!uOU err !== null && console.error(err) && exit(1)); } async function main() { - const gitea = argv.slice(2).includes('gitea'); const logoSvg = await readFile(new URL('../assets/logo.svg', import.meta.url), 'utf8'); const faviconSvg = await readFile(new URL('../assets/favicon.svg', import.meta.url), 'utf8'); @@ -68,7 +45,6 @@ async function main() { generate(faviconSvg, '../public/assets/img/favicon.png', {size: 180}), generate(logoSvg, '../public/assets/img/avatar_default.png', {size: 200}), generate(logoSvg, '../public/assets/img/apple-touch-icon.png', {size: 180, bg: true}), - gitea && generate(logoSvg, '../public/assets/img/gitea.svg', {size: 32}), ]); }