Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bump is also changing dependency versions in pyproject.toml, when the versions are the same #496

Closed
Andrew-Sheridan opened this issue Apr 4, 2022 · 11 comments

Comments

@Andrew-Sheridan
Copy link

Description

When a dep is specified using the {} syntax, eg

smart-open = {version = ">=5.2.0,<6.1.0", extras = ["s3"]}

and the version of the dep matches the version of the project, then bump will change both versions.

Is it possible to specify a regex in the configuration - ie to ensure that the version string is at the start of line, not in the middle?

Ref https://commitizen-tools.github.io/commitizen/config/#pyprojecttoml-or-cztoml

Steps to reproduce

Create a project, where the project version is the same as a dependency version, and where the dependency uses poetry's optional {} syntax

mkdir bug-report

cd bug-report

cat << EOF > pyproject.toml
[tool.poetry]
name = "foo"
version = "6.1.0"
description = "foo"
authors = ["First Last <firstLast@example.com>"]
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.9"
smart-open = {version = ">=5.2.0,<6.1.0", extras = ["s3"]}

[tool.commitizen]
name = "cz_conventional_commits"
version = "6.1.0"
version_files = ["pyproject.toml:version"]
tag_format = "v$version"
EOF

Init

git init
git add .
git commit -m 'first commit'

Check the current version of the project

cz version --project
6.1.0

Make a change

mkdir src
touch src/__init__.py
git add .
git commit -m 'feat: a feature'

bump the project

cz bump --yes
bump: version 6.1.0 → 6.2.0
tag to create: v6.2.0
increment detected: MINOR

Done!

See the version change in the dependency...

cat pyproject.toml
[tool.poetry]
name = "foo"
version = "6.2.0"
description = "foo"
authors = ["Andrew Sheridan <asheridan25@massmutual.com>"]
readme = "README.md"
packages = [{ include = "massmutual", from = "src"}]

[tool.poetry.dependencies]
python = "^3.9"
smart-open = {version = ">=5.2.0,<6.2.0", extras = ["s3"]}

[tool.commitizen]
name = "cz_conventional_commits"
version = "6.2.0"
version_files = ["pyproject.toml:version"]
tag_format = "v$version"

This line should not have changed: smart-open = {version = ">=5.2.0,<6.2.0", extras = ["s3"]}

Current behavior

bump erroneously changes more than it should in the toml file

Desired behavior

bump only changes the right strings in the toml file

Screenshots

No response

Environment

cz version -> 2.23.0

@Andrew-Sheridan
Copy link
Author

Andrew-Sheridan commented Apr 4, 2022

May be related to PR #370

where this syntax was proposed

version_files = [
    "pyproject.toml:[tool.commitizen]\nversion",
    "pyproject.toml:[tool.poetry]\nname = \"commitizen\"\nversion",
    "commitizen/__version__.py"
]

However that seems a little inelegant - also does not appear that syntax was used.

I think changing it like this should work.

version_files = ["pyproject.toml:^version"]

Perhaps just the docs needs an update to say that regex is permitted?

@woile
Copy link
Member

woile commented Apr 7, 2022

Yes, updating the docs should be enough, would you mind sending a pr or describing here where would you update?
Thanks

@Kurt-von-Laven
Copy link
Contributor

The docs already say that a regex is permitted.

@Lee-W
Copy link
Member

Lee-W commented May 3, 2022

Maybe what we need is adding it to the FAQ page might be a good idea

@Kurt-von-Laven
Copy link
Contributor

I suppose it might also help to clarify in the documentation I linked to above that the pattern is a Python regular expression matched using re.finditer. That would also serve the purpose of clarifying that the file isn't searched line by line. Or see #498 for a proposed alternative to the current matching behavior.

@Lee-W Lee-W added good first issue issue-status: wait-for-implementation maintainers agree on the bug / feature labels Aug 14, 2022
@tarkatronic
Copy link

Just to be clear on this: Is the current recommended action to use version_files = ["pyproject.toml:^version"]?

FWIW I was thinking that it would be great if we could specify a full TOML qualifier like version_files = ["pyproject.toml:tool.commitizen.version"]. But that is likely a far larger lift, and I could fully understand not wanting to do it.

@Kurt-von-Laven
Copy link
Contributor

Basically, you can use whatever Python regex suits your needs. Worst case, you could add a comment to one line and not the other(s) if they are identical. The regex is matched line by line these days, which makes it simpler to choose one appropriate to your situation in my opinion.

@woile
Copy link
Member

woile commented Apr 28, 2023

Option 1

When selecting version, start with ^, so it will check that the line starts with version

version_files = ["pyproject.toml:^version"]

Option 2 (recommended)

Use version_provider, see https://commitizen-tools.github.io/commitizen/config/#version-providers

Sample:

[tool.commitizen]
version_provider = "poetry"

@woile woile closed this as completed Apr 28, 2023
@Lee-W
Copy link
Member

Lee-W commented May 6, 2023

Option 1

When selecting version, start with ^, so it will check that the line starts with version

version_files = ["pyproject.toml:^version"]

Option 2 (recommended)

Use version_provider, see https://commitizen-tools.github.io/commitizen/config/#version-providers

Sample:

[tool.commitizen]
version_provider = "poetry"

Should we add it as part of our FAQ? I think it's something worth mentioning

@woile
Copy link
Member

woile commented May 6, 2023

Yes, could be a good idea, under which question would be add it? They are both documented, but not together

@Lee-W
Copy link
Member

Lee-W commented Aug 20, 2023

I think we can just add a question to FAQ, paste your response and add come links to other parts of the document.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants