Skip to content

Commit

Permalink
Move from variant map to array (rebased) (#443)
Browse files Browse the repository at this point in the history
* Move from variant map to array

* Use merge to add build results to publish context

* Remove unnecessary ctx initialization

* Remove unused PackageToPublishProps

* Replace variantsStr by commaSeparatedVariants
  • Loading branch information
dappnodedev authored Jul 24, 2024
1 parent e31b738 commit acb2a0a
Show file tree
Hide file tree
Showing 24 changed files with 215 additions and 243 deletions.
12 changes: 8 additions & 4 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,
commaSeparatedVariants: variants,
rootDir: dir,
variantsDirName,
variantsDirPath,
composeFileName
})
};
Expand Down
40 changes: 16 additions & 24 deletions src/commands/build/variants.ts
Original file line number Diff line number Diff line change
@@ -1,35 +1,30 @@
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,
commaSeparatedVariants,
rootDir,
variantsDirName,
variantsDirPath,
composeFileName
}: {
allVariants: boolean;
variantsStr?: string;
commaSeparatedVariants?: 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
};
if (!allVariants && !commaSeparatedVariants)
return generatePackagesProps({ ...buildVariantMapArgs, variants: null });

const validVariantNames = getValidVariantNames({
variantsDirPath,
variants: variantsStr
variants: commaSeparatedVariants
});

if (validVariantNames.length === 0)
Expand All @@ -39,17 +34,14 @@ export function getVariantOptions({

console.log(
`${chalk.dim(
`Building package from template for variant(s) ${variantsStr}...`
`Building package from template for variant(s) ${commaSeparatedVariants}...`
)}`
);

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

/**
Expand Down
16 changes: 9 additions & 7 deletions src/commands/publish/handler.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import Listr from "listr";
import path from "path";
import {
defaultComposeFileName,
defaultDir,
Expand All @@ -9,7 +10,7 @@ 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";

/**
* Common handler for CLI and programatic usage
Expand Down Expand Up @@ -37,7 +38,6 @@ export async function publishHandler({
}: PublishCommandOptions): Promise<ListrContextPublish> {
let ethProvider = provider || eth_provider;
let contentProvider = provider || content_provider;
const isMultiVariant = Boolean(allVariants) || Boolean(variants);

const isCi = process.env.CI;

Expand All @@ -61,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 @@ -75,14 +77,14 @@ export async function publishHandler({
developerAddress,
githubRelease,
verbosityOptions,
...getVariantOptions({
variantsDirPath,
packagesToBuildProps: getPackagesToBuildProps({
allVariants: Boolean(allVariants),
variantsStr: variants,
commaSeparatedVariants: variants,
rootDir: dir,
variantsDirName,
variantsDirPath,
composeFileName
}),
isMultiVariant
})
}),
verbosityOptions
);
Expand Down
1 change: 0 additions & 1 deletion src/params.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ export const branchNameRoot = "dappnodebot/bump-upstream/";

export const defaultDir = "./";
export const defaultVariantsDirName = "package_variants";
export const singleVariantName = "single-variant";
// This is the default name of the environment variable that will be used to select each of the variants
export const defaultVariantsEnvName = "NETWORK";
export const defaultVariantsEnvValues = ["mainnet", "testnet"];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ import {
readManifest
} from "../../files/index.js";
import { Compose, Manifest } from "@dappnode/types";
import { defaultComposeFileName, singleVariantName } from "../../params.js";
import { BuildVariantsMap, BuildVariantsMapEntry } from "../../types.js";
import { defaultComposeFileName } from "../../params.js";
import { PackageToBuildProps } from "../../types.js";

export function buildVariantMap({
export function generatePackagesProps({
variants,
rootDir,
variantsDirPath,
Expand All @@ -20,37 +20,37 @@ export function buildVariantMap({
rootDir: string;
variantsDirPath: string;
composeFileName?: string;
}): BuildVariantsMap {
if (!variants || variants.length === 0)
return { [singleVariantName]: 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 {
variant: string | null;
variantsDirPath: string;
}): PackageToBuildProps {
const manifestPaths = [{ dir: rootDir }];
const composePaths = [{ dir: rootDir, composeFileName }];

if (variantPath) {
if (variant) {
const variantPath = path.join(variantsDirPath, variant);

manifestPaths.push({ dir: variantPath });
composePaths.push({ dir: variantPath, composeFileName });
}
Expand All @@ -65,6 +65,8 @@ export function createVariantMapEntry({
manifest.upstreamVersion = getUpstreamVersion({ compose, manifest });

return {
variant,

manifest,
manifestFormat,

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 @@ -15,22 +15,20 @@ import { getOsArchitecture } from "../../utils/getArchitecture.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 @@ -43,19 +41,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 === getOsArchitecture() ? 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

0 comments on commit acb2a0a

Please sign in to comment.