)]}'
{"web/src/api.js":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"8f50f150ad220986bf674f39f8434fb91f2d28c2","unresolved":false,"context_lines":[{"line_number":130,"context_line":"  // We only want to show final builds in the web UI by default"},{"line_number":131,"context_line":"  path +\u003d \u0027?final\u003dtrue\u0027"},{"line_number":132,"context_line":"  if (queryString) {"},{"line_number":133,"context_line":"    path +\u003d \u0027\u0026\u0027 + queryString.slice(1)"},{"line_number":134,"context_line":"  }"},{"line_number":135,"context_line":"  return Axios.get(apiUrl + apiPrefix + path)"},{"line_number":136,"context_line":"}"}],"source_content_type":"text/javascript","patch_set":21,"id":"3fa7e38b_84dbad78","line":133,"updated":"2020-02-19 21:18:22.000000000","message":"This causes the current web UI to break when applied to a non-upgraded zuul-web service.  We try to avoid that by making sure the web ui is backwards compatible back to at least the previous released version, since it\u0027s difficult to upgrade both at the same time.\n\nPerhaps we should just have the default be to show all builds, and then add an optional filter to restrict to final builds?  Not only would that be easier here, but maybe it\u0027s better to expose retried builds in the list so they gain visibility?","commit_id":"bcd39128652045bcc1e77029ada7be310020914e"}],"zuul/driver/sql/alembic/versions/269691d2220e_add_build_final_column.py":[{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"834883fe1bb7fbba2afbd24725bb0264d241a85e","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def upgrade(table_prefix\u003d\u0027\u0027):"},{"line_number":34,"context_line":"    op.add_column(table_prefix + BUILD_TABLE, sa.Column(\u0027final\u0027, sa.Boolean))"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def downgrade():"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_52bac170","line":34,"updated":"2020-02-12 21:14:39.000000000","message":"I\u0027m pretty sure that this will make all current builds vanish from the UI (assuming that the default of a boolean column is false when adding). As until now all stored builds are final we also need to make a batch update to all builds and set the value to true.","commit_id":"6e79aadcc5c5ba4e0d7a4361504e681dc1b33d75"},{"author":{"_account_id":27952,"name":"Felix Edel","email":"felix.edel@bmw.de","username":"felix.schmidt"},"change_message_id":"2fb1b2cb012d4bf8d9592c70841e67dbca44dc5b","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def upgrade(table_prefix\u003d\u0027\u0027):"},{"line_number":34,"context_line":"    op.add_column(table_prefix + BUILD_TABLE, sa.Column(\u0027final\u0027, sa.Boolean))"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def downgrade():"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_826d4402","line":34,"in_reply_to":"3fa7e38b_52bac170","updated":"2020-02-13 09:13:13.000000000","message":"Done","commit_id":"6e79aadcc5c5ba4e0d7a4361504e681dc1b33d75"}],"zuul/driver/sql/sqlconnection.py":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"8b0c1738bcd5243b96ab131186dca7d529ad6d07","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        q \u003d self.listFilter(q, build_table.c.voting, voting)"},{"line_number":103,"context_line":"        q \u003d self.listFilter(q, build_table.c.node_name, node_name)"},{"line_number":104,"context_line":"        q \u003d self.listFilter(q, build_table.c.result, result)"},{"line_number":105,"context_line":"        q \u003d self.listFilter(q, build_table.c.final, final)"},{"line_number":106,"context_line":"        q \u003d self.listFilter(q, provides_table.c.name, provides)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        q \u003d q.order_by(build_table.c.id.desc()).\\"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_4916f0a3","line":105,"updated":"2020-02-07 00:16:57.000000000","message":"It might be nice to be able to query final and not final jobs at the same time. Maybe make the final web parameter ternary:\ntrue, false, both then update the filter here as appropriate.","commit_id":"6e79aadcc5c5ba4e0d7a4361504e681dc1b33d75"},{"author":{"_account_id":27952,"name":"Felix Edel","email":"felix.edel@bmw.de","username":"felix.schmidt"},"change_message_id":"fd5faa72386ed4971ed84fa0653c6627ba2699fa","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        q \u003d self.listFilter(q, build_table.c.voting, voting)"},{"line_number":103,"context_line":"        q \u003d self.listFilter(q, build_table.c.node_name, node_name)"},{"line_number":104,"context_line":"        q \u003d self.listFilter(q, build_table.c.result, result)"},{"line_number":105,"context_line":"        q \u003d self.listFilter(q, build_table.c.final, final)"},{"line_number":106,"context_line":"        q \u003d self.listFilter(q, provides_table.c.name, provides)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        q \u003d q.order_by(build_table.c.id.desc()).\\"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_73ee31b7","line":105,"in_reply_to":"3fa7e38b_4916f0a3","updated":"2020-02-07 12:00:04.000000000","message":"Good point! To be honest I haven\u0027t thought about this so far, but it will become necessary when we add a filter/checkbox to the UI. And for sure it would be helpful to have that feature for the API itself. I will improve that in a follow-up change.","commit_id":"6e79aadcc5c5ba4e0d7a4361504e681dc1b33d75"}],"zuul/driver/sql/sqlreporter.py":[{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"f7450905e5c8efc569d5bdc5c32f07dd13ccc5e3","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        log_url \u003d build.result_data.get(\u0027zuul\u0027, {}).get(\u0027log_url\u0027)"},{"line_number":40,"context_line":"        if log_url and log_url[-1] !\u003d \u0027/\u0027:"},{"line_number":41,"context_line":"            log_url \u003d log_url + \u0027/\u0027"},{"line_number":42,"context_line":"        result \u003d default_result or result"},{"line_number":43,"context_line":"        start \u003d end \u003d None"},{"line_number":44,"context_line":"        if build.start_time:"},{"line_number":45,"context_line":"            start \u003d datetime.datetime.fromtimestamp("}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_ab421b3a","line":42,"updated":"2019-08-27 19:21:29.000000000","message":"As far as I know retried builds typically have the result None. So I think we could swap this and always default to RETRY if the result is None. That way we could drop the default_result parameter.","commit_id":"6ff2d36fc77ff7b136ee720594070ca81d0b3da4"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"e36a0c538de3249953dcfdfa07263c4545e0abc0","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                    logger\u003dself.log):"},{"line_number":111,"context_line":"                    if \u0027metadata\u0027 in artifact:"},{"line_number":112,"context_line":"                        artifact[\u0027metadata\u0027] \u003d json.dumps(artifact[\u0027metadata\u0027])"},{"line_number":113,"context_line":"                    db_build.createArtifact(**artifact)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"def getSchema():"}],"source_content_type":"text/x-python","patch_set":9,"id":"7faddb67_8c814efe","line":113,"updated":"2019-08-29 19:16:36.000000000","message":"Do we need to create the artifacts and provides for retried builds too? Or is the assumption that since the build was retried it won\u0027t have useful artifacts?","commit_id":"5515be0d50a612d329074bc124260fa846710250"},{"author":{"_account_id":28088,"name":"Benedikt Löffler","email":"benedikt.loeffler@bmw.de","username":"bloeffler"},"change_message_id":"52c65754a84670c1af438c722bdb1e26c5211965","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                    logger\u003dself.log):"},{"line_number":111,"context_line":"                    if \u0027metadata\u0027 in artifact:"},{"line_number":112,"context_line":"                        artifact[\u0027metadata\u0027] \u003d json.dumps(artifact[\u0027metadata\u0027])"},{"line_number":113,"context_line":"                    db_build.createArtifact(**artifact)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"def getSchema():"}],"source_content_type":"text/x-python","patch_set":9,"id":"7faddb67_90515c65","line":113,"in_reply_to":"7faddb67_8c814efe","updated":"2019-08-30 06:18:23.000000000","message":"I\u0027m assuming we don\u0027t have any useful artifacts because the build failed in a pre-run phase.","commit_id":"5515be0d50a612d329074bc124260fa846710250"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"8b10e6d439e262568436f09e20844cfcf0e559d6","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        log_url \u003d build.result_data.get(\u0027zuul\u0027, {}).get(\u0027log_url\u0027)"},{"line_number":39,"context_line":"        if log_url and log_url[-1] !\u003d \u0027/\u0027:"},{"line_number":40,"context_line":"            log_url \u003d log_url + \u0027/\u0027"},{"line_number":41,"context_line":"        result \u003d result or \u0027RETRY\u0027"},{"line_number":42,"context_line":"        start \u003d end \u003d None"},{"line_number":43,"context_line":"        if build.start_time:"},{"line_number":44,"context_line":"            start \u003d datetime.datetime.fromtimestamp("}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_d662d715","line":41,"updated":"2019-12-16 21:04:31.000000000","message":"It might make more sense to actually have a RETRY state returned by the executor.  Then this could happen automatically for all drivers.","commit_id":"a7fd2d8636537577899004d5c23c12e704d4c805"}],"zuul/web/__init__.py":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"44e758946b29c39266492a1a1c681ff4b04b84ae","unresolved":false,"context_lines":[{"line_number":925,"context_line":"        if builds:"},{"line_number":926,"context_line":"            ret[\u0027builds\u0027] \u003d []"},{"line_number":927,"context_line":"        for build in builds:"},{"line_number":928,"context_line":"            ret[\u0027builds\u0027].append(self.buildToDict(build))"},{"line_number":929,"context_line":"        return ret"},{"line_number":930,"context_line":""},{"line_number":931,"context_line":"    @cherrypy.expose"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_c43f6582","line":928,"updated":"2020-02-19 21:21:56.000000000","message":"I also just realized we\u0027ve been focusing on two different areas of the API.  You\u0027ve been most concerned about the /api/builds endpoint, and I\u0027ve been thinking of the buildsets endpoint.  We should probably handle both.  This is where I think we should either add a \u0027retry_builds\u0027 (or \u0027retried_builds\u0027) for parity with the mqtt reporter.  Or we could leave this as-is and return all the builds, just with the final flag included and set to false.  But if we do that, we should probably do the same for the mqtt reporter.","commit_id":"bcd39128652045bcc1e77029ada7be310020914e"}]}
