Commit 0aa18ae2 authored by Kamil Trzciński's avatar Kamil Trzciński

Merge branch '50989-add-trigger-information-to-job-api' into 'master'

Add trigger information for job API

Closes #50989

See merge request gitlab-org/gitlab-ce!21495
parents f87809f7 1b388c79
...@@ -40,6 +40,7 @@ module Ci ...@@ -40,6 +40,7 @@ module Ci
delegate :url, to: :runner_session, prefix: true, allow_nil: true delegate :url, to: :runner_session, prefix: true, allow_nil: true
delegate :terminal_specification, to: :runner_session, allow_nil: true delegate :terminal_specification, to: :runner_session, allow_nil: true
delegate :gitlab_deploy_token, to: :project delegate :gitlab_deploy_token, to: :project
delegate :trigger_short_token, to: :trigger_request, allow_nil: true
## ##
# The "environment" field for builds is a String, and is the unexpanded name! # The "environment" field for builds is a String, and is the unexpanded name!
......
...@@ -8,6 +8,8 @@ module Ci ...@@ -8,6 +8,8 @@ module Ci
belongs_to :pipeline, foreign_key: :commit_id belongs_to :pipeline, foreign_key: :commit_id
has_many :builds has_many :builds
delegate :short_token, to: :trigger, prefix: true, allow_nil: true
# We switched to Ci::PipelineVariable from Ci::TriggerRequest.variables. # We switched to Ci::PipelineVariable from Ci::TriggerRequest.variables.
# Ci::TriggerRequest doesn't save variables anymore. # Ci::TriggerRequest doesn't save variables anymore.
validates :variables, absence: true validates :variables, absence: true
......
...@@ -59,6 +59,12 @@ class BuildDetailsEntity < JobEntity ...@@ -59,6 +59,12 @@ class BuildDetailsEntity < JobEntity
raw_project_job_path(project, build) raw_project_job_path(project, build)
end end
expose :trigger, if: -> (*) { build.trigger_request } do
expose :trigger_short_token, as: :short_token
expose :trigger_variables, as: :variables, using: TriggerVariableEntity
end
private private
def build_failed_issue_options def build_failed_issue_options
......
# frozen_string_literal: true
class TriggerVariableEntity < Grape::Entity
include RequestAwareEntity
expose :key, :value, :public
end
---
title: Add trigger information in job API
merge_request: 21495
author:
type: other
...@@ -208,6 +208,51 @@ describe Projects::JobsController, :clean_gitlab_redis_shared_state do ...@@ -208,6 +208,51 @@ describe Projects::JobsController, :clean_gitlab_redis_shared_state do
end end
end end
context 'when requesting JSON job is triggered' do
let!(:merge_request) { create(:merge_request, source_project: project) }
let(:trigger) { create(:ci_trigger, project: project) }
let(:trigger_request) { create(:ci_trigger_request, pipeline: pipeline, trigger: trigger) }
let(:job) { create(:ci_build, pipeline: pipeline, trigger_request: trigger_request) }
before do
project.add_developer(user)
sign_in(user)
allow_any_instance_of(Ci::Build).to receive(:merge_request).and_return(merge_request)
end
context 'with no variables' do
before do
get_show(id: job.id, format: :json)
end
it 'exposes trigger information' do
expect(response).to have_gitlab_http_status(:ok)
expect(response).to match_response_schema('job/job_details')
expect(json_response['trigger']['short_token']).to eq 'toke'
expect(json_response['trigger']['variables'].length).to eq 0
end
end
context 'with variables' do
before do
create(:ci_pipeline_variable, pipeline: pipeline, key: :TRIGGER_KEY_1, value: 'TRIGGER_VALUE_1')
get_show(id: job.id, format: :json)
end
it 'exposes trigger information and variables' do
expect(response).to have_gitlab_http_status(:ok)
expect(response).to match_response_schema('job/job_details')
expect(json_response['trigger']['short_token']).to eq 'toke'
expect(json_response['trigger']['variables'].length).to eq 1
expect(json_response['trigger']['variables'].first['key']).to eq "TRIGGER_KEY_1"
expect(json_response['trigger']['variables'].first['value']).to eq "TRIGGER_VALUE_1"
expect(json_response['trigger']['variables'].first['public']).to eq false
end
end
end
def get_show(**extra_params) def get_show(**extra_params)
params = { params = {
namespace_id: project.namespace.to_param, namespace_id: project.namespace.to_param,
......
{ {
"allOf": [{ "$ref": "job.json" }], "allOf": [
{ "$ref": "job.json" }
],
"description": "An extension of job.json with more detailed information", "description": "An extension of job.json with more detailed information",
"properties": { "properties": {
"artifact": { "$ref": "artifact.json" }, "artifact": { "$ref": "artifact.json" },
"terminal_path": { "type": "string" } "terminal_path": { "type": "string" },
"trigger": { "$ref": "trigger.json" }
} }
} }
{
"type": "object",
"required": [
"short_token",
"variables"
],
"properties": {
"short_token": { "type": "string" },
"variables": {
"type": "array",
"items": {
"type": "object",
"required": [
"key",
"value",
"public"
],
"properties": {
"key": { "type": "string" },
"value": { "type": "string" },
"public": { "type": "boolean" }
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment