Skip to content

Commit

Permalink
Bumped version to 0.6.1. Updated CHANGELOG.
Browse files Browse the repository at this point in the history
  • Loading branch information
coltonbh committed Aug 9, 2024
1 parent 5961516 commit 498fa72
Show file tree
Hide file tree
Showing 5 changed files with 140 additions and 4 deletions.
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ repos:
hooks:
- id: mypy
additional_dependencies:
[tokenize-rt==3.2.0, pydantic>=1.0.0, types-paramiko]
[tokenize-rt==3.2.0, pydantic>=1.0.0, types-paramiko, types-toml]
- repo: local
hooks:
- id: tests
Expand Down
9 changes: 8 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),

## [unreleased]

## [0.6.1] - 2024-08-08

### Added

- Program version parser for `CREST` stdout.

## [0.6.0] - 2024-06-10

### Changed
Expand Down Expand Up @@ -108,7 +114,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
- Can return either `AtomicResult` or `FailedOperation` objects depending on whether calculation succeeded or failed.
- Tests for all parsers and the main `parse` function.

[unreleased]: https://github.com/coltonbh/qcparse/compare/0.6.0...HEAD
[unreleased]: https://github.com/coltonbh/qcparse/compare/0.6.1...HEAD
[0.6.1]: https://github.com/coltonbh/qcparse/releases/tag/0.6.1
[0.6.0]: https://github.com/coltonbh/qcparse/releases/tag/0.6.0
[0.5.3]: https://github.com/coltonbh/qcparse/releases/tag/0.5.3
[0.5.2]: https://github.com/coltonbh/qcparse/releases/tag/0.5.2
Expand Down
13 changes: 12 additions & 1 deletion poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
[tool.poetry]
name = "qcparse"
version = "0.6.0"
version = "0.6.1"
description = "A package for parsing Quantum Chemistry program file outputs into structured qcio data objects."
authors = ["Colton Hicks <[email protected]>"]
license = "MIT"
readme = "README.md"
repository = "https://github.com/coltonbh/qcparse"
homepage = "https://github.com/coltonbh/qcparse"

[tool.poetry.dependencies]
python = "^3.8"
Expand All @@ -19,6 +21,7 @@ pre-commit = "^3.2.0"
pytest-cov = "^4.0.0"
black = ">=24.0.0"
ruff = "^0.0.275"
types-toml = "^0.10.8.20240310"

[tool.poetry.scripts]
qcparse = "qcparse.cli:main"
Expand Down
115 changes: 115 additions & 0 deletions scripts/release.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
import subprocess
import sys
from datetime import datetime

import toml


def get_repo_url():
"""Get the repository URL from pyproject.toml or ask the user for it."""
try:
with open("pyproject.toml", "r") as file:
pyproject = toml.load(file)
repo_url = pyproject["tool"]["poetry"]["repository"]
return repo_url
except KeyError:
return input("Enter the repository URL (e.g., https://github.com/user/repo): ")


def update_version_with_poetry(version):
"""Update the version in pyproject.toml using Poetry."""
print("Updating version in pyproject.toml...")
subprocess.run(["poetry", "version", version], check=True)


def update_changelog(version, repo_url):
"""Update the CHANGELOG.md file with the new version and today's date."""
print("Updating CHANGELOG.md...")
with open("CHANGELOG.md", "r") as file:
lines = file.readlines()

today = datetime.today().strftime("%Y-%m-%d")
new_entry = f"\n## [{version}] - {today}\n"

# Insert the new entry after the ## [unreleased] section
for i, line in enumerate(lines):
if line.startswith("## [unreleased]"):
lines.insert(i + 1, new_entry)
break

# Update links at the bottom
unreleased_link = f"[unreleased]: {repo_url}/compare/{version}...HEAD\n"
new_version_link = f"[{version}]: {repo_url}/releases/tag/{version}\n"

# Ensure the new version link is added right after the [unreleased] link
for i, line in enumerate(lines):
if line.startswith("[unreleased]:"):
lines[i] = unreleased_link
lines.insert(i + 1, new_version_link)
break

with open("CHANGELOG.md", "w") as file:
file.writelines(lines)


def run_git_commands(version):
"""Run the git commands to commit the changes, create a new tag, and push."""
print("Running git commands...")
subprocess.run(["git", "add", "."], check=True)
subprocess.run(
["git", "commit", "-m", f"Bumped version to {version}. Updated CHANGELOG."],
check=True,
)
subprocess.run(["git", "tag", version], check=True)
subprocess.run(["git", "push", "--tags"], check=True)
subprocess.run(["git", "push"], check=True)


def confirm_version(version: str):
"""Ask the user to confirm the version number before proceeding."""
while True:
response = (
input(f"Are you sure you want to release {version}? (Y/N): ")
.strip()
.lower()
)
if response in ["y", "n"]:
return response == "y"
else:
print("Invalid input. Please enter 'Y' or 'N'.")


def main():
"""Main entry point for the script."""
from pathlib import Path

if len(sys.argv) != 2:
print("Usage: release.py <version>")
sys.exit(1)

version = sys.argv[1]

original_pyproject = Path("pyproject.toml").read_text()
original_changelog = Path("CHANGELOG.md").read_text()

repo_url = get_repo_url()
update_version_with_poetry(version)
update_changelog(version, repo_url)
if confirm_version(version):
print("Proceeding with the release...")
else:
print("Reverting changes...")
Path("pyproject.toml").write_text(original_pyproject)
Path("CHANGELOG.md").write_text(original_changelog)
sys.exit(1)
try:
run_git_commands(version)
except Exception:
print("Reverting changes...")
Path("pyproject.toml").write_text(original_pyproject)
Path("CHANGELOG.md").write_text(original_changelog)
sys.exit(1)


if __name__ == "__main__":
main()

0 comments on commit 498fa72

Please sign in to comment.