commitizen icon indicating copy to clipboard operation
commitizen copied to clipboard

cz check range sometimes failed in GitLab CI

Open SsuperL opened this issue 3 years ago • 27 comments

Description

Runcz check --range origin/master..HEAD to check commits in CI occasionally fails. And it worked after I retried the job.But sometimes it didn't work after retrying multiple times. I couldn't find out the reason ,

Steps to reproduce

lint: retry: 1 script: - cz version - cz check --rev-range origin/master..HEAD

Current behavior

cz check --rev-range origin/master..HEAD failed. Outputs attached below:

  fatal: ambiguous argument 'master..HEAD': unknown revision or path not in the working tree.
  Use '--' to separate paths from revisions, like this:
  'git <command> [<revision>...] -- [<file>...]'

Desired behavior

cz check --rev-range can run successfully in gitlab CI.

Screenshots

image

Environment

commitizen version: 2.34.0 python version: 3.7.5 operating system: Linux

SsuperL avatar Sep 21 '22 07:09 SsuperL

Is it possible that the git repo doesn't setup remote 🤔

Lee-W avatar Sep 22 '22 10:09 Lee-W

I run command git remote -v in the CI , and it shows that the remote has been setup.

SsuperL avatar Sep 23 '22 10:09 SsuperL

image

SsuperL avatar Sep 23 '22 10:09 SsuperL

Hmmm... As I'm not able to reproduce it, I don't have any clue on how we could fix it. But we can keep it open till you or someone encounter this issue again with more detail

Lee-W avatar Sep 23 '22 14:09 Lee-W

Actually,this issue has come up again.

SsuperL avatar Sep 25 '22 08:09 SsuperL

image And when I merged the branch into master,it said that there is no commit found range origin/master..HEAD.

SsuperL avatar Sep 26 '22 02:09 SsuperL

Do you mean after merging back to the master branch? If that's the case, your HEAD will on on master so the result seem to be expected.

Lee-W avatar Sep 26 '22 12:09 Lee-W

Do you mean after merging back to the master branch? If that's the case, your HEAD will on on master so the result seem to be expected.

yes. Or can it skip check when there's no commit rather than make the job failed?

image

SsuperL avatar Sep 27 '22 07:09 SsuperL

@SsuperL Please try cz --no-raise 3 check --rev-range master... it's output the message with a zero return code

https://commitizen-tools.github.io/commitizen/bump/#easy-way

Lee-W avatar Oct 03 '22 03:10 Lee-W

cz --no-raise 3 check --rev-range master..

I'll try it.Thank you!

SsuperL avatar Oct 09 '22 03:10 SsuperL

@SsuperL did you try to git fetch before your command ? its seems GitLab CI dont fetch every branch

Lujeni avatar Oct 19 '22 13:10 Lujeni

@SsuperL did you try to git fetch before your command ? its seems GitLab CI dont fetch every branch No, but it only appeared on some machines. And the command git branch -r shows branch origin/master exists.

SsuperL avatar Oct 24 '22 10:10 SsuperL

image

SsuperL avatar Nov 29 '22 07:11 SsuperL

do you have remote origin and branch master?

Lee-W avatar Nov 29 '22 08:11 Lee-W

do you have remote origin and branch master?

yes.

SsuperL avatar Dec 01 '22 09:12 SsuperL

What would be the output of git log origin/master..? Can it generate output as expected?

Lee-W avatar Dec 03 '22 07:12 Lee-W

What would be the output of git log origin/master..? Can it generate output as expected?

Oh,it didn't show anything of git log origin/master. Maybe there's no git fetch on some CI machines. I try git fetch origin and it works. Thanks for your help!

SsuperL avatar Dec 05 '22 02:12 SsuperL

@SsuperL One of the stuff I can think of is shallow clone. Maybe you could take a look at this direction as well :)

Lee-W avatar Dec 19 '22 08:12 Lee-W

@SsuperL One of the stuff I can think of is shallow clone. Maybe you could take a look at this direction as well :)

Okay, I'll check it out.

SsuperL avatar Dec 20 '22 06:12 SsuperL

Hi, I am having the same issue outside of CI. When I git push with the pre-push pre-commit hook, I get the following:

fatal: ambiguous argument 'origin/HEAD..HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

Whereas if I skip the verification everything works fine.

Unfortunately the repo is private and I can't share the url, but the configs are:

default_install_hook_types:
  - pre-commit
  - pre-push
default_language_version:
  python: python3.9
repos:
  - repo: https://github.com/commitizen-tools/commitizen
    rev: v2.42.1
    hooks:
      - id: commitizen-branch
        stages: [ push ]

And the hook (which should not matter) is:

#!/usr/bin/env bash
# File generated by pre-commit: https://pre-commit.com
# ID: 138fd403232d2ddd5efb44317e38bf03

# start templated
INSTALL_PYTHON=/Users/lucabaggi/.local/share/pipx/venvs/pre-commit/bin/python
ARGS=(hook-impl --config=.pre-commit-config.yaml --hook-type=pre-push)
# end templated

HERE="$(cd "$(dirname "$0")" && pwd)"
ARGS+=(--hook-dir "$HERE" -- "$@")

if [ -x "$INSTALL_PYTHON" ]; then
    exec "$INSTALL_PYTHON" -mpre_commit "${ARGS[@]}"
elif command -v pre-commit > /dev/null; then
    exec pre-commit "${ARGS[@]}"
else
    echo '`pre-commit` not found.  Did you forget to activate your virtualenv?' 1>&2
    exit 1
fi

baggiponte avatar Mar 22 '23 13:03 baggiponte

Hi, I am having the same issue outside of CI. When I git push with the pre-push pre-commit hook, I get the following:

fatal: ambiguous argument 'origin/HEAD..HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

Whereas if I skip the verification everything works fine.

Unfortunately the repo is private and I can't share the url, but the configs are:

default_install_hook_types:
  - pre-commit
  - pre-push
default_language_version:
  python: python3.9
repos:
  - repo: https://github.com/commitizen-tools/commitizen
    rev: v2.42.1
    hooks:
      - id: commitizen-branch
        stages: [ push ]

And the hook (which should not matter) is:

#!/usr/bin/env bash
# File generated by pre-commit: https://pre-commit.com
# ID: 138fd403232d2ddd5efb44317e38bf03

# start templated
INSTALL_PYTHON=/Users/lucabaggi/.local/share/pipx/venvs/pre-commit/bin/python
ARGS=(hook-impl --config=.pre-commit-config.yaml --hook-type=pre-push)
# end templated

HERE="$(cd "$(dirname "$0")" && pwd)"
ARGS+=(--hook-dir "$HERE" -- "$@")

if [ -x "$INSTALL_PYTHON" ]; then
    exec "$INSTALL_PYTHON" -mpre_commit "${ARGS[@]}"
elif command -v pre-commit > /dev/null; then
    exec pre-commit "${ARGS[@]}"
else
    echo '`pre-commit` not found.  Did you forget to activate your virtualenv?' 1>&2
    exit 1
fi

Have you tried git fetch ? That works for me.

SsuperL avatar Mar 23 '23 02:03 SsuperL

Have you tried git fetch ? That works for me.

Does not for me... Perhaps it can mess up if I have git push --force previously?

baggiponte avatar Mar 23 '23 11:03 baggiponte

Hello, if I run cz check --rev-range origin/main..HEAD it works. I noticed that the pre-commit hook has --rev-range origin/HEAD..HEAD which is an invalid ref. Perhaps when the repo has multiple branches the reference becomes invalid? Will try to make a reprex soon.

baggiponte avatar Mar 27 '23 15:03 baggiponte

The following fixed it for me:

git remote set-head origin -a

Eventually found a semi-good explanation at: https://learnku.com/articles/71493

(My issue is actually when I'm trying to run git push with the pre-push hook enabled, which then gives a similar error on ambiguity.)

johanmynhardt avatar Dec 21 '23 09:12 johanmynhardt