Improved UI for manually triggered jobs?


#1

Hello!

Im currently working on a project where we want to generate and migrate >1000 pipelines from GoCD to Concourse.

One issue that keeps coming up is that users are a bit confused with the UI when it comes to manually triggered jobs.

For one reason or another, certain teams cannot/do not want a pipeline to automatically do a build/test -> deploy dev -> deploy x -> deploy y -> deploy live without manual intervention.

Currently in GoCD this is controlled via manual gates.

which makes it very clear in what state a pipeline is for both technical and non technical people(in certain teams non-technical people are actually in charge of clicking those button…)

Whilst manual triggers is supported in Concourse with trigger: false the UI on the main pipeline page doesn’t tell the user that manual intervention needs to happen to move the pipeline further along when the previous job successfully completed.

We would love if a pipeline would be rendered something like this when action needs to be taken.

PLEASE SEE THE SECOND POST NEW USERS CAN ONLY ATTACH ONE IMAGE PER POST

Suggested naive stupid solution

I had a quick peek at the JSON provided by /api/v1/teams/{team}/pipelines/{pipeline}/jobs

If the JSON would have the additional field finished_build.inputs or similar

[{
    "name": "first job automatically triggered from git resource",
    "finished_build": {
        "status": "succeeded",
        "inputs": [{
          "name": "git",
          "resource": "git",
          "versions": [{
            "version": "bbbbbb"
          }]
        }]
    },
    "inputs": [{
        "name": "git",
        "resource": "git",
        "trigger": true
    }]
}, {
    "name": "second job, manually triggered",
    "finished_build": {
        "status": "succeeded",
        "inputs": [{
          "name": "git",
          "resource": "git",
          "versions": [{
            "version": "aaaaaa"
          }]
    },
    "inputs": [{
        "name": "git",
        "resource": "git",
        "trigger": false
    }],
    "outputs": [],
    "groups": []
} 
...

we could easily do something like

if job.input[0].trigger == false && lastJob.finished_build.inputs != job.finished_build.inputs {
  status = "some-new-status-that-would-mean-manual-trigger-neccecary-to-move-along";
}

in createGraph in index.js.

I realize that its not this simple, and that the above “solution” assumes that there is only one resource that gets passed along, but I wanted to check with y’all if this is something that would be of interest to the project before looking further into how I could contribute this and figure out all the edge-cases and nitty gritty details.


#2

Example for how it could look.


#3

@simonjohansson do you have time for a quick video chat about your use case?


#4

@Lindsayauchin sure! I could do tomorrow. Dunno what TZ your in, but Im in Germany.


#5

To keep all discussion in one place, @Lindsayauchin posted the following sketch on Discord.


#6

I think this should be “trigger = false” otherwise I am completely lost :slight_smile:

The problem I see with the proposal is that with the grey I don’t know any more if the last manual trigger was successful or not, they grey eats the previous state.

Maybe keep the target symbol, but split the rectangle in two vertical parts: first part on the left, with the target symbol, becomes grey when a new trigger is available, but part on the right keeps the color of the previous run ?


#7

Ping pong. Is this going in the backlog/design-system ?


#8

@Lindsayauchin any news ?


#9

Oh hai! Sorry @simonjohansson and @marco-m for the delayed response. I think I’m at fault here…I was supposed to create an issue at some point in time at least so that we can keep track of the discussion when we pick up this work. https://github.com/concourse/concourse/issues/2233


#10

Thanks @jama!

Post must be at least 20 chars.