Files
metapi/scripts/dev/docker.workflow.test.ts
T
Cita 9aeec87cfa chore: sweep dependabot updates and align Node 25 (#329)
* chore: sweep dependabot updates

* fix: narrow optional browser Buffer typing

* chore: align repo node pins to v25
2026-03-30 19:14:41 +08:00

38 lines
1.7 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { readFileSync } from 'node:fs';
import { resolve } from 'node:path';
describe('docker workflows', () => {
it('publishes armv7 docker images in ci and release workflows', () => {
const ciWorkflow = readFileSync(resolve(process.cwd(), '.github/workflows/ci.yml'), 'utf8');
const releaseWorkflow = readFileSync(resolve(process.cwd(), '.github/workflows/release.yml'), 'utf8');
expect(ciWorkflow).toContain('arch: armv7');
expect(ciWorkflow).toContain('platform: linux/arm/v7');
expect(ciWorkflow).toContain('"${tag}-armv7"');
expect(releaseWorkflow).toContain('arch: armv7');
expect(releaseWorkflow).toContain('platform: linux/arm/v7');
expect(releaseWorkflow).toContain('"${tag}-armv7"');
});
it('uses an armv7-capable node base image in the Dockerfile', () => {
const dockerfile = readFileSync(resolve(process.cwd(), 'docker/Dockerfile'), 'utf8');
const fromMatches = [...dockerfile.matchAll(/^FROM node:(\d+)-bookworm-slim(?: AS builder)?$/gm)];
expect(fromMatches).toHaveLength(2);
expect(fromMatches[0]?.[1]).toBe(fromMatches[1]?.[1]);
});
it('keeps server docker builds isolated from desktop packaging dependencies', () => {
const dockerfile = readFileSync(resolve(process.cwd(), 'docker/Dockerfile'), 'utf8');
expect(dockerfile).toContain('npm ci --ignore-scripts --no-audit --no-fund');
expect(dockerfile).toContain('npm rebuild esbuild sharp better-sqlite3 --no-audit --no-fund');
expect(dockerfile).not.toContain('npm ci --no-audit --no-fund');
expect(dockerfile).toContain('RUN npm run build:web && npm run build:server');
expect(dockerfile).toContain('npm prune --omit=dev --no-audit --no-fund');
});
});