Skip to content
10 changes: 7 additions & 3 deletions src/commands/build/handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@ import {
defaultVariantsDirName
} from "../../params.js";
import { BuildCommandOptions, VerbosityOptions } from "./types.js";
import { getVariantOptions } from "./variants.js";
import { getPackagesToBuildProps } from "./variants.js";
import { BuildAndUploadOptions } from "../../tasks/buildAndUpload/types.js";
import path from "path";

export async function buildHandler({
provider: contentProvider,
Expand All @@ -29,6 +30,8 @@ export async function buildHandler({
}: BuildCommandOptions): Promise<ListrContextBuild> {
const skipUpload = skip_upload || skipSave;

const variantsDirPath = path.join(dir, variantsDirName);

const buildOptions: BuildAndUploadOptions = {
dir,
contentProvider,
Expand All @@ -39,11 +42,12 @@ export async function buildHandler({
composeFileName,
requireGitData,
deleteOldPins,
...getVariantOptions({
variantsDirPath,
packagesToBuildProps: getPackagesToBuildProps({
allVariants: Boolean(allVariants),
variantsStr: variants,
rootDir: dir,
variantsDirName,
variantsDirPath,
composeFileName
})
};
Expand Down
30 changes: 11 additions & 19 deletions src/commands/build/variants.ts
Original file line number Diff line number Diff line change
@@ -1,31 +1,26 @@
import chalk from "chalk";
import { getAllVariantsInPath } from "../../files/variants/getAllPackageVariants.js";
import path from "path";
import { BuildVariantsMap } from "../../types.js";
import { buildVariantMap } from "../../tasks/buildAndUpload/buildVariantMap.js";
import { PackageToBuildProps } from "../../types.js";
import { generatePackagesProps } from "../../tasks/buildAndUpload/generatePackagesProps.js";

export function getVariantOptions({
export function getPackagesToBuildProps({
allVariants,
variantsStr,
rootDir,
variantsDirName,
variantsDirPath,
composeFileName
}: {
allVariants: boolean;
variantsStr?: string;
rootDir: string;
variantsDirName: string;
variantsDirPath: string;
composeFileName: string;
}): { variantsMap: BuildVariantsMap; variantsDirPath: string } {
const variantsDirPath = path.join(rootDir, variantsDirName);
}): PackageToBuildProps[] {

const buildVariantMapArgs = { rootDir, variantsDirPath, composeFileName };

if (!allVariants && !variantsStr)
return {
variantsMap: buildVariantMap({ ...buildVariantMapArgs, variants: null }),
variantsDirPath
};
return generatePackagesProps({ ...buildVariantMapArgs, variants: null });

const validVariantNames = getValidVariantNames({
variantsDirPath,
Expand All @@ -43,13 +38,10 @@ export function getVariantOptions({
)}`
);

return {
variantsMap: buildVariantMap({
...buildVariantMapArgs,
variants: validVariantNames
}),
variantsDirPath
};
return generatePackagesProps({
...buildVariantMapArgs,
variants: validVariantNames
});
}

/**
Expand Down
10 changes: 7 additions & 3 deletions src/commands/publish/handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ import { VerbosityOptions } from "../build/types.js";
import { PublishCommandOptions } from "./types.js";
import { publish } from "../../tasks/publish/index.js";
import { parseReleaseType } from "./parseReleaseType.js";
import { getVariantOptions } from "../build/variants.js";
import { getPackagesToBuildProps } from "../build/variants.js";
import path from "path";

/**
* Common handler for CLI and programatic usage
Expand Down Expand Up @@ -60,6 +61,8 @@ export async function publishHandler({

const releaseType = parseReleaseType({ type });

const variantsDirPath = path.join(dir, variantsDirName);

const publishTasks = new Listr(
publish({
releaseType,
Expand All @@ -74,11 +77,12 @@ export async function publishHandler({
developerAddress,
githubRelease,
verbosityOptions,
...getVariantOptions({
variantsDirPath,
packagesToBuildProps: getPackagesToBuildProps({
allVariants: Boolean(allVariants),
variantsStr: variants,
rootDir: dir,
variantsDirName,
variantsDirPath,
composeFileName
})
}),
Expand Down
4 changes: 2 additions & 2 deletions src/params.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import { ManifestFormat } from "./files/manifest/types.js";

export * from "./files/compose/params.js";

export class CliError extends Error {}
export class YargsError extends Error {}
export class CliError extends Error { }
export class YargsError extends Error { }

// Github Actions params

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
import path from "path";
import { parseArchitectures } from "../../utils/parseArchitectures.js";
import {
getComposePath,
readCompose,
getComposePackageImages,
parseComposeUpstreamVersion,
readManifest
} from "../../files/index.js";
import { Compose, Manifest } from "@dappnode/types";
import { defaultComposeFileName } from "../../params.js";
import { BuildVariantsMap, BuildVariantsMapEntry } from "../../types.js";
import { PackageToBuildProps } from "../../types.js";

export function buildVariantMap({
export function generatePackagesProps({
variants,
rootDir,
variantsDirPath,
Expand All @@ -21,62 +20,60 @@ export function buildVariantMap({
rootDir: string;
variantsDirPath: string;
composeFileName?: string;
}): BuildVariantsMap {
if (!variants || variants.length === 0)
return { default: createVariantMapEntry({ rootDir, composeFileName }) };
}): PackageToBuildProps[] {
if (variants === null)
return [createPackagePropsItem({ rootDir, composeFileName, variant: null, variantsDirPath })];

const map: BuildVariantsMap = {};

for (const variant of variants) {
const variantPath = path.join(variantsDirPath, variant);
map[variant] = createVariantMapEntry({
return variants.map((variant) =>
createPackagePropsItem({
rootDir,
composeFileName,
variantPath
});
}

return map;
variant,
variantsDirPath
})
);
}

export function createVariantMapEntry({
function createPackagePropsItem({
rootDir,
composeFileName,
variantPath
variant,
variantsDirPath
}: {
rootDir: string;
composeFileName: string;
variantPath?: string;
}): BuildVariantsMapEntry {
const { manifest, format } = variantPath
? readManifest([{ dir: rootDir }, { dir: variantPath }])
: readManifest([{ dir: rootDir }]);
variant: string | null;
variantsDirPath: string;
}): PackageToBuildProps {
const manifestPaths = [{ dir: rootDir }];
const composePaths = [{ dir: rootDir, composeFileName }];

const { name: dnpName, version } = manifest;
if (variant) {
const variantPath = path.join(variantsDirPath, variant);

const composePaths = [getComposePath({ dir: rootDir, composeFileName })];
manifestPaths.push({ dir: variantPath });
composePaths.push({ dir: variantPath, composeFileName });
}

if (variantPath)
composePaths.push(getComposePath({ dir: variantPath, composeFileName }));
const { manifest, format: manifestFormat } = readManifest(manifestPaths);
const compose = readCompose(composePaths);

const compose = variantPath
? readCompose([
{ dir: rootDir, composeFileName },
{ dir: variantPath, composeFileName }
])
: readCompose([{ dir: rootDir, composeFileName }]);
const { name: dnpName, version } = manifest;

// TODO: Handle upstream object defined case
if (!manifest.upstream)
manifest.upstreamVersion = getUpstreamVersion({ compose, manifest });

return {
variant,

manifest,
manifestFormat: format,
manifestFormat,

compose,

releaseDir: getReleaseDirPath({ rootDir, dnpName, version }),
manifestPaths,
composePaths,

images: getComposePackageImages(compose, manifest),
Expand Down
22 changes: 10 additions & 12 deletions src/tasks/buildAndUpload/getBuildTasks.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import path from "path";
import Listr, { ListrTask } from "listr/index.js";
import { BuildVariantsMap, BuildVariantsMapEntry, ListrContextBuild } from "../../types.js";
import { PackageToBuildProps, ListrContextBuild } from "../../types.js";
import { buildWithBuildx } from "./buildWithBuildx.js";
import { buildWithCompose } from "./buildWithCompose.js";
import { Architecture, defaultArch } from "@dappnode/types";
Expand All @@ -14,22 +14,20 @@ import { getImageFileName } from "../../utils/getImageFileName.js";
* const imageEntry = files.find(file => /\.tar\.xz$/.test(file));
*/
export function getBuildTasks({
variantsMap,
packagesToBuildProps,
buildTimeout,
skipSave,
rootDir
}: {
variantsMap: BuildVariantsMap;
packagesToBuildProps: PackageToBuildProps[];
buildTimeout: number;
skipSave?: boolean;
rootDir: string;
}): ListrTask<ListrContextBuild>[] {
const buildTasks: ListrTask<ListrContextBuild>[] = Object.entries(
variantsMap
).flatMap(([, variantSpecs]) => {
return variantSpecs.architectures.map(architecture =>
const buildTasks: ListrTask<ListrContextBuild>[] = packagesToBuildProps.flatMap((pkgProps) => {
return pkgProps.architectures.map(architecture =>
createBuildTask({
variantSpecs,
pkgProps,
architecture,
buildTimeout,
skipSave,
Expand All @@ -42,19 +40,19 @@ export function getBuildTasks({
}

function createBuildTask({
variantSpecs,
pkgProps,
architecture,
buildTimeout,
skipSave,
rootDir
}: {
variantSpecs: BuildVariantsMapEntry;
pkgProps: PackageToBuildProps;
architecture: Architecture;
buildTimeout: number;
skipSave?: boolean;
rootDir: string;
}): ListrTask {
const { manifest, releaseDir, images, compose } = variantSpecs;
}): ListrTask<ListrContextBuild> {
const { manifest, releaseDir, images, compose } = pkgProps;
const { name, version } = manifest;
const buildFn =
architecture === defaultArch ? buildWithCompose : buildWithBuildx;
Expand Down
8 changes: 4 additions & 4 deletions src/tasks/buildAndUpload/getDeleteOldPinsTask.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import { ListrTask } from "listr/index.js";
import { BuildVariantsMap, ListrContextBuild } from "../../types.js";
import { PackageToBuildProps, ListrContextBuild } from "../../types.js";
import { getGitHead } from "../../utils/git.js";
import { fetchPinsWithBranchToDelete } from "../../pinStrategy/index.js";
import { PinataPinManager } from "../../providers/pinata/pinManager.js";
import { ReleaseUploaderProvider } from "../../releaseUploader/index.js";

export function getDeleteOldPinsTask({
variantsMap,
packagesToBuildProps,
deleteOldPins,
releaseUploaderProvider
}: {
variantsMap: BuildVariantsMap;
packagesToBuildProps: PackageToBuildProps[];
deleteOldPins: boolean;
releaseUploaderProvider: ReleaseUploaderProvider;
}): ListrTask<ListrContextBuild> {
Expand All @@ -25,7 +25,7 @@ export function getDeleteOldPinsTask({
// Unpin items on the same branch but previous (ancestor) commits
const pinata = new PinataPinManager(releaseUploaderProvider);

for (const [, { manifest }] of Object.entries(variantsMap)) {
for (const { manifest } of packagesToBuildProps) {
const pinsToDelete = await fetchPinsWithBranchToDelete(
pinata,
manifest,
Expand Down
Loading