diff --git a/package.json b/package.json index 6136ef39df..ea8e9f0e63 100644 --- a/package.json +++ b/package.json @@ -48,8 +48,8 @@ "lodash": "4.17.21" }, "dependencies": { - "execa": "8.0.1", "cssnano": "6.0.3", + "execa": "8.0.1", "js-yaml": "4.1.0", "postcss": "8.4.33", "terser": "5.27.0", @@ -61,8 +61,10 @@ "cross-env": "7.0.3", "cypress": "13.6.3", "eslint": "8.56.0", + "fast-glob": "3.3.2", + "ncp": "2.0.0", "start-server-and-test": "2.0.3", - "ncp": "2.0.0" + "tar": "6.2.0" }, "optionalDependencies": { "@tensorflow/tfjs-core": "4.4.0" diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts index 8e1a89d55f..a5094e6a86 100644 --- a/packages/backend/src/server/web/ClientServerService.ts +++ b/packages/backend/src/server/web/ClientServerService.ts @@ -51,6 +51,7 @@ const clientAssets = `${_dirname}/../../../../frontend/assets/`; const assets = `${_dirname}/../../../../../built/_frontend_dist_/`; const swAssets = `${_dirname}/../../../../../built/_sw_dist_/`; const viteOut = `${_dirname}/../../../../../built/_vite_/`; +const tarball = `${_dirname}/../../../../../built/tarball/`; @Injectable() export class ClientServerService { @@ -291,6 +292,13 @@ export class ClientServerService { decorateReply: false, }); + fastify.register(fastifyStatic, { + root: tarball, + prefix: '/tarball/', + immutable: true, + decorateReply: false, + }); + fastify.get('/favicon.ico', async (request, reply) => { return reply.sendFile('/favicon.ico', staticAssets); }); diff --git a/packages/frontend/src/pages/about.vue b/packages/frontend/src/pages/about.vue index 69cb6ef647..8e5fcda283 100644 --- a/packages/frontend/src/pages/about.vue +++ b/packages/frontend/src/pages/about.vue @@ -86,6 +86,7 @@ SPDX-License-Identifier: AGPL-3.0-only nodeinfo robots.txt manifest.json + source code diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 640713067f..d3e0b2b913 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,12 +50,18 @@ importers: eslint: specifier: 8.56.0 version: 8.56.0 + fast-glob: + specifier: 3.3.2 + version: 3.3.2 ncp: specifier: 2.0.0 version: 2.0.0 start-server-and-test: specifier: 2.0.3 version: 2.0.3 + tar: + specifier: 6.2.0 + version: 6.2.0 packages/backend: dependencies: @@ -15456,7 +15462,6 @@ packages: /minipass@5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} - dev: false /minipass@7.0.4: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} @@ -19095,6 +19100,18 @@ packages: mkdirp: 1.0.4 yallist: 4.0.0 + /tar@6.2.0: + resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + engines: {node: '>=10'} + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + dev: true + /taskkill@5.0.0: resolution: {integrity: sha512-+HRtZ40Vc+6YfCDWCeAsixwxJgMbPY4HHuTgzPYH3JXvqHWUlsCfy+ylXlAKhFNcuLp4xVeWeFBUhDk+7KYUvQ==} engines: {node: '>=14.16'} diff --git a/scripts/tarball.mjs b/scripts/tarball.mjs new file mode 100644 index 0000000000..2652a182f5 --- /dev/null +++ b/scripts/tarball.mjs @@ -0,0 +1,42 @@ +import { createWriteStream } from 'node:fs'; +import { mkdir } from 'node:fs/promises'; +import { resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import glob from 'fast-glob'; +import Pack from 'tar/lib/pack.js'; +import meta from '../package.json' assert { type: "json" }; + +const cwd = fileURLToPath(new URL('..', import.meta.url)); +const mkdirPromise = mkdir(resolve(cwd, 'built', 'tarball'), { recursive: true }); +const patterns = [ + '{assets,fluent-emojis,locales,misskey-assets}/**/*', + 'packages/.config/example.yml', + 'packages/{backend,frontend,misskey-bubble-game,misskey-js,misskey-js/generator,misskey-reversi,sw}/{src/**/*,.swcrc,*}', + 'packages/backend/{assets,migration,nsfw-model}/**/*', + 'packages/frontend/{.storybook,@types,assets,lib,public}/**/*', + '!packages/frontend/.storybook/{locale.ts,themes.ts,*.js}', + '!packages/misskey-js/CONTRIBUTING.md', + 'packages/meta.json', + 'scripts/{changelog-checker/{src/**/*,*},*}', + '.node-version', + '.npmrc', + 'CHANGELOD.md', + 'COPYING', + 'LICENSE', + 'README.md', + 'SECURITY.md', + 'package.json', + 'pnpm-lock.yaml', + 'pnpm-workspace.yaml', +]; +const pack = new Pack({ cwd, gzip: true }); + +for await (const entry of glob.stream(patterns)) { + pack.add(entry); +} + +pack.end(); + +await mkdirPromise; + +pack.pipe(createWriteStream(resolve(cwd, 'built', 'tarball', `misskey-${meta.version}.tar.gz`)));