hephaestus 0.8.11 → 0.8.12.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/CHANGELOG.md +12 -0
  4. data/README.md +3 -1
  5. data/bin/hephaestus +37 -19
  6. data/lib/hephaestus/app_builder.rb +23 -145
  7. data/lib/hephaestus/app_name.rb +33 -0
  8. data/lib/hephaestus/generators/app_generator.rb +79 -75
  9. data/lib/hephaestus/generators/base.rb +0 -1
  10. data/lib/hephaestus/generators/config_generator.rb +3 -114
  11. data/lib/hephaestus/generators/core_generator.rb +18 -58
  12. data/lib/hephaestus/generators/db_generator.rb +12 -0
  13. data/lib/hephaestus/generators/deployment_generator.rb +3 -8
  14. data/lib/hephaestus/generators/lib_generator.rb +0 -10
  15. data/lib/hephaestus/generators/license_generator.rb +4 -1
  16. data/lib/hephaestus/generators/rubocop_generator.rb +1 -1
  17. data/lib/hephaestus/version.rb +1 -1
  18. data/lib/hephaestus.rb +2 -1
  19. data/templates/Dockerfile +7 -75
  20. data/templates/Gemfile +73 -0
  21. data/templates/Procfile +2 -0
  22. data/templates/app/controllers/app_controller.rb.tt +35 -0
  23. data/templates/app/controllers/application_controller.rb +1 -7
  24. data/templates/app/controllers/concerns/authable.rb.tt +50 -0
  25. data/templates/app/controllers/settings_controller.rb +5 -28
  26. data/templates/app/controllers/yetto_controller.rb +9 -10
  27. data/templates/app/lib/body_parameter/yetto_parameters.rb +8 -29
  28. data/templates/app/lib/{constants/app.rb → constants.rb} +1 -3
  29. data/templates/app/services/{http_service.rb → app_service.rb.tt} +6 -6
  30. data/templates/app/views/settings/new.json.jbuilder.tt +18 -0
  31. data/templates/bin/bundle +115 -0
  32. data/templates/bin/docker-entrypoint +20 -10
  33. data/templates/bin/foreman +27 -0
  34. data/templates/bin/jobs +7 -0
  35. data/templates/bin/rails +6 -0
  36. data/templates/bin/rake +6 -0
  37. data/templates/bin/setup +28 -0
  38. data/templates/bin/tapioca +27 -0
  39. data/templates/config/application.rb.tt +36 -0
  40. data/templates/config/boot.rb +7 -0
  41. data/templates/config/environment.rb +8 -0
  42. data/templates/config/environments/blank.rb +7 -0
  43. data/templates/config/initializers/environment.rb +2 -36
  44. data/templates/config/locales/en.yml +5 -31
  45. data/templates/config/puma.rb +5 -0
  46. data/templates/config/routes.rb.tt +28 -0
  47. data/templates/config.ru +9 -0
  48. data/templates/db/queue_schema.rb +132 -0
  49. data/templates/db/schema.rb +17 -0
  50. data/templates/hephaestus_env.sample +12 -0
  51. data/templates/hephaestus_github/dependabot.yml +27 -0
  52. data/templates/hephaestus_github/workflows/automerge.yml +14 -0
  53. data/templates/hephaestus_github/workflows/deploy.yml +30 -0
  54. data/templates/hephaestus_github/workflows/licenses.yml +17 -0
  55. data/templates/hephaestus_github/workflows/lint.yml +17 -0
  56. data/templates/hephaestus_github/workflows/security.yml +19 -0
  57. data/templates/hephaestus_github/workflows/sorbet.yml +19 -0
  58. data/templates/hephaestus_github/workflows/test.yml.tt +21 -0
  59. data/templates/hephaestus_github/workflows/updater.yml +18 -0
  60. data/templates/hephaestus_vscode/extensions.json +9 -0
  61. data/templates/hephaestus_vscode/launch.json +13 -0
  62. data/templates/hephaestus_vscode/settings.json +58 -0
  63. data/templates/lib/schemas/api/2023-03-06/components/parameters/headers/yetto.json +42 -0
  64. data/templates/lib/schemas/api/2023-03-06/components/parameters/plugInstallation.json +12 -0
  65. data/templates/lib/schemas/api/2023-03-06/components/schemas/plug.json +9 -0
  66. data/templates/lib/schemas/api/2023-03-06/components/schemas/responses.json +64 -0
  67. data/templates/lib/schemas/api/2023-03-06/components/schemas/yetto.json +116 -0
  68. data/templates/lib/schemas/api/2023-03-06/openapi.json +30 -0
  69. data/templates/lib/schemas/api/2023-03-06/paths/app.json +90 -0
  70. data/templates/lib/schemas/api/2023-03-06/paths/yetto/message_created.json +51 -0
  71. data/templates/lib/schemas/api/2023-03-06/paths/yetto/plug_installation_created.json +51 -0
  72. data/templates/script/docker-build-prod.tt +11 -0
  73. data/templates/script/docker-run.tt +8 -0
  74. data/templates/script/edit-credentials +12 -3
  75. data/templates/script/hmac_text +1 -1
  76. data/templates/script/ngrok.tt +7 -0
  77. data/templates/script/server +6 -45
  78. data/templates/test/controllers/app_controller_test.rb.tt +188 -0
  79. data/templates/test/controllers/settings_controller_test.rb.tt +125 -0
  80. data/templates/test/controllers/yetto_controller_test.rb +100 -71
  81. data/templates/test/fixtures/files/plug_installation_settings/valid.json +1 -1
  82. data/templates/test/support/rails.rb +16 -36
  83. data/templates/test/support/webmocks/app_webmock.rb.tt +29 -0
  84. data/templates/test/test_helper.rb +1 -31
  85. data/templates/vendor/fly/{fly-production.toml → fly-production.toml.tt} +24 -11
  86. data/templates/vendor/fly/{fly-staging.toml → fly-staging.toml.tt} +18 -15
  87. metadata +59 -72
  88. data/lib/hephaestus/exit_on_failure.rb +0 -22
  89. data/templates/Gemfile.erb +0 -120
  90. data/templates/Procfile.debug +0 -2
  91. data/templates/Procfile.dev +0 -2
  92. data/templates/app/controllers/app_controller.rb +0 -72
  93. data/templates/app/controllers/concerns/authable.rb +0 -50
  94. data/templates/app/controllers/staff_controller.rb +0 -15
  95. data/templates/app/jobs/update_yetto_job.rb +0 -26
  96. data/templates/app/lib/headers/yetto.rb +0 -19
  97. data/templates/app/lib/headers.rb +0 -5
  98. data/templates/app/lib/path_parameter/settings_parameters.rb +0 -22
  99. data/templates/app/lib/path_parameter/yetto_parameters.rb +0 -28
  100. data/templates/app/lib/path_parameter.rb +0 -8
  101. data/templates/app/lib/plug_app/http.rb +0 -37
  102. data/templates/app/lib/plug_app/middleware/malformed_request.rb +0 -110
  103. data/templates/app/lib/plug_app/middleware/openapi_validation.rb +0 -83
  104. data/templates/app/lib/plug_app/middleware/tracing_attributes.rb +0 -46
  105. data/templates/app/lib/query_parameter.rb +0 -6
  106. data/templates/app/serializers/error_serializer.rb +0 -16
  107. data/templates/app/services/yetto_service.rb +0 -51
  108. data/templates/app/views/settings/new.json.jbuilder +0 -21
  109. data/templates/compose.yml +0 -5
  110. data/templates/config/initializers/000-oj.rb +0 -6
  111. data/templates/config/initializers/cors.rb +0 -19
  112. data/templates/config/initializers/filter_parameter_logging.rb +0 -25
  113. data/templates/config/initializers/inflections.rb +0 -20
  114. data/templates/config/initializers/lograge.rb +0 -25
  115. data/templates/config/initializers/opentelemetry.rb +0 -32
  116. data/templates/config/initializers/sidekiq.rb +0 -11
  117. data/templates/config/initializers/slack_webhook_logger.rb +0 -17
  118. data/templates/config/sidekiq.yml +0 -20
  119. data/templates/script/ngrok +0 -5
  120. data/templates/test/controllers/settings_controller_test.rb +0 -27
  121. data/templates/test/fixtures/plug_installation_settings/invalid.json +0 -3
  122. data/templates/test/fixtures/plug_installation_settings/valid.json +0 -3
  123. data/templates/test/jobs/update_yetto_job_test.rb +0 -26
  124. data/templates/test/support/api.rb +0 -76
  125. data/templates/test/support/webmocks/slack_webmock.rb +0 -24
  126. data/templates/test/support/webmocks/yetto_webmock.rb +0 -119
  127. data/templates/test/support/webmocks.rb +0 -5
@@ -0,0 +1,132 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
4
+ ActiveRecord::Schema[7.1].define(version: 1) do
5
+ create_table "solid_queue_blocked_executions", force: :cascade do |t|
6
+ t.bigint("job_id", null: false)
7
+ t.string("queue_name", null: false)
8
+ t.integer("priority", default: 0, null: false)
9
+ t.string("concurrency_key", null: false)
10
+ t.datetime("expires_at", null: false)
11
+ t.datetime("created_at", null: false)
12
+ t.index(["concurrency_key", "priority", "job_id"], name: "index_solid_queue_blocked_executions_for_release")
13
+ t.index(["expires_at", "concurrency_key"], name: "index_solid_queue_blocked_executions_for_maintenance")
14
+ t.index(["job_id"], name: "index_solid_queue_blocked_executions_on_job_id", unique: true)
15
+ end
16
+
17
+ create_table "solid_queue_claimed_executions", force: :cascade do |t|
18
+ t.bigint("job_id", null: false)
19
+ t.bigint("process_id")
20
+ t.datetime("created_at", null: false)
21
+ t.index(["job_id"], name: "index_solid_queue_claimed_executions_on_job_id", unique: true)
22
+ t.index(["process_id", "job_id"], name: "index_solid_queue_claimed_executions_on_process_id_and_job_id")
23
+ end
24
+
25
+ create_table "solid_queue_failed_executions", force: :cascade do |t|
26
+ t.bigint("job_id", null: false)
27
+ t.text("error")
28
+ t.datetime("created_at", null: false)
29
+ t.index(["job_id"], name: "index_solid_queue_failed_executions_on_job_id", unique: true)
30
+ end
31
+
32
+ create_table "solid_queue_jobs", force: :cascade do |t|
33
+ t.string("queue_name", null: false)
34
+ t.string("class_name", null: false)
35
+ t.text("arguments")
36
+ t.integer("priority", default: 0, null: false)
37
+ t.string("active_job_id")
38
+ t.datetime("scheduled_at")
39
+ t.datetime("finished_at")
40
+ t.string("concurrency_key")
41
+ t.datetime("created_at", null: false)
42
+ t.datetime("updated_at", null: false)
43
+ t.index(["active_job_id"], name: "index_solid_queue_jobs_on_active_job_id")
44
+ t.index(["class_name"], name: "index_solid_queue_jobs_on_class_name")
45
+ t.index(["finished_at"], name: "index_solid_queue_jobs_on_finished_at")
46
+ t.index(["queue_name", "finished_at"], name: "index_solid_queue_jobs_for_filtering")
47
+ t.index(["scheduled_at", "finished_at"], name: "index_solid_queue_jobs_for_alerting")
48
+ end
49
+
50
+ create_table "solid_queue_pauses", force: :cascade do |t|
51
+ t.string("queue_name", null: false)
52
+ t.datetime("created_at", null: false)
53
+ t.index(["queue_name"], name: "index_solid_queue_pauses_on_queue_name", unique: true)
54
+ end
55
+
56
+ create_table "solid_queue_processes", force: :cascade do |t|
57
+ t.string("kind", null: false)
58
+ t.datetime("last_heartbeat_at", null: false)
59
+ t.bigint("supervisor_id")
60
+ t.integer("pid", null: false)
61
+ t.string("hostname")
62
+ t.text("metadata")
63
+ t.datetime("created_at", null: false)
64
+ t.string("name", null: false)
65
+ t.index(["last_heartbeat_at"], name: "index_solid_queue_processes_on_last_heartbeat_at")
66
+ t.index(["name", "supervisor_id"], name: "index_solid_queue_processes_on_name_and_supervisor_id", unique: true)
67
+ t.index(["supervisor_id"], name: "index_solid_queue_processes_on_supervisor_id")
68
+ end
69
+
70
+ create_table "solid_queue_ready_executions", force: :cascade do |t|
71
+ t.bigint("job_id", null: false)
72
+ t.string("queue_name", null: false)
73
+ t.integer("priority", default: 0, null: false)
74
+ t.datetime("created_at", null: false)
75
+ t.index(["job_id"], name: "index_solid_queue_ready_executions_on_job_id", unique: true)
76
+ t.index(["priority", "job_id"], name: "index_solid_queue_poll_all")
77
+ t.index(["queue_name", "priority", "job_id"], name: "index_solid_queue_poll_by_queue")
78
+ end
79
+
80
+ create_table "solid_queue_recurring_executions", force: :cascade do |t|
81
+ t.bigint("job_id", null: false)
82
+ t.string("task_key", null: false)
83
+ t.datetime("run_at", null: false)
84
+ t.datetime("created_at", null: false)
85
+ t.index(["job_id"], name: "index_solid_queue_recurring_executions_on_job_id", unique: true)
86
+ t.index(["task_key", "run_at"], name: "index_solid_queue_recurring_executions_on_task_key_and_run_at", unique: true)
87
+ end
88
+
89
+ create_table "solid_queue_recurring_tasks", force: :cascade do |t|
90
+ t.string("key", null: false)
91
+ t.string("schedule", null: false)
92
+ t.string("command", limit: 2048)
93
+ t.string("class_name")
94
+ t.text("arguments")
95
+ t.string("queue_name")
96
+ t.integer("priority", default: 0)
97
+ t.boolean("static", default: true, null: false)
98
+ t.text("description")
99
+ t.datetime("created_at", null: false)
100
+ t.datetime("updated_at", null: false)
101
+ t.index(["key"], name: "index_solid_queue_recurring_tasks_on_key", unique: true)
102
+ t.index(["static"], name: "index_solid_queue_recurring_tasks_on_static")
103
+ end
104
+
105
+ create_table "solid_queue_scheduled_executions", force: :cascade do |t|
106
+ t.bigint("job_id", null: false)
107
+ t.string("queue_name", null: false)
108
+ t.integer("priority", default: 0, null: false)
109
+ t.datetime("scheduled_at", null: false)
110
+ t.datetime("created_at", null: false)
111
+ t.index(["job_id"], name: "index_solid_queue_scheduled_executions_on_job_id", unique: true)
112
+ t.index(["scheduled_at", "priority", "job_id"], name: "index_solid_queue_dispatch_all")
113
+ end
114
+
115
+ create_table "solid_queue_semaphores", force: :cascade do |t|
116
+ t.string("key", null: false)
117
+ t.integer("value", default: 1, null: false)
118
+ t.datetime("expires_at", null: false)
119
+ t.datetime("created_at", null: false)
120
+ t.datetime("updated_at", null: false)
121
+ t.index(["expires_at"], name: "index_solid_queue_semaphores_on_expires_at")
122
+ t.index(["key", "value"], name: "index_solid_queue_semaphores_on_key_and_value")
123
+ t.index(["key"], name: "index_solid_queue_semaphores_on_key", unique: true)
124
+ end
125
+
126
+ add_foreign_key "solid_queue_blocked_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade
127
+ add_foreign_key "solid_queue_claimed_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade
128
+ add_foreign_key "solid_queue_failed_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade
129
+ add_foreign_key "solid_queue_ready_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade
130
+ add_foreign_key "solid_queue_recurring_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade
131
+ add_foreign_key "solid_queue_scheduled_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade
132
+ end
@@ -0,0 +1,17 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
4
+ # This file is auto-generated from the current state of the database. Instead
5
+ # of editing this file, please use the migrations feature of Active Record to
6
+ # incrementally modify your database, and then regenerate this schema definition.
7
+ #
8
+ # This file is the source Rails uses to define your schema when running `bin/rails
9
+ # db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
10
+ # be faster and is potentially less error prone than running all of your
11
+ # migrations from scratch. Old migrations may fail to apply correctly if those
12
+ # migrations use external dependencies or application code.
13
+ #
14
+ # It's strongly recommended that you check this file into your version control system.
15
+
16
+ ActiveRecord::Schema[8.0].define(version: 0) do
17
+ end
@@ -0,0 +1,12 @@
1
+ # RAILS_MASTER_KEY="GENERATE_A_NEW_KEY"
2
+ YETTO_PLUG_PEM="REPLACE_ME_WITH_YETTO_VALUE"
3
+ YETTO_SIGNING_SECRET="super-secret"
4
+ YETTO_PLUG_ID="REPLACE_ME_WITH_YETTO_VALUE"
5
+
6
+ # don't forget to add these into your credentials file: `bin/rails credentials:edit --environment development`
7
+ # APP_ID: find this in 1pass
8
+ # APP_CLIENT_ID: find this in 1pass
9
+ # APP_CLIENT_SECRET: find this in 1pass
10
+ # APP_NONCE: generate this randomly
11
+ # JWT_PEM: find this in 1pass
12
+
@@ -0,0 +1,27 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "github-actions"
4
+ directory: "/"
5
+ schedule:
6
+ interval: weekly
7
+ day: monday
8
+ time: "09:00"
9
+ timezone: "Etc/UTC"
10
+ groups:
11
+ github-actions:
12
+ patterns:
13
+ - "*"
14
+ open-pull-requests-limit: 10
15
+
16
+ - package-ecosystem: bundler
17
+ directory: "/"
18
+ schedule:
19
+ interval: monthly
20
+ day: monday
21
+ time: "09:00"
22
+ timezone: "Etc/UTC"
23
+ open-pull-requests-limit: 10
24
+ groups:
25
+ bundler-dependencies:
26
+ patterns:
27
+ - "*"
@@ -0,0 +1,14 @@
1
+ name: PR auto-{approve,merge}
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ pull_request_target:
6
+
7
+ permissions:
8
+ pull-requests: write
9
+ contents: write
10
+
11
+ jobs:
12
+ bot-check:
13
+ uses: yettoapp/actions/.github/workflows/automerge.yml@main
14
+ secrets: inherit
@@ -0,0 +1,30 @@
1
+ name: Deployments
2
+ on:
3
+ push:
4
+ branches:
5
+ - production
6
+ workflow_dispatch:
7
+ inputs:
8
+ target:
9
+ required: true
10
+ type: choice
11
+ description: The name of the environment that you're deploying the application to
12
+ options:
13
+ - staging
14
+ - production
15
+ forced:
16
+ description: "Whether to perform the deploy regardless of test state."
17
+ required: false
18
+ type: boolean
19
+ default: false
20
+
21
+ jobs:
22
+ deployment:
23
+ name: Deploy app
24
+ uses: yettoapp/actions/.github/workflows/fly_deployment.yml@main
25
+ with:
26
+ target: ${{ github.event_name != 'workflow_dispatch' && 'production' || inputs.target }}
27
+ forced: ${{ github.event_name == 'workflow_dispatch' && inputs.forced || false }}
28
+ secrets:
29
+ gh_token: ${{ secrets.GH_DEPLOYMENTS_TOKEN }}
30
+ fly_token: ${{ inputs.target == 'staging' && secrets.FLY_STAGING_API_TOKEN || secrets.FLY_PRODUCTION_API_TOKEN }}
@@ -0,0 +1,17 @@
1
+ name: License
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ pull_request_target:
6
+
7
+ permissions:
8
+ pull-requests: write
9
+ contents: write
10
+
11
+ jobs:
12
+ verify:
13
+ uses: yettoapp/actions/.github/workflows/run_license_verify.yml@main
14
+ secrets:
15
+ gh_token: ${{ secrets.GH_SISYPHUS_YETTO_REPO_TOKEN }}
16
+ with:
17
+ ruby: true
@@ -0,0 +1,17 @@
1
+ name: Linting
2
+
3
+ on:
4
+ pull_request:
5
+ paths:
6
+ - "**/*.rb"
7
+
8
+ env:
9
+ RAILS_ENV: test
10
+
11
+ jobs:
12
+ verify:
13
+ uses: yettoapp/actions/.github/workflows/lint.yml@main
14
+ secrets:
15
+ gh_token: ${{ secrets.GH_SISYPHUS_YETTO_REPO_TOKEN }}
16
+ with:
17
+ ruby: true
@@ -0,0 +1,19 @@
1
+ name: Security
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ pull_request_target:
6
+
7
+ env:
8
+ RAILS_ENV: test
9
+ BUNDLE_WITH: "ci"
10
+
11
+ permissions:
12
+ pull-requests: write
13
+ contents: write
14
+
15
+ jobs:
16
+ ruby:
17
+ uses: yettoapp/actions/.github/workflows/ruby_security_checks.yml@main
18
+ secrets:
19
+ gh_token: ${{ secrets.GH_SISYPHUS_YETTO_REPO_TOKEN }}
@@ -0,0 +1,19 @@
1
+ name: Sorbet
2
+
3
+ on:
4
+ pull_request_target:
5
+ paths:
6
+ - "**/*.rb"
7
+ - "Gemfile.lock"
8
+
9
+ jobs:
10
+ update:
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+ with:
16
+ ref: ${{ github.head_ref }}
17
+ token: ${{ secrets.GH_SISYPHUS_YETTO_REPO_TOKEN }}
18
+
19
+ - uses: yettoapp/actions/run-sorbet-update@main
@@ -0,0 +1,21 @@
1
+ name: Test
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ pull_request_target:
6
+
7
+ jobs:
8
+ ruby:
9
+ uses: yettoapp/actions/.github/workflows/rails_sqlite_test_suite.yml@main
10
+ secrets:
11
+ gh_token: ${{ secrets.GH_SISYPHUS_YETTO_REPO_TOKEN }}
12
+ with:
13
+ system_tests: false
14
+
15
+ docker:
16
+ uses: yettoapp/actions/.github/workflows/test_dockerbuild.yml@main
17
+ secrets:
18
+ gh_token: ${{ secrets.GH_SISYPHUS_YETTO_REPO_TOKEN }}
19
+ fly_token: ${{ secrets.FLY_PRODUCTION_API_TOKEN }}
20
+ with:
21
+ app_name: "plug-<%= plug_name %>-production"
@@ -0,0 +1,18 @@
1
+ name: Updates
2
+ on:
3
+ workflow_dispatch:
4
+ inputs:
5
+ action:
6
+ required: true
7
+ type: string
8
+ value:
9
+ required: false
10
+ type: string
11
+
12
+ jobs:
13
+ update:
14
+ name: Update app
15
+ uses: yettoapp/actions/.github/workflows/updater.yml@main
16
+ with:
17
+ action: ${{ inputs.action }}
18
+ value: ${{ inputs.value }}
@@ -0,0 +1,9 @@
1
+ {
2
+ "recommendations": [
3
+ "shopify.ruby-extensions-pack",
4
+ "bradlc.vscode-tailwindcss",
5
+ "johnpapa.vscode-peacock",
6
+ "manuelpuyol.erb-linter",
7
+ "esbenp.prettier-vscode"
8
+ ]
9
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ // Use IntelliSense to learn about possible attributes.
3
+ // Hover to view descriptions of existing attributes.
4
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
+ "version": "0.2.0",
6
+ "configurations": [
7
+ {
8
+ "type": "rdbg",
9
+ "name": "Attach rdbg",
10
+ "request": "attach"
11
+ },
12
+ ]
13
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "[javascript]" : {
3
+ "editor.codeActionsOnSave" : {
4
+ "source.fixAll.eslint" : "explicit"
5
+ }
6
+ },
7
+ "[json]" : {
8
+ "editor.defaultFormatter" : "vscode.json-language-features"
9
+ },
10
+ "[markdown]" : {
11
+ "editor.defaultFormatter" : "esbenp.prettier-vscode"
12
+ },
13
+ "[ruby]" : {
14
+ "editor.defaultFormatter" : "Shopify.ruby-lsp"
15
+ },
16
+ "files.associations" : {
17
+ "*.css" : "tailwindcss",
18
+ "*.rbedited" : "ruby",
19
+ "*.rbi" : "ruby",
20
+ "*.rbupdated" : "ruby"
21
+ },
22
+ "peacock.color" : "#26FF9A",
23
+ "rubyLsp.enabledFeatures" : {
24
+ "codeActions" : true,
25
+ "diagnostics" : true,
26
+ "documentHighlights" : true,
27
+ "documentLink" : true,
28
+ "documentSymbols" : true,
29
+ "foldingRanges" : true,
30
+ "formatting" : true,
31
+ "onTypeFormatting" : true,
32
+ "selectionRanges" : true,
33
+ "semanticHighlighting" : true
34
+ },
35
+ "tailwindCSS.emmetCompletions" : true,
36
+ "tailwindCSS.includeLanguages" : {
37
+ "plaintext" : "html"
38
+ },
39
+ "workbench.colorCustomizations" : {
40
+ "activityBar.activeBackground" : "#59ffb2",
41
+ "activityBar.background" : "#59ffb2",
42
+ "activityBar.foreground" : "#15202b",
43
+ "activityBar.inactiveForeground" : "#15202b99",
44
+ "activityBarBadge.background" : "#c480ff",
45
+ "activityBarBadge.foreground" : "#15202b",
46
+ "commandCenter.border" : "#15202b99",
47
+ "sash.hoverBorder" : "#59ffb2",
48
+ "statusBar.background" : "#26ff9a",
49
+ "statusBar.foreground" : "#15202b",
50
+ "statusBarItem.hoverBackground" : "#00f281",
51
+ "statusBarItem.remoteBackground" : "#26ff9a",
52
+ "statusBarItem.remoteForeground" : "#15202b",
53
+ "titleBar.activeBackground" : "#26ff9a",
54
+ "titleBar.activeForeground" : "#15202b",
55
+ "titleBar.inactiveBackground" : "#26ff9a99",
56
+ "titleBar.inactiveForeground" : "#15202b99"
57
+ }
58
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "Event": {
3
+ "name": "X-Yetto-Event",
4
+ "in": "header",
5
+ "description": "The event from Yetto",
6
+ "required": true,
7
+ "schema": {
8
+ "type": "string",
9
+ "pattern": "^{created|updated|destroyed}$"
10
+ }
11
+ },
12
+ "RecordType": {
13
+ "name": "X-Yetto-RecordType",
14
+ "in": "header",
15
+ "description": "The record type from Yetto",
16
+ "required": true,
17
+ "schema": {
18
+ "type": "string",
19
+ "pattern": "^[a-z_]+$"
20
+ }
21
+ },
22
+ "DeliveryID": {
23
+ "name": "X-Yetto-DeliveryID",
24
+ "in": "header",
25
+ "description": "The delivery ID from Yetto",
26
+ "required": true,
27
+ "schema": {
28
+ "type": "string",
29
+ "pattern": "^[a-z0-9-]+$"
30
+ }
31
+ },
32
+ "Signature": {
33
+ "name": "X-Yetto-Signature",
34
+ "in": "header",
35
+ "description": "The signature from Yetto",
36
+ "required": true,
37
+ "schema": {
38
+ "type": "string",
39
+ "pattern": "^sha256=[a-f0-9]{64}$"
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "plugInstallationId": {
3
+ "name": "plugInstallationId",
4
+ "in": "path",
5
+ "description": "The plug installation's unique ID",
6
+ "required": true,
7
+ "schema": {
8
+ "type": "string",
9
+ "pattern": "^pli_[A-Z0-9]{26}$"
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "InboundWebhook": {
3
+ "type": "object",
4
+ "required": [
5
+ "From"
6
+ ],
7
+ "properties": {}
8
+ }
9
+ }
@@ -0,0 +1,64 @@
1
+ {
2
+ "202": {
3
+ "type": "object",
4
+ "required": [
5
+ "message"
6
+ ],
7
+ "properties": {
8
+ "message": {
9
+ "type": "string",
10
+ "value": "Accepted"
11
+ }
12
+ }
13
+ },
14
+ "204": {
15
+ "type": "object",
16
+ "required": [
17
+ "message"
18
+ ],
19
+ "properties": {
20
+ "message": {
21
+ "type": "string",
22
+ "value": "No Content"
23
+ }
24
+ }
25
+ },
26
+ "400": {
27
+ "type": "object",
28
+ "required": [
29
+ "errors"
30
+ ],
31
+ "properties": {
32
+ "errors": {
33
+ "type": "array",
34
+ "items": {
35
+ "type": "object",
36
+ "properties": {
37
+ "message": {
38
+ "type": "string"
39
+ }
40
+ }
41
+ }
42
+ }
43
+ }
44
+ },
45
+ "404": {
46
+ "type": "object",
47
+ "required": [
48
+ "errors"
49
+ ],
50
+ "properties": {
51
+ "errors": {
52
+ "type": "array",
53
+ "items": {
54
+ "type": "object",
55
+ "properties": {
56
+ "message": {
57
+ "type": "string"
58
+ }
59
+ }
60
+ }
61
+ }
62
+ }
63
+ }
64
+ }