hephaestus 0.1.3 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +27 -1
- data/bin/hephaestus +9 -3
- data/lib/hephaestus/app_builder.rb +26 -5
- data/lib/hephaestus/exit_on_failure.rb +4 -4
- data/lib/hephaestus/generators/app_generator.rb +148 -56
- data/lib/hephaestus/generators/config_generator.rb +30 -2
- data/lib/hephaestus/generators/core_generator.rb +30 -1
- data/lib/hephaestus/generators/deployment_generator.rb +9 -3
- data/lib/hephaestus/generators/lib_generator.rb +1 -0
- data/lib/hephaestus/generators/sorbet_generator.rb +1 -1
- data/lib/hephaestus/version.rb +1 -1
- data/lib/hephaestus.rb +8 -0
- data/templates/.dockerignore +39 -0
- data/templates/.env.sample +6 -0
- data/templates/.github/dependabot.yml +12 -7
- data/templates/.github/workflows/automerge.yml +5 -85
- data/templates/.github/workflows/deploy.yml +30 -0
- data/templates/.github/workflows/licenses.yml +11 -31
- data/templates/.github/workflows/lint.yml +14 -34
- data/templates/.github/workflows/security.yml +9 -32
- data/templates/.github/workflows/sorbet.yml +7 -37
- data/templates/.github/workflows/test.yml +7 -41
- data/templates/.licensed.yml +7 -3
- data/templates/.ruby-version +1 -0
- data/templates/Dockerfile +79 -0
- data/templates/Gemfile.erb +23 -26
- data/templates/Procfile.debug +1 -1
- data/templates/app/controllers/app_controller.rb +71 -0
- data/templates/app/controllers/application_controller.rb +14 -1
- data/templates/app/controllers/concerns/authable.rb +20 -2
- data/templates/app/controllers/settings_controller.rb +32 -2
- data/templates/app/jobs/update_yetto_job.rb +6 -7
- data/templates/app/lib/body_parameter/yetto_parameters.rb +32 -0
- data/templates/app/lib/path_parameter/settings_parameters.rb +22 -0
- data/templates/app/lib/plug_app/middleware/openapi_validation.rb +5 -5
- data/templates/app/lib/plug_app/middleware/tracing_attributes.rb +1 -1
- data/templates/app/services/http_service.rb +27 -0
- data/templates/app/services/yetto_service.rb +24 -32
- data/templates/app/views/settings/new.json.jbuilder +21 -0
- data/templates/bin/docker-entrypoint +14 -0
- data/templates/compose.yml +7 -0
- data/templates/config/initializers/environment.rb +5 -8
- data/templates/config/initializers/filter_parameter_logging.rb +3 -0
- data/templates/config/initializers/opentelemetry.rb +32 -0
- data/templates/config/locales/en.yml +32 -0
- data/templates/config/locales/settings/en.yml +5 -0
- data/templates/lib/plug_app/schemas/api/2023-03-06/components/schemas/yetto.json +2 -2
- data/templates/lib/plug_app/schemas/api/2023-03-06/openapi.json +4 -4
- data/templates/lib/plug_app/schemas/api/2023-03-06/paths/plug.json +1 -1
- data/templates/lib/plug_app/schemas/api/2023-03-06/paths/yetto/after_create_message.json +2 -2
- data/templates/lib/plug_app/schemas/api/2023-03-06/paths/yetto/after_create_plug_installation.json +2 -2
- data/templates/lib/tasks/test_tasks.rake +6 -2
- data/templates/script/edit-credentials +29 -0
- data/templates/script/hmac_text +1 -1
- data/templates/script/licenses +4 -48
- data/templates/script/server +62 -2
- data/templates/script/sorbet +7 -0
- data/templates/test/controllers/application_controller_test.rb +32 -0
- data/templates/test/controllers/settings_controller_test.rb +1 -1
- data/templates/test/controllers/yetto_controller_test.rb +1 -1
- data/templates/test/fixtures/files/fake_pem_file/fake.pem +27 -0
- data/templates/test/jobs/update_yetto_job_test.rb +3 -18
- data/templates/test/support/api.rb +1 -1
- data/templates/test/support/rails.rb +1 -1
- data/templates/test/support/webmocks/slack_webmock.rb +2 -2
- data/templates/test/support/webmocks/yetto_webmock.rb +119 -0
- data/templates/test/test_helper.rb +16 -3
- data/templates/vendor/fly/fly-production.toml +38 -0
- data/templates/vendor/fly/fly-staging.toml +33 -0
- metadata +39 -16
- data/templates/.env.test +0 -4
- data/templates/.github/actions/license/action.yml +0 -11
- data/templates/.github/actions/setup/action.yml +0 -10
- data/templates/.github/actions/sisyphus/action.yml +0 -11
- data/templates/.github/actions/sorbet/action.yml +0 -19
- data/templates/app/views/settings/index.json.jbuilder +0 -15
- data/templates/config/initializers/open_telemetry.rb +0 -27
- data/templates/script/security_checks/brakeman +0 -5
- data/templates/script/security_checks/bundle-audit +0 -5
- data/templates/script/server-debug +0 -5
- data/templates/script/typecheck +0 -44
- data/templates/test/fixtures/files/.keep +0 -0
- data/templates/test/support/webmocks/yetto.rb +0 -94
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hephaestus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Garen Torikian
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -54,6 +54,21 @@ dependencies:
|
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: 7.0.0
|
56
56
|
force_ruby_platform: false
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: rainbow
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - "~>"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '3.0'
|
64
|
+
type: :runtime
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - "~>"
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '3.0'
|
71
|
+
force_ruby_platform: false
|
57
72
|
- !ruby/object:Gem::Dependency
|
58
73
|
name: minitest
|
59
74
|
requirement: !ruby/object:Gem::Requirement
|
@@ -113,13 +128,11 @@ files:
|
|
113
128
|
- lib/hephaestus/generators/rubocop_generator.rb
|
114
129
|
- lib/hephaestus/generators/sorbet_generator.rb
|
115
130
|
- lib/hephaestus/version.rb
|
116
|
-
- templates/.
|
117
|
-
- templates/.
|
118
|
-
- templates/.github/actions/setup/action.yml
|
119
|
-
- templates/.github/actions/sisyphus/action.yml
|
120
|
-
- templates/.github/actions/sorbet/action.yml
|
131
|
+
- templates/.dockerignore
|
132
|
+
- templates/.env.sample
|
121
133
|
- templates/.github/dependabot.yml
|
122
134
|
- templates/.github/workflows/automerge.yml
|
135
|
+
- templates/.github/workflows/deploy.yml
|
123
136
|
- templates/.github/workflows/licenses.yml
|
124
137
|
- templates/.github/workflows/lint.yml
|
125
138
|
- templates/.github/workflows/security.yml
|
@@ -127,13 +140,16 @@ files:
|
|
127
140
|
- templates/.github/workflows/test.yml
|
128
141
|
- templates/.licensed.yml
|
129
142
|
- templates/.rubocop.yml
|
143
|
+
- templates/.ruby-version
|
130
144
|
- templates/.vscode/extensions.json
|
131
145
|
- templates/.vscode/launch.json
|
132
146
|
- templates/.vscode/settings.json
|
147
|
+
- templates/Dockerfile
|
133
148
|
- templates/Gemfile.erb
|
134
149
|
- templates/Procfile.debug
|
135
150
|
- templates/Procfile.dev
|
136
151
|
- templates/README.md.erb
|
152
|
+
- templates/app/controllers/app_controller.rb
|
137
153
|
- templates/app/controllers/application_controller.rb
|
138
154
|
- templates/app/controllers/concerns/authable.rb
|
139
155
|
- templates/app/controllers/root_controller.rb
|
@@ -148,6 +164,7 @@ files:
|
|
148
164
|
- templates/app/lib/headers.rb
|
149
165
|
- templates/app/lib/headers/yetto.rb
|
150
166
|
- templates/app/lib/path_parameter.rb
|
167
|
+
- templates/app/lib/path_parameter/settings_parameters.rb
|
151
168
|
- templates/app/lib/path_parameter/yetto_parameters.rb
|
152
169
|
- templates/app/lib/plug_app/http.rb
|
153
170
|
- templates/app/lib/plug_app/middleware/malformed_request.rb
|
@@ -156,16 +173,21 @@ files:
|
|
156
173
|
- templates/app/lib/plug_app/middleware/tracing_attributes.rb
|
157
174
|
- templates/app/lib/query_parameter.rb
|
158
175
|
- templates/app/serializers/error_serializer.rb
|
176
|
+
- templates/app/services/http_service.rb
|
159
177
|
- templates/app/services/yetto_service.rb
|
160
|
-
- templates/app/views/settings/
|
178
|
+
- templates/app/views/settings/new.json.jbuilder
|
179
|
+
- templates/bin/docker-entrypoint
|
180
|
+
- templates/compose.yml
|
161
181
|
- templates/config/initializers/cors.rb
|
162
182
|
- templates/config/initializers/environment.rb
|
163
183
|
- templates/config/initializers/filter_parameter_logging.rb
|
164
184
|
- templates/config/initializers/inflections.rb
|
165
185
|
- templates/config/initializers/lograge.rb
|
166
|
-
- templates/config/initializers/
|
186
|
+
- templates/config/initializers/opentelemetry.rb
|
167
187
|
- templates/config/initializers/sidekiq.rb
|
168
188
|
- templates/config/initializers/slack_webhook_logger.rb
|
189
|
+
- templates/config/locales/en.yml
|
190
|
+
- templates/config/locales/settings/en.yml
|
169
191
|
- templates/config/sidekiq.yml
|
170
192
|
- templates/hephaestus_gitignore
|
171
193
|
- templates/lib/plug_app/schemas/api/2023-03-06/components/parameters/headers/yetto.json
|
@@ -179,20 +201,19 @@ files:
|
|
179
201
|
- templates/lib/plug_app/schemas/api/2023-03-06/paths/yetto/after_create_plug_installation.json
|
180
202
|
- templates/lib/tasks/test_tasks.rake
|
181
203
|
- templates/script/ci
|
204
|
+
- templates/script/edit-credentials
|
182
205
|
- templates/script/hmac_text
|
183
206
|
- templates/script/licenses
|
184
207
|
- templates/script/ngrok
|
185
|
-
- templates/script/security_checks/brakeman
|
186
|
-
- templates/script/security_checks/bundle-audit
|
187
208
|
- templates/script/server
|
188
|
-
- templates/script/
|
209
|
+
- templates/script/sorbet
|
189
210
|
- templates/script/test
|
190
|
-
- templates/script/typecheck
|
191
211
|
- templates/sorbet/custom.rbi
|
212
|
+
- templates/test/controllers/application_controller_test.rb
|
192
213
|
- templates/test/controllers/root_controller_test.rb
|
193
214
|
- templates/test/controllers/settings_controller_test.rb
|
194
215
|
- templates/test/controllers/yetto_controller_test.rb
|
195
|
-
- templates/test/fixtures/files
|
216
|
+
- templates/test/fixtures/files/fake_pem_file/fake.pem
|
196
217
|
- templates/test/integration/.keep
|
197
218
|
- templates/test/jobs/update_yetto_job_test.rb
|
198
219
|
- templates/test/mailers/.keep
|
@@ -200,8 +221,10 @@ files:
|
|
200
221
|
- templates/test/support/rails.rb
|
201
222
|
- templates/test/support/webmocks.rb
|
202
223
|
- templates/test/support/webmocks/slack_webmock.rb
|
203
|
-
- templates/test/support/webmocks/
|
224
|
+
- templates/test/support/webmocks/yetto_webmock.rb
|
204
225
|
- templates/test/test_helper.rb
|
226
|
+
- templates/vendor/fly/fly-production.toml
|
227
|
+
- templates/vendor/fly/fly-staging.toml
|
205
228
|
homepage: http://github.com/yettoapp/hephaestus
|
206
229
|
licenses:
|
207
230
|
- MIT
|
@@ -222,7 +245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
222
245
|
- !ruby/object:Gem::Version
|
223
246
|
version: 3.4.7
|
224
247
|
requirements: []
|
225
|
-
rubygems_version: 3.4.
|
248
|
+
rubygems_version: 3.4.19
|
226
249
|
signing_key:
|
227
250
|
specification_version: 4
|
228
251
|
summary: Generate a Rails app that can be used to create plugs for Yetto.
|
data/templates/.env.test
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
name: "Run Sorbet Check"
|
2
|
-
description: "Validates that all the Sorbet types are up to date."
|
3
|
-
|
4
|
-
inputs:
|
5
|
-
gh_token:
|
6
|
-
description: 'A GitHub PAT'
|
7
|
-
required: true
|
8
|
-
|
9
|
-
runs:
|
10
|
-
using: "composite"
|
11
|
-
steps:
|
12
|
-
- uses: ./.github/actions/setup
|
13
|
-
|
14
|
-
- name: Update RBI files
|
15
|
-
shell: bash
|
16
|
-
id: update
|
17
|
-
env:
|
18
|
-
GITHUB_TOKEN: ${{ inputs.gh_token }}
|
19
|
-
run: script/typecheck --update
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# typed: false
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "opentelemetry/sdk"
|
5
|
-
require "opentelemetry/semantic_conventions"
|
6
|
-
|
7
|
-
if Rails.env.staging? || Rails.env.production?
|
8
|
-
OpenTelemetry::SDK.configure do |c|
|
9
|
-
c.logger = Rails.logger
|
10
|
-
|
11
|
-
c.use_all
|
12
|
-
|
13
|
-
if productionish?
|
14
|
-
c.add_span_processor(
|
15
|
-
OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
|
16
|
-
OpenTelemetry::Exporter::OTLP::Exporter.new,
|
17
|
-
),
|
18
|
-
)
|
19
|
-
else
|
20
|
-
c.add_span_processor(
|
21
|
-
OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessornew(
|
22
|
-
OpenTelemetry::SDK::Trace::Export::SpanExporter.new,
|
23
|
-
),
|
24
|
-
)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
data/templates/script/typecheck
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
#!/bin/bash
|
2
|
-
|
3
|
-
set -e
|
4
|
-
|
5
|
-
function usage() {
|
6
|
-
echo "Usage:"
|
7
|
-
echo "$0 [options]"
|
8
|
-
echo ""
|
9
|
-
echo " Options:"
|
10
|
-
echo " -u/--update Update tapioca RBI files"
|
11
|
-
echo " -v/--verify Verify tapioca RBI files"
|
12
|
-
echo " -h/--help Display this help message"
|
13
|
-
echo ""
|
14
|
-
exit 1
|
15
|
-
}
|
16
|
-
|
17
|
-
while [ "$1" != "" ]; do
|
18
|
-
case $1 in
|
19
|
-
-u | --update)
|
20
|
-
echo "Updating Tapioca RBI files ..."
|
21
|
-
bin/tapioca gem
|
22
|
-
echo "Updating Tapioca DSL files ..."
|
23
|
-
bin/tapioca dsl
|
24
|
-
echo "Updating Tapioca TODO files ..."
|
25
|
-
bin/tapioca todo
|
26
|
-
;;
|
27
|
-
-v | --verify)
|
28
|
-
echo "Verify Sorbet types..."
|
29
|
-
bin/bundle exec srb tc
|
30
|
-
echo "Verify gem RBIs are up-to-date ..."
|
31
|
-
bin/tapioca gem --verify
|
32
|
-
echo "Verify duplicates in shims ..."
|
33
|
-
bin/tapioca check-shims
|
34
|
-
;;
|
35
|
-
-h | --help)
|
36
|
-
usage
|
37
|
-
;;
|
38
|
-
*)
|
39
|
-
usage
|
40
|
-
exit 1
|
41
|
-
;;
|
42
|
-
esac
|
43
|
-
shift
|
44
|
-
done
|
File without changes
|
@@ -1,94 +0,0 @@
|
|
1
|
-
# typed: false
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
module Webmocks
|
5
|
-
module Yetto
|
6
|
-
SHA256_DIGEST = OpenSSL::Digest.new("sha256")
|
7
|
-
|
8
|
-
def yetto_auth_header(payload)
|
9
|
-
"sha256=#{OpenSSL::HMAC.hexdigest(SHA256_DIGEST, YETTO_PLUG_APP_TOKEN, payload.to_json)}"
|
10
|
-
end
|
11
|
-
|
12
|
-
def assert_requested_get_plug_installation(organization_id, inbox_id, plug_installation_id)
|
13
|
-
assert_requested(:get, "#{::YettoService::YETTO_API_VERSION_TLD}/organizations/#{organization_id}/inboxes/#{inbox_id}/plug_installations/#{plug_installation_id}")
|
14
|
-
end
|
15
|
-
|
16
|
-
def stub_get_plug_installation(organization_id, inbox_id, plug_installation_id, response = nil, status: 200)
|
17
|
-
response ||= {
|
18
|
-
installed_on_inbox: {
|
19
|
-
id: inbox_id,
|
20
|
-
organization: {
|
21
|
-
id: organization_id,
|
22
|
-
status: "active",
|
23
|
-
},
|
24
|
-
},
|
25
|
-
plug: {
|
26
|
-
id: "plg_#{Faker::Alphanumeric.alphanumeric(number: 26).upcase}",
|
27
|
-
},
|
28
|
-
settings: {
|
29
|
-
from_email: "new@from.company",
|
30
|
-
},
|
31
|
-
}
|
32
|
-
|
33
|
-
stub_request(:get, "#{::YettoService::YETTO_API_VERSION_TLD}/organizations/#{@organization_id}/inboxes/#{@inbox_id}/plug_installations/#{plug_installation_id}")
|
34
|
-
.to_return(
|
35
|
-
status: status,
|
36
|
-
headers: { content_type: "application/json; charset=utf-8" },
|
37
|
-
body: response.to_json,
|
38
|
-
)
|
39
|
-
end
|
40
|
-
|
41
|
-
def assert_requested_update_installation(organization_id, inbox_id, plug_installation_id)
|
42
|
-
assert_requested(:patch, "#{::YettoService::YETTO_API_VERSION_TLD}/organizations/#{@organization_id}/inboxes/#{@inbox_id}/plug_installations/#{plug_installation_id}")
|
43
|
-
end
|
44
|
-
|
45
|
-
def stub_update_installation(organization_id, inbox_id, plug_installation_id, params, response: {}, status: 200)
|
46
|
-
stub_request(:patch, "#{::YettoService::YETTO_API_VERSION_TLD}/organizations/#{@organization_id}/inboxes/#{@inbox_id}/plug_installations/#{plug_installation_id}")
|
47
|
-
.with(
|
48
|
-
body: params,
|
49
|
-
)
|
50
|
-
.to_return(
|
51
|
-
status: 200,
|
52
|
-
headers: { content_type: "application/json; charset=utf-8" },
|
53
|
-
body: response.to_json,
|
54
|
-
)
|
55
|
-
end
|
56
|
-
|
57
|
-
def assert_requested_create_message(organization_id, inbox_id)
|
58
|
-
assert_requested(:post, "#{::YettoService::YETTO_API_VERSION_TLD}/organizations/#{organization_id}/inboxes/#{inbox_id}/messages")
|
59
|
-
end
|
60
|
-
|
61
|
-
def stub_create_message(organization_id, inbox_id, creator_id, payload)
|
62
|
-
stub_request(:post, "#{::YettoService::YETTO_API_VERSION_TLD}/organizations/#{organization_id}/inboxes/#{inbox_id}/messages")
|
63
|
-
.with(
|
64
|
-
body: payload,
|
65
|
-
)
|
66
|
-
.to_return(
|
67
|
-
status: 200,
|
68
|
-
headers: { content_type: "application/json; charset=utf-8" },
|
69
|
-
body: {}.to_json,
|
70
|
-
)
|
71
|
-
end
|
72
|
-
|
73
|
-
def assert_requested_create_switch(organization_id, inbox_id)
|
74
|
-
assert_requested(:post, "#{::YettoService::YETTO_API_VERSION_TLD}/organizations/#{organization_id}/inboxes/#{inbox_id}/switches")
|
75
|
-
end
|
76
|
-
|
77
|
-
def stub_create_switch(organization_id, inbox_id, creator_id, params)
|
78
|
-
payload = {
|
79
|
-
name: "After install",
|
80
|
-
creator: { id: creator_id },
|
81
|
-
}
|
82
|
-
|
83
|
-
stub_request(:post, "#{::YettoService::YETTO_API_VERSION_TLD}/organizations/#{organization_id}/inboxes/#{inbox_id}/switches")
|
84
|
-
.with(
|
85
|
-
body: payload,
|
86
|
-
)
|
87
|
-
.to_return(
|
88
|
-
status: 200,
|
89
|
-
headers: { content_type: "application/json; charset=utf-8" },
|
90
|
-
body: {}.to_json,
|
91
|
-
)
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|