From 5621def72816b725cc297b676bd8c5103e01186c Mon Sep 17 00:00:00 2001 From: Haoming Yan Date: Thu, 16 Jul 2026 17:12:29 +0800 Subject: [PATCH 1/2] build: publish cp2k-lsp-enhanced 0.1.0 (#151) --- .github/workflows/deploy.yml | 30 ++++++++++++++++++++---------- CHANGELOG.md | 8 ++++++++ README.md | 15 ++++++++++----- cp2k_input_tools/__init__.py | 2 +- cp2k_input_tools/cli/lsp.py | 6 +++--- pyproject.toml | 13 ++++++++----- tests/test_release_contract.py | 27 +++++++++++++++++++++++++++ 7 files changed, 77 insertions(+), 24 deletions(-) create mode 100644 tests/test_release_contract.py diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a793cc7..5730ade 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,18 +1,28 @@ -name: deploy +name: Publish to PyPI on: push: tags: - - 'v*' + - "v*" + workflow_dispatch: jobs: - deploy: + publish: + if: startsWith(github.ref, 'refs/tags/v') runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/p/cp2k-lsp-enhanced + permissions: + contents: read + id-token: write steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: '3.12' - - uses: snok/install-poetry@v1.3.4 - - run: poetry config pypi-token.pypi ${{ secrets.PYPI_TOKEN }} - - run: poetry publish --build + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + - uses: snok/install-poetry@v1.3.4 + - name: Build distribution + run: poetry build + - name: Publish distribution + uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e81b24..f01f86e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Change Log +## [0.1.0] - 2026-07-16 + +- Publish the enhanced OpenQC CP2K language server under the independent + `cp2k-lsp-enhanced` distribution identity. +- Preserve the `cp2k-language-server` compatibility command and upstream + Python import namespace. +- Replace token-based deployment with PyPI trusted publishing through the + protected `pypi` environment. ## [0.9.2] - 2026-02-xy diff --git a/README.md b/README.md index f69edec..8f054f6 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,11 @@ -# cp2k-input-tools +# cp2k-lsp-enhanced -[![Build status](https://github.com/cp2k/cp2k-input-tools/actions/workflows/test.yml/badge.svg)](https://github.com/cp2k/cp2k-input-tools/actions) [![codecov](https://codecov.io/gh/cp2k/cp2k-input-tools/branch/develop/graph/badge.svg)](https://codecov.io/gh/cp2k/cp2k-input-tools) [![PyPI](https://img.shields.io/pypi/pyversions/cp2k-input-tools)](https://pypi.org/project/cp2k-input-tools/) +[![Build status](https://github.com/newtontech/cp2k-lsp-enhanced/actions/workflows/test.yml/badge.svg)](https://github.com/newtontech/cp2k-lsp-enhanced/actions) [![PyPI](https://img.shields.io/pypi/pyversions/cp2k-lsp-enhanced)](https://pypi.org/project/cp2k-lsp-enhanced/) + +This Newton Technology distribution extends the upstream +`cp2k-input-tools` project with the OpenQC language-server, agent CLI, and +traceability contract. The Python import namespace and the +`cp2k-language-server` command remain compatible with the upstream project. Fully validating pure-python CP2K input file parsers including preprocessing capabilities @@ -54,19 +59,19 @@ When changing CP2K language-server behavior, parser validation, command names, f You will get most tools using simply: ```console -$ pip install cp2k-input-tools +$ pip install cp2k-lsp-enhanced ``` For YAML support you should use ```console -$ pip install cp2k-input-tools[yaml] +$ pip install cp2k-lsp-enhanced[yaml] ``` and for the Language Server: ```console -$ pip install cp2k-input-tools[lsp] +$ pip install cp2k-lsp-enhanced[lsp] ``` ## Command Line Interface diff --git a/cp2k_input_tools/__init__.py b/cp2k_input_tools/__init__.py index a1ac01c..b286177 100644 --- a/cp2k_input_tools/__init__.py +++ b/cp2k_input_tools/__init__.py @@ -1,5 +1,5 @@ import pathlib -__version__ = "0.9.1" +__version__ = "0.1.0" DEFAULT_CP2K_INPUT_XML = pathlib.Path(__file__).resolve().parent.joinpath("cp2k_input.xml") diff --git a/cp2k_input_tools/cli/lsp.py b/cp2k_input_tools/cli/lsp.py index 6d44932..ccde484 100644 --- a/cp2k_input_tools/cli/lsp.py +++ b/cp2k_input_tools/cli/lsp.py @@ -3,10 +3,10 @@ import click -LSP_EXTRA_ERROR = """Could not import the pygls package. You have to install the cp2k-input-tools with the 'lsp' extra: +LSP_EXTRA_ERROR = """Could not import the pygls package. Install cp2k-lsp-enhanced with the 'lsp' extra: -pip install cp2k-input-tools[lsp] - """ +pip install cp2k-lsp-enhanced[lsp] +""" @click.command() diff --git a/pyproject.toml b/pyproject.toml index 362eb4e..a59fdfa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,9 +1,12 @@ [tool.poetry] -name = "cp2k-input-tools" -version = "0.9.1" -description = "Python tools to handle CP2K input files" -authors = ["Tiziano Müller "] -repository = "https://github.com/cp2k/cp2k-input-tools" +name = "cp2k-lsp-enhanced" +version = "0.1.0" +description = "Enhanced CP2K language server and input tooling for OpenQC" +authors = [ + "Newton Technology", + "Tiziano Müller ", +] +repository = "https://github.com/newtontech/cp2k-lsp-enhanced" license = "MIT" classifiers = [ "Development Status :: 4 - Beta", diff --git a/tests/test_release_contract.py b/tests/test_release_contract.py new file mode 100644 index 0000000..6251023 --- /dev/null +++ b/tests/test_release_contract.py @@ -0,0 +1,27 @@ +from __future__ import annotations + +from pathlib import Path + +import tomllib + +ROOT = Path(__file__).resolve().parents[1] + + +def test_newtontech_distribution_identity_and_compatibility_command() -> None: + metadata = tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8")) + poetry = metadata["tool"]["poetry"] + + assert poetry["name"] == "cp2k-lsp-enhanced" + assert poetry["version"] == "0.1.0" + assert poetry["repository"] == "https://github.com/newtontech/cp2k-lsp-enhanced" + assert poetry["scripts"]["cp2k-language-server"] == ("cp2k_input_tools.cli.lsp:cp2k_language_server") + assert poetry["scripts"]["cp2k-lsp-tool"] == "cp2k_input_tools.tool:main" + + +def test_pypi_release_uses_oidc_and_protected_environment() -> None: + workflow = (ROOT / ".github" / "workflows" / "deploy.yml").read_text(encoding="utf-8") + + assert "name: pypi" in workflow + assert "id-token: write" in workflow + assert "PYPI_TOKEN" not in workflow + assert "pypa/gh-action-pypi-publish@" in workflow From 46983c55e63dec31f0d51b1ab619b401fd575344 Mon Sep 17 00:00:00 2001 From: Haoming Yan Date: Thu, 16 Jul 2026 17:30:20 +0800 Subject: [PATCH 2/2] fix: support Python 3.10 release contract --- tests/test_release_contract.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/test_release_contract.py b/tests/test_release_contract.py index 6251023..bfcad05 100644 --- a/tests/test_release_contract.py +++ b/tests/test_release_contract.py @@ -2,7 +2,10 @@ from pathlib import Path -import tomllib +try: + import tomllib +except ModuleNotFoundError: # pragma: no cover - Python 3.10 compatibility + import tomli as tomllib ROOT = Path(__file__).resolve().parents[1]