import type { BalenaSDK } from 'balena-sdk';
import type * as Dockerode from 'dockerode';
import type { BuildConfig, Composition, ImageDescriptor } from '@balena/compose/dist/parse';
import type * as MultiBuild from '@balena/compose/dist/multibuild';
import type { Readable } from 'stream';
import type { BuiltImage, ComposeOpts, ComposeProject, TarDirectoryOptions } from './compose-types';
import type { DeviceInfo } from './device/api';
import Logger = require('./logger');
export declare function parseReleaseTagKeysAndValues(releaseTags: string[]): {
    releaseTagKeys: string[];
    releaseTagValues: string[];
};
export declare function applyReleaseTagKeysAndValues(sdk: BalenaSDK, releaseId: number, releaseTagKeys: string[], releaseTagValues: string[]): Promise<void>;
export declare function loadProject(logger: Logger, opts: ComposeOpts, image?: string, imageTag?: string): Promise<ComposeProject>;
export interface Renderer {
    start: () => void;
    end: (buildSummaryByService?: Dictionary<string>) => void;
    streams: Dictionary<NodeJS.ReadWriteStream>;
}
export interface BuildProjectOpts {
    docker: Dockerode;
    logger: Logger;
    projectPath: string;
    projectName: string;
    composition: Composition;
    arch: string;
    deviceType: string;
    emulated: boolean;
    buildOpts: import('./docker').BuildOpts;
    inlineLogs?: boolean;
    convertEol: boolean;
    dockerfilePath?: string;
    multiDockerignore: boolean;
}
export declare function buildProject(opts: BuildProjectOpts): Promise<BuiltImage[]>;
export declare function makeImageName(projectName: string, serviceName: string, tag?: string): string;
export declare function getServiceDirsFromComposition(sourceDir: string, composition?: Composition): Promise<Dictionary<string>>;
export declare function isBuildConfig(image: string | BuildConfig): image is BuildConfig;
export declare function tarDirectory(dir: string, { composition, convertEol, multiDockerignore, preFinalizeCallback, }: TarDirectoryOptions): Promise<import('stream').Readable>;
export declare function checkBuildSecretsRequirements(docker: Dockerode, sourceDir: string): Promise<void>;
export declare function getRegistrySecrets(sdk: BalenaSDK, inputFilename?: string): Promise<MultiBuild.RegistrySecrets>;
export declare function makeBuildTasks(composition: Composition, tarStream: Readable, deviceInfo: DeviceInfo, logger: Logger, projectName: string, releaseHash?: string, preprocessHook?: (dockerfile: string) => string): Promise<MultiBuild.BuildTask[]>;
export interface ProjectValidationResult {
    dockerfilePath: string;
    registrySecrets: MultiBuild.RegistrySecrets;
}
export declare function validateProjectDirectory(sdk: BalenaSDK, opts: {
    dockerfilePath?: string;
    noParentCheck: boolean;
    projectPath: string;
    registrySecretsPath?: string;
}): Promise<ProjectValidationResult>;
export declare function deployProject(docker: Dockerode, sdk: BalenaSDK, logger: Logger, composition: Composition, images: BuiltImage[], appId: number, skipLogUpload: boolean, projectPath: string, isDraft: boolean, imgDescriptors: ImageDescriptor[]): Promise<import('@balena/compose/dist/release/models').ReleaseModel>;
export declare function createSpinner(): () => string;
export declare function createRunLoop(tick: (...args: any[]) => void): {
    onEnd(): void;
    end(): void;
};
export declare const composeCliFlags: {
    emulated: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
    dockerfile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
    nologs: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
    'multi-dockerignore': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
    'noparent-check': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
    'registry-secrets': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
    'noconvert-eol': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
    projectName: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
};
