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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/CHANGELOG.md +12 -0
- data/README.md +3 -1
- data/bin/hephaestus +37 -19
- data/lib/hephaestus/app_builder.rb +23 -145
- data/lib/hephaestus/app_name.rb +33 -0
- data/lib/hephaestus/generators/app_generator.rb +79 -75
- data/lib/hephaestus/generators/base.rb +0 -1
- data/lib/hephaestus/generators/config_generator.rb +3 -114
- data/lib/hephaestus/generators/core_generator.rb +18 -58
- data/lib/hephaestus/generators/db_generator.rb +12 -0
- data/lib/hephaestus/generators/deployment_generator.rb +3 -8
- data/lib/hephaestus/generators/lib_generator.rb +0 -10
- data/lib/hephaestus/generators/license_generator.rb +4 -1
- data/lib/hephaestus/generators/rubocop_generator.rb +1 -1
- data/lib/hephaestus/version.rb +1 -1
- data/lib/hephaestus.rb +2 -1
- data/templates/Dockerfile +7 -75
- data/templates/Gemfile +73 -0
- data/templates/Procfile +2 -0
- data/templates/app/controllers/app_controller.rb.tt +35 -0
- data/templates/app/controllers/application_controller.rb +1 -7
- data/templates/app/controllers/concerns/authable.rb.tt +50 -0
- data/templates/app/controllers/settings_controller.rb +5 -28
- data/templates/app/controllers/yetto_controller.rb +9 -10
- data/templates/app/lib/body_parameter/yetto_parameters.rb +8 -29
- data/templates/app/lib/{constants/app.rb → constants.rb} +1 -3
- data/templates/app/services/{http_service.rb → app_service.rb.tt} +6 -6
- data/templates/app/views/settings/new.json.jbuilder.tt +18 -0
- data/templates/bin/bundle +115 -0
- data/templates/bin/docker-entrypoint +20 -10
- data/templates/bin/foreman +27 -0
- data/templates/bin/jobs +7 -0
- data/templates/bin/rails +6 -0
- data/templates/bin/rake +6 -0
- data/templates/bin/setup +28 -0
- data/templates/bin/tapioca +27 -0
- data/templates/config/application.rb.tt +36 -0
- data/templates/config/boot.rb +7 -0
- data/templates/config/environment.rb +8 -0
- data/templates/config/environments/blank.rb +7 -0
- data/templates/config/initializers/environment.rb +2 -36
- data/templates/config/locales/en.yml +5 -31
- data/templates/config/puma.rb +5 -0
- data/templates/config/routes.rb.tt +28 -0
- data/templates/config.ru +9 -0
- data/templates/db/queue_schema.rb +132 -0
- data/templates/db/schema.rb +17 -0
- data/templates/hephaestus_env.sample +12 -0
- data/templates/hephaestus_github/dependabot.yml +27 -0
- data/templates/hephaestus_github/workflows/automerge.yml +14 -0
- data/templates/hephaestus_github/workflows/deploy.yml +30 -0
- data/templates/hephaestus_github/workflows/licenses.yml +17 -0
- data/templates/hephaestus_github/workflows/lint.yml +17 -0
- data/templates/hephaestus_github/workflows/security.yml +19 -0
- data/templates/hephaestus_github/workflows/sorbet.yml +19 -0
- data/templates/hephaestus_github/workflows/test.yml.tt +21 -0
- data/templates/hephaestus_github/workflows/updater.yml +18 -0
- data/templates/hephaestus_vscode/extensions.json +9 -0
- data/templates/hephaestus_vscode/launch.json +13 -0
- data/templates/hephaestus_vscode/settings.json +58 -0
- data/templates/lib/schemas/api/2023-03-06/components/parameters/headers/yetto.json +42 -0
- data/templates/lib/schemas/api/2023-03-06/components/parameters/plugInstallation.json +12 -0
- data/templates/lib/schemas/api/2023-03-06/components/schemas/plug.json +9 -0
- data/templates/lib/schemas/api/2023-03-06/components/schemas/responses.json +64 -0
- data/templates/lib/schemas/api/2023-03-06/components/schemas/yetto.json +116 -0
- data/templates/lib/schemas/api/2023-03-06/openapi.json +30 -0
- data/templates/lib/schemas/api/2023-03-06/paths/app.json +90 -0
- data/templates/lib/schemas/api/2023-03-06/paths/yetto/message_created.json +51 -0
- data/templates/lib/schemas/api/2023-03-06/paths/yetto/plug_installation_created.json +51 -0
- data/templates/script/docker-build-prod.tt +11 -0
- data/templates/script/docker-run.tt +8 -0
- data/templates/script/edit-credentials +12 -3
- data/templates/script/hmac_text +1 -1
- data/templates/script/ngrok.tt +7 -0
- data/templates/script/server +6 -45
- data/templates/test/controllers/app_controller_test.rb.tt +188 -0
- data/templates/test/controllers/settings_controller_test.rb.tt +125 -0
- data/templates/test/controllers/yetto_controller_test.rb +100 -71
- data/templates/test/fixtures/files/plug_installation_settings/valid.json +1 -1
- data/templates/test/support/rails.rb +16 -36
- data/templates/test/support/webmocks/app_webmock.rb.tt +29 -0
- data/templates/test/test_helper.rb +1 -31
- data/templates/vendor/fly/{fly-production.toml → fly-production.toml.tt} +24 -11
- data/templates/vendor/fly/{fly-staging.toml → fly-staging.toml.tt} +18 -15
- metadata +59 -72
- data/lib/hephaestus/exit_on_failure.rb +0 -22
- data/templates/Gemfile.erb +0 -120
- data/templates/Procfile.debug +0 -2
- data/templates/Procfile.dev +0 -2
- data/templates/app/controllers/app_controller.rb +0 -72
- data/templates/app/controllers/concerns/authable.rb +0 -50
- data/templates/app/controllers/staff_controller.rb +0 -15
- data/templates/app/jobs/update_yetto_job.rb +0 -26
- data/templates/app/lib/headers/yetto.rb +0 -19
- data/templates/app/lib/headers.rb +0 -5
- data/templates/app/lib/path_parameter/settings_parameters.rb +0 -22
- data/templates/app/lib/path_parameter/yetto_parameters.rb +0 -28
- data/templates/app/lib/path_parameter.rb +0 -8
- data/templates/app/lib/plug_app/http.rb +0 -37
- data/templates/app/lib/plug_app/middleware/malformed_request.rb +0 -110
- data/templates/app/lib/plug_app/middleware/openapi_validation.rb +0 -83
- data/templates/app/lib/plug_app/middleware/tracing_attributes.rb +0 -46
- data/templates/app/lib/query_parameter.rb +0 -6
- data/templates/app/serializers/error_serializer.rb +0 -16
- data/templates/app/services/yetto_service.rb +0 -51
- data/templates/app/views/settings/new.json.jbuilder +0 -21
- data/templates/compose.yml +0 -5
- data/templates/config/initializers/000-oj.rb +0 -6
- data/templates/config/initializers/cors.rb +0 -19
- data/templates/config/initializers/filter_parameter_logging.rb +0 -25
- data/templates/config/initializers/inflections.rb +0 -20
- data/templates/config/initializers/lograge.rb +0 -25
- data/templates/config/initializers/opentelemetry.rb +0 -32
- data/templates/config/initializers/sidekiq.rb +0 -11
- data/templates/config/initializers/slack_webhook_logger.rb +0 -17
- data/templates/config/sidekiq.yml +0 -20
- data/templates/script/ngrok +0 -5
- data/templates/test/controllers/settings_controller_test.rb +0 -27
- data/templates/test/fixtures/plug_installation_settings/invalid.json +0 -3
- data/templates/test/fixtures/plug_installation_settings/valid.json +0 -3
- data/templates/test/jobs/update_yetto_job_test.rb +0 -26
- data/templates/test/support/api.rb +0 -76
- data/templates/test/support/webmocks/slack_webmock.rb +0 -24
- data/templates/test/support/webmocks/yetto_webmock.rb +0 -119
- 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,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,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,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
|
+
}
|