Display name of user that triggered CI on candidate table
When displaying a model candidate in the experiment table, we display the name of the user that made the request to create the candidate. However, if the candidate is created through a CI pipeline, that will often be a project token, and the name brings no information:
Users can pass the id of the ci job that created the candidate as metadata. When they do, we already display on the model candidate detail page the user that triggered the pipeline:
We could do the same for the experiment table.
Implementation Guide
backend changes necessary)
Minimum (only-
On backend, pass the ci user username and path instead of the author, if the ci user exists. A candidate is created through ci if
candidate.from_ci?
is true, so something likeuser = candidate.build.user if candidate.from_ci?
on line 92 should work (https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/helpers/projects/ml/experiments_helper.rb#L90) -
Update the tests to reflect the new functionality: https://gitlab.com/gitlab-org/gitlab/-/blob/master/spec/helpers/projects/ml/experiments_helper_spec.rb#L41. Line 49 should look something like:
'user' => { 'username' => build.user.username, 'path' => "/#{build.user.username}" } },
backend and frontend changes)
Nice to have (- Change the backend to pass the user name, path, and avatar of the author
- On the frontend, change the user column display to show the avatar as well like we do in candidate details https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/assets/javascripts/ml/experiment_tracking/routes/experiments/show/ml_experiments_show.vue#L226
Testing locally
-
Enable the feature flag
echo "Feature.enable(:ml_experiment_tracking)" | bundle exec rails c
-
Seed the database with project that have jobs
bin/rake "gitlab:seed:runner_fleet"
-
In rails console
bundle exec rails c
, create experiment and candidates for on the project with he first buildbuild = Ci::Build.first project_id = 1 # or whatever project you are using for testing exp = Ml::Experiment.create!(name: 'Gitlab Experiment', user_id: 1, project_id: project_id) exp.candidates.create!(name: 'with job', user_id: nil, start_time: 0, project_id: exp.project_id, ci_build: build) exp.candidates.create!(name: 'without job', user_id: build.user_id, start_time: 0, project_id: exp.project_id)
-
Navigate to the candidate "/path_to_project/-/ml/experiment/1"
-
If setup is correct, when changes are not implemented, the column 'Author' for the row of the candidate 'with job' should be blank, like in the image below:
-
If implemented correctly, the column 'Author' for the row of the candidate named 'with job' should display the same username as the row for the candidate named 'without job'