mirror of
https://github.com/Studio-Saelix/sencho.git
synced 2026-09-01 05:07:59 +00:00
feat: add build-aware compose stack updates (#1561)
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.
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
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']);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user