# this name is used in report-backend-memory.yml so be careful when change name name: Get backend memory usage on: pull_request: branches: - master - develop paths: - packages/backend/** - packages/misskey-js/** - .github/scripts/backend-memory-report.mjs - .github/workflows/get-backend-memory.yml - .github/workflows/report-backend-memory.yml jobs: get-memory-usage: runs-on: ubuntu-latest permissions: contents: read services: postgres: image: postgres:18 ports: - 54312:5432 env: POSTGRES_DB: test-misskey POSTGRES_HOST_AUTH_METHOD: trust redis: image: redis:8 ports: - 56312:6379 steps: - name: Checkout base uses: actions/checkout@v6.0.2 with: ref: ${{ github.base_ref }} path: base submodules: true - name: Checkout head uses: actions/checkout@v6.0.2 with: ref: refs/pull/${{ github.event.number }}/merge path: head submodules: true - name: Setup pnpm uses: pnpm/action-setup@v6.0.3 with: package_json_file: head/package.json - name: Use Node.js uses: actions/setup-node@v6.4.0 with: node-version-file: 'head/.node-version' cache: 'pnpm' cache-dependency-path: | base/pnpm-lock.yaml head/pnpm-lock.yaml - name: Install base dependencies working-directory: base run: pnpm i --frozen-lockfile - name: Check base pnpm-lock.yaml working-directory: base run: git diff --exit-code pnpm-lock.yaml - name: Configure base working-directory: base run: | cp .github/misskey/test.yml .config/default.yml pnpm compile-config - name: Build base working-directory: base run: pnpm build - name: Install head dependencies working-directory: head run: pnpm i --frozen-lockfile - name: Check head pnpm-lock.yaml working-directory: head run: git diff --exit-code pnpm-lock.yaml - name: Configure head working-directory: head run: | cp .github/misskey/test.yml .config/default.yml pnpm compile-config - name: Build head working-directory: head run: pnpm build - name: Measure base memory usage working-directory: base run: | node --input-type=module <<'EOF' import { createRequire } from 'node:module'; import { join } from 'node:path'; const require = createRequire(join(process.cwd(), 'packages/backend/package.json')); const pg = require('pg'); const Redis = require('ioredis'); const postgres = new pg.Client({ host: '127.0.0.1', port: 54312, database: 'postgres', user: 'postgres', }); await postgres.connect(); await postgres.query('DROP DATABASE IF EXISTS "test-misskey" WITH (FORCE)'); await postgres.query('CREATE DATABASE "test-misskey"'); await postgres.end(); const redis = new Redis({ host: '127.0.0.1', port: 56312 }); await redis.flushall(); redis.disconnect(); EOF pnpm --filter backend migrate node packages/backend/scripts/measure-memory.mjs > ../memory-base.json - name: Measure head memory usage working-directory: head run: | node --input-type=module <<'EOF' import { createRequire } from 'node:module'; import { join } from 'node:path'; const require = createRequire(join(process.cwd(), 'packages/backend/package.json')); const pg = require('pg'); const Redis = require('ioredis'); const postgres = new pg.Client({ host: '127.0.0.1', port: 54312, database: 'postgres', user: 'postgres', }); await postgres.connect(); await postgres.query('DROP DATABASE IF EXISTS "test-misskey" WITH (FORCE)'); await postgres.query('CREATE DATABASE "test-misskey"'); await postgres.end(); const redis = new Redis({ host: '127.0.0.1', port: 56312 }); await redis.flushall(); redis.disconnect(); EOF pnpm --filter backend migrate node packages/backend/scripts/measure-memory.mjs > ../memory-head.json - name: Upload Artifact uses: actions/upload-artifact@v7 with: name: memory-artifact-results path: | memory-base.json memory-head.json save-pr-number: runs-on: ubuntu-latest permissions: {} steps: - name: Save PR number env: PR_NUMBER: ${{ github.event.number }} run: | echo "$PR_NUMBER" > ./pr_number - uses: actions/upload-artifact@v7 with: name: memory-artifact-pr-number path: pr_number