Skip to content

Commit 8a8642f

Browse files
authored
Merge pull request #8 from OpenBioSim/release_2025.2.0
Release 2025.2.0
2 parents 193693e + 47abbc5 commit 8a8642f

20 files changed

Lines changed: 2003 additions & 449 deletions

.github/workflows/devel.yaml

Lines changed: 44 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: Release Devel
33
on:
44
workflow_dispatch:
55
push:
6-
branches: [ devel ]
6+
branches: [devel]
77

88
jobs:
99
build:
@@ -18,11 +18,13 @@ jobs:
1818
- { name: "linux", os: "ubuntu-latest", shell: "bash -l {0}" }
1919
- { name: "macos", os: "macos-latest", shell: "bash -l {0}" }
2020
exclude:
21-
# Exclude all but the latest Python from all
22-
# but Linux
21+
# Exclude all but the latest Python from macOS
2322
- platform:
2423
{ name: "macos", os: "macos-latest", shell: "bash -l {0}" }
25-
python-version: "3.12" # MacOS can't run 3.12 yet... We want 3.10 and 3.11
24+
python-version: "3.10"
25+
- platform:
26+
{ name: "macos", os: "macos-latest", shell: "bash -l {0}" }
27+
python-version: "3.11"
2628
environment:
2729
name: ghostly-build
2830
defaults:
@@ -32,31 +34,45 @@ jobs:
3234
SIRE_DONT_PHONEHOME: 1
3335
SIRE_SILENT_PHONEHOME: 1
3436
steps:
35-
- uses: conda-incubator/setup-miniconda@v3
37+
#
38+
- uses: actions/checkout@v4
39+
with:
40+
fetch-depth: 0
41+
#
42+
- name: Compute version info
43+
shell: bash
44+
run: python actions/update_recipe.py
45+
#
46+
- name: Create sdist
47+
run: pip install build && python -m build --sdist && mv dist/*.tar.gz ghostly-source.tar.gz
48+
working-directory: ${{ github.workspace }}
49+
#
50+
- name: Install pixi
51+
uses: prefix-dev/setup-pixi@v0.9.4
3652
with:
37-
auto-update-conda: true
38-
python-version: ${{ matrix.python-version }}
39-
activate-environment: ghostly_build
40-
miniforge-version: latest
41-
#
42-
- name: Clone the devel branch
43-
run: git clone -b devel https://github.com/openbiosim/ghostly
44-
#
45-
- name: Setup Conda
46-
run: conda install -y -c conda-forge boa anaconda-client packaging
47-
#
48-
- name: Update Conda recipe
49-
run: python ${{ github.workspace }}/ghostly/actions/update_recipe.py
50-
#
51-
- name: Prepare build location
52-
run: mkdir ${{ github.workspace }}/build
53-
#
54-
- name: Build Conda package using conda build
55-
run: conda build -c conda-forge -c openbiosim/label/dev ${{ github.workspace }}/ghostly/recipes/ghostly
56-
#
57-
- name: Upload Conda package
58-
run: python ${{ github.workspace }}/ghostly/actions/upload_package.py
53+
run-install: false
54+
#
55+
- name: Install rattler-build
56+
shell: bash
57+
run: pixi global install rattler-build
58+
#
59+
- name: Write Python variant config
60+
shell: bash
61+
run: printf 'python:\n - "${{ matrix.python-version }}"\n' > "${{ github.workspace }}/python_variant.yaml"
62+
#
63+
- name: Build package using rattler-build
64+
shell: bash
65+
run: rattler-build build --recipe "${{ github.workspace }}/recipes/ghostly" -c conda-forge -c openbiosim/label/dev --variant-config "${{ github.workspace }}/python_variant.yaml"
66+
#
67+
- name: Install anaconda-client
68+
shell: bash
69+
run: python -m pip install anaconda-client
70+
if: ${{ matrix.platform.name == 'linux' && matrix.python-version == '3.12' }}
71+
#
72+
- name: Upload package
73+
shell: bash
74+
run: python actions/upload_package.py
5975
env:
6076
ANACONDA_TOKEN: ${{ secrets.ANACONDA_TOKEN }}
6177
ANACONDA_LABEL: dev
62-
if: ${{ matrix.platform.name == 'linux' && matrix.python-version == '3.11' }}
78+
if: ${{ matrix.platform.name == 'linux' && matrix.python-version == '3.12' }}

.github/workflows/main.yaml

Lines changed: 40 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,7 @@ jobs:
2020
platform:
2121
- { name: "linux", os: "ubuntu-latest", shell: "bash -l {0}" }
2222
- { name: "macos", os: "macos-latest", shell: "bash -l {0}" }
23-
exclude:
24-
- platform:
25-
{ name: "macos", os: "macos-latest", shell: "bash -l {0}" }
26-
python-version: "3.12" # MacOS can't run 3.12 yet...
23+
# No exclusions - release builds all combinations
2724
environment:
2825
name: ghostly-build
2926
defaults:
@@ -33,31 +30,46 @@ jobs:
3330
SIRE_DONT_PHONEHOME: 1
3431
SIRE_SILENT_PHONEHOME: 1
3532
steps:
36-
- uses: conda-incubator/setup-miniconda@v3
33+
#
34+
- uses: actions/checkout@v4
3735
with:
38-
auto-update-conda: true
39-
python-version: ${{ matrix.python-version }}
40-
activate-environment: ghostly_build
41-
miniforge-version: latest
42-
#
43-
- name: Clone the main branch
44-
run: git clone -b main https://github.com/openbiosim/ghostly
45-
#
46-
- name: Setup Conda
47-
run: conda install -y -c conda-forge boa anaconda-client packaging
48-
#
49-
- name: Update Conda recipe
50-
run: python ${{ github.workspace }}/ghostly/actions/update_recipe.py
51-
#
52-
- name: Prepare build location
53-
run: mkdir ${{ github.workspace }}/build
54-
#
55-
- name: Build Conda package using conda build
56-
run: conda build -c conda-forge -c openbiosim/label/main ${{ github.workspace }}/ghostly/recipes/ghostly
57-
#
58-
- name: Upload Conda package
59-
run: python ${{ github.workspace }}/ghostly/actions/upload_package.py
36+
ref: main
37+
fetch-depth: 0
38+
#
39+
- name: Compute version info
40+
shell: bash
41+
run: python actions/update_recipe.py
42+
#
43+
- name: Create sdist
44+
run: pip install build && python -m build --sdist && mv dist/*.tar.gz ghostly-source.tar.gz
45+
working-directory: ${{ github.workspace }}
46+
#
47+
- name: Install pixi
48+
uses: prefix-dev/setup-pixi@v0.9.4
49+
with:
50+
run-install: false
51+
#
52+
- name: Install rattler-build
53+
shell: bash
54+
run: pixi global install rattler-build
55+
#
56+
- name: Write Python variant config
57+
shell: bash
58+
run: printf 'python:\n - "${{ matrix.python-version }}"\n' > "${{ github.workspace }}/python_variant.yaml"
59+
#
60+
- name: Build package using rattler-build
61+
shell: bash
62+
run: rattler-build build --recipe "${{ github.workspace }}/recipes/ghostly" -c conda-forge -c openbiosim/label/main --variant-config "${{ github.workspace }}/python_variant.yaml"
63+
#
64+
- name: Install anaconda-client
65+
shell: bash
66+
run: python -m pip install anaconda-client
67+
if: github.event.inputs.upload_packages == 'true' && matrix.platform.name == 'linux' && matrix.python-version == '3.12'
68+
#
69+
- name: Upload package
70+
shell: bash
71+
run: python actions/upload_package.py
6072
env:
6173
ANACONDA_TOKEN: ${{ secrets.ANACONDA_TOKEN }}
6274
ANACONDA_LABEL: main
63-
if: github.event.inputs.upload_packages == 'true' && matrix.platform.name == 'linux' && matrix.python-version == '3.11'
75+
if: github.event.inputs.upload_packages == 'true' && matrix.platform.name == 'linux' && matrix.python-version == '3.12'

.github/workflows/pr.yaml

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,13 @@ jobs:
1717
- { name: "linux", os: "ubuntu-latest", shell: "bash -l {0}" }
1818
- { name: "macos", os: "macos-latest", shell: "bash -l {0}" }
1919
exclude:
20-
# Exclude all but the latest Python from all
21-
# but Linux
20+
# Exclude all but the latest Python from macOS
2221
- platform:
2322
{ name: "macos", os: "macos-latest", shell: "bash -l {0}" }
2423
python-version: "3.10"
2524
- platform:
2625
{ name: "macos", os: "macos-latest", shell: "bash -l {0}" }
27-
python-version: "3.12" # MacOS can't run 3.12 yet...
26+
python-version: "3.11"
2827
environment:
2928
name: ghostly-build
3029
defaults:
@@ -35,29 +34,38 @@ jobs:
3534
SIRE_SILENT_PHONEHOME: 1
3635
REPO: "${{ github.event.pull_request.head.repo.full_name || github.repository }}"
3736
steps:
38-
- uses: conda-incubator/setup-miniconda@v3
37+
#
38+
- uses: actions/checkout@v4
3939
with:
40-
auto-update-conda: true
41-
python-version: ${{ matrix.python-version }}
42-
activate-environment: ghostly_build
43-
miniforge-version: latest
44-
#
45-
- name: Clone the feature branch
46-
run: git clone -b ${{ github.head_ref }} --single-branch https://github.com/${{ env.REPO }} ghostly
47-
#
48-
- name: Setup Conda
49-
run: conda install -y -c conda-forge boa anaconda-client packaging
50-
#
51-
- name: Update Conda recipe
52-
run: python ${{ github.workspace }}/ghostly/actions/update_recipe.py
53-
#
54-
- name: Prepare build location
55-
run: mkdir ${{ github.workspace }}/build
56-
#
57-
- name: Build Conda package using conda build using main channel
40+
fetch-depth: 0
41+
#
42+
- name: Compute version info
43+
shell: bash
44+
run: python actions/update_recipe.py
45+
#
46+
- name: Create sdist
47+
run: pip install build && python -m build --sdist && mv dist/*.tar.gz ghostly-source.tar.gz
48+
working-directory: ${{ github.workspace }}
49+
#
50+
- name: Install pixi
51+
uses: prefix-dev/setup-pixi@v0.9.4
52+
with:
53+
run-install: false
54+
#
55+
- name: Install rattler-build
56+
shell: bash
57+
run: pixi global install rattler-build
58+
#
59+
- name: Write Python variant config
60+
shell: bash
61+
run: printf 'python:\n - "${{ matrix.python-version }}"\n' > "${{ github.workspace }}/python_variant.yaml"
62+
#
63+
- name: Build package using rattler-build (main channel)
5864
if: ${{ github.base_ref == 'main' }}
59-
run: conda build -c conda-forge -c openbiosim/label/main ${{ github.workspace }}/ghostly/recipes/ghostly
60-
#
61-
- name: Build Conda package using conda build using dev channel
65+
shell: bash
66+
run: rattler-build build --recipe "${{ github.workspace }}/recipes/ghostly" -c conda-forge -c openbiosim/label/main --variant-config "${{ github.workspace }}/python_variant.yaml"
67+
#
68+
- name: Build package using rattler-build (dev channel)
6269
if: ${{ github.base_ref != 'main' }}
63-
run: conda build -c conda-forge -c openbiosim/label/dev ${{ github.workspace }}/ghostly/recipes/ghostly
70+
shell: bash
71+
run: rattler-build build --recipe "${{ github.workspace }}/recipes/ghostly" -c conda-forge -c openbiosim/label/dev --variant-config "${{ github.workspace }}/python_variant.yaml"

.gitignore

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ setup.err
2020
dist/
2121
build/
2222
ghostly.egg-info
23-
src/ghostly/_version.py
2423

2524
# Test output.
2625
output.yaml
@@ -35,8 +34,8 @@ output.yaml
3534
# VSCode config
3635
.vscode/
3736

38-
# Conda recipe (it is auto-generated)
39-
recipes/ghostly/meta.yaml
40-
4137
# Sire cache files.
4238
cache/
39+
40+
# Auto-generated version file.
41+
src/ghostly/_version.py

.img/ghostly.png

9.06 KB
Loading

.pre-commit-config.yaml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
files: ^(src|tests)/
2+
exclude: ^tests/(input|output)/
3+
4+
repos:
5+
# General file quality checks
6+
- repo: https://github.com/pre-commit/pre-commit-hooks
7+
rev: v5.0.0
8+
hooks:
9+
- id: trailing-whitespace
10+
- id: end-of-file-fixer
11+
- id: check-added-large-files
12+
args: [--maxkb=1000] # Prevent files larger than 1MB
13+
- id: check-merge-conflict
14+
15+
# Python formatting and linting
16+
- repo: https://github.com/astral-sh/ruff-pre-commit
17+
rev: v0.15.4
18+
hooks:
19+
# Run the formatter
20+
- id: ruff-format
21+
# Run the linter (optional - remove if too strict)
22+
- id: ruff
23+
args: [--fix, --exit-zero] # Auto-fix but don't block commits

CHANGELOG.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
Changelog
2+
=========
3+
4+
[2026.1.0](https://github.com/openbiosim/loch/compare/2025.2.0...2026.1.0) - ********
5+
-------------------------------------------------------------------------------------
6+
7+
* Please add an item to this CHANGELOG for any new features or bug fixes when creating a PR.
8+
9+
[2025.2.0](https://github.com/openbiosim/loch/compare/2025.1.0...2025.2.0) - Mar 2026
10+
-------------------------------------------------------------------------------------
11+
12+
* Ensure that there are independent, per-state, physical neighbours. This removes the spurious cross-state ghost filter that resulted in a downgrading of junction types when multiple junctions were present in the molecule.
13+
* Added a fallback for failed angle optimisation to ensure that the original equilibrium value is preserved when convergence fails.
14+
* Added new ``--stiffen-ring-bridges`` option to control whether angle stiffening is applied to ring bridge atoms. (Default: False)
15+
* Added ``--stiffen-sp2-bridges`` to control whether angle stiffening is applied to SP2 bridge atoms. (Default: False)
16+
* Added ``--soften-anchors`` option to scale the force constants of surviving mixed ghost/physical dihedrals. (Default: 1.0, i.e. no softening)
17+
* Added rotamer anchor detection and options to stiffen the force constant using ``--stiffen-rotamers`` and ``--k-rotamer``. (Default: False, 50 kcal/mol)
18+
* Added scoring functionality to try to avoid anchoring through transmuting or bridge atoms where possible.
19+
* Handle edge cases for ring-breaking perturbations.
20+
* Fixed angle removal logic for ring and sp2 bridge atoms: when stiffening is skipped (``stiffen_ring_bridges=False`` or ``stiffen_sp2_bridges=False``), all ghost-containing angles are now preserved at their original force field values rather than removing the intraghost angles (dual junctions) or the sacrificial physical-bridge-ghost angle (triple junctions).
21+
* Changed the default for ``--optimise-angles`` to ``False``. Angle optimisation is conformer-dependent: different input geometries can yield different equilibrium angles for the same perturbation, adding variability to the resulting force field. The original force field theta0 is sufficient given the small ``k_soft`` value. Optimisation can still be enabled explicitly to follow Boresch et al. (JCTC 2021) strictly.
22+
23+
[2025.1.0](https://github.com/OpenBioSim/loch/releases/tag/2025.1.0) - Nov 2025
24+
-------------------------------------------------------------------------------
25+
26+
* Initial public release.

MANIFEST.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
graft tests

0 commit comments

Comments
 (0)