forked from devcontainers/cli
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpackageCommandImpl.ts
More file actions
57 lines (47 loc) · 2.12 KB
/
Copy pathpackageCommandImpl.ts
File metadata and controls
57 lines (47 loc) · 2.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import path from 'path';
import { Feature } from '../../spec-configuration/containerFeaturesConfiguration';
import { LogLevel } from '../../spec-utils/log';
import { writeLocalFile } from '../../spec-utils/pfs';
import { PackageCommandInput } from '../collectionCommonUtils/package';
import { SourceInformation, prepPackageCommand, packageCollection, packageSingleFeatureOrTemplate, OCICollectionFileName } from '../collectionCommonUtils/packageCommandImpl';
interface DevContainerCollectionMetadata {
sourceInformation: SourceInformation;
features: Feature[];
}
const collectionType = 'feature';
export async function doFeaturesPackageCommand(args: PackageCommandInput): Promise<DevContainerCollectionMetadata | undefined> {
args = await prepPackageCommand(args, collectionType);
const { output, outputDir } = args;
const isSingleFeature = args.isSingle;
// For each feature, package each feature and write to 'outputDir/{f}.tgz'
// Returns an array of feature metadata from each processed feature
let metadataOutput: Feature[] | undefined = [];
if (isSingleFeature) {
// Package individual features
output.write('Packaging single feature...', LogLevel.Info);
metadataOutput = await packageSingleFeature(args);
} else {
output.write('Packaging feature collection...', LogLevel.Info);
metadataOutput = await packageFeatureCollection(args);
}
if (!metadataOutput) {
output.write('Failed to package features', LogLevel.Error);
return undefined;
}
const collection: DevContainerCollectionMetadata = {
sourceInformation: {
source: 'devcontainer-cli',
},
features: metadataOutput,
};
// Write the metadata to a file
const metadataOutputPath = path.join(outputDir, OCICollectionFileName);
await writeLocalFile(metadataOutputPath, JSON.stringify(collection, null, 4));
return collection;
}
export async function packageSingleFeature(args: PackageCommandInput): Promise<Feature[] | undefined> {
return await packageSingleFeatureOrTemplate(args, collectionType);
}
export async function packageFeatureCollection(args: PackageCommandInput): Promise<Feature[] | undefined> {
return await packageCollection(args, collectionType);
}