mirror of
https://github.com/thegeeklab/wp-s3-action.git
synced 2024-11-22 01:00:40 +00:00
Initial support for CloudFront
This commit is contained in:
parent
f04be6f847
commit
a64c25d742
31
aws.go
31
aws.go
@ -7,20 +7,23 @@ import (
|
|||||||
"mime"
|
"mime"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||||
"github.com/aws/aws-sdk-go/aws/session"
|
"github.com/aws/aws-sdk-go/aws/session"
|
||||||
|
"github.com/aws/aws-sdk-go/service/cloudFront"
|
||||||
"github.com/aws/aws-sdk-go/service/s3"
|
"github.com/aws/aws-sdk-go/service/s3"
|
||||||
"github.com/ryanuber/go-glob"
|
"github.com/ryanuber/go-glob"
|
||||||
)
|
)
|
||||||
|
|
||||||
type AWS struct {
|
type AWS struct {
|
||||||
client *s3.S3
|
client *s3.S3
|
||||||
remote []string
|
cfClient *cloudfront.CloudFront
|
||||||
local []string
|
remote []string
|
||||||
vargs PluginArgs
|
local []string
|
||||||
|
vargs PluginArgs
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAWS(vargs PluginArgs) AWS {
|
func NewAWS(vargs PluginArgs) AWS {
|
||||||
@ -29,10 +32,11 @@ func NewAWS(vargs PluginArgs) AWS {
|
|||||||
Region: aws.String(vargs.Region),
|
Region: aws.String(vargs.Region),
|
||||||
})
|
})
|
||||||
c := s3.New(sess)
|
c := s3.New(sess)
|
||||||
|
cf := cloudfront.New(sess)
|
||||||
r := make([]string, 1, 1)
|
r := make([]string, 1, 1)
|
||||||
l := make([]string, 1, 1)
|
l := make([]string, 1, 1)
|
||||||
|
|
||||||
return AWS{c, r, l, vargs}
|
return AWS{c, cf, r, l, vargs}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *AWS) Upload(local, remote string) error {
|
func (a *AWS) Upload(local, remote string) error {
|
||||||
@ -270,3 +274,20 @@ func (a *AWS) List(path string) ([]string, error) {
|
|||||||
|
|
||||||
return remote, nil
|
return remote, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *AWS) Invalidate(invalidatePath string) error {
|
||||||
|
debug("Invalidating \"%s\"", invalidatePath)
|
||||||
|
_, err := a.cfClient.CreateInvalidation(&cloudfront.CreateInvalidationInput{
|
||||||
|
DistributionId: aws.String(a.vargs.CloudFrontDistribution),
|
||||||
|
InvalidationBatch: &cloudfront.InvalidationBatch{
|
||||||
|
CallerReference: aws.String(time.Now().Format(time.RFC3339Nano)),
|
||||||
|
Paths: &cloudfront.Paths{
|
||||||
|
Quantity: aws.Int64(1),
|
||||||
|
Items: []*string{
|
||||||
|
aws.String(invalidatePath),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
10
main.go
10
main.go
@ -120,6 +120,14 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(vargs.CloudFrontDistribution) > 0 {
|
||||||
|
jobs = append(jobs, job{
|
||||||
|
local: "",
|
||||||
|
remote: filepath.Join("/", vargs.Target, "*"),
|
||||||
|
action: "invalidateCloudFront",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
jobChan := make(chan struct{}, maxConcurrent)
|
jobChan := make(chan struct{}, maxConcurrent)
|
||||||
results := make(chan *result, len(jobs))
|
results := make(chan *result, len(jobs))
|
||||||
|
|
||||||
@ -133,6 +141,8 @@ func main() {
|
|||||||
err = client.Redirect(j.local, j.remote)
|
err = client.Redirect(j.local, j.remote)
|
||||||
} else if j.action == "delete" && vargs.Delete {
|
} else if j.action == "delete" && vargs.Delete {
|
||||||
err = client.Delete(j.remote)
|
err = client.Delete(j.remote)
|
||||||
|
} else if j.action == "invalidateCloudFront" {
|
||||||
|
client.Invalidate(j.remote)
|
||||||
} else {
|
} else {
|
||||||
err = nil
|
err = nil
|
||||||
}
|
}
|
||||||
|
23
types.go
23
types.go
@ -3,17 +3,18 @@ package main
|
|||||||
import "encoding/json"
|
import "encoding/json"
|
||||||
|
|
||||||
type PluginArgs struct {
|
type PluginArgs struct {
|
||||||
Key string `json:"access_key"`
|
Key string `json:"access_key"`
|
||||||
Secret string `json:"secret_key"`
|
Secret string `json:"secret_key"`
|
||||||
Bucket string `json:"bucket"`
|
Bucket string `json:"bucket"`
|
||||||
Region string `json:"region"`
|
Region string `json:"region"`
|
||||||
Source string `json:"source"`
|
Source string `json:"source"`
|
||||||
Target string `json:"target"`
|
Target string `json:"target"`
|
||||||
Delete bool `json:"delete"`
|
Delete bool `json:"delete"`
|
||||||
Access StringMap `json:"acl"`
|
Access StringMap `json:"acl"`
|
||||||
ContentType StringMap `json:"content_type"`
|
ContentType StringMap `json:"content_type"`
|
||||||
Metadata DeepStringMap `json:"metadata"`
|
Metadata DeepStringMap `json:"metadata"`
|
||||||
Redirects map[string]string `json:"redirects"`
|
Redirects map[string]string `json:"redirects"`
|
||||||
|
CloudFrontDistribution string `json:"cloudfront_distribution_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type DeepStringMap struct {
|
type DeepStringMap struct {
|
||||||
|
Loading…
Reference in New Issue
Block a user