import { RemoteRepoRef } from "@atomist/automation-client/lib/operations/common/RepoId";
import { GitProject } from "@atomist/automation-client/lib/project/git/GitProject";
import { ExecuteGoalResult } from "../../api/goal/ExecuteGoalResult";
import { Goal } from "../../api/goal/Goal";
import { ExecuteGoal } from "../../api/goal/GoalInvocation";
import { FulfillableGoal, FulfillableGoalDetails, ImplementationRegistration } from "../../api/goal/GoalWithFulfillment";
import { SdmGoalEvent } from "../../api/goal/SdmGoalEvent";
import { ProgressLog } from "../../spi/log/ProgressLog";
/**
 * Arguments passed to a [[VersionIncrementer]].
 */
export interface VersionIncrementerArguments {
    /**
     * The release semantic version for the goal set triggering this
     * increment request.  If the version in the project is not equal
     * to the provided current version, it is up to function whether
     * to increment the version or not.  If the function makes
     * changes, they will be committed and pushed.  If it does not
     * make changes, nothing will be committed.
     */
    currentVersion: string;
    /** SDM event triggering this goal. */
    goalEvent: SdmGoalEvent;
    /** Remote repository reference. */
    id: RemoteRepoRef;
    /** The part of the semantic version to increment. */
    increment: "major" | "minor" | "patch";
    /** Progress log to write status updates to. */
    log: ProgressLog;
    /** Project to increment version in. */
    project: GitProject;
}
/**
 * A function capable of incrementing the specified semantic version
 * element in the project that is used by the fulfillment goal
 * executor.
 */
export declare type VersionIncrementer = (args: VersionIncrementerArguments) => Promise<ExecuteGoalResult>;
/**
 * [[IncrementVersion]] fulfillment options.
 */
export interface IncrementVersionRegistration extends Partial<ImplementationRegistration> {
    /** Function capable of incrementing version. */
    versionIncrementer: VersionIncrementer;
}
/**
 * Class that abstracts incrementing project version after a release.
 */
export declare class IncrementVersion extends FulfillableGoal {
    constructor(goalDetailsOrUniqueName?: FulfillableGoalDetails | string, ...dependsOn: Goal[]);
    /**
     * Add fulfillment to this goal.
     */
    with(registration: IncrementVersionRegistration): this;
}
/**
 * Return goal executor that increments version using the provided
 * increment function and then commits & pushes the changes.
 *
 * Since this function changes and commits to the project at a time
 * when several other goals may be doing the same, it first checks out
 * the branch associated with the goal invocation and pulls to get the
 * latest head from the remote.
 */
export declare function executeIncrementVersion(versionIncrementer: VersionIncrementer): ExecuteGoal;
//# sourceMappingURL=increment.d.ts.map