# frozen_string_literal: true
module Evidences
class EvidenceEntity < Grape::Entity
expose :release, using: Evidences::ReleaseEntity
end
end
# frozen_string_literal: true # frozen_string_literal: true
module Evidences module Evidences
class AuthorEntity < Grape::Entity class EvidenceSerializer < BaseSerializer
expose :id entity EvidenceEntity
expose :name
expose :email
end end
end end
...@@ -5,7 +5,6 @@ module Evidences ...@@ -5,7 +5,6 @@ module Evidences
expose :id expose :id
expose :title expose :title
expose :description expose :description
expose :author, using: AuthorEntity
expose :state expose :state
expose :iid expose :iid
expose :confidential expose :confidential
... ...
......
...@@ -9,6 +9,6 @@ module Evidences ...@@ -9,6 +9,6 @@ module Evidences
expose :iid expose :iid
expose :created_at expose :created_at
expose :due_date expose :due_date
expose :issues, using: IssueEntity expose :issues, using: Evidences::IssueEntity
end end
end end
...@@ -7,7 +7,7 @@ module Evidences ...@@ -7,7 +7,7 @@ module Evidences
expose :name expose :name
expose :description expose :description
expose :created_at expose :created_at
expose :project, using: ProjectEntity expose :project, using: Evidences::ProjectEntity
expose :milestones, using: MilestoneEntity expose :milestones, using: Evidences::MilestoneEntity
end end
end end
...@@ -173,3 +173,4 @@ ...@@ -173,3 +173,4 @@
- delete_stored_files - delete_stored_files
- import_issues_csv - import_issues_csv
- project_daily_statistics - project_daily_statistics
- create_evidence
# frozen_string_literal: true
class CreateEvidenceWorker
include ApplicationWorker
def perform(release_id)
release = Release.find_by_id(release_id)
return unless release
Evidence.create!(release: release)
end
end
---
title: Creation of Evidence collection of new releases.
merge_request: 17217
author:
type: added
---
title: Use cascading deletes for deleting logs upon deleting a webhook
merge_request: 18642
author:
type: performance
---
title: Add ability to query todos using GraphQL
merge_request: 18218
author:
type: added
---
title: Add support for epic update through GraphQL API.
merge_request: 18440
author:
type: added
---
title: Use new Ansi2json job log converter via feature flag
merge_request: 18134
author:
type: added
...@@ -96,6 +96,7 @@ ...@@ -96,6 +96,7 @@
- [phabricator_import_import_tasks, 1] - [phabricator_import_import_tasks, 1]
- [update_namespace_statistics, 1] - [update_namespace_statistics, 1]
- [chaos, 2] - [chaos, 2]
- [create_evidence, 2]
# EE-specific queues # EE-specific queues
- [ldap_group_sync, 2] - [ldap_group_sync, 2]
... ...
......
# frozen_string_literal: true
class CreateEvidences < ActiveRecord::Migration[5.2]
DOWNTIME = false
def change
create_table :evidences do |t|
t.references :release, foreign_key: { on_delete: :cascade }, null: false
t.timestamps_with_timezone
t.binary :summary_sha
t.jsonb :summary, null: false, default: {}
end
end
end
# frozen_string_literal: true
class AddSelfManagedPrometheusAlerts < ActiveRecord::Migration[5.2]
# Set this constant to true if this migration requires downtime.
DOWNTIME = false
def change
create_table :self_managed_prometheus_alert_events do |t|
t.references :project, index: false, foreign_key: { on_delete: :cascade }, null: false
t.references :environment, index: true, foreign_key: { on_delete: :cascade }
t.datetime_with_timezone :started_at, null: false
t.datetime_with_timezone :ended_at
t.integer :status, null: false, limit: 2
t.string :title, null: false, limit: 255
t.string :query_expression, limit: 255
t.string :payload_key, null: false, limit: 255
t.index [:project_id, :payload_key], unique: true, name: 'idx_project_id_payload_key_self_managed_prometheus_alert_events'
end
end
end
# frozen_string_literal: true
class AddJoinTableForSelfManagedPrometheusAlertIssues < ActiveRecord::Migration[5.2]
# Set this constant to true if this migration requires downtime.
DOWNTIME = false
def change
# Join table to Issues
create_table :issues_self_managed_prometheus_alert_events, id: false do |t|
t.references :issue, null: false,
index: false, # Uses the index below
foreign_key: { on_delete: :cascade }
t.references :self_managed_prometheus_alert_event, null: false,
index: { name: 'issue_id_issues_self_managed_rometheus_alert_events_index' },
foreign_key: { on_delete: :cascade }
t.timestamps_with_timezone
t.index [:issue_id, :self_managed_prometheus_alert_event_id],
unique: true, name: 'issue_id_self_managed_prometheus_alert_event_id_index'
end
end
end
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2019_10_16_072826) do ActiveRecord::Schema.define(version: 2019_10_16_220135) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "pg_trgm" enable_extension "pg_trgm"
...@@ -1424,6 +1424,15 @@ ActiveRecord::Schema.define(version: 2019_10_16_072826) do ...@@ -1424,6 +1424,15 @@ ActiveRecord::Schema.define(version: 2019_10_16_072826) do
t.index ["target_type", "target_id"], name: "index_events_on_target_type_and_target_id" t.index ["target_type", "target_id"], name: "index_events_on_target_type_and_target_id"
end end
create_table "evidences", force: :cascade do |t|
t.bigint "release_id", null: false
t.datetime_with_timezone "created_at", null: false
t.datetime_with_timezone "updated_at", null: false
t.binary "summary_sha"
t.jsonb "summary", default: {}, null: false
t.index ["release_id"], name: "index_evidences_on_release_id"
end
create_table "external_pull_requests", force: :cascade do |t| create_table "external_pull_requests", force: :cascade do |t|
t.datetime_with_timezone "created_at", null: false t.datetime_with_timezone "created_at", null: false
t.datetime_with_timezone "updated_at", null: false t.datetime_with_timezone "updated_at", null: false
...@@ -1936,6 +1945,15 @@ ActiveRecord::Schema.define(version: 2019_10_16_072826) do ...@@ -1936,6 +1945,15 @@ ActiveRecord::Schema.define(version: 2019_10_16_072826) do
t.index ["prometheus_alert_event_id"], name: "issue_id_issues_prometheus_alert_events_index" t.index ["prometheus_alert_event_id"], name: "issue_id_issues_prometheus_alert_events_index"
end end
create_table "issues_self_managed_prometheus_alert_events", id: false, force: :cascade do |t|
t.bigint "issue_id", null: false
t.bigint "self_managed_prometheus_alert_event_id", null: false
t.datetime_with_timezone "created_at", null: false
t.datetime_with_timezone "updated_at", null: false
t.index ["issue_id", "self_managed_prometheus_alert_event_id"], name: "issue_id_self_managed_prometheus_alert_event_id_index", unique: true
t.index ["self_managed_prometheus_alert_event_id"], name: "issue_id_issues_self_managed_rometheus_alert_events_index"
end
create_table "jira_connect_installations", force: :cascade do |t| create_table "jira_connect_installations", force: :cascade do |t|
t.string "client_key" t.string "client_key"
t.string "encrypted_shared_secret" t.string "encrypted_shared_secret"
...@@ -3309,6 +3327,19 @@ ActiveRecord::Schema.define(version: 2019_10_16_072826) do ...@@ -3309,6 +3327,19 @@ ActiveRecord::Schema.define(version: 2019_10_16_072826) do
t.index ["group_id", "token_encrypted"], name: "index_scim_oauth_access_tokens_on_group_id_and_token_encrypted", unique: true t.index ["group_id", "token_encrypted"], name: "index_scim_oauth_access_tokens_on_group_id_and_token_encrypted", unique: true
end end
create_table "self_managed_prometheus_alert_events", force: :cascade do |t|
t.bigint "project_id", null: false
t.bigint "environment_id"
t.datetime_with_timezone "started_at", null: false
t.datetime_with_timezone "ended_at"
t.integer "status", limit: 2, null: false
t.string "title", limit: 255, null: false
t.string "query_expression", limit: 255
t.string "payload_key", limit: 255, null: false
t.index ["environment_id"], name: "index_self_managed_prometheus_alert_events_on_environment_id"
t.index ["project_id", "payload_key"], name: "idx_project_id_payload_key_self_managed_prometheus_alert_events", unique: true
end
create_table "sent_notifications", id: :serial, force: :cascade do |t| create_table "sent_notifications", id: :serial, force: :cascade do |t|
t.integer "project_id" t.integer "project_id"
t.integer "noteable_id" t.integer "noteable_id"
...@@ -4079,6 +4110,7 @@ ActiveRecord::Schema.define(version: 2019_10_16_072826) do ...@@ -4079,6 +4110,7 @@ ActiveRecord::Schema.define(version: 2019_10_16_072826) do
add_foreign_key "events", "namespaces", column: "group_id", name: "fk_61fbf6ca48", on_delete: :cascade add_foreign_key "events", "namespaces", column: "group_id", name: "fk_61fbf6ca48", on_delete: :cascade
add_foreign_key "events", "projects", on_delete: :cascade add_foreign_key "events", "projects", on_delete: :cascade
add_foreign_key "events", "users", column: "author_id", name: "fk_edfd187b6f", on_delete: :cascade add_foreign_key "events", "users", column: "author_id", name: "fk_edfd187b6f", on_delete: :cascade
add_foreign_key "evidences", "releases", on_delete: :cascade
add_foreign_key "external_pull_requests", "projects", on_delete: :cascade add_foreign_key "external_pull_requests", "projects", on_delete: :cascade
add_foreign_key "fork_network_members", "fork_networks", on_delete: :cascade add_foreign_key "fork_network_members", "fork_networks", on_delete: :cascade
add_foreign_key "fork_network_members", "projects", column: "forked_from_project_id", name: "fk_b01280dae4", on_delete: :nullify add_foreign_key "fork_network_members", "projects", column: "forked_from_project_id", name: "fk_b01280dae4", on_delete: :nullify
...@@ -4140,6 +4172,8 @@ ActiveRecord::Schema.define(version: 2019_10_16_072826) do ...@@ -4140,6 +4172,8 @@ ActiveRecord::Schema.define(version: 2019_10_16_072826) do
add_foreign_key "issues", "users", column: "updated_by_id", name: "fk_ffed080f01", on_delete: :nullify add_foreign_key "issues", "users", column: "updated_by_id", name: "fk_ffed080f01", on_delete: :nullify
add_foreign_key "issues_prometheus_alert_events", "issues", on_delete: :cascade add_foreign_key "issues_prometheus_alert_events", "issues", on_delete: :cascade
add_foreign_key "issues_prometheus_alert_events", "prometheus_alert_events", on_delete: :cascade add_foreign_key "issues_prometheus_alert_events", "prometheus_alert_events", on_delete: :cascade
add_foreign_key "issues_self_managed_prometheus_alert_events", "issues", on_delete: :cascade
add_foreign_key "issues_self_managed_prometheus_alert_events", "self_managed_prometheus_alert_events", on_delete: :cascade
add_foreign_key "jira_connect_subscriptions", "jira_connect_installations", on_delete: :cascade add_foreign_key "jira_connect_subscriptions", "jira_connect_installations", on_delete: :cascade
add_foreign_key "jira_connect_subscriptions", "namespaces", on_delete: :cascade add_foreign_key "jira_connect_subscriptions", "namespaces", on_delete: :cascade
add_foreign_key "jira_tracker_data", "services", on_delete: :cascade add_foreign_key "jira_tracker_data", "services", on_delete: :cascade
...@@ -4279,6 +4313,8 @@ ActiveRecord::Schema.define(version: 2019_10_16_072826) do ...@@ -4279,6 +4313,8 @@ ActiveRecord::Schema.define(version: 2019_10_16_072826) do
add_foreign_key "reviews", "users", column: "author_id", on_delete: :nullify add_foreign_key "reviews", "users", column: "author_id", on_delete: :nullify
add_foreign_key "saml_providers", "namespaces", column: "group_id", on_delete: :cascade add_foreign_key "saml_providers", "namespaces", column: "group_id", on_delete: :cascade
add_foreign_key "scim_oauth_access_tokens", "namespaces", column: "group_id", on_delete: :cascade add_foreign_key "scim_oauth_access_tokens", "namespaces", column: "group_id", on_delete: :cascade
add_foreign_key "self_managed_prometheus_alert_events", "environments", on_delete: :cascade
add_foreign_key "self_managed_prometheus_alert_events", "projects", on_delete: :cascade
add_foreign_key "services", "projects", name: "fk_71cce407f9", on_delete: :cascade add_foreign_key "services", "projects", name: "fk_71cce407f9", on_delete: :cascade
add_foreign_key "slack_integrations", "services", on_delete: :cascade add_foreign_key "slack_integrations", "services", on_delete: :cascade
add_foreign_key "smartcard_identities", "users", on_delete: :cascade add_foreign_key "smartcard_identities", "users", on_delete: :cascade
... ...
......
...@@ -710,6 +710,20 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph ...@@ -710,6 +710,20 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `count` | Int! | | | `count` | Int! | |
| `completedCount` | Int! | | | `completedCount` | Int! | |
### Todo
| Name | Type | Description |
| --- | ---- | ---------- |
| `id` | ID! | Id of the todo |
| `project` | Project | The project this todo is associated with |
| `group` | Group | Group this todo is associated with |
| `author` | User! | The owner of this todo |
| `action` | TodoActionEnum! | Action of the todo |
| `targetType` | TodoTargetEnum! | Target type of the todo |
| `body` | String! | Body of the todo |
| `state` | TodoStateEnum! | State of the todo |
| `createdAt` | Time! | Timestamp this todo was created |
### ToggleAwardEmojiPayload ### ToggleAwardEmojiPayload
| Name | Type | Description | | Name | Type | Description |
...@@ -736,6 +750,14 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph ...@@ -736,6 +750,14 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| `flatPath` | String! | | | `flatPath` | String! | |
| `webUrl` | String | | | `webUrl` | String | |
### UpdateEpicPayload
| Name | Type | Description |
| --- | ---- | ---------- |
| `clientMutationId` | String | A unique identifier for the client performing the mutation. |
| `errors` | String! => Array | Reasons why the mutation failed. |
| `epic` | Epic | The epic after mutation |
### UpdateNotePayload ### UpdateNotePayload
| Name | Type | Description | | Name | Type | Description |
... ...
......
...@@ -178,6 +178,8 @@ module Gitlab ...@@ -178,6 +178,8 @@ module Gitlab
close_open_tags close_open_tags
# TODO: replace OpenStruct with a better type
# https://gitlab.com/gitlab-org/gitlab/issues/34305
OpenStruct.new( OpenStruct.new(
html: @out.force_encoding(Encoding.default_external), html: @out.force_encoding(Encoding.default_external),
state: state, state: state,
... ...
......
...@@ -37,6 +37,8 @@ module Gitlab ...@@ -37,6 +37,8 @@ module Gitlab
flush_current_line flush_current_line
# TODO: replace OpenStruct with a better type
# https://gitlab.com/gitlab-org/gitlab/issues/34305
OpenStruct.new( OpenStruct.new(
lines: @lines, lines: @lines,
state: @state.encode, state: @state.encode,
... ...
......