Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[JENKINS-60082] Show pull request title in name column #476

Merged
merged 10 commits into from
Oct 25, 2024

Conversation

janfaracik
Copy link
Contributor

@janfaracik janfaracik commented Aug 16, 2024

See JENKINS-60082

Would be good to get some thoughts on this/if this is the right approach.

Currently doing a survey on what users find useful on the Jenkins Dashboard (https://forms.gle/6XgzRshaF34kn4wLA) and quite a few of the responses list being able to show the pull request title on the dashboard as being useful (and I agree). So thought I'd take a look into that.

The plugin currently displays the pull request title as the title attribute of the link, meaning users have to hover over the PR to reveal what it is. This PR changes that so that it displays the title inline.

Branch job dashboard:
image

Pull requests dashboard:
image

Project status page:

image

Testing done

  • PR titles show inline with the PR number
  • Tested with GitHub and GitLab

Multi branch pipelines from before this change will have the old display name but if they are scanned they will get the new display name

Submitter checklist

  • Make sure you are opening from a topic/feature/bugfix branch (right side) and not your main branch!
  • Ensure that the pull request title represents the desired changelog entry
  • Please describe what you did
  • Link to relevant issues in GitHub or Jira
  • Link to relevant pull requests, esp. upstream and downstream changes
  • Ensure you have provided tests - that demonstrates feature works or fixes the issue

@janfaracik janfaracik requested a review from a team as a code owner August 16, 2024 13:26
@jtnord jtnord changed the title Show pull request title in name column [JENKINS-60082] Show pull request title in name column Aug 16, 2024
@jtnord
Copy link
Member

jtnord commented Aug 16, 2024

NB: have not looked at the code, but I am sure there have been some discussions about this in the past but I can not locate them, only the now referenced ticket.

Copy link
Member

@jtnord jtnord left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems reasonable, javadoc on ItemColumn.getTitle() will be incorrect with this change.

I wonder how this scales with longer titles though.

@jtnord jtnord requested a review from a team August 16, 2024 13:56
Copy link
Member

@jtnord jtnord left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Going to leave open for a period to let others comment that may recall any history better than me.

@jtnord jtnord requested a review from a team August 19, 2024 08:39
Copy link
Member

@timja timja left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks really good and is an improvement over the current state, one question and one request for a PR to be filed so that users get consistency


For consistency can you please send a PR for whatever sets the title for the project index page too please?

image

</j:when>
<j:otherwise>
${it.getTitle(job)}
<span style="opacity: 0.75; margin-left: 0.625rem; white-space: nowrap;"><l:breakable value="${h.getRelativeDisplayNameFrom(job, itemGroup)}"/></span>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about adding brackets around the PR branch to more clearly separate?

Suggested change
<span style="opacity: 0.75; margin-left: 0.625rem; white-space: nowrap;"><l:breakable value="${h.getRelativeDisplayNameFrom(job, itemGroup)}"/></span>
<span style="opacity: 0.75; margin-left: 0.625rem; white-space: nowrap;"><l:breakable value="(${h.getRelativeDisplayNameFrom(job, itemGroup)})"/></span>

src/main/resources/jenkins/branch/ItemColumn/column.jelly Outdated Show resolved Hide resolved
@timja
Copy link
Member

timja commented Aug 27, 2024

I added a screenshot to description from my testing (also shows dark mode)

@janfaracik
Copy link
Contributor Author

janfaracik commented Aug 27, 2024

For consistency can you please send a PR for whatever sets the title for the project index page too please?

Browsed around a bit, tried setting displayName of the job to the PR title however it's overridden by

project.setDisplayName(getProjectDisplayName(project, rawName));

Haven't played too much but it appears there's a trait that can be supplied to set the display name to the PR title - maybe it'd make sense to provide a default trait or something like that.

@timja
Copy link
Member

timja commented Aug 27, 2024

Haven't played too much but it appears there's a trait that can be supplied to set the display name to the PR title - maybe it'd make sense to provide a default trait or something like that.

Right just change this orElse(null) I think:

FWIW the traits don't look the best right now and could do with an improvement:

Job display name with fallback to name

Some have opacity lowered but not all for some reason

image

Job display name with fallback to name

image

@janfaracik janfaracik marked this pull request as draft August 28, 2024 09:35
@jtnord
Copy link
Member

jtnord commented Aug 28, 2024

perhaps this is all wrong (I forgot about the traits).
That is should there be a column for the ID of the PR and a column for the title of the PR (which can come from the configured traits)?
As a bonus the view should be configurable to show/hide the columns or add any other column (currently it is all hard coded?).

@timja
Copy link
Member

timja commented Aug 28, 2024

perhaps this is all wrong (I forgot about the traits).

I think a default trait should be added and most of this can likely be reverted in the jelly at least

That is should there be a column for the ID of the PR and a column for the title of the PR (which can come from the configured traits)?

No I don't think we want columns, sensible display names by default is what is requested here.

As a bonus the view should be configurable to show/hide the columns or add any other column (currently it is all hard coded?).

Separate to this but sure.

@janfaracik
Copy link
Contributor Author

janfaracik commented Aug 28, 2024

image image

Updated it to default to RAW_AND_OBJECT_DISPLAY_NAME, and modified that to change the formatting to PR title (#PR number)

I've done a quick hack in this to format PRs consistently (i.e. drop the PR- prefix and replace it with a #), this should probably be done in the branch source plugins instead.

@timja
Copy link
Member

timja commented Aug 28, 2024

Whats with all the test failures?

// The raw name provided here in the context of pull requests is the pull request ID
// We tidy up the ID so that they display consistently between SCMs
String cleanedUpBranchName = rawName;
if (cleanedUpBranchName.startsWith("MR-") || cleanedUpBranchName.startsWith("PR-")) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

may need a regex that it's PR-\d+ so its less likely to hit an actual branch name

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

a branch name won't be hit here because the rawName and displayName would be the same so the above isn't a concern.

@janfaracik
Copy link
Contributor Author

Failing on prj.scheduleBuild2(0).getFuture().get(); - works when @ClassRule is changed to @Rule - very much out of my knowledge of expertise but maybe something isn't being torn down fast enough?

@jglick
Copy link
Member

jglick commented Sep 5, 2024

works when @ClassRule is changed to @Rule

Typically means that tests are not cleaning up after themselves, and are interfering with one another for example by trying to use the same job name.

@ClassRule is a bit faster but you have to pay more attention to maintenance.

<td style="${indenter.getCss(job)}">
<d:taglib uri="local">
<d:tag name="link">
<a href="${jobBaseUrl}${job.shortUrl}" class='model-link jenkins-table__link'>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

extracts the same code into one place and makes minor changes to the classes

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment on lines +2110 to +2116
try (BulkChange bc = new BulkChange(project);) {
observer.created(project);
project.setDisplayName(getProjectDisplayName(project, rawName));
bc.commit();
} catch (IOException e) {
// Ignored
}
Copy link
Member

@timja timja Oct 13, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this change fixed the tests. the observer.created is what creates the RunMap that was null before. (noticed by walking back through a stacktrace of a successful one to see where it was created).

I'm not 100% sure on if there's any impact here and why it was so keen to avoid saving / why a bulk change couldn't be used around everything...

@timja timja marked this pull request as ready for review October 13, 2024 15:06
@timja timja requested review from jtnord and a team and removed request for a team October 13, 2024 15:06
@rsandell
Copy link
Member

Personal preference for me woul'd be to have the cr/pr id first then the title, e.g. #3 did some changes to x

* @return the tool-tip title unescaped for use in an attribute.
*/
@SuppressWarnings("unused") // used via Jelly EL binding
public String getTitle(Object job) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removing an old public method signature.

@timja
Copy link
Member

timja commented Oct 14, 2024

Personal preference for me woul'd be to have the cr/pr id first then the title, e.g. #3 did some changes to x

Mine is the other way, I will identify far clearer by the name than the number, (which is also what GitHub does):
e.g.
image

@timja timja requested a review from a team October 24, 2024 08:06
@timja
Copy link
Member

timja commented Oct 24, 2024

@jtnord could you take another look please?

@jtnord
Copy link
Member

jtnord commented Oct 25, 2024

Personal preference for me woul'd be to have the cr/pr id first then the title, e.g. #3 did some changes to x

Mine is the other way, I will identify far clearer by the name than the number, (which is also what GitHub does)

So for display purposes I would agree with Tim, but for sorting purposes I would want them sorted by PR number (which is also what GH does!). (this is why I originally thought it would be better as 2 columns because I am not sure that the conflicting use cases can be solved here).
(fortunately 🧌 Jenkins does not at this point in time support pagination - so I can always <ctrl>+f)

// The raw name provided here in the context of pull requests is the pull request ID
// We tidy up the ID so that they display consistently between SCMs
String cleanedUpBranchName = rawName;
if (cleanedUpBranchName.startsWith("MR-") || cleanedUpBranchName.startsWith("PR-")) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this would appear to be putting SCM specifics into an SCM agnostic piece of code?
I believe other systems exist and Gerrit uses C-xxxx

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this a blocker, and if so would this mean an API likely needs to be created where the SCMs set their prefix?

Copy link
Member

@jtnord jtnord Oct 25, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So initially I was not thinking it was a blocker, but something that should be addressed (in the future as a follow up)

But now I am thinking is this just confusing? we use #nnn for build numbers in Jenkins and do I really want or need consistency across SCMs? Indeed having PR-123 in one job and MR-245 in another is a reminder that one project is in my GitHub.com account and the other is in GitLab on premise.

in other words could a user expect that by clicking that link below they get taken to build #7 of the job?
image

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think in context with more than one pull request it will be really clear and not going to get confusing at all, e.g.:

image

I don't think most users will care where the SCM is when looking at a job.

Copy link
Member

@jtnord jtnord left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the PR-xx -> #xx can always be reverted/changed/made robust with a new API in the future if there is any feedback in this area.

@timja
Copy link
Member

timja commented Oct 25, 2024

🚢 ?

@jtnord jtnord merged commit 64a6147 into jenkinsci:master Oct 25, 2024
17 checks passed
@jtnord
Copy link
Member

jtnord commented Oct 25, 2024

🚢 ?

sorry, thought you where a maintainer here as you had a green tick for the review, but forgot that was from the access you have on Jenkins as a whole :)

@janfaracik janfaracik deleted the show-pr-title branch October 26, 2024 13:30
@timja timja mentioned this pull request Oct 28, 2024
6 tasks
<j:choose>
<j:when test="${it.isOrphaned(job)}">
<s>
<a href="${jobBaseUrl}${job.shortUrl}" class='model-link inside jenkins-table_link' title="${it.getTitle(job)}">
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@janfaracik Why did you remove the inside class?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't do anything from what I've seen from core.

Copy link
Member

@daniel-beck daniel-beck Oct 29, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It controlled whether the context menu dropdown chevron was considered part of the area of the model-link. If it doesn't do anything anymore, that's an oversight likely in jenkinsci/jenkins#6084.

2.332.x inside:
Screenshot 2024-10-29 at 13 23 29

2.332.x otherwise (ugly but this hover effect was fairly short-lived):
Screenshot 2024-10-29 at 13 23 22

@KalleOlaviNiemitalo
Copy link

It seems this caused a long title of a pull request to be line-wrapped in a strange way, in Mozilla Firefox 128.3.1esr. Redacted by changing most letters to A and most digits to 1:

strange line-wrapping in Mozilla Firefox 128.3.1esr

<tr id="job_PR-1111" class=" job-status-blue"><td data="4" class="jenkins-table__cell--tight jenkins-table__icon"><div class="jenkins-table__cell__button-wrapper"><span style="width: 24px; height: 24px; " class="build-status-icon__wrapper icon-blue icon-md"><span class="build-status-icon__outer"><svg viewBox="0 0 24 24" tooltip="Success" focusable="false" class="svg-icon " title="Success"><use href="/images/build-status/build-status-sprite.svg#build-status-static"></use></svg></span><svg viewBox="0 0 24 24" tooltip="Success" focusable="false" class="svg-icon icon-blue icon-md" title="Success"><use href="/static/bac444bb/images/build-status/build-status-sprite.svg#last-successful"></use></svg></span></div></td><td data="100" class="jenkins-table__cell--tight jenkins-table__icon healthReport" data-html-tooltip="<div class=&quot;jenkins-tooltip--table-wrapper&quot;><table class=&quot;jenkins-table&quot;><thead><tr><th class=&quot;jenkins-!-padding-left-0&quot; align=&quot;center&quot;>W</th><th align=&quot;left&quot;>Description</th><th align=&quot;right&quot;>%</th></tr></thead><tbody><tr><td align=&quot;left&quot; class=&quot;jenkins-table__cell--tight jenkins-table__icon&quot;><div class=&quot;jenkins-table__cell__button-wrapper&quot;><svg xmlns=&quot;http://www.w3.org/2000/svg&quot; aria-hidden=&quot;true&quot; height=&quot;512&quot; viewBox=&quot;0 0 512 512&quot; width=&quot;512&quot;><line style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot; x1=&quot;256&quot; x2=&quot;256&quot; y1=&quot;48&quot; y2=&quot;96&quot;/><line style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot; x1=&quot;256&quot; x2=&quot;256&quot; y1=&quot;416&quot; y2=&quot;464&quot;/><line style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot; x1=&quot;403.08&quot; x2=&quot;369.14&quot; y1=&quot;108.92&quot; y2=&quot;142.86&quot;/><line style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot; x1=&quot;142.86&quot; x2=&quot;108.92&quot; y1=&quot;369.14&quot; y2=&quot;403.08&quot;/><line style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot; x1=&quot;464&quot; x2=&quot;416&quot; y1=&quot;256&quot; y2=&quot;256&quot;/><line style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot; x1=&quot;96&quot; x2=&quot;48&quot; y1=&quot;256&quot; y2=&quot;256&quot;/><line style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot; x1=&quot;403.08&quot; x2=&quot;369.14&quot; y1=&quot;403.08&quot; y2=&quot;369.14&quot;/><line style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot; x1=&quot;142.86&quot; x2=&quot;108.92&quot; y1=&quot;142.86&quot; y2=&quot;108.92&quot;/><circle cx=&quot;256&quot; cy=&quot;256&quot; r=&quot;80&quot; style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot;/></svg></div></td><td align=&quot;left&quot;>Test Result: 0 tests failing out of a total of 256 tests.</td><td align=&quot;right&quot;>100</td></tr><tr><td align=&quot;left&quot; class=&quot;jenkins-table__cell--tight jenkins-table__icon&quot;><div class=&quot;jenkins-table__cell__button-wrapper&quot;><svg xmlns=&quot;http://www.w3.org/2000/svg&quot; aria-hidden=&quot;true&quot; height=&quot;512&quot; viewBox=&quot;0 0 512 512&quot; width=&quot;512&quot;><line style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot; x1=&quot;256&quot; x2=&quot;256&quot; y1=&quot;48&quot; y2=&quot;96&quot;/><line style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot; x1=&quot;256&quot; x2=&quot;256&quot; y1=&quot;416&quot; y2=&quot;464&quot;/><line style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot; x1=&quot;403.08&quot; x2=&quot;369.14&quot; y1=&quot;108.92&quot; y2=&quot;142.86&quot;/><line style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot; x1=&quot;142.86&quot; x2=&quot;108.92&quot; y1=&quot;369.14&quot; y2=&quot;403.08&quot;/><line style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot; x1=&quot;464&quot; x2=&quot;416&quot; y1=&quot;256&quot; y2=&quot;256&quot;/><line style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot; x1=&quot;96&quot; x2=&quot;48&quot; y1=&quot;256&quot; y2=&quot;256&quot;/><line style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot; x1=&quot;403.08&quot; x2=&quot;369.14&quot; y1=&quot;403.08&quot; y2=&quot;369.14&quot;/><line style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot; x1=&quot;142.86&quot; x2=&quot;108.92&quot; y1=&quot;142.86&quot; y2=&quot;108.92&quot;/><circle cx=&quot;256&quot; cy=&quot;256&quot; r=&quot;80&quot; style=&quot;fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px&quot;/></svg></div></td><td align=&quot;left&quot;>Build stability: No recent builds failed.</td><td align=&quot;right&quot;>100</td></tr></tbody></table></div>"><div class="jenkins-table__cell__button-wrapper"><a href="job/PR-1111/lastBuild" class="build-health-link jenkins-button jenkins-button--tertiary"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" height="512" viewBox="0 0 512 512" width="512"><line style="fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px" x1="256" x2="256" y1="48" y2="96"></line><line style="fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px" x1="256" x2="256" y1="416" y2="464"></line><line style="fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px" x1="403.08" x2="369.14" y1="108.92" y2="142.86"></line><line style="fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px" x1="142.86" x2="108.92" y1="369.14" y2="403.08"></line><line style="fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px" x1="464" x2="416" y1="256" y2="256"></line><line style="fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px" x1="96" x2="48" y1="256" y2="256"></line><line style="fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px" x1="403.08" x2="369.14" y1="403.08" y2="369.14"></line><line style="fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px" x1="142.86" x2="108.92" y1="142.86" y2="108.92"></line><circle cx="256" cy="256" r="80" style="fill:none;stroke:var(--yellow);stroke-linecap:round;stroke-miterlimit:10;stroke-width:36px"></circle></svg></a></div></td><td><a href="job/PR-1111/" class="model-link jenkins-table__link">AAAAA<wbr>-1111, Aaaaaaaaa AaaaaAaaAaaaaaaaaAaa<wbr>aaAaaaaaaa aaaaa aaa AAA aaaaaaaaaaa aaaaaaaa aa aaaaaaa aaaaa aaaaa <wbr>(#1111)<span class="jenkins-menu-dropdown-chevron" data-href="https://jenkins.example/job/AAAA/job/Aaaaa-Aaaaaa/view/change-requests/job/PR-1111/" aria-expanded="false"></span></a></td><td data="2024-10-28T11:16:15Z">
        22 hr
        <a href="job/PR-1111/lastSuccessfulBuild/" class="jenkins-table__link jenkins-table__badge model-link inside">#1<span class="jenkins-menu-dropdown-chevron" data-href="https://jenkins.example/job/AAAA/job/Aaaaa-Aaaaaa/view/change-requests/job/PR-1111/lastSuccessfulBuild/" aria-expanded="false"></span></a></td><td data="-">N/A</td><td data="767903">12 min</td><td class="jenkins-table__cell--tight"><div class="jenkins-table__cell__button-wrapper"><a tooltip="Schedule a Build with parameters for AAAAA-1111, Aaaaaaaaa AaaaaAaaAaaaaaaaaAaaaaAaaaaaaa aaaaa aaa AAA aaaaaaaaaaa aaaaaaaa aa aaaaaaa aaaaa aaaaa (#1111)" id="id756" href="job/PR-1111/build?delay=0sec" class="jenkins-button jenkins-button--tertiary jenkins-!-build-color " title="Schedule a Build with parameters for AAAAA-1111, Aaaaaaaaa AaaaaAaaAaaaaaaaaAaaaaAaaaaaaa aaaaa aaa AAA aaaaaaaaaaa aaaaaaaa aa aaaaaaa aaaaa aaaaa (#1111)"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" height="512" viewBox="0 0 512 512" width="512"><title></title><path d="M112,111V401c0,17.44,17,28.52,31,20.16l247.9-148.37c12.12-7.25,12.12-26.33,0-33.58L143,90.84C129,82.48,112,93.56,112,111Z" style="fill:none;stroke:currentColor;stroke-miterlimit:10;stroke-width:32px"></path></svg></a></div></td><td align="right">n/a</td><td data="64" data-html-tooltip="<div class=&quot;jenkins-tooltip healthReportDetails jenkins-tooltip--table-wrapper&quot;><table class=&quot;jenkins-table&quot;><thead><tr><th></th><th align=&quot;left&quot;>Tool</th><th align=&quot;right&quot;>Total</th></tr></thead><tbody><tr><td align=&quot;left&quot;><svg class=&quot;icon-md&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; aria-hidden=&quot;true&quot; viewBox=&quot;0 0 512 512&quot;><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc. --><path d=&quot;M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480L40 480c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z&quot; fill=&quot;currentColor&quot;/></svg></td><td><a href=&quot;/job/AAAA/job/Aaaaa-Aaaaaa/view/change-requests/job/PR-1111//1/msbuild&quot;>MSBuild (Build) Warnings</a></td><td align=&quot;right&quot;>64</td></tr><tr><td align=&quot;left&quot;><svg class=&quot;icon-md&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; aria-hidden=&quot;true&quot; viewBox=&quot;0 0 512 512&quot;><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc. --><path d=&quot;M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480L40 480c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z&quot; fill=&quot;currentColor&quot;/></svg></td><td><a href=&quot;/job/AAAA/job/Aaaaa-Aaaaaa/view/change-requests/job/PR-1111//1/msbuild-archive&quot;>MSBuild (Archive) Warnings</a></td><td align=&quot;right&quot;>0</td></tr></tbody></table></div>" class="healthReport issues-total" data-tooltip-interactive="true">64<div class="jenkins-tooltip healthReportDetails jenkins-tooltip--table-wrapper"><table class="jenkins-table"><thead><tr><th></th><th align="left">Tool</th><th align="right">Total</th></tr></thead><tbody><tr><td align="left"><svg class="icon-md" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc. --><path d="M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480L40 480c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z" fill="currentColor"></path></svg></td><td><a href="/job/AAAA/job/Aaaaa-Aaaaa/view/change-requests/job/PR-1111//1/msbuild">MSBuild (Build) Warnings</a></td><td align="right">64</td></tr><tr><td align="left"><svg class="icon-md" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc. --><path d="M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480L40 480c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z" fill="currentColor"></path></svg></td><td><a href="/job/AAAA/job/Aaaaa-Aaaaaa/view/change-requests/job/PR-1111//1/msbuild-archive">MSBuild (Archive) Warnings</a></td><td align="right">0</td></tr></tbody></table></div></td></tr>

The same HTML renders OK in Microsoft Edge 130.0.2849.56, though:

Microsoft Edge 130.0.2849.56

Adding a span within the a element fixes the rendering in Mozilla Firefox 128.3.1esr, and doesn't seem to hurt in Microsoft Edge 130.0.2849.56:

<td><a href="job/PR-1111/" class="model-link jenkins-table__link"><span>AAAAA<wbr>-1111, Aaaaaaaaa AaaaaAaaAaaaaaaaaAaa<wbr>aaAaaaaaaa aaaaa aaa AAA aaaaaaaaaaa aaaaaaaa aa aaaaaaa aaaaa aaaaa <wbr>(#1111)</span><span class="jenkins-menu-dropdown-chevron" data-href="https://jenkins.example/job/AAAA/job/Aaaaa-Aaaaaa/view/change-requests/job/PR-1111/" aria-expanded="false"></span></a></td>

OK line-wrapping in Mozilla Firefox 128.3.1esr
No visible change in Microsoft Edge 130.0.2849.56

@KalleOlaviNiemitalo
Copy link

I also tried restoring the inside class, but that did not fix the line-wrapping in Mozilla Firefox 128.3.1esr.

@timja
Copy link
Member

timja commented Oct 29, 2024

See #492 for the Firefox fix

@basil
Copy link
Member

basil commented Nov 5, 2024

FYI JENKINS-74811

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants