func CreateBuildFromCircleCI(circleci *model.CircleCI) (*model.Build, error) {
	var build model.Build

	err := Transaction(func(tx *gorm.DB) error {
		var err error

		repo, err := CreateRepositoryByOwnerAndName(circleci.Username, circleci.Reponame)
		if err != nil {
			return err
		}

		var commit model.Commit
		err = tx.Where(model.Commit{RepositoryID: repo.ID, Rev: circleci.VCSRevision}).
			Attrs(model.Commit{Branch: circleci.Branch}).
			FirstOrCreate(&commit).
			Error
		if err != nil {
			return err
		}
		commit.Repository = *repo

		err = tx.
			Where(model.Build{CommitID: commit.ID, Service: model.BUILD_SERVICE_CIRCLE_CI}).
			Assign(model.Build{TotalTime: circleci.TotalTime(), Status: circleci.BuildStatus(), ServiceBuildNum: circleci.ServiceBuildNum()}).
			FirstOrInit(&build).
			Error
		if err != nil {
			return err
			return err
		}
		build.Commit = commit

		err = tx.Save(&build).Error
		if err != nil {
			return err
		}

		return nil
	})

	return &build, err
}
func CreateBuildFromWercker(wercker *model.Wercker) (*model.Build, error) {
	var build model.Build

	err := Transaction(func(tx *gorm.DB) error {
		var err error

		repo, err := CreateRepositoryByOwnerAndName(wercker.Application.Owner.Name, wercker.Application.Name)
		if err != nil {
			return err
		}

		var commit model.Commit
		err = tx.Where(model.Commit{RepositoryID: repo.ID, Rev: wercker.CommitHash}).
			Attrs(model.Commit{Branch: wercker.Branch}).
			FirstOrCreate(&commit).
			Error
		if err != nil {
			return err
		}
		commit.Repository = *repo

		err = tx.
			Where(model.Build{CommitID: commit.ID, Service: model.BUILD_SERVICE_WERCKER}).
			Assign(model.Build{TotalTime: wercker.TotalTime(), Status: wercker.BuildStatus(), ServiceBuildNum: wercker.ServiceBuildNum()}).
			FirstOrInit(&build).
			Error
		if err != nil {
			return err
		}
		build.Commit = commit

		err = tx.Save(&build).Error
		if err != nil {
			return err
		}

		return nil
	})

	return &build, err
}