/**
 * Creates GitHub releases via the GitHub REST API, tolerating a release that
 * already exists so that re-running a release is a no-op rather than a
 * failure.
 */
/**
 * Options for creating a GitHub release.
 */
export interface GitHubReleaseOptions {
    /**
     * The tag name of the release (e.g. `v1.2.3`).
     */
    readonly tag: string;
    /**
     * The repository to release to, in `owner/repo` format.
     */
    readonly repository: string;
    /**
     * The token used to authenticate against the GitHub API.
     */
    readonly token: string;
    /**
     * Markdown body of the release (release notes).
     *
     * @default - no release notes
     */
    readonly body?: string;
    /**
     * The commitish the release tag will point to, if the tag does not exist
     * yet. Ignored by GitHub when the tag already exists.
     *
     * @default - the repository's default branch
     */
    readonly target?: string;
    /**
     * Mark the release as a prerelease.
     *
     * @default false
     */
    readonly prerelease?: boolean;
    /**
     * Whether this release should be explicitly marked as the latest release
     * (`true`) or explicitly not marked as the latest release (`false`).
     *
     * Passed to the GitHub API as `make_latest`.
     *
     * @default - not sent; GitHub determines the latest release
     */
    readonly latest?: boolean;
    /**
     * Base URL of the GitHub API.
     *
     * @default 'https://api.github.com'
     */
    readonly apiUrl?: string;
}
/**
 * The outcome of `createGitHubRelease`.
 */
export type GitHubReleaseResult = 'created' | 'already_exists';
/**
 * Creates a GitHub release.
 *
 * Returns `'already_exists'` instead of failing when a release for the tag
 * already exists, so that a re-run of a (partially failed) release workflow is
 * a no-op rather than a failure. The existing release is left untouched. Any
 * other error is thrown.
 */
export declare function createGitHubRelease(options: GitHubReleaseOptions): Promise<GitHubReleaseResult>;
