GitVersion icon indicating copy to clipboard operation
GitVersion copied to clipboard

Using Bitbucket Pipelines the current branch can not be evaluated when on develop branch

Open smuellener opened this issue 3 years ago • 9 comments

When on develop and using Bitbucket Pipelines and gitversion from a docker container, the branch can not be evaluated and (no branch) is shown in the diag log. If the same is run when on a feature branch, gitversion works fine.

running:

docker run --volume $(pwd):/repo gittools/gitversion:5.7.1-alpine.3.12-x64-5.0 /repo -nofetch -nonormalize -diag

shows:

INFO [11/04/21 18:33:53:85] Working directory: /repo INFO [11/04/21 18:33:53:88] Project root is: /repo/ INFO [11/04/21 18:33:53:88] DotGit directory is: /repo/.git INFO [11/04/21 18:33:54:06] Using latest commit on specified branch INFO [11/04/21 18:33:54:08] Begin: Getting branches containing the commit '8c55d5a'. INFO [11/04/21 18:33:54:08] Trying to find direct branches. INFO [11/04/21 18:33:54:08] No direct branches found, searching through all branches. INFO [11/04/21 18:33:54:08] Searching for commits reachable from 'develop'. INFO [11/04/21 18:33:54:09] The branch 'develop' has a matching commit. INFO [11/04/21 18:33:54:09] Searching for commits reachable from 'origin/HEAD'. INFO [11/04/21 18:33:54:09] The branch 'origin/HEAD' has a matching commit. INFO [11/04/21 18:33:54:09] End: Getting branches containing the commit '8c55d5a'. (Took: 11.28ms) INFO [11/04/21 18:33:54:10] No branch configuration found for branch (no branch), falling back to default configuration INFO [11/04/21 18:33:54:10] Begin: Attempting to inherit branch configuration from parent branch INFO [11/04/21 18:33:54:11] Begin: Finding branch source of '(no branch)' INFO [11/04/21 18:33:54:13] Begin: Finding merge base between '(no branch)' and 'develop'. INFO [11/04/21 18:33:54:14] Found merge base of 3d6f3ea Merge branch 'feature/xyz' into develop INFO [11/04/21 18:33:54:15] Merge base of (no branch)' and 'develop is 3d6f3ea Merge branch 'feature/xyz' into develop INFO [11/04/21 18:33:54:15] End: Finding merge base between '(no branch)' and 'develop'. (Took: 16.75ms) INFO [11/04/21 18:33:54:15] Begin: Finding merge base between '(no branch)' and 'origin/develop'. INFO [11/04/21 18:33:54:15] Found merge base of 3d6f3ea Merge branch 'feature/xyz' into develop INFO [11/04/21 18:33:54:15] Merge base of (no branch)' and 'origin/develop is 3d6f3ea Merge branch 'feature/improveqmlbackendserver' into develop INFO [11/04/21 18:33:54:15] End: Finding merge base between '(no branch)' and 'origin/develop'. (Took: 0.34ms)

. . .

INFO [11/04/21 18:33:54:31] Multiple source branches have been found, picking the first one (develop). This may result in incorrect commit counting. Options were: develop, origin/develop, origin/hotfix/2.9.7, origin/master, origin/release/2.7.0, origin/release/2.6.0, origin/release/2.5.0, origin/release/2.4.0 INFO [11/04/21 18:33:54:31] End: Finding branch source of '(no branch)' (Took: 193.34ms) INFO [11/04/21 18:33:54:31] Begin: Getting branches containing the commit '3d6f3ea'. INFO [11/04/21 18:33:54:31] Trying to find direct branches. INFO [11/04/21 18:33:54:31] No direct branches found, searching through all branches. INFO [11/04/21 18:33:54:31] Searching for commits reachable from 'develop'. INFO [11/04/21 18:33:54:31] The branch 'develop' has a matching commit. INFO [11/04/21 18:33:54:31] Searching for commits reachable from 'origin/hotfix/2.9.7'. INFO [11/04/21 18:33:54:47] The branch 'origin/hotfix/2.9.7' has no matching commits. INFO [11/04/21 18:33:54:47] Searching for commits reachable from 'origin/master'. INFO [11/04/21 18:33:54:64] The branch 'origin/master' has no matching commits. INFO [11/04/21 18:33:54:64] Searching for commits reachable from 'origin/release/2.4.0'. INFO [11/04/21 18:33:54:69] The branch 'origin/release/2.4.0' has no matching commits. INFO [11/04/21 18:33:54:69] Searching for commits reachable from 'origin/release/2.5.0'. INFO [11/04/21 18:33:54:76] The branch 'origin/release/2.5.0' has no matching commits. INFO [11/04/21 18:33:54:76] Searching for commits reachable from 'origin/release/2.6.0'. INFO [11/04/21 18:33:54:82] The branch 'origin/release/2.6.0' has no matching commits. INFO [11/04/21 18:33:54:82] Searching for commits reachable from 'origin/release/2.7.0'. INFO [11/04/21 18:33:54:91] The branch 'origin/release/2.7.0' has no matching commits. INFO [11/04/21 18:33:54:91] End: Getting branches containing the commit '3d6f3ea'. (Took: 604.65ms) INFO [11/04/21 18:33:54:91] Found possible parent branches: develop INFO [11/04/21 18:33:54:91] End: Attempting to inherit branch configuration from parent branch (Took: 811.45ms) INFO [11/04/21 18:34:01:64] Running against branch: (no branch) (8c55d5a Add logging to GitVersion) WARN [11/04/21 18:34:01:64] An error occurred: It looks like the branch being examined is a detached Head pointing to commit '8c55d5a'. Without a proper branch name GitVersion cannot determine the build version. INFO [11/04/21 18:34:01:66] Done writing

I tried other versions of gitversion 5.x but with no success. I also tried adding the git branch name as an argument ("-b ") but also without luck.

In the log I can see "The branch 'develop' has a matching commit." Could this not be used to create the version number from there?

Thanks

smuellener avatar Nov 04 '21 18:11 smuellener

Sounds like you may have a shallow repository checked out without an explicit branch or something like that. What happens if you do git fetch --unshallow before executing GitVersion?

asbjornu avatar Nov 04 '21 21:11 asbjornu

This results in the following error:

fatal: --unshallow on a complete repository does not make sense

smuellener avatar Nov 04 '21 22:11 smuellener

Hm, ok. Does adding the environment variable Git_Branch with the value of the branch being built help?

asbjornu avatar Nov 04 '21 23:11 asbjornu

This does also not change the result. I see two mechanisms that are both not available in this case:

  1. From the log: "The branch 'develop' has a matching commit" -> apparently this is detected by GitVersion but then not used as a fallback. Could be a good solution in the first place?

  2. Passing the branch name actively using the "-b" argument seems to not be considered either.

smuellener avatar Nov 07 '21 20:11 smuellener

Strange. I agree that develop should have been chosen due to:

INFO [11/04/21 18:33:54:31] Multiple source branches have been found, picking the first one (develop).

I'm not sure why GitVersion doesn't pick develop even though it says so.

asbjornu avatar Dec 21 '21 23:12 asbjornu

Just want to pitch in that I have the same issue.

Easy way to reproduce without bitbucket

git clone https://github.com/GitTools/GitVersion.git
cd GitVersion
git checkout $(git rev-parse HEAD)
docker run --volume $(pwd):/repo gittools/gitversion:5.9.0-alpine.3.12-3.1 /repo -nofetch -nonormalize -diag

Redacted output:

INFO [03/11/22 20:57:49:46] Working directory: /repo
INFO [03/11/22 20:57:49:48] Branch from build environment: 
INFO [03/11/22 20:57:49:48] Project root is: /repo/
INFO [03/11/22 20:57:49:48] DotGit directory is: /repo/.git
INFO [03/11/22 20:57:49:53] Using latest commit on specified branch
INFO [03/11/22 20:57:49:62] Begin: Getting branches containing the commit 'c0b1509'.
  INFO [03/11/22 20:57:49:62] Trying to find direct branches.
  INFO [03/11/22 20:57:49:62] No direct branches found, searching through all branches.
  INFO [03/11/22 20:57:49:62] Searching for commits reachable from 'support/5.x'.
  INFO [03/11/22 20:57:49:63] The branch 'support/5.x' has a matching commit.
  INFO [03/11/22 20:57:49:63] Searching for commits reachable from 'origin/HEAD'.
  INFO [03/11/22 20:57:49:63] The branch 'origin/HEAD' has a matching commit.
  INFO [03/11/22 20:57:49:63] End: Getting branches containing the commit 'c0b1509'. (Took: 6.53ms)
  INFO [03/11/22 20:57:49:64] No branch configuration found for branch (no branch), falling back to default configuration
  INFO [03/11/22 20:57:49:64] Begin: Attempting to inherit branch configuration from parent branch
    INFO [03/11/22 20:57:49:65] Begin: Finding branch source of '(no branch)'
      INFO [03/11/22 20:57:49:65] Begin: Finding merge base between '(no branch)' and 'support/5.x'.
        INFO [03/11/22 20:57:49:66] Found merge base of c0b1509 added 'support' branch configuration
        INFO [03/11/22 20:57:49:66] Merge base of (no branch)' and 'support/5.x is c0b1509 added 'support' branch configuration
      INFO [03/11/22 20:57:49:66] End: Finding merge base between '(no branch)' and 'support/5.x'. (Took: 9.11ms)
      INFO [03/11/22 20:57:49:66] Begin: Finding merge base between '(no branch)' and 'origin/main'.
        INFO [03/11/22 20:57:49:66] Found merge base of 3a79a49 (build) renamed the release to support branch
        INFO [03/11/22 20:57:49:66] Merge base was due to a forward merge, next merge base is 20b5895 (build) renamed the release to support branch
        INFO [03/11/22 20:57:49:66] Merge base was due to a forward merge, next merge base is 5078f28 (deps): Bump Microsoft.Build from 16.9.0 to 17.1.0
        INFO [03/11/22 20:57:49:66] Merge base of (no branch)' and 'origin/main is 5078f28 (deps): Bump Microsoft.Build from 16.9.0 to 17.1.0
      INFO [03/11/22 20:57:49:66] End: Finding merge base between '(no branch)' and 'origin/main'. (Took: 1.71ms)
      INFO [03/11/22 20:57:49:66] Begin: Finding merge base between '(no branch)' and 'origin/support/5.x'.
        INFO [03/11/22 20:57:49:66] Found merge base of c0b1509 added 'support' branch configuration
        INFO [03/11/22 20:57:49:66] Merge base of (no branch)' and 'origin/support/5.x is c0b1509 added 'support' branch configuration
      INFO [03/11/22 20:57:49:66] End: Finding merge base between '(no branch)' and 'origin/support/5.x'. (Took: 0.21ms)
      INFO [03/11/22 20:57:49:67] Multiple source branches have been found, picking the first one (support/5.x).
This may result in incorrect commit counting.
Options were:
support/5.x, origin/support/5.x, origin/main
    INFO [03/11/22 20:57:49:67] End: Finding branch source of '(no branch)' (Took: 22.55ms)
    INFO [03/11/22 20:57:49:67] Begin: Getting branches containing the commit 'c0b1509'.
      INFO [03/11/22 20:57:49:67] Trying to find direct branches.
      INFO [03/11/22 20:57:49:67] No direct branches found, searching through all branches.
      INFO [03/11/22 20:57:49:67] Searching for commits reachable from 'support/5.x'.
      INFO [03/11/22 20:57:49:67] The branch 'support/5.x' has a matching commit.
      INFO [03/11/22 20:57:49:67] Searching for commits reachable from 'origin/main'.
      INFO [03/11/22 20:57:49:76] The branch 'origin/main' has no matching commits.
    INFO [03/11/22 20:57:49:76] End: Getting branches containing the commit 'c0b1509'. (Took: 89.68ms)
    INFO [03/11/22 20:57:49:76] Found possible parent branches: support/5.x
  INFO [03/11/22 20:57:49:76] End: Attempting to inherit branch configuration from parent branch (Took: 119.44ms)
  INFO [03/11/22 20:57:49:78] Running against branch: (no branch) (c0b1509 added 'support' branch configuration)
  WARN [03/11/22 20:57:49:79] An error occurred:
It looks like the branch being examined is a detached Head pointing to commit 'c0b1509'. Without a proper branch name GitVersion cannot determine the build version.
  INFO [03/11/22 20:57:49:80] Done writing

fnadeau avatar Mar 11 '22 21:03 fnadeau

Detached HEAD is not supported. GitVersion needs to know which branch is being built in order to generate a sensible version number. I retract my previous comment that it should have chosen develop, because even though the checked out commit exists in develop, there is no guarantee that develop is the branch being built unless GitVersion has explicit knowledge about it.

I don't think it's a good idea to introduce heuristics that choose the first branch the checked out commit is found on to generate a version number.

asbjornu avatar Mar 14 '22 20:03 asbjornu

@asbjornu agreed. What about explicitely passing the name as an argument?

smuellener avatar Mar 14 '22 20:03 smuellener

@smuellener, that's what the environment variable GIT_BRANCH is supposed to do. Or so I thought. After investigating, I found that GIT_BRANCH only affects normalization and not version calculation. I've submitted #3049 to correct that. Fingers crossed it turns green. 🤞🏼

asbjornu avatar Mar 15 '22 21:03 asbjornu

May be fixed or at least improved by #3338. Closing due to inactivity, please let me know how this fares after the next v5 release.

asbjornu avatar Jan 20 '23 10:01 asbjornu

:tada: This issue has been resolved in version 5.12.0 :tada: The release is available on:

Your GitReleaseManager bot :package::rocket:

arturcic avatar Jan 20 '23 14:01 arturcic