// BuildSave creates or updates a build item in DynamoDB. It takes an optional // bucket argument, which if set indicates to PUT Log data into S3 func (p *AWSProvider) BuildSave(b *structs.Build) error { a, err := p.AppGet(b.App) if err != nil { return err } if b.Id == "" { return fmt.Errorf("Id can not be blank") } if b.Started.IsZero() { b.Started = time.Now() } req := &dynamodb.PutItemInput{ Item: map[string]*dynamodb.AttributeValue{ "id": &dynamodb.AttributeValue{S: aws.String(b.Id)}, "app": &dynamodb.AttributeValue{S: aws.String(b.App)}, "status": &dynamodb.AttributeValue{S: aws.String(b.Status)}, "created": &dynamodb.AttributeValue{S: aws.String(b.Started.Format(SortableTime))}, }, TableName: aws.String(buildsTable(b.App)), } if b.Description != "" { req.Item["description"] = &dynamodb.AttributeValue{S: aws.String(b.Description)} } if b.Manifest != "" { req.Item["manifest"] = &dynamodb.AttributeValue{S: aws.String(b.Manifest)} } if b.Release != "" { req.Item["release"] = &dynamodb.AttributeValue{S: aws.String(b.Release)} } if !b.Ended.IsZero() { req.Item["ended"] = &dynamodb.AttributeValue{S: aws.String(b.Ended.Format(SortableTime))} } if b.Logs != "" { _, err := p.s3().PutObject(&s3.PutObjectInput{ Body: bytes.NewReader([]byte(b.Logs)), Bucket: aws.String(a.Outputs["Settings"]), ContentLength: aws.Int64(int64(len(b.Logs))), Key: aws.String(fmt.Sprintf("builds/%s.log", b.Id)), }) if err != nil { return err } } _, err = p.dynamodb().PutItem(req) return err }
// BuildSave creates or updates a build item in DynamoDB. It takes an optional // bucket argument, which if set indicates to PUT Log data into S3 func (p *AWSProvider) BuildSave(b *structs.Build) error { _, err := p.AppGet(b.App) if err != nil { return err } if b.Id == "" { return fmt.Errorf("Id can not be blank") } if b.Started.IsZero() { b.Started = time.Now() } if p.IsTest() { b.Started = time.Unix(1473028693, 0).UTC() b.Ended = time.Unix(1473028892, 0).UTC() } req := &dynamodb.PutItemInput{ Item: map[string]*dynamodb.AttributeValue{ "id": {S: aws.String(b.Id)}, "app": {S: aws.String(b.App)}, "status": {S: aws.String(b.Status)}, "created": {S: aws.String(b.Started.Format(sortableTime))}, }, TableName: aws.String(p.DynamoBuilds), } if b.Description != "" { req.Item["description"] = &dynamodb.AttributeValue{S: aws.String(b.Description)} } if b.Manifest != "" { req.Item["manifest"] = &dynamodb.AttributeValue{S: aws.String(b.Manifest)} } if b.Logs != "" { req.Item["logs"] = &dynamodb.AttributeValue{S: aws.String(b.Logs)} } if b.Reason != "" { req.Item["reason"] = &dynamodb.AttributeValue{S: aws.String(b.Reason)} } if b.Release != "" { req.Item["release"] = &dynamodb.AttributeValue{S: aws.String(b.Release)} } if !b.Ended.IsZero() { req.Item["ended"] = &dynamodb.AttributeValue{S: aws.String(b.Ended.Format(sortableTime))} } if len(b.Tags) > 0 { tags, err := json.Marshal(b.Tags) if err != nil { return err } req.Item["tags"] = &dynamodb.AttributeValue{B: tags} } _, err = p.dynamodb().PutItem(req) return err }