test(auth): gate local and OIDC authentication release
This commit is contained in:
@@ -127,23 +127,32 @@ func createWithDependencies(ctx context.Context, installation config.Installatio
|
||||
if request.IncludeSecrets && !request.Confirm {
|
||||
return Result{}, ErrConfirmationRequired
|
||||
}
|
||||
lock, err := lifecycle.Acquire(installation)
|
||||
transaction, err := lifecycle.AcquireTransaction(installation)
|
||||
if err != nil {
|
||||
return Result{}, err
|
||||
}
|
||||
defer func() {
|
||||
if releaseErr := lock.Release(); releaseErr != nil {
|
||||
if releaseErr := transaction.Release(); releaseErr != nil {
|
||||
result = Result{}
|
||||
resultErr = errors.Join(resultErr, fmt.Errorf("release backup lifecycle lock: %w", releaseErr))
|
||||
}
|
||||
}()
|
||||
return createWithDependenciesLockHeld(ctx, installation, request, dependencies)
|
||||
return createWithDependenciesTransaction(ctx, transaction, installation, request, dependencies)
|
||||
}
|
||||
|
||||
// createWithDependenciesLockHeld performs backup creation while the caller owns the installation
|
||||
// lifecycle lock. It must never acquire a lifecycle lock itself: Restore uses this primitive to
|
||||
// create its recovery checkpoint inside its already-locked transaction.
|
||||
func createWithDependenciesLockHeld(ctx context.Context, installation config.Installation, request CreateRequest, dependencies dependencies) (result Result, resultErr error) {
|
||||
// createWithDependenciesTransaction performs backup creation only with an active, opaque
|
||||
// installation-bound lifecycle capability. Restore passes the capability it acquired for the
|
||||
// enclosing transaction, so a recovery checkpoint cannot run without the same lifecycle lock.
|
||||
func createWithDependenciesTransaction(ctx context.Context, transaction *lifecycle.Transaction, installation config.Installation, request CreateRequest, dependencies dependencies) (result Result, resultErr error) {
|
||||
if err := transaction.Verify(installation); err != nil {
|
||||
return Result{}, err
|
||||
}
|
||||
if dependencies.runner == nil || dependencies.now == nil || dependencies.homeDir == nil || dependencies.revision == nil || dependencies.sleep == nil || dependencies.reserveOutput == nil || dependencies.publishReserved == nil {
|
||||
return Result{}, errors.New("backup dependencies are incomplete")
|
||||
}
|
||||
if request.IncludeSecrets && !request.Confirm {
|
||||
return Result{}, ErrConfirmationRequired
|
||||
}
|
||||
if err := rejectInlineSecretValues(installation.EnvFile); err != nil {
|
||||
return Result{}, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user