Release Candidate

Create and promote release candidates

sfp releasecandidate abort

Abort a release candidate, marking it as no longer deployable. Once aborted, the status cannot be changed. Note: Finalized release candidates cannot be aborted.

USAGE
  $ sfp releasecandidate abort -n <value> [--json] [--repository <value>] [-e <value>] [-t <value>] [--sfp-server-url
    <value>] [-r <value>] [--loglevel trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]

FLAGS
  -e, --email=<value>              Email address for authenticated user. Ignored if --application-token is provided. Can
                                   be set via SFP_SERVER_USER env var.
  -n, --releasecandidate=<value>   (required) Release candidate in format 'domain:releaseName' (e.g.,
                                   'core:Sprint_27.01-03-08')
  -r, --reason=<value>             Optional reason for aborting the release candidate
  -t, --application-token=<value>  Application token for CI/CD authentication. Can be set via SFP_SERVER_TOKEN env var
                                   (CLI flags take precedence over env vars).
      --loglevel=<option>          [default: info] logging level for this command invocation
                                   <options: trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL>
      --repository=<value>         The repository identifier. E.g `owner/repo` for GitHub/GitLab or `org/project/repo`
                                   for Azure DevOps
      --sfp-server-url=<value>     URL of the SFP server. Can be set via SFP_SERVER_URL env var or config: sfp
                                   config:set server-url

GLOBAL FLAGS
  --json  Format output as json.

DESCRIPTION
  Abort a release candidate, marking it as no longer deployable. Once aborted, the status cannot be changed. Note:
  Finalized release candidates cannot be aborted.

EXAMPLES
  $ sfp releasecandidate abort -n core:Sprint_27.01-03-08 --repository flxbl-io/sf-core

  $ sfp releasecandidate abort -n core:Sprint_27.01-03-08 --repository flxbl-io/sf-core --reason "Critical bug found"

sfp releasecandidate diff

Compute the package-version diff between two release candidates (added / removed / upgraded / downgraded packages)

USAGE
  $ sfp releasecandidate diff --from <value> --to <value> [--json] [--repository <value>] [-e <value>] [-t <value>]
    [--sfp-server-url <value>] [--loglevel trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]

FLAGS
  -e, --email=<value>              Email address for authenticated user. Ignored if --application-token is provided. Can
                                   be set via SFP_SERVER_USER env var.
  -t, --application-token=<value>  Application token for CI/CD authentication. Can be set via SFP_SERVER_TOKEN env var
                                   (CLI flags take precedence over env vars).
      --from=<value>               (required) Baseline release candidate as domain:releaseName (e.g. what is currently
                                   in staging)
      --loglevel=<option>          [default: info] logging level for this command invocation
                                   <options: trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL>
      --repository=<value>         The repository identifier. E.g `owner/repo` for GitHub/GitLab or `org/project/repo`
                                   for Azure DevOps
      --sfp-server-url=<value>     URL of the SFP server. Can be set via SFP_SERVER_URL env var or config: sfp
                                   config:set server-url
      --to=<value>                 (required) Target release candidate as domain:releaseName (e.g. what is in qa)

GLOBAL FLAGS
  --json  Format output as json.

DESCRIPTION
  Compute the package-version diff between two release candidates (added / removed / upgraded / downgraded packages)

EXAMPLES
  $ sfp releasecandidate diff --from sales:Sprint27.1 --to sales:Sprint27.2 --repository flxbl-io/sf-core --sfp-server-url http://localhost:3029

sfp releasecandidate fetch

Fetch a release candidate from the server and write the release definition to a file

USAGE
  $ sfp releasecandidate fetch -n <value> [--json] [--repository <value>] [-e <value>] [-t <value>] [--sfp-server-url
    <value>] [-o <value>] [--loglevel trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]

FLAGS
  -e, --email=<value>              Email address for authenticated user. Ignored if --application-token is provided. Can
                                   be set via SFP_SERVER_USER env var.
  -n, --releasecandidate=<value>   (required) Release candidate in format 'domain:releaseName' (e.g., 'sales:MyRelease')
  -o, --output=<value>             Path to write the release definition file. If not specified, writes to a temp file
  -t, --application-token=<value>  Application token for CI/CD authentication. Can be set via SFP_SERVER_TOKEN env var
                                   (CLI flags take precedence over env vars).
      --loglevel=<option>          [default: info] logging level for this command invocation
                                   <options: trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL>
      --repository=<value>         The repository identifier. E.g `owner/repo` for GitHub/GitLab or `org/project/repo`
                                   for Azure DevOps
      --sfp-server-url=<value>     URL of the SFP server. Can be set via SFP_SERVER_URL env var or config: sfp
                                   config:set server-url

GLOBAL FLAGS
  --json  Format output as json.

DESCRIPTION
  Fetch a release candidate from the server and write the release definition to a file

EXAMPLES
  $ sfp releasecandidate fetch -n sales:MyRelease --repository myorg/myrepo

  $ sfp releasecandidate fetch -n sales:MyRelease --repository myorg/myrepo -o ./release.yml

sfp releasecandidate finalize

Finalize a release candidate, marking it as fully deployed. Also finalizes any intermediate candidates.

USAGE
  $ sfp releasecandidate finalize -n <value> [--json] [--repository <value>] [-e <value>] [-t <value>] [--sfp-server-url
    <value>] [--loglevel trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]

FLAGS
  -e, --email=<value>              Email address for authenticated user. Ignored if --application-token is provided. Can
                                   be set via SFP_SERVER_USER env var.
  -n, --releasecandidate=<value>   (required) Release candidate in format 'domain:releaseName' (e.g.,
                                   'core:Sprint_27.01-03-08')
  -t, --application-token=<value>  Application token for CI/CD authentication. Can be set via SFP_SERVER_TOKEN env var
                                   (CLI flags take precedence over env vars).
      --loglevel=<option>          [default: info] logging level for this command invocation
                                   <options: trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL>
      --repository=<value>         The repository identifier. E.g `owner/repo` for GitHub/GitLab or `org/project/repo`
                                   for Azure DevOps
      --sfp-server-url=<value>     URL of the SFP server. Can be set via SFP_SERVER_URL env var or config: sfp
                                   config:set server-url

GLOBAL FLAGS
  --json  Format output as json.

DESCRIPTION
  Finalize a release candidate, marking it as fully deployed. Also finalizes any intermediate candidates.

EXAMPLES
  $ sfp releasecandidate finalize -n core:Sprint_27.01-03-08 --repository flxbl-io/sf-core

  $ sfp releasecandidate finalize --releasecandidate core:Sprint_27.01-03-08 --repository flxbl-io/sf-core

sfp releasecandidate generate

Generate a release candidate from the current project and publish to server

USAGE
  $ sfp releasecandidate generate -c <value> -f <value> -n <value> [--json] [--repository <value>] [-e <value>] [-t <value>]
    [--sfp-server-url <value>] [-b <value>] [-m <value>] [-s pending|in_progress|finalized] [--scope <value>] [--output
    <value> --nopublish] [--include-package <value>...] [--loglevel
    trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]

FLAGS
  -b, --branch=<value>              The branch name for the release candidate
  -c, --gitref=<value>              (required) Git reference (commit SHA, tag, or branch) to generate release candidate
                                    from
  -e, --email=<value>               Email address for authenticated user. Ignored if --application-token is provided.
                                    Can be set via SFP_SERVER_USER env var.
  -f, --configfile=<value>          (required) Path to the release config file which determines how the release
                                    definition should be generated
  -m, --metadata=<value>            Additional metadata in json format to include in the release candidate
  -n, --releasename=<value>         (required) Set a release name for the release candidate
  -s, --status=<option>             [default: pending] Initial status for the release candidate (default: pending)
                                    <options: pending|in_progress|finalized>
  -t, --application-token=<value>   Application token for CI/CD authentication. Can be set via SFP_SERVER_TOKEN env var
                                    (CLI flags take precedence over env vars).
      --include-package=<value>...  Include only this package in the generated release candidate. Repeat for multiple
                                    packages
      --loglevel=<option>           [default: info] logging level for this command invocation
                                    <options: trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL>
      --nopublish                   Generate release definition without publishing to server
      --output=<value>              Path to write the generated release definition YAML
      --repository=<value>          The repository identifier. E.g `owner/repo` for GitHub/GitLab or `org/project/repo`
                                    for Azure DevOps
      --scope=<value>               NPM scope for artifacts (e.g., @myorg). Required when using --npm flag
      --sfp-server-url=<value>      URL of the SFP server. Can be set via SFP_SERVER_URL env var or config: sfp
                                    config:set server-url

GLOBAL FLAGS
  --json  Format output as json.

DESCRIPTION
  Generate a release candidate from the current project and publish to server

EXAMPLES
  $ sfp releasecandidate generate -n MyRelease -c HEAD -f config/release.yml --repository myorg/myrepo

  $ sfp releasecandidate generate -n MyRelease -c HEAD -b main -f config/release.yml --repository myorg/myrepo

  $ sfp releasecandidate generate -n MyRelease -c abc123 -f config/release.yml --status pending --repository myorg/myrepo

sfp releasecandidate list

List release candidates from the server with optional filters

USAGE
  $ sfp releasecandidate list -r <value> [--json] [-e <value>] [-t <value>] [--sfp-server-url <value>] [-d <value>] [-b
    <value>] [-s pending|in_progress|finalized|aborted] [--limit <value>] [--offset <value>] [--loglevel
    trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]

FLAGS
  -b, --branch=<value>             Filter by branch
  -d, --domain=<value>             Filter by domain (release config name)
  -e, --email=<value>              Email address for authenticated user. Ignored if --application-token is provided. Can
                                   be set via SFP_SERVER_USER env var.
  -r, --repository=<value>         (required) Filter by repository identifier (e.g., flxbl-io/sf-core)
  -s, --status=<option>            Filter by status (pending, in_progress, finalized)
                                   <options: pending|in_progress|finalized|aborted>
  -t, --application-token=<value>  Application token for CI/CD authentication. Can be set via SFP_SERVER_TOKEN env var
                                   (CLI flags take precedence over env vars).
      --limit=<value>              [default: 50] Maximum number of results to return (default: 50)
      --loglevel=<option>          [default: info] logging level for this command invocation
                                   <options: trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL>
      --offset=<value>             Offset for pagination
      --sfp-server-url=<value>     URL of the SFP server. Can be set via SFP_SERVER_URL env var or config: sfp
                                   config:set server-url

GLOBAL FLAGS
  --json  Format output as json.

DESCRIPTION
  List release candidates from the server with optional filters

EXAMPLES
  $ sfp releasecandidate list --repository flxbl-io/sf-core

  $ sfp releasecandidate list --repository flxbl-io/sf-core --domain core --status pending

  $ sfp releasecandidate list --repository flxbl-io/sf-core --status in_progress --limit 10

sfp releasecandidate status

Get or update the status of a release candidate

USAGE
  $ sfp releasecandidate status -n <value> [--json] [--repository <value>] [-e <value>] [-t <value>] [--sfp-server-url
    <value>] [-s <value>] [--loglevel trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]

FLAGS
  -e, --email=<value>              Email address for authenticated user. Ignored if --application-token is provided. Can
                                   be set via SFP_SERVER_USER env var.
  -n, --releasecandidate=<value>   (required) Release candidate in format 'domain:releaseName' (e.g.,
                                   'core:Sprint_27.01-03-08')
  -s, --set=<value>                Set the status to a new value. Reserved statuses: pending, in_progress, finalized.
                                   Custom statuses (e.g., testing, staging) are also allowed. Note: finalized and
                                   aborted statuses are locked and cannot be changed. Use 'sfp releasecandidate abort'
                                   to abort a release candidate.
  -t, --application-token=<value>  Application token for CI/CD authentication. Can be set via SFP_SERVER_TOKEN env var
                                   (CLI flags take precedence over env vars).
      --loglevel=<option>          [default: info] logging level for this command invocation
                                   <options: trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL>
      --repository=<value>         The repository identifier. E.g `owner/repo` for GitHub/GitLab or `org/project/repo`
                                   for Azure DevOps
      --sfp-server-url=<value>     URL of the SFP server. Can be set via SFP_SERVER_URL env var or config: sfp
                                   config:set server-url

GLOBAL FLAGS
  --json  Format output as json.

DESCRIPTION
  Get or update the status of a release candidate

EXAMPLES
  $ sfp releasecandidate status -n core:Sprint_27.01-03-08 --repository flxbl-io/sf-core

  $ sfp releasecandidate status -n core:Sprint_27.01-03-08 --repository flxbl-io/sf-core --set in_progress

  $ sfp releasecandidate status -n core:Sprint_27.01-03-08 --repository flxbl-io/sf-core --set finalized

  $ sfp releasecandidate status -n core:Sprint_27.01-03-08 --repository flxbl-io/sf-core --set testing

sfp releasecandidate unbundle

Unbundle commits from a release branch by reconstructing it from the previous release candidate's baseline. Resets the release branch to the previous finalized RC's state, then re-applies only the commits that should remain — identical to the repo:patch construction approach.

USAGE
  $ sfp releasecandidate unbundle -n <value> --commits <value> [--json] [--repository <value>] [-e <value>] [-t <value>]
    [--sfp-server-url <value>] [--release-branch <value>] [--baseline-release-candidate <value>] [--source-branch
    <value>] [--domain <value>] [--conflict-strategy ours|theirs] [--label <value>] [--loglevel
    trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]

FLAGS
  -e, --email=<value>                       Email address for authenticated user. Ignored if --application-token is
                                            provided. Can be set via SFP_SERVER_USER env var.
  -n, --releasecandidate=<value>            (required) Release candidate in format 'domain:releaseName' (e.g.,
                                            'core:Sprint_27')
  -t, --application-token=<value>           Application token for CI/CD authentication. Can be set via SFP_SERVER_TOKEN
                                            env var (CLI flags take precedence over env vars).
      --baseline-release-candidate=<value>  Previous release candidate to use as baseline (e.g., 'core:Sprint_26'). The
                                            release branch HEAD of this RC becomes the reconstruction baseline. Requires
                                            --sfp-server-url.
      --commits=<value>                     (required) Comma-separated list of commit SHAs (as they appear on the
                                            release branch) to remove
      --conflict-strategy=<option>          [default: ours] Conflict resolution strategy: 'ours' keeps release branch
                                            state (default), 'theirs' keeps incoming changes
                                            <options: ours|theirs>
      --domain=<value>                      Domain name (e.g., 'billing'). Filters commits to only those touching
                                            packages in this domain. Also used to auto-detect the baseline via the
                                            previous finalized RC for the domain.
      --label=<value>                       Optional label for the bundle being removed (e.g., 'PR #423: Revenue
                                            Category')
      --loglevel=<option>                   [default: info] logging level for this command invocation
                                            <options:
                                            trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL>
      --release-branch=<value>              Name of the release branch to reconstruct. Defaults to
                                            'release/{releaseName}'
      --repository=<value>                  The repository identifier. E.g `owner/repo` for GitHub/GitLab or
                                            `org/project/repo` for Azure DevOps
      --sfp-server-url=<value>              URL of the SFP server. Can be set via SFP_SERVER_URL env var or config: sfp
                                            config:set server-url
      --source-branch=<value>               The source branch the RC was built from. Defaults to the RC's recorded
                                            branch (or main).

GLOBAL FLAGS
  --json  Format output as json.

DESCRIPTION
  Unbundle commits from a release branch by reconstructing it from the previous release candidate's baseline. Resets the
  release branch to the previous finalized RC's state, then re-applies only the commits that should remain — identical
  to the repo:patch construction approach.

EXAMPLES
  $ sfp releasecandidate unbundle -n core:Sprint_27 --commits abc123 --sfp-server-url http://sfp --repository owner/repo

  $ sfp releasecandidate unbundle -n core:Sprint_27 --commits abc123 --baseline-release-candidate core:Sprint_26 --sfp-server-url http://sfp --repository owner/repo

  $ sfp releasecandidate unbundle -n billing:Sprint_27 --commits abc123 --domain billing --sfp-server-url http://sfp --repository owner/repo

sfp releasecandidate unbundle-analyze

Analyze whether removing a set of commits from a release candidate ("unbundling") leaves the release coherent. Reconstructs the proposed branch (no push) and produces a mechanical delta and (optionally) an AI feasibility verdict.

USAGE
  $ sfp releasecandidate unbundle-analyze -n <value> --commits <value> [--json] [--repository <value>] [-e <value>] [-t <value>]
    [--sfp-server-url <value>] [--baseline-release-candidate <value>] [--source-branch <value>] [--domain <value>]
    [--conflict-strategy ours|theirs] [--ai] [--provider <value>] [--loglevel
    trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]

FLAGS
  -e, --email=<value>                       Email address for authenticated user. Ignored if --application-token is
                                            provided. Can be set via SFP_SERVER_USER env var.
  -n, --releasecandidate=<value>            (required) Release candidate to analyze, in domain:releaseName form (e.g.
                                            frameworks:Sprint_27).
  -t, --application-token=<value>           Application token for CI/CD authentication. Can be set via SFP_SERVER_TOKEN
                                            env var (CLI flags take precedence over env vars).
      --[no-]ai                             Run the AI feasibility analysis. Use --no-ai for the mechanical delta only.
      --baseline-release-candidate=<value>  Baseline RC to reconstruct from (domain:releaseName). Auto-detected from the
                                            prior RC when omitted.
      --commits=<value>                     (required) Comma-separated commit SHAs to remove (unbundle) from the release
                                            candidate.
      --conflict-strategy=<option>          [default: ours] How the reconstruction resolves conflicts: ours = keep the
                                            earlier change, theirs = keep the later change.
                                            <options: ours|theirs>
      --domain=<value>                      Domain to scope the unbundle to. Defaults to the domain in the release
                                            candidate ref.
      --loglevel=<option>                   [default: info] logging level for this command invocation
                                            <options:
                                            trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL>
      --provider=<value>                    AI provider id (e.g. anthropic). Defaults to the server default integration,
                                            or env credentials.
      --repository=<value>                  The repository identifier. E.g `owner/repo` for GitHub/GitLab or
                                            `org/project/repo` for Azure DevOps
      --sfp-server-url=<value>              URL of the SFP server. Can be set via SFP_SERVER_URL env var or config: sfp
                                            config:set server-url
      --source-branch=<value>               The source branch the RC was built from. Defaults to the RC's recorded
                                            branch (or main).

GLOBAL FLAGS
  --json  Format output as json.

DESCRIPTION
  Analyze whether removing a set of commits from a release candidate ("unbundling") leaves the release coherent.
  Reconstructs the proposed branch (no push) and produces a mechanical delta and (optionally) an AI feasibility verdict.

EXAMPLES
  $ sfp releasecandidate unbundle-analyze -n frameworks:Sprint_27 --commits abc123 --sfp-server-url http://sfp --repository owner/repo

  $ sfp releasecandidate unbundle-analyze -n frameworks:Sprint_27 --commits abc123,def456 --baseline-release-candidate frameworks:Sprint_26 --repository owner/repo --sfp-server-url http://sfp

  $ sfp releasecandidate unbundle-analyze -n frameworks:Sprint_27 --commits abc123 --no-ai --repository owner/repo --sfp-server-url http://sfp

sfp releasecandidate update

Update packages in a release candidate by excluding packages or overriding their versions. Note: Cannot update release candidates with locked statuses (finalized, aborted).

USAGE
  $ sfp releasecandidate update -n <value> [--json] [--repository <value>] [-e <value>] [-t <value>] [--sfp-server-url
    <value>] [-e <value>] [-o <value>] [--loglevel trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]

FLAGS
  -e, --email=<value>              Email address for authenticated user. Ignored if --application-token is provided. Can
                                   be set via SFP_SERVER_USER env var.
  -e, --exclude=<value>            Comma-separated list of package names to exclude from the release candidate (e.g.,
                                   'pkg-a,pkg-b')
  -n, --releasecandidate=<value>   (required) Release candidate in format 'domain:releaseName' (e.g.,
                                   'core:Sprint_27.01-03-08')
  -o, --override=<value>           Comma-separated list of package version overrides in format 'package=version' (e.g.,
                                   'pkg-a=1.2.3,pkg-b=2.0.0')
  -t, --application-token=<value>  Application token for CI/CD authentication. Can be set via SFP_SERVER_TOKEN env var
                                   (CLI flags take precedence over env vars).
      --loglevel=<option>          [default: info] logging level for this command invocation
                                   <options: trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL>
      --repository=<value>         The repository identifier. E.g `owner/repo` for GitHub/GitLab or `org/project/repo`
                                   for Azure DevOps
      --sfp-server-url=<value>     URL of the SFP server. Can be set via SFP_SERVER_URL env var or config: sfp
                                   config:set server-url

GLOBAL FLAGS
  --json  Format output as json.

DESCRIPTION
  Update packages in a release candidate by excluding packages or overriding their versions. Note: Cannot update release
  candidates with locked statuses (finalized, aborted).

EXAMPLES
  $ sfp releasecandidate update -n core:Sprint_27.01-03-08 --repository flxbl-io/sf-core --exclude pkg-a,pkg-b

  $ sfp releasecandidate update -n core:Sprint_27.01-03-08 --repository flxbl-io/sf-core --override "pkg-a=1.2.3,pkg-b=2.0.0"

  $ sfp releasecandidate update -n core:Sprint_27.01-03-08 --repository flxbl-io/sf-core --exclude pkg-a --override "pkg-b=2.0.0"

On this page