Create creates a new release.
(key string, rel release.Releaser)
| 465 | |
| 466 | // Create creates a new release. |
| 467 | func (s *SQL) Create(key string, rel release.Releaser) error { |
| 468 | rls, err := releaserToV1Release(rel) |
| 469 | if err != nil { |
| 470 | return err |
| 471 | } |
| 472 | |
| 473 | namespace := rls.Namespace |
| 474 | if namespace == "" { |
| 475 | namespace = defaultNamespace |
| 476 | } |
| 477 | s.namespace = namespace |
| 478 | |
| 479 | body, err := encodeRelease(rls) |
| 480 | if err != nil { |
| 481 | s.Logger().Debug("failed to encode release", slog.Any("error", err)) |
| 482 | return err |
| 483 | } |
| 484 | |
| 485 | transaction, err := s.db.Beginx() |
| 486 | if err != nil { |
| 487 | s.Logger().Debug("failed to start SQL transaction", slog.Any("error", err)) |
| 488 | return fmt.Errorf("error beginning transaction: %v", err) |
| 489 | } |
| 490 | |
| 491 | insertQuery, args, err := s.statementBuilder. |
| 492 | Insert(sqlReleaseTableName). |
| 493 | Columns( |
| 494 | sqlReleaseTableKeyColumn, |
| 495 | sqlReleaseTableTypeColumn, |
| 496 | sqlReleaseTableBodyColumn, |
| 497 | sqlReleaseTableNameColumn, |
| 498 | sqlReleaseTableNamespaceColumn, |
| 499 | sqlReleaseTableVersionColumn, |
| 500 | sqlReleaseTableStatusColumn, |
| 501 | sqlReleaseTableOwnerColumn, |
| 502 | sqlReleaseTableCreatedAtColumn, |
| 503 | ). |
| 504 | Values( |
| 505 | key, |
| 506 | sqlReleaseDefaultType, |
| 507 | body, |
| 508 | rls.Name, |
| 509 | namespace, |
| 510 | int(rls.Version), |
| 511 | rls.Info.Status.String(), |
| 512 | sqlReleaseDefaultOwner, |
| 513 | int(time.Now().Unix()), |
| 514 | ).ToSql() |
| 515 | if err != nil { |
| 516 | s.Logger().Debug("failed to build insert query", slog.Any("error", err)) |
| 517 | return err |
| 518 | } |
| 519 | |
| 520 | if _, err := transaction.Exec(insertQuery, args...); err != nil { |
| 521 | defer transaction.Rollback() |
| 522 | |
| 523 | selectQuery, args, buildErr := s.statementBuilder. |
| 524 | Select(sqlReleaseTableKeyColumn). |
nothing calls this directly
no test coverage detected