func createDeployment(db *sql.DB, d *models.Deployment) error { var id int64 var state models.DeploymentState = models.DEPLOYMENT_NEW var createdAt time.Time = time.Now() tx, err := db.Begin() if err != nil { return err } exists, err := activeDeploymentExists(tx, d.TargetName) if err != nil { tx.Rollback() return err } if exists { tx.Rollback() return ErrDeployInProgress } result, err := tx.Exec(deploymentInsertStmt, d.UserId, d.ApplicationName, d.TargetName, d.CommitSha, d.Branch, d.Comment, string(state), createdAt) if err != nil { tx.Rollback() return err } id, err = result.LastInsertId() if err != nil { tx.Rollback() return err } d.Id = int(id) d.State = state d.CreatedAt = createdAt tx.Commit() return nil }