Skip to content

Commit

Permalink
Merge 25aeccf into 1ccd144
Browse files Browse the repository at this point in the history
  • Loading branch information
Toshinori Sugita committed Oct 14, 2018
2 parents 1ccd144 + 25aeccf commit c244b4b
Show file tree
Hide file tree
Showing 12 changed files with 283 additions and 1 deletion.
5 changes: 5 additions & 0 deletions docker-compose.yml
Expand Up @@ -81,6 +81,11 @@ services:
volumes:
- ./tmp/serverless-integration-test-aws-go-dep:/app
- ./tmp/serverless-integration-test-aws-go-dep:/go/src/app
aws-go-mod:
image: golang:1.11
volumes:
- ./tmp/serverless-integration-test-aws-go-mod:/app
- ./tmp/serverless-integration-test-aws-go-mod:/go/src/app
aws-nodejs-typescript:
image: node:6.10.3
volumes:
Expand Down
3 changes: 3 additions & 0 deletions docs/providers/aws/cli-reference/create.md
Expand Up @@ -65,6 +65,9 @@ Most commonly used templates:
- aws-scala-sbt
- aws-csharp
- aws-fsharp
- aws-go
- aws-go-dep
- aws-go-mod
- plugin

## Examples
Expand Down
1 change: 1 addition & 0 deletions lib/plugins/create/create.js
Expand Up @@ -34,6 +34,7 @@ const validTemplates = [
'aws-fsharp',
'aws-go',
'aws-go-dep',
'aws-go-mod',
'azure-nodejs',
'cloudflare-workers',
'cloudflare-workers-enterprise',
Expand Down
17 changes: 17 additions & 0 deletions lib/plugins/create/create.test.js
Expand Up @@ -900,5 +900,22 @@ describe('Create', () => {
expect(dirContent).to.include('.gitignore');
});
});

it('should generate scaffolding for "aws-go-mod" template', () => {
process.chdir(tmpDir);
create.options.template = 'aws-go-mod';

return create.create().then(() => {
const dirContent = walkDirSync(tmpDir)
.map(elem => elem.replace(path.join(tmpDir, path.sep), ''));

expect(dirContent).to.include('serverless.yml');
expect(dirContent).to.include(path.join('hello', 'main.go'));
expect(dirContent).to.include(path.join('world', 'main.go'));
expect(dirContent).to.include('gomod.sh');
expect(dirContent).to.include('Makefile');
expect(dirContent).to.include('.gitignore');
});
});
});
});
16 changes: 16 additions & 0 deletions lib/plugins/create/templates/aws-go-mod/Makefile
@@ -0,0 +1,16 @@
.PHONY: build clean deploy gomodgen

build: gomodgen
export GO111MODULE=on
env GOOS=linux go build -ldflags="-s -w" -o bin/hello hello/main.go
env GOOS=linux go build -ldflags="-s -w" -o bin/world world/main.go

clean:
rm -rf ./bin ./vendor Gopkg.lock

deploy: clean build
sls deploy --verbose

gomodgen:
chmod u+x gomod.sh
./gomod.sh
21 changes: 21 additions & 0 deletions lib/plugins/create/templates/aws-go-mod/gitignore
@@ -0,0 +1,21 @@
# Serverless directories
.serverless

# golang output binary directory
bin

# golang vendor (dependencies) directory
vendor

# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib

# Test binary, build with `go test -c`
*.test

# Output of the go coverage tool, specifically when used with LiteIDE
*.out
15 changes: 15 additions & 0 deletions lib/plugins/create/templates/aws-go-mod/gomod.sh
@@ -0,0 +1,15 @@
#!/bin/bash
set -eu

touch go.mod

PROJECT_NAME=$(basename $(pwd | xargs dirname))
CURRENT_DIR=$(basename $(pwd))

CONTENT=$(cat <<-EOD
module github.com/${PROJECT_NAME}/${CURRENT_DIR}
require github.com/aws/aws-lambda-go v1.6.0
EOD)
echo "$CONTENT" > go.mod
45 changes: 45 additions & 0 deletions lib/plugins/create/templates/aws-go-mod/hello/main.go
@@ -0,0 +1,45 @@
package main

import (
"bytes"
"context"
"encoding/json"

"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)

// Response is of type APIGatewayProxyResponse since we're leveraging the
// AWS Lambda Proxy Request functionality (default behavior)
//
// https://serverless.com/framework/docs/providers/aws/events/apigateway/#lambda-proxy-integration
type Response events.APIGatewayProxyResponse

// Handler is our lambda handler invoked by the `lambda.Start` function call
func Handler(ctx context.Context) (Response, error) {
var buf bytes.Buffer

body, err := json.Marshal(map[string]interface{}{
"message": "Go Serverless v1.0! Your function executed successfully!",
})
if err != nil {
return Response{StatusCode: 404}, err
}
json.HTMLEscape(&buf, body)

resp := Response{
StatusCode: 200,
IsBase64Encoded: false,
Body: buf.String(),
Headers: map[string]string{
"Content-Type": "application/json",
"X-MyCompany-Func-Reply": "hello-handler",
},
}

return resp, nil
}

func main() {
lambda.Start(Handler)
}
113 changes: 113 additions & 0 deletions lib/plugins/create/templates/aws-go-mod/serverless.yml
@@ -0,0 +1,113 @@
# Welcome to Serverless!
#
# This file is the main config file for your service.
# It's very minimal at this point and uses default values.
# You can always add more config options for more control.
# We've included some commented out config examples here.
# Just uncomment any of them to get that config option.
#
# For full config options, check the docs:
# docs.serverless.com
#
# Happy Coding!

service: aws-go-mod # NOTE: update this with your service name

# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"
frameworkVersion: ">=1.28.0 <2.0.0"

provider:
name: aws
runtime: go1.x

# you can overwrite defaults here
# stage: dev
# region: us-east-1

# you can add statements to the Lambda function's IAM Role here
# iamRoleStatements:
# - Effect: "Allow"
# Action:
# - "s3:ListBucket"
# Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
# - Effect: "Allow"
# Action:
# - "s3:PutObject"
# Resource:
# Fn::Join:
# - ""
# - - "arn:aws:s3:::"
# - "Ref" : "ServerlessDeploymentBucket"
# - "/*"

# you can define service wide environment variables here
# environment:
# variable1: value1

package:
exclude:
- ./**
include:
- ./bin/**

functions:
hello:
handler: bin/hello
events:
- http:
path: hello
method: get
world:
handler: bin/world
events:
- http:
path: world
method: get

# The following are a few example events you can configure
# NOTE: Please make sure to change your handler code to work with those events
# Check the event documentation for details
# events:
# events:
# - http:
# path: users/create
# method: get
# - s3: ${env:BUCKET}
# - schedule: rate(10 minutes)
# - sns: greeter-topic
# - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000
# - alexaSkill: amzn1.ask.skill.xx-xx-xx-xx
# - alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx
# - iot:
# sql: "SELECT * FROM 'some_topic'"
# - cloudwatchEvent:
# event:
# source:
# - "aws.ec2"
# detail-type:
# - "EC2 Instance State-change Notification"
# detail:
# state:
# - pending
# - cloudwatchLog: '/aws/lambda/hello'
# - cognitoUserPool:
# pool: MyUserPool
# trigger: PreSignUp

# Define function environment variables here
# environment:
# variable2: value2

# you can add CloudFormation resource templates here
#resources:
# Resources:
# NewResource:
# Type: AWS::S3::Bucket
# Properties:
# BucketName: my-new-bucket
# Outputs:
# NewOutput:
# Description: "Description for the output"
# Value: "Some output value"
45 changes: 45 additions & 0 deletions lib/plugins/create/templates/aws-go-mod/world/main.go
@@ -0,0 +1,45 @@
package main

import (
"bytes"
"context"
"encoding/json"

"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)

// Response is of type APIGatewayProxyResponse since we're leveraging the
// AWS Lambda Proxy Request functionality (default behavior)
//
// https://serverless.com/framework/docs/providers/aws/events/apigateway/#lambda-proxy-integration
type Response events.APIGatewayProxyResponse

// Handler is our lambda handler invoked by the `lambda.Start` function call
func Handler(ctx context.Context) (Response, error) {
var buf bytes.Buffer

body, err := json.Marshal(map[string]interface{}{
"message": "Okay so your other function also executed successfully!",
})
if err != nil {
return Response{StatusCode: 404}, err
}
json.HTMLEscape(&buf, body)

resp := Response{
StatusCode: 200,
IsBase64Encoded: false,
Body: buf.String(),
Headers: map[string]string{
"Content-Type": "application/json",
"X-MyCompany-Func-Reply": "world-handler",
},
}

return resp, nil
}

func main() {
lambda.Start(Handler)
}
2 changes: 1 addition & 1 deletion tests/templates/integration-test-template
Expand Up @@ -37,7 +37,7 @@ serverless deploy -v
echo "Invoking Service"
serverless invoke --function hello

if [ $template == "aws-go" ] || [ $template == "aws-go-dep" ]
if [ $template == "aws-go" ] || [ $template == "aws-go-dep" ] || [ $template == "aws-go-mod" ]
then
serverless invoke --function world
fi
Expand Down
1 change: 1 addition & 0 deletions tests/templates/test_all_templates
Expand Up @@ -14,6 +14,7 @@ integration-test aws-csharp './build.sh'
integration-test aws-fsharp './build.sh'
integration-test aws-go 'cd /go/src/app && make build'
integration-test aws-go-dep 'cd /go/src/app && make build'
integration-test aws-go-mod 'cd /go/src/app && make build'
integration-test aws-groovy-gradle ./gradlew build
integration-test aws-java-gradle ./gradlew build
integration-test aws-java-maven mvn package
Expand Down

0 comments on commit c244b4b

Please sign in to comment.