hecks 0.1.4.rc → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/bin/hecks +1 -1
  3. data/bin/hecks-package +65 -0
  4. data/bin/hecks_console +6 -4
  5. data/bin/hecks_serverless +6 -0
  6. data/lib/cli/build.rb +1 -0
  7. data/lib/cli/command_runner.rb +20 -17
  8. data/lib/cli/console.rb +2 -0
  9. data/lib/cli/generate.rb +6 -4
  10. data/lib/cli/hecks-cli.rb +27 -0
  11. data/lib/cli/test.rb +10 -9
  12. data/lib/console/commands.rb +5 -6
  13. data/lib/console/hecks-console.rb +1 -0
  14. data/lib/hecks.rb +5 -6
  15. data/lib/packager/README.md +0 -0
  16. data/lib/packager/app_runner.rb +21 -0
  17. data/lib/packager/args.rb +26 -0
  18. data/lib/packager/compatibility/fixnum.rb +6 -0
  19. data/lib/packager/hecks.rb +39 -0
  20. data/lib/packager/query_runner.rb +21 -0
  21. data/lib/packager/resources/Dockerfile +11 -0
  22. data/lib/packager/resources/app_binary +7 -0
  23. data/lib/packager/{templates/binary_package/build/resources/bundle/config → resources/bundle_config} +0 -0
  24. data/lib/packager/resources/traveling-ruby-20150715-2.2.2-linux-x86_64.tar.gz +0 -0
  25. data/lib/packager/resources/traveling-ruby-20150715-2.2.2-osx.tar.gz +0 -0
  26. data/lib/serverless/Domain +32 -0
  27. data/lib/serverless/cli.rb +75 -0
  28. data/lib/serverless/resources/command_name.js +5 -0
  29. data/lib/serverless/resources/environment.js +7 -0
  30. data/lib/serverless/resources/handler.js.tt +28 -0
  31. data/lib/serverless/resources/run_binary.js +22 -0
  32. data/lib/serverless/resources/serverless.yml +20 -0
  33. metadata +90 -38
  34. data/lib/cli.rb +0 -28
  35. data/lib/cli/package.rb +0 -13
  36. data/lib/console.rb +0 -23
  37. data/lib/packager.rb +0 -2
  38. data/lib/packager/generate_binary_package.rb +0 -105
  39. data/lib/packager/generate_lambda_package.rb +0 -26
  40. data/lib/packager/templates/binary_package/build/linux-x86_64/lib/app/hello.rb +0 -1
  41. data/lib/packager/templates/binary_package/build/resources/%domain_name%.rb.tt +0 -17
  42. data/lib/packager/templates/binary_package/build/resources/Dockerfile.tt +0 -8
  43. data/lib/packager/templates/binary_package/build/resources/Gemfile.tt +0 -4
  44. data/lib/packager/templates/binary_package/build/resources/wrapper.tt +0 -13
  45. data/lib/packager/templates/lambda_package/handler.js.tt +0 -12
  46. data/lib/packager/templates/lambda_package/serverless.yml.tt +0 -100
@@ -1,13 +0,0 @@
1
- class Package < Thor
2
- desc 'lambda', 'lambda'
3
- register Hecks::Packager::CLI::GenerateLambdaPackage,
4
- 'lambda',
5
- 'lambda',
6
- 'Generate Lambda Package'
7
-
8
- desc 'binary', 'binary'
9
- register Hecks::Packager::CLI::GenerateBinaryPackage,
10
- 'binary',
11
- 'binary',
12
- 'Generate Binary Package'
13
- end
@@ -1,23 +0,0 @@
1
- require 'irb'
2
- require "irb/completion"
3
- require_relative 'console/commands'
4
-
5
- module Hecks
6
- module Console
7
- def self.file
8
- Dir.pwd.split('/').last
9
- end
10
-
11
- def self.full_path
12
- Dir.pwd + "/lib/" + file
13
- end
14
-
15
- def self.domain
16
- file.camelize.constantize
17
- end
18
-
19
- def self.domain_name
20
- domain.to_s
21
- end
22
- end
23
- end
@@ -1,2 +0,0 @@
1
- require_relative 'packager/generate_binary_package'
2
- require_relative 'packager/generate_lambda_package'
@@ -1,105 +0,0 @@
1
- module Hecks
2
- module Packager
3
- module CLI
4
- class GenerateBinaryPackage < Thor::Group
5
- include Thor::Actions
6
-
7
- class_option :no_cache, aliases: '-n', desc: 'download resources', default: false, type: :boolean
8
-
9
- HOST = "http://d6r77u77i8pq3.cloudfront.net/releases"
10
- OSX_BINARY = "traveling-ruby-20150715-2.2.2-osx.tar.gz"
11
- LINUX_BINARY = 'traveling-ruby-20150715-2.2.2-linux-x86_64.tar.gz'
12
- BUILD_DIR = 'packages/binary/build'
13
- RESOURCES_DIR = BUILD_DIR + '/resources'
14
- OSX_DIR = BUILD_DIR + '/osx'
15
- OSX_LIB_DIR = OSX_DIR + '/lib'
16
- OSX_APP_DIR = OSX_LIB_DIR + '/app'
17
- LINUX_DIR = BUILD_DIR + '/linux-x86_64'
18
- LINUX_LIB_DIR = LINUX_DIR + 'lib'
19
- LINUX_APP_DIR = LINUX_LIB_DIR + '/app'
20
-
21
- def self.source_root
22
- File.dirname(__FILE__) + '/templates'
23
- end
24
-
25
- def create_package_folder
26
- directory('binary_package', './packages/binary')
27
- end
28
-
29
- def domain_name
30
- Dir.pwd.split('/').last
31
- end
32
-
33
- def build
34
- package(OSX_APP_DIR, OSX_LIB_DIR, OSX_BINARY, OSX_DIR)
35
- package(LINUX_APP_DIR, LINUX_LIB_DIR, LINUX_BINARY, LINUX_DIR)
36
- end
37
-
38
- private
39
-
40
- def package(app_dir, lib_dir, binary, package_dir)
41
- empty_directory(app_dir)
42
- empty_directory(lib_dir + '/ruby')
43
- return unless refresh_cache?(app_dir)
44
- # download(binary, lib_dir)
45
- copy_resources(app_dir, package_dir)
46
- bundle_with_ruby_2_2_2(app_dir)
47
- reduce_package_size(app_dir)
48
- end
49
-
50
- def refresh_cache?(app_dir)
51
- return true if options[:no_cache]
52
- return Dir[app_dir + '/*'].empty?
53
- end
54
-
55
- def copy_resources(app_dir, package_dir)
56
- run("cp #{RESOURCES_DIR}/Gemfile #{app_dir}")
57
- run("cp -rf #{RESOURCES_DIR}/bundle #{app_dir}/.bundle")
58
- run("cp -rf #{RESOURCES_DIR}/#{domain_name}.rb #{app_dir}/#{domain_name}.rb")
59
- run("cp -rf #{RESOURCES_DIR}/wrapper #{package_dir}/#{domain_name}")
60
- run("cd #{package_dir} && chmod 744 #{domain_name}")
61
- end
62
-
63
- def download(binary, lib_dir)
64
- run("cd #{RESOURCES_DIR} && curl -O #{HOST}/#{binary}")
65
- run("tar -xzf #{RESOURCES_DIR}/#{binary} -C #{lib_dir}/ruby")
66
- end
67
-
68
- def bundle_with_ruby_2_2_2(app_dir)
69
- run("cp -rf #{RESOURCES_DIR}/Dockerfile #{app_dir}")
70
- run("cp #{domain_name}-0.0.0.gem #{app_dir}")
71
- run("cd #{app_dir} && gem fetch hecks-application hecks-adapters-sql-database")
72
- run("cd #{app_dir} && docker build -t #{domain_name} --no-cache .")
73
- container = `docker create pizza_builder:latest`.gsub("\n", '')
74
- run("docker cp #{container}:/usr/src/app/vendor #{app_dir}")
75
- end
76
-
77
- def reduce_package_size(app_dir)
78
- files = %w(test tests spec features benchmark README* CHANGE* Change*
79
- COPYING* LICENSE* MIT-LICENSE* TODO *.txt *.md *.rdoc doc docs example
80
- examples sample doc-api)
81
-
82
- files.each do |file|
83
- run("rm -rf #{app_dir}/vendor/ruby/*/gems/*/#{file}")
84
- end
85
-
86
- run("rm -rf #{app_dir}/vendor/*/*/cache/*")
87
-
88
- %w(.gitignore .travis.yml).each do |file|
89
- run("rm -rf #{app_dir}/vendor/ruby/*/gems/*/#{file}")
90
- end
91
-
92
- %w(MAKEfile */Makefile */tmp).each do |file|
93
- run("rm -f #{app_dir}/vendor/ruby/*/gems/*/ext/#{file}")
94
- end
95
- %w(*.c *.cpp *.h *.rl *extconf.rb *.java *.class *.md).each do |file|
96
- run("find #{app_dir}/vendor/ruby -name '#{file}' | xargs rm -f")
97
- end
98
- %w(*.0 *.so *.bundle).each do |file|
99
- run("find #{app_dir}/vendor/ruby/*/gems -name '#{file}' | xargs rm -f")
100
- end
101
- end
102
- end
103
- end
104
- end
105
- end
@@ -1,26 +0,0 @@
1
- module Hecks
2
- module Packager
3
- module CLI
4
- class GenerateLambdaPackage < Thor::Group
5
- include Thor::Actions
6
-
7
- def self.source_root
8
- File.dirname(__FILE__) + '/templates'
9
- end
10
-
11
- def create_package_folder
12
- directory('lambda_package', './packages/lambda')
13
- end
14
-
15
- def domain_name
16
- Dir.pwd.split('/').last
17
- end
18
-
19
- def create_function
20
- run("rm -rf packages/lambda/#{domain_name}")
21
- run("cp -r packages/binary/build/osx packages/lambda/#{domain_name}")
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,17 +0,0 @@
1
- require 'hecks'
2
- require '<%= domain_name %>'
3
-
4
- app = Hecks::Application.new(domain: <%= domain_name.camelcase %>)
5
-
6
- # Ruby 2.2.2 doesn't support Fixnum#positive?, so monkey patch it.
7
- class Fixnum
8
- def positive?
9
- self > 0
10
- end
11
- end
12
-
13
- domain_module = ARGV[0].to_sym
14
- method = ARGV[1]
15
- data = JSON.parse(ARGV[2], symbolize_names: true)
16
-
17
- puts app[domain_module].send(method, data).call.result.inspect
@@ -1,8 +0,0 @@
1
- FROM ruby:2.2
2
-
3
- COPY <%= domain_name %>-0.0.0.gem /usr/src/app/<%= domain_name %>-0.0.0.gem
4
- RUN gem install /usr/src/app/<%= domain_name %>-0.0.0.gem
5
- COPY Gemfile /usr/src/app/Gemfile
6
- RUN cd /usr/src/app/ && bundle package
7
- RUN cd /usr/src/app/ && bundle install --path vendor
8
- RUN ls /usr/src/app/
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'hecks'
4
- gem '<%= domain_name %>'
@@ -1,13 +0,0 @@
1
- #!/bin/bash
2
- set -e
3
-
4
- # Figure out where this script is located.
5
- SELFDIR="`dirname \"$0\"`"
6
- SELFDIR="`cd \"$SELFDIR\" && pwd`"
7
-
8
- # Tell Bundler where the Gemfile and gems are.
9
- export BUNDLE_GEMFILE="$SELFDIR/lib/app/Gemfile"
10
- unset BUNDLE_IGNORE_CONFIG
11
-
12
- # Run the actual app using the bundled Ruby interpreter, with Bundler activated.
13
- exec "$SELFDIR/lib/ruby/bin/ruby" -rbundler/setup "$SELFDIR/lib/app/<%= domain_name %>.rb" "$@"
@@ -1,12 +0,0 @@
1
- 'use strict';
2
-
3
- const spawn = require('child_process').spawn;
4
-
5
- module.exports.<%= domain_name %> = (event, context, callback) => {
6
- var app = '<%= domain_name %>/<%= domain_name %>'
7
- var data = JSON.stringify(event['data'])
8
- var command = app + ' ' + event['module'] + ' ' + event['method'] + ' ' + JSON.stringify(data)
9
- const child = exec(command, (result) => {
10
- context.done(result);
11
- });
12
- };
@@ -1,100 +0,0 @@
1
- # Welcome to Serverless!
2
- #
3
- # This file is the main config file for your service.
4
- # It's very minimal at this point and uses default values.
5
- # You can always add more config options for more control.
6
- # We've included some commented out config examples here.
7
- # Just uncomment any of them to get that config option.
8
- #
9
- # For full config options, check the docs:
10
- # docs.serverless.com
11
- #
12
- # Happy Coding!
13
-
14
- service: lambda
15
-
16
- # You can pin your service to only deploy with a specific Serverless version
17
- # Check out our docs for more details
18
- # frameworkVersion: "=X.X.X"
19
-
20
- provider:
21
- name: aws
22
- runtime: nodejs4.3
23
-
24
- # you can overwrite defaults here
25
- # stage: dev
26
- # region: us-east-1
27
-
28
- # you can add statements to the Lambda function's IAM Role here
29
- # iamRoleStatements:
30
- # - Effect: "Allow"
31
- # Action:
32
- # - "s3:ListBucket"
33
- # Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
34
- # - Effect: "Allow"
35
- # Action:
36
- # - "s3:PutObject"
37
- # Resource:
38
- # Fn::Join:
39
- # - ""
40
- # - - "arn:aws:s3:::"
41
- # - "Ref" : "ServerlessDeploymentBucket"
42
-
43
- # you can define service wide environment variables here
44
- # environment:
45
- # variable1: value1
46
-
47
- # you can add packaging information here
48
- #package:
49
- # include:
50
- # - include-me.js
51
- # - include-me-dir/**
52
- # exclude:
53
- # - exclude-me.js
54
- # - exclude-me-dir/**
55
-
56
- functions:
57
- <%= domain_name %>:
58
- handler: handler.<%= domain_name %>
59
-
60
- # The following are a few example events you can configure
61
- # NOTE: Please make sure to change your handler code to work with those events
62
- # Check the event documentation for details
63
- # events:
64
- # - http:
65
- # path: users/create
66
- # method: get
67
- # - s3: ${env:BUCKET}
68
- # - schedule: rate(10 minutes)
69
- # - sns: greeter-topic
70
- # - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000
71
- # - alexaSkill
72
- # - iot:
73
- # sql: "SELECT * FROM 'some_topic'"
74
- # - cloudwatchEvent:
75
- # event:
76
- # source:
77
- # - "aws.ec2"
78
- # detail-type:
79
- # - "EC2 Instance State-change Notification"
80
- # detail:
81
- # state:
82
- # - pending
83
-
84
- # Define function environment variables here
85
- # environment:
86
- # variable2: value2
87
-
88
- # you can add CloudFormation resource templates here
89
- #resources:
90
- # Resources:
91
- # NewResource:
92
- # Type: AWS::S3::Bucket
93
- # Properties:
94
- # BucketName: my-new-bucket
95
- # Outputs:
96
- # NewOutput:
97
- # Description: "Description for the output"
98
- # Value: "Some output value"
99
- Plugins:
100
- - serverless-offline