exercism_config 0.28.0 → 0.29.0
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 +4 -4
- data/.github/config/rubocop_linter_action.yml +12 -0
- data/.github/workflows/rubocop.yml +17 -0
- data/.github/workflows/tests.yml +81 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +81 -0
- data/.ruby-version +1 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +37 -2
- data/Rakefile +6 -6
- data/bin/console +3 -3
- data/bin/setup_exercism_config +26 -26
- data/bin/setup_exercism_local_aws +97 -0
- data/exercism_config.gemspec +25 -18
- data/lib/exercism/config.rb +1 -1
- data/lib/exercism_config.rb +2 -2
- data/lib/exercism_config/determine_environment.rb +2 -2
- data/lib/exercism_config/generate_aws_settings.rb +4 -8
- data/lib/exercism_config/retrieve.rb +7 -9
- data/lib/exercism_config/setup_dynamodb_client.rb +6 -4
- data/lib/exercism_config/setup_s3_client.rb +4 -5
- data/lib/exercism_config/version.rb +1 -1
- data/package.json +14 -0
- data/yarn.lock +527 -0
- metadata +60 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1b04997a88ec2a910bbfd5bfc544a2283f3625303a7be4e095562c5d0426d344
|
4
|
+
data.tar.gz: 0b7e9976d8c8fcac075b63c19f30b7b4ff6ea1a85989b1df727cd3bac0f31a6a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc39469f3004690ae7f30069c1d31c7f9e5304774e23e7ef624da312c612a12b7e911bb43918c50b190060fea2cf3c9e002a2511d316aee2ac704e3888a8a9ed
|
7
|
+
data.tar.gz: 858ac021fefa6fef3fd830ebe0a2291cba521570253c45bcbdb7561cb6fa8deb3f2dcff1ec33f48610f1da08ecd0972f775a076e853b141d2a176d8e634b14df
|
@@ -0,0 +1,17 @@
|
|
1
|
+
name: Rubocop
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ master ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
rubocop:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
steps:
|
13
|
+
- uses: actions/checkout@v2
|
14
|
+
- name: Rubocop Linter Action
|
15
|
+
uses: andrewmcodes/rubocop-linter-action@v3.0.0
|
16
|
+
env:
|
17
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
@@ -0,0 +1,81 @@
|
|
1
|
+
name: Tests
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ master ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
|
13
|
+
services:
|
14
|
+
dynamodb:
|
15
|
+
image: "amazon/dynamodb-local"
|
16
|
+
ports:
|
17
|
+
- 8000
|
18
|
+
|
19
|
+
steps:
|
20
|
+
###
|
21
|
+
# Checkout using GitHub's checkout action
|
22
|
+
- uses: actions/checkout@v2
|
23
|
+
|
24
|
+
###
|
25
|
+
# Setup Ruby - this needs to match the version in the Gemfile
|
26
|
+
- name: Set up Ruby
|
27
|
+
uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0
|
28
|
+
with:
|
29
|
+
ruby-version: 2.6.6
|
30
|
+
|
31
|
+
###
|
32
|
+
# Caching using GitHub's caching action
|
33
|
+
- name: Cache Bundler
|
34
|
+
uses: actions/cache@v2
|
35
|
+
with:
|
36
|
+
path: vendor/bundle
|
37
|
+
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
38
|
+
restore-keys: |
|
39
|
+
${{ runner.os }}-gems-
|
40
|
+
|
41
|
+
###
|
42
|
+
# Install bundler and yarn dependencies
|
43
|
+
- name: Install dependencies
|
44
|
+
env:
|
45
|
+
EXERCISM_ENV: test
|
46
|
+
EXERCISM_CI: true
|
47
|
+
DYNAMODB_PORT: ${{ job.services.dynamodb.ports['8000'] }}
|
48
|
+
run: |
|
49
|
+
bundle config path vendor/bundle # This is needed for the caching above
|
50
|
+
bundle install --jobs 4 --retry 3
|
51
|
+
bundle exec setup_exercism_config
|
52
|
+
|
53
|
+
###
|
54
|
+
# Setup code climate
|
55
|
+
# - name: Setup Code Climate test-reporter
|
56
|
+
# run: |
|
57
|
+
# curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
58
|
+
# chmod +x ./cc-test-reporter
|
59
|
+
# ./cc-test-reporter before-build
|
60
|
+
|
61
|
+
###
|
62
|
+
# Run the tests
|
63
|
+
- name: Run Ruby tests
|
64
|
+
env:
|
65
|
+
EXERCISM_ENV: test
|
66
|
+
EXERCISM_CI: true
|
67
|
+
DYNAMODB_PORT: ${{ job.services.dynamodb.ports['8000'] }}
|
68
|
+
CAPTURE_CODE_COVERAGE: true
|
69
|
+
run: |
|
70
|
+
bundle exec rake test
|
71
|
+
#./cc-test-reporter format-coverage -t simplecov -o codeclimate.backend.json coverage/backend/.resultset.json
|
72
|
+
|
73
|
+
###
|
74
|
+
# Publish the coverage to CodeClimate
|
75
|
+
# - name: Publish code coverage
|
76
|
+
# env:
|
77
|
+
# GIT_BRANCH: ${GITHUB_REF/refs\/heads\//}
|
78
|
+
# CC_TEST_REPORTER_ID: ${{secrets.CC_TEST_REPORTER_ID}}
|
79
|
+
# run: |
|
80
|
+
# ./cc-test-reporter sum-coverage codeclimate.*.json -p 2 -o codeclimate.total.json
|
81
|
+
# ./cc-test-reporter upload-coverage -i codeclimate.total.json
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
require:
|
2
|
+
- rubocop-minitest
|
3
|
+
- rubocop-performance
|
4
|
+
|
5
|
+
AllCops:
|
6
|
+
NewCops: disable
|
7
|
+
Exclude:
|
8
|
+
- "bin/**/*"
|
9
|
+
|
10
|
+
Bundler/OrderedGems:
|
11
|
+
Enabled: false
|
12
|
+
|
13
|
+
Layout/DotPosition:
|
14
|
+
EnforcedStyle: trailing
|
15
|
+
|
16
|
+
Layout/EndOfLine:
|
17
|
+
EnforcedStyle: lf
|
18
|
+
|
19
|
+
Layout/MultilineMethodCallIndentation:
|
20
|
+
EnforcedStyle: indented
|
21
|
+
|
22
|
+
Layout/EmptyLinesAroundAccessModifier:
|
23
|
+
EnforcedStyle: only_before
|
24
|
+
|
25
|
+
#Layout/LineLength:
|
26
|
+
#Exclude:
|
27
|
+
|
28
|
+
Lint/SuppressedException:
|
29
|
+
Exclude:
|
30
|
+
- "test/**/*"
|
31
|
+
- "lib/tooling_invoker/runc_wrapper.rb"
|
32
|
+
- "lib/tooling_invoker/external_command.rb"
|
33
|
+
|
34
|
+
Metrics/BlockLength:
|
35
|
+
Exclude:
|
36
|
+
- "test/**/*"
|
37
|
+
|
38
|
+
Metrics/MethodLength:
|
39
|
+
# We probably want to bring this down but let's start here for now
|
40
|
+
Max: 20
|
41
|
+
Exclude:
|
42
|
+
- "test/**/*"
|
43
|
+
|
44
|
+
Naming/PredicateName:
|
45
|
+
Enabled: false
|
46
|
+
|
47
|
+
Style/StringLiterals:
|
48
|
+
Enabled: false
|
49
|
+
|
50
|
+
Style/FrozenStringLiteralComment:
|
51
|
+
Enabled: false
|
52
|
+
|
53
|
+
Style/Documentation:
|
54
|
+
Enabled: false
|
55
|
+
|
56
|
+
Style/DocumentationMethod:
|
57
|
+
Enabled: false
|
58
|
+
|
59
|
+
Style/IfUnlessModifier:
|
60
|
+
Exclude:
|
61
|
+
- "lib/exercism_config/setup_dynamodb_client.rb"
|
62
|
+
|
63
|
+
Style/NumericPredicate:
|
64
|
+
Enabled: false
|
65
|
+
|
66
|
+
Style/RedundantSelf:
|
67
|
+
Enabled: false
|
68
|
+
|
69
|
+
Style/ZeroLengthPredicate:
|
70
|
+
Enabled: false
|
71
|
+
|
72
|
+
# I don't mind this being enabled if
|
73
|
+
# someone fixes all the fails.
|
74
|
+
Style/ClassAndModuleChildren:
|
75
|
+
Enabled: false
|
76
|
+
|
77
|
+
Naming/VariableNumber:
|
78
|
+
EnforcedStyle: snake_case
|
79
|
+
|
80
|
+
Style/LambdaCall:
|
81
|
+
EnforcedStyle: braces
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.6.6
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
exercism_config (0.
|
4
|
+
exercism_config (0.29.0)
|
5
5
|
aws-sdk-dynamodb (~> 1.0)
|
6
6
|
mandate
|
7
7
|
zeitwerk
|
@@ -9,8 +9,9 @@ PATH
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
|
+
ast (2.4.1)
|
12
13
|
aws-eventstream (1.1.0)
|
13
|
-
aws-partitions (1.
|
14
|
+
aws-partitions (1.350.0)
|
14
15
|
aws-sdk-core (3.104.3)
|
15
16
|
aws-eventstream (~> 1, >= 1.0.2)
|
16
17
|
aws-partitions (~> 1, >= 1.239.0)
|
@@ -19,24 +20,58 @@ GEM
|
|
19
20
|
aws-sdk-dynamodb (1.51.0)
|
20
21
|
aws-sdk-core (~> 3, >= 3.99.0)
|
21
22
|
aws-sigv4 (~> 1.1)
|
23
|
+
aws-sdk-kms (1.36.0)
|
24
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
25
|
+
aws-sigv4 (~> 1.1)
|
26
|
+
aws-sdk-s3 (1.75.0)
|
27
|
+
aws-sdk-core (~> 3, >= 3.104.1)
|
28
|
+
aws-sdk-kms (~> 1)
|
29
|
+
aws-sigv4 (~> 1.1)
|
22
30
|
aws-sigv4 (1.2.1)
|
23
31
|
aws-eventstream (~> 1, >= 1.0.2)
|
24
32
|
jmespath (1.4.0)
|
25
33
|
mandate (0.3.0)
|
26
34
|
minitest (5.14.1)
|
27
35
|
mocha (1.11.2)
|
36
|
+
parallel (1.19.2)
|
37
|
+
parser (2.7.1.4)
|
38
|
+
ast (~> 2.4.1)
|
39
|
+
rainbow (3.0.0)
|
28
40
|
rake (12.3.3)
|
41
|
+
regexp_parser (1.7.1)
|
42
|
+
rexml (3.2.4)
|
43
|
+
rubocop (0.88.0)
|
44
|
+
parallel (~> 1.10)
|
45
|
+
parser (>= 2.7.1.1)
|
46
|
+
rainbow (>= 2.2.2, < 4.0)
|
47
|
+
regexp_parser (>= 1.7)
|
48
|
+
rexml
|
49
|
+
rubocop-ast (>= 0.1.0, < 1.0)
|
50
|
+
ruby-progressbar (~> 1.7)
|
51
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
52
|
+
rubocop-ast (0.3.0)
|
53
|
+
parser (>= 2.7.1.4)
|
54
|
+
rubocop-minitest (0.10.1)
|
55
|
+
rubocop (>= 0.87)
|
56
|
+
rubocop-performance (1.7.1)
|
57
|
+
rubocop (>= 0.82.0)
|
58
|
+
ruby-progressbar (1.10.1)
|
59
|
+
unicode-display_width (1.7.0)
|
29
60
|
zeitwerk (2.4.0)
|
30
61
|
|
31
62
|
PLATFORMS
|
32
63
|
ruby
|
33
64
|
|
34
65
|
DEPENDENCIES
|
66
|
+
aws-sdk-s3
|
35
67
|
bundler (~> 2.1)
|
36
68
|
exercism_config!
|
37
69
|
minitest (~> 5.0)
|
38
70
|
mocha
|
39
71
|
rake (~> 12.0)
|
72
|
+
rubocop
|
73
|
+
rubocop-minitest
|
74
|
+
rubocop-performance
|
40
75
|
|
41
76
|
BUNDLED WITH
|
42
77
|
2.1.4
|
data/Rakefile
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake/testtask'
|
3
3
|
|
4
4
|
Rake::TestTask.new(:test) do |t|
|
5
|
-
t.libs <<
|
6
|
-
t.libs <<
|
7
|
-
t.test_files = FileList[
|
5
|
+
t.libs << 'test'
|
6
|
+
t.libs << 'lib'
|
7
|
+
t.test_files = FileList['test/**/*_test.rb']
|
8
8
|
end
|
9
9
|
|
10
|
-
task :
|
10
|
+
task default: :test
|
data/bin/console
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'exercism_config'
|
5
5
|
|
6
6
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -10,5 +10,5 @@ require "exercism_config"
|
|
10
10
|
# require "pry"
|
11
11
|
# Pry.start
|
12
12
|
|
13
|
-
require
|
13
|
+
require 'irb'
|
14
14
|
IRB.start(__FILE__)
|
data/bin/setup_exercism_config
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'exercism_config'
|
5
5
|
require 'erb'
|
6
6
|
require 'yaml'
|
7
7
|
|
8
|
-
env = ExercismConfig::DetermineEnvironment.
|
8
|
+
env = ExercismConfig::DetermineEnvironment.call
|
9
9
|
if env == :production
|
10
|
-
puts
|
11
|
-
exit
|
10
|
+
puts 'Aborted! This script should not be run in production.'
|
11
|
+
exit
|
12
12
|
end
|
13
13
|
|
14
14
|
def create_table(client)
|
@@ -16,26 +16,26 @@ def create_table(client)
|
|
16
16
|
table_name: :config,
|
17
17
|
attribute_definitions: [
|
18
18
|
{
|
19
|
-
attribute_name:
|
20
|
-
attribute_type:
|
21
|
-
}
|
19
|
+
attribute_name: 'id',
|
20
|
+
attribute_type: 'S'
|
21
|
+
}
|
22
22
|
],
|
23
23
|
key_schema: [
|
24
24
|
{
|
25
|
-
attribute_name:
|
26
|
-
key_type:
|
25
|
+
attribute_name: 'id',
|
26
|
+
key_type: 'HASH'
|
27
27
|
}
|
28
28
|
],
|
29
29
|
provisioned_throughput: {
|
30
|
-
read_capacity_units: 1,
|
31
|
-
write_capacity_units: 1
|
30
|
+
read_capacity_units: 1,
|
31
|
+
write_capacity_units: 1
|
32
32
|
}
|
33
33
|
)
|
34
34
|
end
|
35
35
|
|
36
36
|
def delete_table(client)
|
37
37
|
client.delete_table(
|
38
|
-
table_name: :config
|
38
|
+
table_name: :config
|
39
39
|
)
|
40
40
|
end
|
41
41
|
|
@@ -49,31 +49,31 @@ def set_config_value(client, id, value)
|
|
49
49
|
)
|
50
50
|
end
|
51
51
|
|
52
|
-
client = ExercismConfig::SetupDynamoDBClient.
|
52
|
+
client = ExercismConfig::SetupDynamoDBClient.call
|
53
53
|
|
54
54
|
begin
|
55
55
|
create_table(client)
|
56
56
|
rescue Aws::DynamoDB::Errors::ResourceInUseException => e
|
57
|
-
if ARGV.include?(
|
58
|
-
puts
|
57
|
+
if ARGV.include?('--force')
|
58
|
+
puts 'Table exists. Recreating...'
|
59
59
|
delete_table(client)
|
60
60
|
create_table(client)
|
61
|
-
puts
|
61
|
+
puts 'Table recreated.'
|
62
62
|
else
|
63
|
-
puts
|
63
|
+
puts 'Table exists. Not recreating.'
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
|
-
settings_file_arg = ARGV.select{|arg|arg.start_with?(
|
68
|
-
settings_file =
|
67
|
+
settings_file_arg = ARGV.select { |arg| arg.start_with?('--settings-file=') }.first
|
68
|
+
settings_file =
|
69
69
|
if settings_file_arg
|
70
|
-
settings_file_arg.split(
|
71
|
-
elsif ENV[
|
72
|
-
File.expand_path(
|
73
|
-
elsif ENV[
|
74
|
-
File.expand_path(
|
70
|
+
settings_file_arg.split('=').last
|
71
|
+
elsif ENV['EXERCISM_DOCKER']
|
72
|
+
File.expand_path('../settings/docker.yml', __dir__)
|
73
|
+
elsif ENV['EXERCISM_CI']
|
74
|
+
File.expand_path('../settings/ci.yml', __dir__)
|
75
75
|
else
|
76
|
-
File.expand_path(
|
76
|
+
File.expand_path('../settings/development.yml', __dir__)
|
77
77
|
end
|
78
78
|
|
79
79
|
puts "Using settings file: #{settings_file}"
|
@@ -0,0 +1,97 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "bundler/setup"
|
3
|
+
require "exercism_config"
|
4
|
+
|
5
|
+
# Only allow this to run in development
|
6
|
+
return unless Exercism.environment == :development
|
7
|
+
|
8
|
+
puts "Create AWS/DynamoDB tables..."
|
9
|
+
|
10
|
+
Exercism.config.dynamodb_client = ExercismConfig::SetupDynamoDBClient.()
|
11
|
+
|
12
|
+
##################
|
13
|
+
# Setup local s3 #
|
14
|
+
##################
|
15
|
+
|
16
|
+
# We don't need this running for CI atm as none of our
|
17
|
+
# tests actually hit s3. Although we might choose to change this
|
18
|
+
unless ENV["EXERCISM_CI"]
|
19
|
+
begin
|
20
|
+
ExercismConfig::SetupS3Client.().create_bucket(bucket: Exercism.config.aws_iterations_bucket)
|
21
|
+
rescue Seahorse::Client::NetworkingError => e
|
22
|
+
puts "local S3 not up yet..."
|
23
|
+
sleep 2 # slighty retry delaty
|
24
|
+
retry
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
########################
|
29
|
+
# Setup local dynamodb #
|
30
|
+
########################
|
31
|
+
%w[tooling_jobs tooling_jobs-test].each do |table_name|
|
32
|
+
begin
|
33
|
+
Exercism.config.dynamodb_client.delete_table(
|
34
|
+
table_name: table_name
|
35
|
+
)
|
36
|
+
rescue Aws::DynamoDB::Errors::ResourceNotFoundException
|
37
|
+
end
|
38
|
+
puts "[x] #{table_name}"
|
39
|
+
|
40
|
+
Exercism.config.dynamodb_client.create_table(
|
41
|
+
table_name: table_name,
|
42
|
+
attribute_definitions: [
|
43
|
+
{
|
44
|
+
attribute_name: "id",
|
45
|
+
attribute_type: "S"
|
46
|
+
}
|
47
|
+
],
|
48
|
+
key_schema: [
|
49
|
+
{
|
50
|
+
attribute_name: "id",
|
51
|
+
key_type: "HASH"
|
52
|
+
}
|
53
|
+
],
|
54
|
+
provisioned_throughput: {
|
55
|
+
read_capacity_units: 1,
|
56
|
+
write_capacity_units: 1
|
57
|
+
}
|
58
|
+
)
|
59
|
+
|
60
|
+
Exercism.config.dynamodb_client.update_table(
|
61
|
+
table_name: table_name,
|
62
|
+
attribute_definitions: [
|
63
|
+
{
|
64
|
+
attribute_name: "job_status",
|
65
|
+
attribute_type: "S"
|
66
|
+
},
|
67
|
+
{
|
68
|
+
attribute_name: "created_at",
|
69
|
+
attribute_type: "N"
|
70
|
+
}
|
71
|
+
],
|
72
|
+
global_secondary_index_updates: [
|
73
|
+
{
|
74
|
+
create: {
|
75
|
+
index_name: "job_status", # required
|
76
|
+
key_schema: [ # required
|
77
|
+
{
|
78
|
+
attribute_name: "job_status", # required
|
79
|
+
key_type: "HASH" # required, accepts HASH, RANGE
|
80
|
+
},
|
81
|
+
{
|
82
|
+
attribute_name: "created_at", # required
|
83
|
+
key_type: "RANGE" # required, accepts HASH, RANGE
|
84
|
+
}
|
85
|
+
],
|
86
|
+
projection: { # required
|
87
|
+
projection_type: "KEYS_ONLY"
|
88
|
+
},
|
89
|
+
provisioned_throughput: {
|
90
|
+
read_capacity_units: 1, # required
|
91
|
+
write_capacity_units: 1 # required
|
92
|
+
}
|
93
|
+
}
|
94
|
+
}
|
95
|
+
]
|
96
|
+
)
|
97
|
+
end
|