rake_factory 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/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/lib/rake_factory.rb +5 -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
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
|
@@ -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
|
data/lib/rake_factory.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'rake_factory/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'rake_factory'
|
8
|
+
spec.version = RakeFactory::VERSION
|
9
|
+
spec.authors = ['Toby Clemson']
|
10
|
+
spec.email = ['tobyclemson@gmail.com']
|
11
|
+
|
12
|
+
spec.summary =
|
13
|
+
'Base classes and modules to aid in creating custom rake tasks.'
|
14
|
+
spec.description =
|
15
|
+
'Provides base classes and modules to allow declarative definition of ' +
|
16
|
+
'rake tasks.'
|
17
|
+
spec.homepage = 'https://github.com/infrablocks/rake_factory'
|
18
|
+
spec.license = 'MIT'
|
19
|
+
|
20
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
21
|
+
f.match(%r{^(test|spec|features)/})
|
22
|
+
end
|
23
|
+
spec.bindir = 'exe'
|
24
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
25
|
+
spec.require_paths = ['lib']
|
26
|
+
|
27
|
+
spec.required_ruby_version = '>= 2.5.1'
|
28
|
+
|
29
|
+
spec.add_dependency 'rake', '~> 13.0'
|
30
|
+
spec.add_dependency 'activesupport', '~> 5.2'
|
31
|
+
|
32
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
33
|
+
spec.add_development_dependency 'rspec', '~> 3.9'
|
34
|
+
spec.add_development_dependency 'gem-release', '~> 2.0'
|
35
|
+
spec.add_development_dependency 'fakefs', '~> 0.18'
|
36
|
+
spec.add_development_dependency 'simplecov', '~> 0.16'
|
37
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
[ -n "$DEBUG" ] && set -x
|
4
|
+
set -e
|
5
|
+
set -o pipefail
|
6
|
+
|
7
|
+
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
8
|
+
PROJECT_DIR="$( cd "$SCRIPT_DIR/../../.." && pwd )"
|
9
|
+
|
10
|
+
cd "$PROJECT_DIR"
|
11
|
+
|
12
|
+
git crypt unlock
|
13
|
+
|
14
|
+
mkdir -p ~/.gem
|
15
|
+
cp config/secrets/rubygems/credentials ~/.gem/credentials
|
16
|
+
chmod 0600 ~/.gem/credentials
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
[ -n "$DEBUG" ] && set -x
|
4
|
+
set -e
|
5
|
+
set -o pipefail
|
6
|
+
|
7
|
+
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
8
|
+
PROJECT_DIR="$( cd "$SCRIPT_DIR/../../.." && pwd )"
|
9
|
+
|
10
|
+
cd "$PROJECT_DIR"
|
11
|
+
|
12
|
+
set +e
|
13
|
+
openssl version
|
14
|
+
openssl aes-256-cbc \
|
15
|
+
-d \
|
16
|
+
-md sha1 \
|
17
|
+
-in ./.circleci/gpg.private.enc \
|
18
|
+
-k "${ENCRYPTION_PASSPHRASE}" | gpg --import -
|
19
|
+
set -e
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
[ -n "$DEBUG" ] && set -x
|
4
|
+
set -e
|
5
|
+
set -o pipefail
|
6
|
+
|
7
|
+
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
8
|
+
PROJECT_DIR="$( cd "$SCRIPT_DIR/../../.." && pwd )"
|
9
|
+
|
10
|
+
cd "$PROJECT_DIR"
|
11
|
+
|
12
|
+
./go version:bump[pre]
|
13
|
+
./go release
|
14
|
+
|
15
|
+
git status
|
16
|
+
git push
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
[ -n "$DEBUG" ] && set -x
|
4
|
+
set -e
|
5
|
+
set -o pipefail
|
6
|
+
|
7
|
+
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
8
|
+
PROJECT_DIR="$( cd "$SCRIPT_DIR/../../.." && pwd )"
|
9
|
+
|
10
|
+
cd "$PROJECT_DIR"
|
11
|
+
|
12
|
+
git pull
|
13
|
+
|
14
|
+
./go version:bump[minor]
|
15
|
+
./go release
|
16
|
+
|
17
|
+
git status
|
18
|
+
git push
|