import { Component } from "../component";
import { DependencyType } from "../dependencies";
import { GithubCredentials, GithubWorkflow, GitIdentity, workflows } from "../github";
import { ContainerOptions, JobStep, JobPermissions } from "../github/workflows-model";
import { NodeProject } from "../javascript";
import { GroupRunnerOptions } from "../runner-options";
import { Task } from "../task";
/**
 * Options for `UpgradeDependencies`.
 */
export interface UpgradeDependenciesOptions {
    /**
     * List of package names to exclude during the upgrade.
     *
     * @default - Nothing is excluded.
     */
    readonly exclude?: string[];
    /**
     * List of package names to include during the upgrade.
     *
     * @default - Everything is included.
     */
    readonly include?: string[];
    /**
     * Determines the target version to upgrade dependencies to.
     *
     * @see https://github.com/raineorshine/npm-check-updates#target
     *
     * @default "minor"
     */
    readonly target?: string;
    /**
     * Check peer dependencies of installed packages and filter updates to compatible versions.
     *
     * By default, the upgrade workflow will adhere to version constraints from peer dependencies.
     * Sometimes this is not desirable and can be disabled.
     *
     * @see https://github.com/raineorshine/npm-check-updates#peer
     *
     * @default true
     */
    readonly satisfyPeerDependencies?: boolean;
    /**
     * Include a github workflow for creating PR's that upgrades the
     * required dependencies, either by manual dispatch, or by a schedule.
     *
     * If this is `false`, only a local projen task is created, which can be executed manually to
     * upgrade the dependencies.
     *
     * @default - true for root projects, false for subprojects.
     */
    readonly workflow?: boolean;
    /**
     * Options for the github workflow. Only applies if `workflow` is true.
     *
     * @default - default options.
     */
    readonly workflowOptions?: UpgradeDependenciesWorkflowOptions;
    /**
     * The name of the task that will be created.
     * This will also be the workflow name.
     *
     * @default "upgrade".
     */
    readonly taskName?: string;
    /**
     * Title of the pull request to use (should be all lower-case).
     *
     * @default "upgrade dependencies"
     */
    readonly pullRequestTitle?: string;
    /**
     * The semantic commit type.
     *
     * @default 'chore'
     */
    readonly semanticCommit?: string;
    /**
     * Add Signed-off-by line by the committer at the end of the commit log message.
     *
     * @default true
     */
    readonly signoff?: boolean;
    /**
     * Specify which dependency types the upgrade should operate on.
     *
     * @default - All dependency types.
     */
    readonly types?: DependencyType[];
}
/**
 * Upgrade node project dependencies.
 */
export declare class UpgradeDependencies extends Component {
    /**
     * The workflows that execute the upgrades. One workflow per branch.
     */
    readonly workflows: GithubWorkflow[];
    private readonly options;
    private readonly _project;
    private readonly pullRequestTitle;
    /**
     * Container definitions for the upgrade workflow.
     */
    containerOptions?: ContainerOptions;
    /**
     * The upgrade task.
     */
    readonly upgradeTask: Task;
    /**
     * A task run after the upgrade task.
     */
    readonly postUpgradeTask: Task;
    private readonly gitIdentity;
    private readonly postBuildSteps;
    private readonly permissions;
    private readonly depTypes;
    private readonly upgradeTarget;
    private readonly satisfyPeerDependencies;
    constructor(project: NodeProject, options?: UpgradeDependenciesOptions);
    /**
     * Add steps to execute a successful build.
     * @param steps workflow steps
     */
    addPostBuildSteps(...steps: JobStep[]): void;
    private renderTaskSteps;
    /**
     * Render projen dependencies types to a list of ncu compatible types
     */
    private renderNcuDependencyTypes;
    /**
     * Render a package manager specific command to upgrade all requested dependencies.
     */
    private renderUpgradePackagesCommand;
    private filterDependencies;
    private createWorkflow;
    private createUpgrade;
    private createPr;
}
/**
 * Options for `UpgradeDependencies.workflowOptions`.
 */
export interface UpgradeDependenciesWorkflowOptions {
    /**
     * Schedule to run on.
     *
     * @default UpgradeDependenciesSchedule.DAILY
     */
    readonly schedule?: UpgradeDependenciesSchedule;
    /**
     * Choose a method for authenticating with GitHub for creating the PR.
     *
     * When using the default github token, PR's created by this workflow
     * will not trigger any subsequent workflows (i.e the build workflow), so
     * projen requires API access to be provided through e.g. a personal
     * access token or other method.
     *
     * @see https://github.com/peter-evans/create-pull-request/issues/48
     * @default - personal access token named PROJEN_GITHUB_TOKEN
     */
    readonly projenCredentials?: GithubCredentials;
    /**
     * Labels to apply on the PR.
     *
     * @default - no labels.
     */
    readonly labels?: string[];
    /**
     * Assignees to add on the PR.
     *
     * @default - no assignees
     */
    readonly assignees?: string[];
    /**
     * Job container options.
     *
     * @default - defaults
     */
    readonly container?: workflows.ContainerOptions;
    /**
     * List of branches to create PR's for.
     *
     * @default - All release branches configured for the project.
     */
    readonly branches?: string[];
    /**
     * The git identity to use for commits.
     * @default "github-actions@github.com"
     */
    readonly gitIdentity?: GitIdentity;
    /**
     * Github Runner selection labels
     * @default ["ubuntu-latest"]
     * @description Defines a target Runner by labels
     * @throws {Error} if both `runsOn` and `runsOnGroup` are specified
     */
    readonly runsOn?: string[];
    /**
     * Github Runner Group selection options
     * @description Defines a target Runner Group by name and/or labels
     * @throws {Error} if both `runsOn` and `runsOnGroup` are specified
     */
    readonly runsOnGroup?: GroupRunnerOptions;
    /**
     * Permissions granted to the upgrade job
     * To limit job permissions for `contents`, the desired permissions have to be explicitly set, e.g.: `{ contents: JobPermission.NONE }`
     * @default `{ contents: JobPermission.READ }`
     */
    readonly permissions?: JobPermissions;
}
/**
 * How often to check for new versions and raise pull requests for version upgrades.
 */
export declare class UpgradeDependenciesSchedule {
    readonly cron: string[];
    /**
     * Disables automatic upgrades.
     */
    static readonly NEVER: UpgradeDependenciesSchedule;
    /**
     * At 00:00.
     */
    static readonly DAILY: UpgradeDependenciesSchedule;
    /**
     * At 00:00 on every day-of-week from Monday through Friday.
     */
    static readonly WEEKDAY: UpgradeDependenciesSchedule;
    /**
     * At 00:00 on Monday.
     */
    static readonly WEEKLY: UpgradeDependenciesSchedule;
    /**
     * At 00:00 on day-of-month 1.
     */
    static readonly MONTHLY: UpgradeDependenciesSchedule;
    /**
     * Create a schedule from a raw cron expression.
     */
    static expressions(cron: string[]): UpgradeDependenciesSchedule;
    private constructor();
}
