mirror of
https://github.com/Studio-Saelix/sencho.git
synced 2026-08-16 13:38:33 +00:00
f2b5c68d84
Detect services with build: in the update preview and run compose build --pull plus pull --ignore-buildable when Update is triggered on those stacks, while keeping the existing pull-only path for image-only stacks.
65 lines
1.7 KiB
TypeScript
65 lines
1.7 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import {
|
|
extractBuildServicesFromCompose,
|
|
extractBuildServicesFromRenderedConfig,
|
|
} from '../services/ImageUpdateService';
|
|
|
|
describe('extractBuildServicesFromCompose', () => {
|
|
it('returns service names that declare build', () => {
|
|
const yaml = `
|
|
services:
|
|
web:
|
|
build: .
|
|
api:
|
|
image: nginx:1.25
|
|
worker:
|
|
build:
|
|
context: ./worker
|
|
dockerfile: Dockerfile
|
|
`;
|
|
expect(extractBuildServicesFromCompose(yaml).sort()).toEqual(['web', 'worker']);
|
|
});
|
|
|
|
it('returns empty for image-only stacks', () => {
|
|
const yaml = `
|
|
services:
|
|
web:
|
|
image: nginx:1.25
|
|
`;
|
|
expect(extractBuildServicesFromCompose(yaml)).toEqual([]);
|
|
});
|
|
|
|
it('ignores empty build sections', () => {
|
|
const yaml = `
|
|
services:
|
|
web:
|
|
build: ""
|
|
api:
|
|
build: {}
|
|
`;
|
|
expect(extractBuildServicesFromCompose(yaml)).toEqual([]);
|
|
});
|
|
});
|
|
|
|
describe('extractBuildServicesFromRenderedConfig', () => {
|
|
it('reads build services from a rendered compose json model', () => {
|
|
const rendered = JSON.stringify({
|
|
services: {
|
|
app: { build: { context: '/app' }, image: 'myapp:latest' },
|
|
cache: { image: 'redis:7' },
|
|
},
|
|
});
|
|
expect(extractBuildServicesFromRenderedConfig(rendered)).toEqual(['app']);
|
|
});
|
|
|
|
it('includes override-only build services from merged model', () => {
|
|
const rendered = JSON.stringify({
|
|
services: {
|
|
web: { image: 'nginx:1.25' },
|
|
sidecar: { build: './sidecar' },
|
|
},
|
|
});
|
|
expect(extractBuildServicesFromRenderedConfig(rendered)).toEqual(['sidecar']);
|
|
});
|
|
});
|