jenkinsci/custom-folder-icon-plugin

Ionicons for multibranch pipelines doesn't survive job reload or instance restart

jonesbusy opened this issue · 2 comments

Jenkins and plugins versions report

Environment
Jenkins: 2.361.2
OS: Linux - 5.10.16.3-microsoft-standard-WSL2
---
ace-editor:1.1
active-directory:2.26
allure-jenkins-plugin:2.30.2
analysis-model-api:10.17.0
ansible:1.1
ansicolor:1.0.2
ant:481.v7b_09e538fcca
antisamy-markup-formatter:2.7
apache-httpcomponents-client-4-api:4.5.13-138.v4e7d9a_7b_a_e61
artifactory:3.17.1
atlassian-bitbucket-server-integration:3.3.1
authentication-tokens:1.4
authorize-project:1.4.0
basic-branch-build-strategies:1.3.2
bitbucket-kubernetes-credentials:40.vf38b_b_3304a_32
bootstrap4-api:4.6.0-5
bootstrap5-api:5.2.1-3
bouncycastle-api:2.26
branch-api:2.1046.v0ca_37783ecc5
build-blocker-plugin:1.7.8
build-discarder:139.v05696a_7fe240
build-name-setter:2.2.0
build-user-vars-plugin:1.9
build-with-parameters:1.6
built-on-column:1.1
caffeine-api:2.9.3-65.v6a_47d0f4d1fe
checks-api:1.7.5
cloudbees-bitbucket-branch-source:791.vb_eea_a_476405b
cloudbees-disk-usage-simple:178.v1a_4d2f6359a_8
cloudbees-folder:6.758.vfd75d09eea_a_1
code-coverage-api:3.2.0
command-launcher:90.v669d7ccb_7c31
commons-lang3-api:3.12.0-36.vd97de6465d5b_
commons-text-api:1.9-19.v8df45c678366
conditional-buildstep:1.4.2
config-file-provider:3.11.1
configuration-as-code:1512.vb_79d418d5fc8
credentials:1189.vf61b_a_5e2f62e
credentials-binding:523.vd859a_4b_122e6
cucumber-reports:5.7.3
custom-folder-icon:2.3
dark-theme:245.vb_a_2b_b_010ea_96
data-tables-api:1.12.1-4
display-url-api:2.3.6
docker-commons:1.21
docker-workflow:521.v1a_a_dd2073b_2e
dotnet-sdk:1.4.0
dtkit-api:3.0.2
durable-task:500.v8927d9fd99d8
echarts-api:5.4.0-1
email-ext:2.91
envinject:2.881.v37c62073ff97
envinject-api:1.199.v3ce31253ed13
extended-read-permission:3.2
external-monitor-job:203.v683c09d993b_9
favorite:2.4.1
file-operations:1.11
file-parameters:205.vf6ce13b_e5dee
font-awesome-api:6.2.0-3
forensics-api:1.16.0
generic-tool:1.0
git:4.12.1
git-client:3.12.1
git-forensics:1.11.0
git-parameter:0.9.18
github:1.35.0
github-api:1.303-400.v35c2d8258028
github-branch-source:1695.v88de84e9f6b_9
github-checks:1.0.19
gitlab-api:5.0.1-78.v47a_45b_9f78b_7
gitlab-branch-source:640.v7101b_1c0def9
gradle:1.40
h2-api:1.4.199
handlebars:3.0.8
handy-uri-templates-2-api:2.1.8-22.v77d5b_75e6953
hidden-parameter:0.0.5
htmlpublisher:1.31
http_request:1.16
inline-pipeline:1.0.2
instance-identity:116.vf8f487400980
ionicons-api:28.va_f3a_84439e5f
ivy:2.2
jackson2-api:2.13.3-285.vc03c0256d517
jacoco:3.3.2
jakarta-activation-api:2.0.1-2
jakarta-mail-api:2.0.1-2
javadoc:226.v71211feb_e7e9
javax-activation-api:1.2.0-5
javax-mail-api:1.6.2-8
jaxb:2.3.6-2
jdk-tool:55.v1b_32b_6ca_f9ca
jenkins-design-language:1.25.8
jersey2-api:2.37-1
jjwt-api:0.11.5-77.v646c772fddb_0
jnr-posix-api:3.1.15-2
job-dsl:1.81
jquery:1.12.4-1
jquery-detached:1.2.1
jquery3-api:3.6.1-2
jsch:0.1.55.61.va_e9ee26616e7
junit:1150.v5c2848328b_60
kubernetes:3724.v0920c1e0ec69
kubernetes-client-api:5.12.2-193.v26a_6078f65a_9
kubernetes-credentials:0.9.0
kubernetes-credentials-provider:1.199.v4a_1d1f5d074f
ldap:2.12
locale:180.v207501dff9b_a_
lockable-resources:2.18
login-theme:1.1
mailer:438.v02c7f0a_12fa_4
mapdb-api:1.0.9-28.vf251ce40855d
mask-passwords:3.3
material-theme:0.5.2-rc100.6121925fe229
matrix-auth:3.1.5
matrix-project:785.v06b_7f47b_c631
maven-plugin:3.19
metrics:4.2.10-389.v93143621b_050
mina-sshd-api-common:2.9.1-44.v476733c11f82
mina-sshd-api-core:2.9.1-44.v476733c11f82
momentjs:1.1.1
next-build-number:1.8
next-executions:1.0.15
nodejs:1.5.1
nunit:0.27
okhttp-api:4.9.3-108.v0feda04578cf
opencover:1.0.3
openshift-client:1.0.37
openshift-k8s-credentials:31.v74cd45d0966f
pam-auth:1.10
parameter-separator:1.3
parameterized-scheduler:1.1
parameterized-trigger:2.45
pipeline-build-step:2.18
pipeline-graph-analysis:195.v5812d95a_a_2f9
pipeline-graph-view:101.v3b_0fccec2523
pipeline-groovy-lib:612.v84da_9c54906d
pipeline-input-step:451.vf1a_a_4f405289
pipeline-maven:1205.vceea_7b_972817
pipeline-milestone-step:101.vd572fef9d926
pipeline-model-api:2.2114.v2654ca_721309
pipeline-model-definition:2.2114.v2654ca_721309
pipeline-model-extensions:2.2114.v2654ca_721309
pipeline-npm:0.9.2
pipeline-rest-api:2.25
pipeline-stage-step:296.v5f6908f017a_5
pipeline-stage-tags-metadata:2.2114.v2654ca_721309
pipeline-stage-view:2.25
pipeline-utility-steps:2.13.0
plain-credentials:139.ved2b_9cf7587b
plugin-util-api:2.18.0
popper-api:1.16.1-3
popper2-api:2.11.6-2
prism-api:1.29.0-1
prometheus:2.0.11
pubsub-light:1.17
purge-build-queue-plugin:72.v4ee1793b_884f
resource-disposer:0.20
run-condition:1.5
scm-api:621.vda_a_b_055e58f7
scm-filter-branch-pr:0.5.1
script-security:1183.v774b_0b_0a_a_451
sidebar-link:2.2.0
simple-theme-plugin:103.va_161d09c38c7
skip-notifications-trait:76.v59e4c9e49cd8
snakeyaml-api:1.32-86.ve3f030a_75631
sonar:2.14
sse-gateway:1.26
ssh-agent:295.v9ca_a_1c7cc3a_a_
ssh-credentials:305.v8f4381501156
ssh-slaves:2.846.v1b_70190624f5
sshd:3.249.v2dc2ea_416e33
strict-crumb-issuer:2.1.0
structs:324.va_f5d6774f3a_d
subversion:2.16.0
theme-manager:1.5
timestamper:1.20
token-macro:308.v4f2b_ed62b_b_16
trilead-api:2.72.v2a_3236754f73
uno-choice:2.6.4
variant:59.vf075fe829ccb
warnings-ng:9.20.0
windows-slaves:1.8.1
workflow-aggregator:590.v6a_d052e5a_a_b_5
workflow-api:1192.v2d0deb_19d212
workflow-basic-steps:994.vd57e3ca_46d24
workflow-cps:2802.v5ea_628154b_c2
workflow-durable-task-step:1199.v02b_9244f8064
workflow-job:1239.v71b_b_a_124a_725
workflow-multibranch:716.vc692a_e52371b_
workflow-remote-loader:1.5
workflow-scm-step:400.v6b_89a_1317c9a_
workflow-step-api:639.v6eca_cd8c04a_a_
workflow-support:838.va_3a_087b_4055b
ws-cleanup:0.43
xunit:3.1.1

What Operating System are you using (both controller, and any agents involved in the problem)?

All OS

Reproduction steps

Create a multibranch pipeline with ionicon
Save the job
(Icon appear successfully and XML contains correct
reload the job (/job//) to force reload from disk (Or restart the instance)

The same use case work with standard folder but not multibranches pipeline

Expected Results

The ionicon is still present

Actual Results

ionicon is not present and default icon is used

Anything else?

It seems that when we 'save' the job the configuration is correctly loading into memory and persisted.
The issue look like when reading the job XML file

Job is

<?xml version='1.1' encoding='UTF-8'?>
<org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject plugin="workflow-multibranch@716.vc692a_e52371b_">
  <actions/>
  <description>dsl-multibranch</description>
  <properties>
    <org.jenkinsci.plugins.docker.workflow.declarative.FolderConfig plugin="docker-workflow@521.v1a_a_dd2073b_2e">
      <dockerLabel></dockerLabel>
      <registry plugin="docker-commons@1.21"/>
    </org.jenkinsci.plugins.docker.workflow.declarative.FolderConfig>
    <org.jenkinsci.plugins.pipeline.maven.MavenConfigFolderOverrideProperty plugin="pipeline-maven@1205.vceea_7b_972817">
      <settings class="jenkins.mvn.DefaultSettingsProvider"/>
      <globalSettings class="jenkins.mvn.DefaultGlobalSettingsProvider"/>
      <override>false</override>
    </org.jenkinsci.plugins.pipeline.maven.MavenConfigFolderOverrideProperty>
  </properties>
  <folderViews class="jenkins.branch.MultiBranchProjectViewHolder" plugin="branch-api@2.1046.v0ca_37783ecc5">
    <owner class="org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject" reference="../.."/>
  </folderViews>
  <healthMetrics>
    <com.cloudbees.hudson.plugins.folder.health.WorstChildHealthMetric plugin="cloudbees-folder@6.758.vfd75d09eea_a_1">
      <nonRecursive>false</nonRecursive>
    </com.cloudbees.hudson.plugins.folder.health.WorstChildHealthMetric>
  </healthMetrics>
  <icon class="jenkins.plugins.foldericon.IoniconFolderIcon" plugin="custom-folder-icon@2.3">
    <ionicon>logo-twitter</ionicon>
    <owner class="org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject" reference="../.."/>
  </icon>
  <orphanedItemStrategy class="com.cloudbees.hudson.plugins.folder.computed.DefaultOrphanedItemStrategy" plugin="cloudbees-folder@6.758.vfd75d09eea_a_1">
    <pruneDeadBranches>false</pruneDeadBranches>
    <daysToKeep>-1</daysToKeep>
    <numToKeep>-1</numToKeep>
    <abortBuilds>false</abortBuilds>
  </orphanedItemStrategy>
  <triggers/>
  <disabled>false</disabled>
  <sources class="jenkins.branch.MultiBranchProject$BranchSourceList" plugin="branch-api@2.1046.v0ca_37783ecc5">
    <data/>
    <owner class="org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject" reference="../.."/>
  </sources>
  <factory class="org.jenkinsci.plugins.workflow.multibranch.WorkflowBranchProjectFactory">
    <owner class="org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject" reference="../.."/>
    <scriptPath>Jenkinsfile</scriptPath>
  </factory>
</org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject>

But when reload/restarted

custom_icon_reload

Unfortunately my fix jenkinsci/branch-api-plugin#308 has not yet been released 🤷🏼 The issue however should be resolved by that.