Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-38601

Cannot mark Multibranch Pipeline as Favorite in Blue Ocean when no master branch

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: Minor Minor
    • blueocean-plugin
    • jenkins-2.7.4
      blueocean - Built at 27th September 2016 03:05 AM (no branch) 57f7758
      Safari Version 9.1.3 (& FireFox 49.0.1)

      Summary: if there is no master branch, if you try to favourite a MB pipeline (vs a specific branch) it does incorrect things. It should work out what the default branch is (or ask user) or at least tell them to pick a branch... (latter is easiest).

      If a user has favourited a MB pipeline folder in classic, blue ocean should ignore that.


      Steps:

      1. Click "New Item" and Create "Multibranch Pipeline" without branch "master".
      2. Open Dashboard Jenkins. Check "Favorite" button for Multibranch Pipeline.
      3. Open Jenkins Blue Ocean.
        Actual Result: New line for this job has been created in "Favorites" (grey colour). "Run" button hasn't worked.
      4. Open Dashboard Jenkins -> this Multibranch Pipeline. Check "Favorite" button for any branch.
        E.R. = A.R.: No error. Favorites Job have displayed correctly in Jenkins Blue Ocean.
      5. Disable "Favorite" for this job.
      6. Open Jenkins Blue Ocean.
      7. Click "Favorite" button for Multibranch Pipeline.
        Expected Result: Favorite label has been added. New line for this job has been created in "Favorites".
        Actual Result: Failed to load resource: the server responded with a status of 400 (Bad Request)
        {
            "message" : "no master branch to favorite",
            "code" : 400,
            "errors" : [ ]
        }
        
      8. Disable "Favorite" for this job.
        Expected Result: Favorite label has been deleted.
        Actual Result: TypeError: undefined is not an object (evaluating 'favoriteToRemove._links')

          [JENKINS-38601] Cannot mark Multibranch Pipeline as Favorite in Blue Ocean when no master branch

          Kseniia Nenasheva created issue -
          Kseniia Nenasheva made changes -
          Attachment New: PipelineMB_favorite.gif [ 34131 ]
          Kseniia Nenasheva made changes -
          Summary Original: Can't put a label "Favorites" for Multibranch Pipeline in Jenkins Blue Ocean New: Cannot mark Multibranch Pipeline as Favorite in Blue Ocean

          I did some minor investigation on this one.
          The implementation looks explicitly for the job named master in the Multibranch project, and that is the job marked as favorite, by default. Therefore, you'll need to have a job called master for this to work.
          For example, you can point your Multibranch project to this repository: https://github.com/jenkinsci/git-plugin, and the branch indexing will automatically create the master job, and then the favorite feature should work.

          Alexandru Somai added a comment - I did some minor investigation on this one. The implementation looks explicitly for the job named master in the Multibranch project, and that is the job marked as favorite, by default. Therefore, you'll need to have a job called master for this to work. For example, you can point your Multibranch project to this repository: https://github.com/jenkinsci/git-plugin , and the branch indexing will automatically create the master job, and then the favorite feature should work.

          James Dumay added a comment -

          Eventually we want the default branch name to be whatever the upstreams "default branch" is (both Github and Bitbucket share a default branch concept).

          I didn't understand what your expected behavior should be in this case - did you mean we should disable the favoriting button if the master branch does not exist?

          James Dumay added a comment - Eventually we want the default branch name to be whatever the upstreams "default branch" is (both Github and Bitbucket share a default branch concept). I didn't understand what your expected behavior should be in this case - did you mean we should disable the favoriting button if the master branch does not exist?

          James Dumay added a comment -

          I think at the very least we can make this fail without an error in the console and pop up a toast to say that we couldn't favorite the pipeline as master branch does not exist?

          James Dumay added a comment - I think at the very least we can make this fail without an error in the console and pop up a toast to say that we couldn't favorite the pipeline as master branch does not exist?
          Kseniia Nenasheva made changes -
          Description Original: +Steps:+
          # Click "New Item" and Create "Multibranch Pipeline".
          # Open Dashboard Jenkins. Check "Favorite" button for Multibranch Pipeline.
          *E.R. = A.R.:* No error. Favorites Job have displayed correctly in Jenkins Blue Ocean.
          # Disable "Favorite" for this job.
          # Open Jenkins Blue Ocean.
          # Click "Favorite" button for Multibranch Pipeline.
          *Expected Result:* Favorite label has been added. New line for this job has been created in "Favorites".
          *Actual Result:* Failed to load resource: the server responded with a status of 400 (Bad Request)
          {noformat}
          {
              "message" : "no master branch to favorite",
              "code" : 400,
              "errors" : [ ]
          }
          {noformat}
          # Disable "Favorite" for this job.
          *Expected Result:* Favorite label has been deleted.
          *Actual Result:* TypeError: undefined is not an object (evaluating 'favoriteToRemove._links')
          New: +Steps:+
          # Click "New Item" and Create "Multibranch Pipeline" without branch "master".
          # Open Dashboard Jenkins. Check "Favorite" button for Multibranch Pipeline.
          *E.R. = A.R.:* No error. Favorites Job have displayed correctly in Jenkins Blue Ocean.
          # Disable "Favorite" for this job.
          # Open Jenkins Blue Ocean.
          # Click "Favorite" button for Multibranch Pipeline.
          *Expected Result:* Favorite label has been added. New line for this job has been created in "Favorites".
          *Actual Result:* Failed to load resource: the server responded with a status of 400 (Bad Request)
          {noformat}
          {
              "message" : "no master branch to favorite",
              "code" : 400,
              "errors" : [ ]
          }
          {noformat}
          # Disable "Favorite" for this job.
          *Expected Result:* Favorite label has been deleted.
          *Actual Result:* TypeError: undefined is not an object (evaluating 'favoriteToRemove._links')
          Kseniia Nenasheva made changes -
          Description Original: +Steps:+
          # Click "New Item" and Create "Multibranch Pipeline" without branch "master".
          # Open Dashboard Jenkins. Check "Favorite" button for Multibranch Pipeline.
          *E.R. = A.R.:* No error. Favorites Job have displayed correctly in Jenkins Blue Ocean.
          # Disable "Favorite" for this job.
          # Open Jenkins Blue Ocean.
          # Click "Favorite" button for Multibranch Pipeline.
          *Expected Result:* Favorite label has been added. New line for this job has been created in "Favorites".
          *Actual Result:* Failed to load resource: the server responded with a status of 400 (Bad Request)
          {noformat}
          {
              "message" : "no master branch to favorite",
              "code" : 400,
              "errors" : [ ]
          }
          {noformat}
          # Disable "Favorite" for this job.
          *Expected Result:* Favorite label has been deleted.
          *Actual Result:* TypeError: undefined is not an object (evaluating 'favoriteToRemove._links')
          New: +Steps:+
          # Click "New Item" and Create "Multibranch Pipeline" without branch "master".
          # Open Dashboard Jenkins. Check "Favorite" button for Multibranch Pipeline.
          # Open Jenkins Blue Ocean.
          *Actual Result:* New line for this job has been created in "Favorites" (grey colour). "Run" button hasn't worked.
          # Open Dashboard Jenkins -> this Multibranch Pipeline. Check "Favorite" button for any branch.
          *E.R. = A.R.:* No error. Favorites Job have displayed correctly in Jenkins Blue Ocean.
          # Disable "Favorite" for this job.
          # Open Jenkins Blue Ocean.
          # Click "Favorite" button for Multibranch Pipeline.
          *Expected Result:* Favorite label has been added. New line for this job has been created in "Favorites".
          *Actual Result:* Failed to load resource: the server responded with a status of 400 (Bad Request)
          {noformat}
          {
              "message" : "no master branch to favorite",
              "code" : 400,
              "errors" : [ ]
          }
          {noformat}
          # Disable "Favorite" for this job.
          *Expected Result:* Favorite label has been deleted.
          *Actual Result:* TypeError: undefined is not an object (evaluating 'favoriteToRemove._links')

          Updated the reproduction steps.

          Repositories without master branch are not so uncommon, hence this issues is pretty important. GitHub also allows specifying different branch as a main one. Blue Ocean should not hardcode the branch IMHO.

          Error output to the console (console only) - is a bad idea. I can offer two options:
          1 - In the absence of branches "master" appoint another main branch (default / on the last commit, etc.)
          2 - Show a message stating that the branch "master" is not found, and offer the user to choose your favorite branch in Jenkins Dashboard (branch, not MB project). If user selected the project, then the project in the Blue Ocean will be displayed in the favorites, with empty branches, and "run" button will not be worked (please see steps 2-4).

          Kseniia Nenasheva added a comment - Updated the reproduction steps. Repositories without master branch are not so uncommon, hence this issues is pretty important. GitHub also allows specifying different branch as a main one. Blue Ocean should not hardcode the branch IMHO. Error output to the console (console only) - is a bad idea. I can offer two options: 1 - In the absence of branches "master" appoint another main branch (default / on the last commit, etc.) 2 - Show a message stating that the branch "master" is not found, and offer the user to choose your favorite branch in Jenkins Dashboard (branch, not MB project). If user selected the project, then the project in the Blue Ocean will be displayed in the favorites, with empty branches, and "run" button will not be worked (please see steps 2-4).

          Michael Neale added a comment -

          Thanks ks_nenasheva - well spotted.

          Currently if you favourite it from blue ocean it should search for a suitable branch (but it won't look for the default as setup in github/bitbucket, as that information isn't currently available yet). However, from your steps, it looks like favouriting it from Jenkins itself is a problem? (this may be a related bug, but not quite the same). Blue ocean can only show favourites for a branch (hence it tries to pick a default) - it can't show a favourite of what is effectively a folder.

          The logic should be (for blue ocean): Favourite a MB pipeline -> choose default branch as per SCM provider -> (if none available) look for master/production/default named branch -> (if none found) -> pick the first one alphabetically so there is at least one branch.

          What I am curious about is what is the behavior if people don't want a favourite on a branch (I need to investigate that a bit)

          Michael Neale added a comment - Thanks ks_nenasheva - well spotted. Currently if you favourite it from blue ocean it should search for a suitable branch (but it won't look for the default as setup in github/bitbucket, as that information isn't currently available yet). However, from your steps, it looks like favouriting it from Jenkins itself is a problem? (this may be a related bug, but not quite the same). Blue ocean can only show favourites for a branch (hence it tries to pick a default) - it can't show a favourite of what is effectively a folder. The logic should be (for blue ocean): Favourite a MB pipeline -> choose default branch as per SCM provider -> (if none available) look for master/production/default named branch -> (if none found) -> pick the first one alphabetically so there is at least one branch. What I am curious about is what is the behavior if people don't want a favourite on a branch (I need to investigate that a bit)

            Unassigned Unassigned
            ks_nenasheva Kseniia Nenasheva
            Votes:
            1 Vote for this issue
            Watchers:
            7 Start watching this issue

              Created:
              Updated:
              Resolved: