Project: add declfile, decltype, declvalue to API

[?]
May 2, 2021, 6:27 AM
3NGONGQ7MXUUH2RR4LQGY7FP5ALNCYYIF64RU6IM7ESO5MY6EUNQC

Dependencies

  • [2] IQBLO5PW Projects: serialize `enabled` and `hidden` as boolean
  • [3] 2XGJ54SF ToJSON: serialize string_columns to JSON
  • [4] 7RRDNLP3 Add homepage to Projects schema
  • [5] LN3E2P4E t: Test Projects JSON serialization and deserialization
  • [6] NIX2TKYV Use redirectJSON
  • [7] ODNCGFQ5 * Improved the navigation bar: don't include all projects (since that
  • [8] X27GNHDV * Basic job info in the database.
  • [9] BXHG3HYL When renaming a jobset, add a redirect from the old name
  • [10] NZXX6PLD Remove the Jobs table
  • [11] PCD3ZH6Z Partially revert 1c20cfdf2403feb78cef515faf15c04d5c9f17bd
  • [12] N74SRHS6 Remove the "releases" feature
  • [13] TQVKZQUG Use the REST API in the web interface for editing jobsets
  • [14] W5OAZWPD Drop the errorMsg column in the Jobs table
  • [15] IGR322YP sql: Generate models from postgresql
  • [16] A6XVP6FE Make the hide/unhide actions a checkbox in the project settings
  • [17] YU6CND7C Remove support for views
  • [18] 6WRGCITD Enable declarative projects.
  • [19] T5BIOVJE Add support for tracking custom metrics
  • [20] MB5INTIQ Normalize nixexpr{input,path} from builds to jobsetevals.
  • [21] KSBB33RE Add a dashboard
  • [22] BMGYDRNK jobsetevals: refer to jobset by ID
  • [23] 7ECJWNVX Cleanup Project model
  • [24] LZVO64YG Merge in the first bits of the API work
  • [*] LX326CB7 Add hydra OpenAPI description (#750)
  • [*] FPK5LF53 * Put the project-related actions in a separate controller. Put the
  • [*] JY7BXXOP Split viewing and editing a project

Change contents

  • edit in hydra-api.yaml at line 184
    [26.5240]
    [26.5240]
    declarative:
    description: declarative input configured for this project
    type: object
    $ref: '#/components/schemas/DeclarativeInput'
  • edit in hydra-api.yaml at line 584
    [26.14720]
    [26.14720]
    declarative:
    description: declarative input configured for this project
    type: object
    $ref: '#/components/schemas/DeclarativeInput'
  • edit in hydra-api.yaml at line 594
    [26.14867]
    [26.14867]
    DeclarativeInput:
    type: object
    properties:
    file:
    description: The file in `value` which contains the declarative spec file. Relative to the root of `value`.
    type: string
    type:
    description: The type of the declarative input.
    type: string
    value:
    description: The value of the declarative input.
    type: string
  • replacement in src/lib/Hydra/Controller/Project.pm at line 160
    [4.6175][4.256:438]()
    , declfile => trim($c->stash->{params}->{declfile})
    , decltype => trim($c->stash->{params}->{decltype})
    , declvalue => trim($c->stash->{params}->{declvalue})
    [4.6175]
    [4.6175]
    , declfile => trim($c->stash->{params}->{declarative}->{file})
    , decltype => trim($c->stash->{params}->{declarative}->{type})
    , declvalue => trim($c->stash->{params}->{declarative}->{value})
  • replacement in src/lib/Hydra/Schema/Projects.pm at line 249
    [4.172][4.172:185](),[4.185][3.119:143](),[3.143][4.202:264](),[4.202][4.202:264](),[4.264][4.89:109](),[4.301][4.301:317](),[4.317][2.0:64](),[2.64][4.317:343](),[4.317][4.317:343](),[4.371][4.371:406]()
    my %hint = (
    string_columns => [
    "name",
    "displayname",
    "description",
    "homepage",
    "owner"
    ],
    boolean_columns => [
    "enabled",
    "hidden"
    ],
    relations => {
    jobsets => "name"
    }
    );
    [4.172]
    [4.406]
    sub as_json {
    my $self = shift;
  • replacement in src/lib/Hydra/Schema/Projects.pm at line 252
    [4.407][4.407:442]()
    sub json_hint {
    return \%hint;
    [4.407]
    [4.442]
    my %json = (
    # string_columns
    "name" => $self->get_column("name") // "",
    "displayname" => $self->get_column("displayname") // "",
    "description" => $self->get_column("description") // "",
    "homepage" => $self->get_column("homepage") // "",
    "owner" => $self->get_column("owner") // "",
    # boolean_columns
    "enabled" => $self->get_column("enabled") ? JSON::true : JSON::false,
    "hidden" => $self->get_column("hidden") ? JSON::true : JSON::false,
    "declarative" => {
    "file" => $self->get_column("declfile") // "",
    "type" => $self->get_column("decltype") // "",
    "value" => $self->get_column("declvalue") // ""
    },
    "jobsets" => [ map { $_->name } $self->jobsets ]
    );
    return \%json;
  • edit in src/root/edit-project.tt at line 82
    [4.3217]
    [4.39]
    var formElements = $(this).parents("form").serializeArray();
    var data = { 'declarative': {} };
    var decl = {};
    for (var i = 0; formElements.length > i; i++) {
    var elem = formElements[i];
    var match = elem.name.match(/^decl(file|type|value)$/);
    if (match === null) {
    data[elem.name] = elem.value;
    } else {
    var param = match[1];
    decl[param] = elem.value;
    }
    }
    data.declarative = decl;
  • replacement in src/root/edit-project.tt at line 102
    [4.3398][4.3398:3447]()
    data: $(this).parents("form").serialize(),
    [4.3398]
    [4.59]
    data: JSON.stringify(data),
    contentType: 'application/json',
  • replacement in t/Controller/projects.t at line 35
    [4.765][4.765:785]()
    owner => "root"
    [4.765]
    [4.785]
    owner => "root",
    declarative => {
    file => "",
    type => "",
    value => ""
    }