Merge pull request #604 from crazy-max/inspect-devices
buildx(builder): inspect devices and new gc policy opts support
This commit is contained in:
@@ -19,7 +19,7 @@ import * as core from '@actions/core';
|
||||
import {Buildx} from './buildx';
|
||||
import {Exec} from '../exec';
|
||||
|
||||
import {BuilderInfo, GCPolicy, NodeInfo} from '../types/buildx/builder';
|
||||
import {BuilderInfo, Device, GCPolicy, NodeInfo} from '../types/buildx/builder';
|
||||
|
||||
export interface BuilderOpts {
|
||||
buildx?: Buildx;
|
||||
@@ -89,6 +89,7 @@ export class Builder {
|
||||
let parsingType: string | undefined;
|
||||
let currentNode: NodeInfo = {};
|
||||
let currentGCPolicy: GCPolicy | undefined;
|
||||
let currentDevice: Device | undefined;
|
||||
let currentFile: string | undefined;
|
||||
for (const line of data.trim().split(`\n`)) {
|
||||
const [key, ...rest] = line.split(':');
|
||||
@@ -172,6 +173,10 @@ export class Builder {
|
||||
parsingType = 'label';
|
||||
currentNode.labels = {};
|
||||
break;
|
||||
case lkey == 'devices':
|
||||
parsingType = 'devices';
|
||||
currentNode.devices = currentNode.devices || [];
|
||||
break;
|
||||
case lkey.startsWith('gc policy rule#'):
|
||||
parsingType = 'gcpolicy';
|
||||
if (currentNode.gcPolicy && currentGCPolicy) {
|
||||
@@ -186,6 +191,10 @@ export class Builder {
|
||||
currentNode.files[currentFile] = '';
|
||||
break;
|
||||
default: {
|
||||
if (parsingType && parsingType !== 'devices' && currentNode.devices && currentDevice) {
|
||||
currentNode.devices.push(currentDevice);
|
||||
currentDevice = undefined;
|
||||
}
|
||||
switch (parsingType || '') {
|
||||
case 'features': {
|
||||
currentNode.features = currentNode.features || {};
|
||||
@@ -197,6 +206,42 @@ export class Builder {
|
||||
currentNode.labels[key.trim()] = value;
|
||||
break;
|
||||
}
|
||||
case 'devices': {
|
||||
switch (lkey.trim()) {
|
||||
case 'name': {
|
||||
if (currentNode.devices && currentDevice) {
|
||||
currentNode.devices.push(currentDevice);
|
||||
}
|
||||
currentDevice = {};
|
||||
currentDevice.name = value;
|
||||
break;
|
||||
}
|
||||
case 'on-demand': {
|
||||
if (currentDevice && value) {
|
||||
currentDevice.onDemand = value == 'true';
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'automatically allowed': {
|
||||
if (currentDevice && value) {
|
||||
currentDevice.autoAllow = value == 'true';
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'annotations': {
|
||||
if (currentDevice) {
|
||||
currentDevice.annotations = currentDevice.annotations || {};
|
||||
}
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
if (currentDevice && currentDevice.annotations) {
|
||||
currentDevice.annotations[key.trim()] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'gcpolicy': {
|
||||
currentNode.gcPolicy = currentNode.gcPolicy || [];
|
||||
currentGCPolicy = currentGCPolicy || {};
|
||||
@@ -219,6 +264,18 @@ export class Builder {
|
||||
currentGCPolicy.keepBytes = value;
|
||||
break;
|
||||
}
|
||||
case 'reserved space': {
|
||||
currentGCPolicy.reservedSpace = value;
|
||||
break;
|
||||
}
|
||||
case 'max used space': {
|
||||
currentGCPolicy.maxUsedSpace = value;
|
||||
break;
|
||||
}
|
||||
case 'min free space': {
|
||||
currentGCPolicy.minFreeSpace = value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -235,6 +292,9 @@ export class Builder {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (currentDevice && currentNode.devices) {
|
||||
currentNode.devices.push(currentDevice);
|
||||
}
|
||||
if (currentGCPolicy && currentNode.gcPolicy) {
|
||||
currentNode.gcPolicy.push(currentGCPolicy);
|
||||
}
|
||||
|
||||
@@ -34,13 +34,24 @@ export interface NodeInfo extends Node {
|
||||
buildkit?: string;
|
||||
features?: Record<string, boolean>;
|
||||
labels?: Record<string, string>;
|
||||
devices?: Array<Device>;
|
||||
gcPolicy?: Array<GCPolicy>;
|
||||
files?: Record<string, string>;
|
||||
}
|
||||
|
||||
export interface Device {
|
||||
name?: string;
|
||||
annotations?: Record<string, string>;
|
||||
autoAllow?: boolean;
|
||||
onDemand?: boolean;
|
||||
}
|
||||
|
||||
export interface GCPolicy {
|
||||
all?: boolean;
|
||||
filter?: string[];
|
||||
keepDuration?: string;
|
||||
keepBytes?: string;
|
||||
keepBytes?: string; // deprecated, use reservedSpace instead
|
||||
reservedSpace?: string;
|
||||
maxUsedSpace?: string;
|
||||
minFreeSpace?: string;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user