mirror of
https://github.com/go-gitea/gitea.git
synced 2026-09-16 01:43:24 +09:00
fix(actions): show retention info on hover for expired artifacts (#38477)
The artifact info hover tooltip (#37100) only worked for live artifacts. Hovering an expired/deleted artifact showed nothing, and even on live artifacts the retention date was missing on real runs. Two root causes: 1. **Expired artifacts had no tooltip.** In the run view sidebar, expired artifacts render in a separate branch that omitted `data-tooltip-content` entirely, so there was nothing to hover. 2. **`ExpiresUnix` was no longer sent.** The `ActionRunAttempt` refactor (#37119) dropped `ExpiresUnix` from `fillViewRunResponseArtifacts`, so real runs always returned `0` and the tooltip fell back to size-only. Only the devtest mock still populated it, which masked the regression. Artifacts without a recorded expiry (`expiresUnix <= 0`) still degrade gracefully to a size-only tooltip. Both states can be previewed on the `/devtest/mock/*` actions run page. Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
@@ -124,6 +124,7 @@
|
|||||||
"artifacts": "Artifacts",
|
"artifacts": "Artifacts",
|
||||||
"expired": "Expired",
|
"expired": "Expired",
|
||||||
"artifact_expires_at": "Expires at %s",
|
"artifact_expires_at": "Expires at %s",
|
||||||
|
"artifact_expired_at": "Expired at %s",
|
||||||
"confirm_delete_artifact": "Are you sure you want to delete the artifact '%s'?",
|
"confirm_delete_artifact": "Are you sure you want to delete the artifact '%s'?",
|
||||||
"archived": "Archived",
|
"archived": "Archived",
|
||||||
"concept_system_global": "Global",
|
"concept_system_global": "Global",
|
||||||
|
|||||||
@@ -716,9 +716,10 @@ func fillViewRunResponseSummary(ctx *context_module.Context, resp *ViewResponse,
|
|||||||
resp.Artifacts = make([]*ArtifactsViewItem, 0, len(arts))
|
resp.Artifacts = make([]*ArtifactsViewItem, 0, len(arts))
|
||||||
for _, art := range arts {
|
for _, art := range arts {
|
||||||
resp.Artifacts = append(resp.Artifacts, &ArtifactsViewItem{
|
resp.Artifacts = append(resp.Artifacts, &ArtifactsViewItem{
|
||||||
Name: art.ArtifactName,
|
Name: art.ArtifactName,
|
||||||
Size: art.FileSize,
|
Size: art.FileSize,
|
||||||
Status: util.Iif(art.Status == actions_model.ArtifactStatusExpired, "expired", "completed"),
|
Status: util.Iif(art.Status == actions_model.ArtifactStatusExpired, "expired", "completed"),
|
||||||
|
ExpiresUnix: int64(art.ExpiredUnix),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
data-locale-artifacts-title="{{ctx.Locale.Tr "artifacts"}}"
|
data-locale-artifacts-title="{{ctx.Locale.Tr "artifacts"}}"
|
||||||
data-locale-artifact-expired="{{ctx.Locale.Tr "expired"}}"
|
data-locale-artifact-expired="{{ctx.Locale.Tr "expired"}}"
|
||||||
data-locale-artifact-expires-at="{{ctx.Locale.Tr "artifact_expires_at"}}"
|
data-locale-artifact-expires-at="{{ctx.Locale.Tr "artifact_expires_at"}}"
|
||||||
|
data-locale-artifact-expired-at="{{ctx.Locale.Tr "artifact_expired_at"}}"
|
||||||
data-locale-confirm-delete-artifact="{{ctx.Locale.Tr "confirm_delete_artifact"}}"
|
data-locale-confirm-delete-artifact="{{ctx.Locale.Tr "confirm_delete_artifact"}}"
|
||||||
data-locale-show-timestamps="{{ctx.Locale.Tr "show_timestamps"}}"
|
data-locale-show-timestamps="{{ctx.Locale.Tr "show_timestamps"}}"
|
||||||
data-locale-show-log-seconds="{{ctx.Locale.Tr "show_log_seconds"}}"
|
data-locale-show-log-seconds="{{ctx.Locale.Tr "show_log_seconds"}}"
|
||||||
|
|||||||
@@ -274,7 +274,12 @@ onBeforeUnmount(() => {
|
|||||||
<SvgIcon name="octicon-trash"/>
|
<SvgIcon name="octicon-trash"/>
|
||||||
</a>
|
</a>
|
||||||
</template>
|
</template>
|
||||||
<span v-else class="flex-text-block tw-flex-1 tw-min-w-0 tw-text-text-light-2">
|
<span
|
||||||
|
v-else class="flex-text-block tw-flex-1 tw-min-w-0 tw-text-text-light-2"
|
||||||
|
:data-tooltip-content="buildArtifactTooltipHtml(artifact, locale.artifactExpiredAt)"
|
||||||
|
data-tooltip-render="html"
|
||||||
|
data-tooltip-placement="top-end"
|
||||||
|
>
|
||||||
<SvgIcon name="octicon-file-removed"/>
|
<SvgIcon name="octicon-file-removed"/>
|
||||||
<span class="tw-flex-1 gt-ellipsis">{{ artifact.name }}</span>
|
<span class="tw-flex-1 gt-ellipsis">{{ artifact.name }}</span>
|
||||||
<span class="ui label tw-flex-shrink-0">{{ locale.artifactExpired }}</span>
|
<span class="ui label tw-flex-shrink-0">{{ locale.artifactExpired }}</span>
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ function initRepositoryActionsView() {
|
|||||||
artifactsTitle: el.getAttribute('data-locale-artifacts-title'),
|
artifactsTitle: el.getAttribute('data-locale-artifacts-title'),
|
||||||
artifactExpired: el.getAttribute('data-locale-artifact-expired'),
|
artifactExpired: el.getAttribute('data-locale-artifact-expired'),
|
||||||
artifactExpiresAt: el.getAttribute('data-locale-artifact-expires-at'),
|
artifactExpiresAt: el.getAttribute('data-locale-artifact-expires-at'),
|
||||||
|
artifactExpiredAt: el.getAttribute('data-locale-artifact-expired-at'),
|
||||||
confirmDeleteArtifact: el.getAttribute('data-locale-confirm-delete-artifact'),
|
confirmDeleteArtifact: el.getAttribute('data-locale-confirm-delete-artifact'),
|
||||||
showTimeStamps: el.getAttribute('data-locale-show-timestamps'),
|
showTimeStamps: el.getAttribute('data-locale-show-timestamps'),
|
||||||
showLogSeconds: el.getAttribute('data-locale-show-log-seconds'),
|
showLogSeconds: el.getAttribute('data-locale-show-log-seconds'),
|
||||||
|
|||||||
Reference in New Issue
Block a user