rake_tasklib 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.circleci/config.yml +56 -0
- data/.circleci/gpg.private.enc +0 -0
- data/.envrc +5 -0
- data/.git-crypt/.gitattributes +4 -0
- data/.git-crypt/keys/default/0/41D2606F66C3FF28874362B61A16916844CE9D82.gpg +0 -0
- data/.git-crypt/keys/default/0/837D1812341A8C7F3E556D33623A196DE10A7326.gpg +0 -0
- data/.gitattributes +1 -0
- data/.gitignore +32 -0
- data/.rspec +2 -0
- data/.ruby-version +1 -0
- data/CODE_OF_CONDUCT.md +75 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +60 -0
- data/LICENSE.txt +21 -0
- data/README.md +70 -0
- data/Rakefile +24 -0
- data/TODO.md +2 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/config/secrets/.unlocked +1 -0
- data/config/secrets/ci/encryption.passphrase +1 -0
- data/config/secrets/ci/gpg.private +105 -0
- data/config/secrets/ci/gpg.public +51 -0
- data/config/secrets/ci/ssh.private +51 -0
- data/config/secrets/ci/ssh.public +1 -0
- data/config/secrets/rubygems/credentials +2 -0
- data/go +56 -0
- data/lib/rake_factory.rb +5 -0
- data/lib/rake_factory/actions.rb +11 -0
- data/lib/rake_factory/defaults.rb +56 -0
- data/lib/rake_factory/exceptions.rb +4 -0
- data/lib/rake_factory/parameter.rb +61 -0
- data/lib/rake_factory/parameter_set.rb +48 -0
- data/lib/rake_factory/parameter_view.rb +21 -0
- data/lib/rake_factory/parameters.rb +14 -0
- data/lib/rake_factory/task.rb +85 -0
- data/lib/rake_factory/version.rb +3 -0
- data/rake_factory.gemspec +37 -0
- data/scripts/ci/common/configure-git.sh +8 -0
- data/scripts/ci/common/configure-rubygems.sh +16 -0
- data/scripts/ci/common/install-git-crypt.sh +8 -0
- data/scripts/ci/common/install-gpg-key.sh +19 -0
- data/scripts/ci/steps/prerelease.sh +16 -0
- data/scripts/ci/steps/release.sh +18 -0
- data/scripts/ci/steps/test.sh +12 -0
- metadata +188 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
2
|
+
|
3
|
+
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
|
49
|
+
wJ+Igj9ZPECXt3c8Ne/Xi2sO
|
50
|
+
=wZdG
|
51
|
+
-----END PGP PUBLIC KEY BLOCK-----
|
@@ -0,0 +1,51 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
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
|
51
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1 @@
|
|
1
|
+
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDbx7zpqZd9cA0GP+MruC9PRHJKQo0VBnvlxIB7GISSxechSQ0ZrSgvvzLkSDm8ztbvg9CL1KBct3Mf7H4njgieQx6pjWDO8I735Ncj+bhPvkb7O283xaZgUzO5VEBA75rSSZr+0GOhZdYRLfExCf+6TrkC6cqXIBYlCbjZR6ccQTomQY9vyntzIqE7Ki1ICXYUVM8OLgre3uzp4MqOQdqci1rwG7mQ66c3tjoNp0dQORaKMGxRwAweGQhiF4sT4+k9hLfiSLevJmTRmRBAUuB/T6Fuk0k3GVasscwArHkDBQ9/awPzn6zKkOlk9coJsXbLPkkKe2aNuSyGxR+zrR30liqDIPo0lawUbz2RxuZU0ZhV79gzURoxiG1hFTo7nqYy9C+iCE5CxFzXst5IRwUk1o3oIJvCMdtozvnSrDkbiMlUbsdb3FIAaL84BDnyZ6C6V4mAOrWxC71Lz62XQ3VQwLvnr+qMnqseVidQe47TAmtwD1DlUwiId1AwmHXgMeel3+khylg2J+TYCaM2uu0lgwZ8IbHDxTLcy5Soa+BevM3T9+xvo8/tPVXAzLyevfQTo6ssw5JE8ZSPPwzUYipC7VPNXfME7FpE461ZaEcNHDghk28gxLEwM56hFCam5VI0+4/bc+okEl4m6M1b1CUxFh2tBnutPUaj6SOfGOHYbw== maintainers@infrablocks.io
|
data/go
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
[ -n "$GO_DEBUG" ] && set -x
|
4
|
+
set -e
|
5
|
+
|
6
|
+
project_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
7
|
+
|
8
|
+
verbose="no"
|
9
|
+
skip_checks="no"
|
10
|
+
offline="no"
|
11
|
+
|
12
|
+
missing_dependency="no"
|
13
|
+
|
14
|
+
[ -n "$GO_DEBUG" ] && verbose="yes"
|
15
|
+
[ -n "$GO_SKIP_CHECKS" ] && skip_checks="yes"
|
16
|
+
[ -n "$GO_OFFLINE" ] && offline="yes"
|
17
|
+
|
18
|
+
|
19
|
+
if [[ "$skip_checks" = "no" ]]; then
|
20
|
+
echo "Checking for system dependencies."
|
21
|
+
ruby_version="$(cat "$project_dir"/.ruby-version)"
|
22
|
+
if ! type ruby >/dev/null 2>&1 || ! ruby -v | grep -q "$ruby_version"; then
|
23
|
+
echo "This codebase requires Ruby $ruby_version."
|
24
|
+
missing_dependency="yes"
|
25
|
+
fi
|
26
|
+
|
27
|
+
if [[ "$missing_dependency" = "yes" ]]; then
|
28
|
+
echo "Please install missing dependencies to continue."
|
29
|
+
exit 1
|
30
|
+
fi
|
31
|
+
|
32
|
+
echo "All system dependencies present. Continuing."
|
33
|
+
fi
|
34
|
+
|
35
|
+
if [[ "$offline" = "no" ]]; then
|
36
|
+
echo "Installing bundler."
|
37
|
+
if [[ "$verbose" = "yes" ]]; then
|
38
|
+
gem install --no-document bundler
|
39
|
+
else
|
40
|
+
gem install --no-document bundler > /dev/null
|
41
|
+
fi
|
42
|
+
|
43
|
+
echo "Installing ruby dependencies."
|
44
|
+
if [[ "$verbose" = "yes" ]]; then
|
45
|
+
bundle install
|
46
|
+
else
|
47
|
+
bundle install > /dev/null
|
48
|
+
fi
|
49
|
+
fi
|
50
|
+
|
51
|
+
echo "Starting rake."
|
52
|
+
if [[ "$verbose" = "yes" ]]; then
|
53
|
+
time bundle exec rake --verbose "$@"
|
54
|
+
else
|
55
|
+
time bundle exec rake "$@"
|
56
|
+
fi
|
data/lib/rake_factory.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'active_support/core_ext/string/inflections'
|
3
|
+
|
4
|
+
require_relative 'parameters'
|
5
|
+
|
6
|
+
module RakeFactory
|
7
|
+
module Defaults
|
8
|
+
include Parameters
|
9
|
+
|
10
|
+
def inherited(inheritor)
|
11
|
+
super(inheritor)
|
12
|
+
inheritor.class_eval do
|
13
|
+
parameter(:name,
|
14
|
+
configurable: false,
|
15
|
+
transform: lambda { |n| n.to_sym })
|
16
|
+
parameter(:argument_names,
|
17
|
+
configurable: false,
|
18
|
+
default: [])
|
19
|
+
parameter(:prerequisites,
|
20
|
+
configurable: false,
|
21
|
+
default: [])
|
22
|
+
parameter(:order_only_prerequisites,
|
23
|
+
configurable: false,
|
24
|
+
default: [])
|
25
|
+
parameter(:description,
|
26
|
+
configurable: false)
|
27
|
+
|
28
|
+
unless inheritor.name.nil?
|
29
|
+
default_name inheritor.name.demodulize.underscore
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def default_name(name)
|
35
|
+
parameter_set.update_default_for(:name, name)
|
36
|
+
end
|
37
|
+
|
38
|
+
def default_argument_names(argument_names)
|
39
|
+
parameter_set.update_default_for(:argument_names, argument_names)
|
40
|
+
end
|
41
|
+
|
42
|
+
def default_prerequisites(prerequisites)
|
43
|
+
parameter_set.update_default_for(:prerequisites, prerequisites)
|
44
|
+
end
|
45
|
+
|
46
|
+
def default_order_only_prerequisites(order_only_prerequisites)
|
47
|
+
parameter_set
|
48
|
+
.update_default_for(
|
49
|
+
:order_only_prerequisites, order_only_prerequisites)
|
50
|
+
end
|
51
|
+
|
52
|
+
def default_description(description)
|
53
|
+
parameter_set.update_default_for(:description, description)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module RakeFactory
|
2
|
+
class Parameter
|
3
|
+
attr_reader(
|
4
|
+
:name,
|
5
|
+
:default,
|
6
|
+
:required,
|
7
|
+
:configurable,
|
8
|
+
:transform)
|
9
|
+
attr_writer(:default)
|
10
|
+
|
11
|
+
def initialize(name, options)
|
12
|
+
@name = name
|
13
|
+
@default = options[:default] || nil
|
14
|
+
@required = options[:required] || false
|
15
|
+
@configurable =
|
16
|
+
options[:configurable].nil? ? true : !!options[:configurable]
|
17
|
+
@transform = options[:transform] || lambda { |x| x }
|
18
|
+
end
|
19
|
+
|
20
|
+
def writer_method
|
21
|
+
"#{name}="
|
22
|
+
end
|
23
|
+
|
24
|
+
def reader_method
|
25
|
+
name
|
26
|
+
end
|
27
|
+
|
28
|
+
def instance_variable
|
29
|
+
"@#{name}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def define_on(klass)
|
33
|
+
parameter = self
|
34
|
+
klass.class_eval do
|
35
|
+
attr_reader parameter.reader_method
|
36
|
+
define_method parameter.writer_method do |value|
|
37
|
+
instance_variable_set(
|
38
|
+
parameter.instance_variable,
|
39
|
+
parameter.transform.call(value))
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def apply_default_to(instance)
|
45
|
+
instance.send(writer_method, @default) unless @default.nil?
|
46
|
+
end
|
47
|
+
|
48
|
+
def configurable?
|
49
|
+
@configurable
|
50
|
+
end
|
51
|
+
|
52
|
+
def dissatisfied_by?(instance)
|
53
|
+
value = instance.send(reader_method)
|
54
|
+
@required && value.nil?
|
55
|
+
end
|
56
|
+
|
57
|
+
def satisfied_by?(instance)
|
58
|
+
!dissatisfied_by?(instance)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require_relative 'parameter'
|
2
|
+
require_relative 'exceptions'
|
3
|
+
|
4
|
+
module RakeFactory
|
5
|
+
class ParameterSet
|
6
|
+
def initialize
|
7
|
+
@parameter_set = {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def add(name, options)
|
11
|
+
parameter = Parameter.new(name, options)
|
12
|
+
@parameter_set[parameter.name] = parameter
|
13
|
+
parameter
|
14
|
+
end
|
15
|
+
|
16
|
+
def find(name)
|
17
|
+
@parameter_set[name.to_sym]
|
18
|
+
end
|
19
|
+
|
20
|
+
def each(&block)
|
21
|
+
@parameter_set.values.each(&block)
|
22
|
+
end
|
23
|
+
|
24
|
+
def update_default_for(name, value)
|
25
|
+
find(name).default = value
|
26
|
+
end
|
27
|
+
|
28
|
+
def apply_defaults_to(instance)
|
29
|
+
@parameter_set.values.each do |parameter|
|
30
|
+
parameter.apply_default_to(instance)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def enforce_requirements_on(instance)
|
35
|
+
dissatisfied = @parameter_set.values.reject do |parameter|
|
36
|
+
parameter.satisfied_by?(instance)
|
37
|
+
end
|
38
|
+
unless dissatisfied.empty?
|
39
|
+
names = dissatisfied.map(&:name)
|
40
|
+
names_string = names.join(',')
|
41
|
+
pluralisation_string = names.length > 1 ? 's' : ''
|
42
|
+
|
43
|
+
raise RequiredParameterUnset,
|
44
|
+
"Required parameter#{pluralisation_string} #{names_string} unset."
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module RakeFactory
|
2
|
+
class ParameterView
|
3
|
+
attr_reader(:task)
|
4
|
+
|
5
|
+
def initialize(task)
|
6
|
+
self.instance_eval do
|
7
|
+
task.class.parameter_set.each do |parameter|
|
8
|
+
define_singleton_method parameter.reader_method do
|
9
|
+
task.send(parameter.reader_method)
|
10
|
+
end
|
11
|
+
|
12
|
+
if parameter.configurable?
|
13
|
+
define_singleton_method parameter.writer_method do |value|
|
14
|
+
task.send(parameter.writer_method, value)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative 'parameter_set'
|
2
|
+
|
3
|
+
module RakeFactory
|
4
|
+
module Parameters
|
5
|
+
def parameter_set
|
6
|
+
@parameter_set ||= ParameterSet.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def parameter(name, options = {})
|
10
|
+
parameter = parameter_set.add(name, options)
|
11
|
+
parameter.define_on(self)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'rake/tasklib'
|
2
|
+
|
3
|
+
require_relative 'parameters'
|
4
|
+
require_relative 'parameter_view'
|
5
|
+
require_relative 'actions'
|
6
|
+
require_relative 'defaults'
|
7
|
+
|
8
|
+
module RakeFactory
|
9
|
+
class Task < ::Rake::TaskLib
|
10
|
+
extend Parameters
|
11
|
+
extend Actions
|
12
|
+
extend Defaults
|
13
|
+
|
14
|
+
attr_accessor(:configuration_block)
|
15
|
+
|
16
|
+
def self.inherited(inheritor)
|
17
|
+
super(inheritor)
|
18
|
+
inheritor.singleton_class.class_eval do
|
19
|
+
define_method :define do |*args, &block|
|
20
|
+
inheritor.new(*args, &block).define_on(Rake.application)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize(*args, &configuration_block)
|
26
|
+
setup_parameter_defaults
|
27
|
+
process_arguments(args)
|
28
|
+
process_configuration_block(configuration_block)
|
29
|
+
end
|
30
|
+
|
31
|
+
def setup_parameter_defaults
|
32
|
+
self.class.parameter_set.apply_defaults_to(self)
|
33
|
+
end
|
34
|
+
|
35
|
+
def process_arguments(args)
|
36
|
+
opts = args.first || {}
|
37
|
+
opts.each { |key, value| set_if_value_present(key, value) }
|
38
|
+
end
|
39
|
+
|
40
|
+
def process_configuration_block(configuration_block)
|
41
|
+
set_if_value_present(:configuration_block, configuration_block)
|
42
|
+
end
|
43
|
+
|
44
|
+
def invoke_configuration_block(args)
|
45
|
+
if configuration_block
|
46
|
+
view = ParameterView.new(self)
|
47
|
+
configuration_block.call(
|
48
|
+
*[view, args].slice(0, configuration_block.arity))
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def check_parameter_requirements
|
53
|
+
self.class.parameter_set.enforce_requirements_on(self)
|
54
|
+
end
|
55
|
+
|
56
|
+
def invoke_actions(args)
|
57
|
+
self.class.actions.each do |action|
|
58
|
+
action.call(*[self, args].slice(0, action.arity))
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def define_on(application)
|
63
|
+
task = application.define_task(
|
64
|
+
Rake::Task,
|
65
|
+
name,
|
66
|
+
argument_names => prerequisites,
|
67
|
+
order_only: order_only_prerequisites
|
68
|
+
) do |_, args|
|
69
|
+
invoke_configuration_block(args)
|
70
|
+
check_parameter_requirements
|
71
|
+
invoke_actions(args)
|
72
|
+
end
|
73
|
+
task.add_description(description)
|
74
|
+
self
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def set_if_value_present(key, value)
|
80
|
+
if self.respond_to?("#{key}=") && !value.nil?
|
81
|
+
self.send("#{key}=", value)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|