Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
738d462
gitignore
Tieqiong Feb 1, 2025
59d5688
fix win include and export
Tieqiong Feb 1, 2025
601959f
fix build scripts for Windows
Tieqiong Feb 1, 2025
28c0622
small fix
Tieqiong Feb 2, 2025
4192120
Merge pull request #36 from Tieqiong/windows
sbillinge Feb 2, 2025
86ba6f7
add flags for objcryst
Tieqiong Jun 19, 2025
cb4e557
Merge pull request #37 from Tieqiong/objcryst_flag
sbillinge Jun 19, 2025
251f9aa
correct prefix
Tieqiong Jun 20, 2025
fd7a40f
Merge pull request #38 from Tieqiong/prefix
sbillinge Jun 20, 2025
b472d41
auto release with sha after tag push
Tieqiong Jun 23, 2025
ec370af
Merge pull request #39 from Tieqiong/workflow
sbillinge Jun 24, 2025
ba376c7
add precommit hooks and configuration files
Tieqiong Jun 25, 2025
5e9ea98
add comments into ignore_words
Tieqiong Jun 25, 2025
1785ad7
Merge pull request #41 from Tieqiong/linting
sbillinge Jun 26, 2025
fdb9d4b
bump fallback_version
Tieqiong Sep 16, 2025
01bd9e4
rename doc to docs
Tieqiong Sep 16, 2025
dc08600
Merge pull request #43 from Tieqiong/ver
sbillinge Sep 17, 2025
c4f6144
skpkg: copy over all code into skpkg standard dir and add necessary r…
cadenmyers13 Oct 19, 2026
f01301e
Move README.md to README.rst
cadenmyers13 Oct 19, 2026
34f33d7
Move from LICENSE.txt to LICENSE.rst and change all in-file reference…
cadenmyers13 Oct 19, 2026
1cbca7a
remove old conda-recipe that was used for the old diffpy channel
cadenmyers13 Oct 19, 2026
e53318f
rm unnecessary setup.py
cadenmyers13 Oct 20, 2026
f6df5e9
replace AUTHORS.txt with .rst
cadenmyers13 Oct 20, 2026
fa9cdce
replace CHANGELOG.md with .rst
cadenmyers13 Oct 20, 2026
aaec8e5
replaces AUTHORS.rst references in all source files
cadenmyers13 Oct 20, 2026
d57f82a
rm scikit-package doc fillers
cadenmyers13 Oct 20, 2026
0ca168c
read .sconf_temp/ to the gitignore
cadenmyers13 Oct 20, 2026
3203857
ci: update CI to release to Github on tag without a wheel being built
cadenmyers13 Oct 20, 2026
4b5e228
ci: create custom CI workflow for testing on PR
cadenmyers13 Oct 20, 2026
1ce68b3
remove default channel to get rid of warning
cadenmyers13 Oct 20, 2026
89d34c7
fix CXX keyerror and codecov
cadenmyers13 Oct 20, 2026
652f0c1
rm python-specific skpkg files and travis file
cadenmyers13 Oct 20, 2026
efeae87
remove unnecessary pypi specific information
cadenmyers13 Oct 20, 2026
6fa8582
Merge pull request #56 from cadenmyers13/skpkg-migration
sbillinge Oct 23, 2026
5e913d4
doc: move doc/manual to docs/ and reference the real license
cadenmyers13 Oct 26, 2026
e787297
doc: manual edits to docs, including a description in index.rst and a…
cadenmyers13 Oct 26, 2026
d67c192
style: fix pre-commit (codespell typos, black/isort, exclude vendored…
cadenmyers13 Oct 26, 2026
f34124c
ci: modify skpkg ci for libdiffpy
cadenmyers13 Oct 26, 2026
ae48804
ci: publish the docs after a release succeeds
cadenmyers13 Oct 26, 2026
8e625c2
run news check on any PR
cadenmyers13 Oct 26, 2026
2bfa2e6
Merge pull request #57 from cadenmyers13/skpkg-docs
sbillinge Oct 26, 2026
3441711
Merge branch 'skpkg-migration' into skpkg-ci
cadenmyers13 Oct 26, 2026
11ea2c7
ci: revert matrix-and-codecov.yml to the skpkg-migration version
cadenmyers13 Oct 26, 2026
767958b
rm matrix testing from release CI
cadenmyers13 Oct 26, 2026
e4b9ff0
rm matrix testing
cadenmyers13 Oct 26, 2026
5d15b53
ci: Use reusable workflow for doc publishing
cadenmyers13 Oct 26, 2026
6140608
Merge pull request #58 from cadenmyers13/skpkg-ci
sbillinge Oct 26, 2026
f1343ba
Merge Windows build fixes from diffpy/libdiffpy windows (up to b472d41)
SYMSCAE Oct 28, 2026
69c43f4
style: apply clang-format (Google style) to C++ sources
SYMSCAE Oct 28, 2026
178deab
Merge upstream windows commit ba376c7 (clang-format and pre-commit se…
SYMSCAE Oct 28, 2026
3a2ad63
Merge remaining upstream windows commits into skpkg-migration
SYMSCAE Oct 28, 2026
0769619
chore: add .git-blame-ignore-revs and news for the Windows merge
SYMSCAE Oct 28, 2026
a1e7fa7
build: fix Windows build settings
SYMSCAE Oct 28, 2026
8eca86a
fix: resolve release versions from lightweight Git tags
SYMSCAE Oct 28, 2026
c4af821
fix: run C++ matrix tests and repair Windows DLL support
SYMSCAE Oct 28, 2026
97130d5
ci: speed up environment setup and C++ builds
SYMSCAE Oct 28, 2026
345f7a9
Remove git blame settings
SYMSCAE Oct 28, 2026
9d7bd8b
Merge pull request #60 from SYMSCAE/merge-windows
sbillinge Oct 29, 2026
44489a2
build: standardize release tags for libdiffpy 1.5.0
SYMSCAE Oct 29, 2026
6da4961
build: revert fallback_version.py
SYMSCAE Oct 29, 2026
47e8afb
Merge pull request #61 from SYMSCAE/version-naming
sbillinge Oct 29, 2026
c6c3613
skpkg: restructure readme to roughly scikit-package standards
cadenmyers13 Oct 29, 2026
f17f096
doc: move dev instructions to rst format
cadenmyers13 Oct 29, 2026
cc7e5ca
doc: add 1.4.1 release to the CHANGELOG
cadenmyers13 Oct 29, 2026
54a61a3
doc: update release checklist to be more accurate
cadenmyers13 Oct 29, 2026
17700a1
doc: rm unused import from docs.txt and other minor doc changes
cadenmyers13 Oct 29, 2026
79d7583
news
cadenmyers13 Oct 29, 2026
1116d15
ci: remove redundant runs on different python versions, unify env init
SYMSCAE Oct 29, 2026
bbfc049
Merge pull request #62 from cadenmyers13/easy-changes
sbillinge Oct 30, 2026
8bc6a29
Merge pull request #64 from SYMSCAE/ci-shim
sbillinge Oct 30, 2026
20b7c79
doc: don't install as python package when making docs
SYMSCAE Oct 31, 2026
eb449a0
doc: comment
SYMSCAE Oct 31, 2026
33d9f7c
doc: more descriptions
SYMSCAE Oct 31, 2026
dc3a403
Merge pull request #65 from SYMSCAE/doc
sbillinge Oct 31, 2026
6a1a552
Merge branch 'main' into skpkg-migration
SYMSCAE Nov 2, 2026
2005b2f
Merge pull request #72 from SYMSCAE/skpkg-migration
sbillinge Nov 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
BasedOnStyle: Google

IndentWidth: 2
ContinuationIndentWidth: 2
TabWidth: 2
UseTab: Never

ColumnLimit: 80

SortIncludes: false
18 changes: 18 additions & 0 deletions .codecov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
coverage:
status:
project: # more options at https://docs.codecov.com/docs/commit-status
default:
target: auto # use the coverage from the base commit, fail if coverage is lower
threshold: 0% # allow the coverage to drop by

comment:
layout: " diff, flags, files"
behavior: default
require_changes: false
require_base: false # [true :: must have a base report to post]
require_head: false # [true :: must have a head report to post]
hide_project_coverage: false # [true :: only show coverage on the git diff aka patch coverage]

# SCons compiles copies of the sources in build/coverage-<arch>/, map them back to src/
fixes:
- "build/coverage-x86_64/::src/"
2 changes: 2 additions & 0 deletions .codespell/ignore_lines.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
;; Please include filenames and explanations for each ignored line.
;; See https://docs.openverse.org/meta/codespell.html for docs.
14 changes: 14 additions & 0 deletions .codespell/ignore_words.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
;; Please include explanations for each ignored word (lowercase).
;; See https://docs.openverse.org/meta/codespell.html for docs.

;; abbreviation for "materials" often used in a journal title
mater

;; Frobenius norm used in np.linalg.norm
fro

;; variable name for a pair type multiplicity in BaseDebyeSum.cpp
multipl

;; custom scattering factor label used in TestScatteringFactorTable.hpp
ccustom
13 changes: 13 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# As of now, flake8 does not natively support configuration via pyproject.toml
# https://github.com/microsoft/vscode-flake8/issues/135
[flake8]
exclude =
.git,
__pycache__,
build,
dist,
docs/source/conf.py
max-line-length = 79
# Ignore some style 'errors' produced while formatting by 'black'
# https://black.readthedocs.io/en/stable/guides/using_black_with_other_tools.html#labels-why-pycodestyle-warnings
extend-ignore = E203
4 changes: 1 addition & 3 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
/.gitattributes export-ignore
/.gitignore export-ignore
/.travis* export-ignore
/conda-recipe/ export-ignore
/doc export-ignore
/docs export-ignore
gitarchive.cfg export-subst
16 changes: 16 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_feature.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
name: Bug Report or Feature Request
about: Report a bug or suggest a new feature!
title: ""
labels: ""
assignees: ""
---

### Problem

<!--
For a bug report, please copy and paste any error messages from the application or command-line here.
For a feature request, please state how the new functionality could benefit the community.
-->

### Proposed solution
47 changes: 47 additions & 0 deletions .github/ISSUE_TEMPLATE/release_checklist.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
name: Release
about: Checklist and communication channel for GitHub and conda-forge release
title: "Ready for <version-number> GitHub/conda-forge release"
labels: "release"
assignees: ""
---

### GitHub rc-release preparation checklist:

- [ ] All PRs/issues attached to the release are merged.
- [ ] All the badges on the README are passing.
- [ ] License information is verified as correct. If you are unsure, please comment below.
- [ ] Locally rendered documentation contains all appropriate pages and other human-written text is up-to-date with any changes in the code.
- [ ] Installation instructions in the README, documentation, and the website are updated.
- [ ] Grammar and writing quality are checked (no typos).
- [ ] `FALLBACK_VERSION` in `site_scons/fallback_version.py` is updated to `<version-number>.post0`. Without this, the SCons build fails after tagging.
- [ ] `scons test` passes locally with the latest conda-forge compilers and dependencies.
- [ ] Dispatch matrix testing to test the release on all systems. If you do not have permission to run this workflow, tag the maintainer and say `@maintainer, please dispatch matrix testing workflow`. Matrix testing also runs automatically after a GitHub release is published, but it does not block the release, so check that it passes.

Please tag the maintainer (e.g., @username) in the comment here when you are ready for the GitHub release. Include any additional comments necessary, such as version information and details about the pre-release here:

### GitHub full-release preparation checklist:

- [ ] The rc GitHub release and its source tarball appear correctly on the releases page.
- [ ] Docs are deployed successfully to `https://www.diffpy.org/libdiffpy`.
- [ ] Successfully run all tests and do functional testing, e.g., with `diffpy.srreal` built against the rc.

Please let the maintainer know that all checks are done and the package is ready for full release.

### conda-forge release preparation checklist:

<!-- After the maintainer releases on GitHub, please check the following when creating a PR for conda-forge release.-->

- [ ] Ensure that the full release has appeared on GitHub successfully.
- [ ] `version` and `sha256` of the GitHub source tarball are updated in `meta.yaml` in the feedstock.
- [ ] New package dependencies listed in `build.txt`, `conda.txt` and `tests.txt` are added to `meta.yaml` in the feedstock.
- [ ] `license_file` in `meta.yaml` points to `LICENSE.rst` (renamed from `LICENSE.txt`).
- [ ] Close any open issues on the feedstock. Reach out to the maintainer if you have questions.
- [ ] Tag the maintainer for conda-forge release.

### Post-release checklist

<!-- Before closing this issue, please complete the following: -->

- [ ] Install the released package from conda-forge and conduct functional testing using the installation guide in the README. Attach screenshots/results as comments.
- [ ] Documentation (README, API references, and websites) is deployed without broken links or missing figures.
15 changes: 15 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
### What problem does this PR address?

<!-- Provide a brief overview and link to the issue. Attach outputs, including screenshots (before/after), if helpful for the reviewer. -->

### What should the reviewer(s) do?

<!-- Merge the code, provide feedback, initiate a discussion, etc. -->

<!--
Use the following checklist items when applicable (select only what applies):
- [ ] This PR introduces a public-facing change (e.g., figures, CLI input/output, API).
- [ ] Documentation (e.g., tutorials, examples, README) has been updated.
- [ ] A tracking issue or plan to update documentation exists.
- [ ] This PR affects internal functionality only (no user-facing change).
-->
33 changes: 33 additions & 0 deletions .github/actions/setup-tests/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Set up C++ tests

runs:
using: composite
steps:
- name: Fetch upstream release tags
shell: bash
run: git fetch --tags https://github.com/diffpy/libdiffpy.git

- name: Check out CxxTest 4.4
uses: actions/checkout@v6
with:
repository: CxxTest/cxxtest
ref: 191adddb3876ab389c0c856e1c03874bf70f8ee4
path: build/cxxtest

- name: Prepare C++ test configuration
shell: python {0}
run: |
import runpy
runpy.run_path('.github/scripts/configure-tests.py')

- name: Create build environment
uses: conda-incubator/setup-miniconda@v3
with:
activate-environment: test
channels: conda-forge
conda-remove-defaults: "true"
auto-update-conda: false
auto-activate-base: false
python-version: "3.14"
environment-file: build/test-environment.yml
channel-priority: strict
55 changes: 55 additions & 0 deletions .github/scripts/configure-tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
"""Configure SCons, CxxTest and the conda environment for CI tests."""

import json
from pathlib import Path

requirements = ["python"]
for filename in ("build.txt", "conda.txt", "tests.txt"):
for line in (Path("requirements") / filename).read_text().splitlines():
spec = line.split("#", 1)[0].strip()
if spec and spec != "cxxtest":
requirements.append(spec)

Path("build").mkdir(exist_ok=True)
Path("build/test-environment.yml").write_text(
json.dumps(
{
"name": "test",
"channels": ["conda-forge"],
"dependencies": requirements,
},
indent=2,
)
+ "\n"
)

Path("sconscript.local").write_text("""\
Import('env')
import os
import sys

prefix = os.environ['CONDA_PREFIX']
cxxtest = Dir('#/build/cxxtest').abspath
env.Replace(CXXTEST=os.path.join(cxxtest, 'bin', 'cxxtestgen'),
CXXTEST_INSTALL_DIR=cxxtest, CXXTEST_PYTHON=sys.executable)

if env['PLATFORM'] == 'win32':
from SCons.Platform.win32 import exec_spawn

# The outer CI shell already activates conda and SCons configures MSVC.
# /D stops each compiler/test-generator child from repeating cmd AutoRun.
def spawn_without_autorun(sh, escape, cmd, args, child_env):
return exec_spawn([sh, '/D', '/C', escape(' '.join(args))], child_env)

env['SPAWN'] = spawn_without_autorun
else:
env.Replace(CXX=os.environ.get('CXX', os.path.join(prefix, 'bin', 'c++')))
env.Prepend(CCFLAGS=['-isystem' + os.path.join(prefix, 'include')])
env.Append(LIBPATH=os.path.join(prefix, 'lib'))
env.Append(LINKFLAGS='-Wl,-rpath,' + os.path.join(prefix, 'lib'))
if env['PLATFORM'] == 'darwin':
sdk = os.environ.get('CONDA_BUILD_SYSROOT')
if sdk:
env.Append(CXXFLAGS=['-isysroot', sdk])
env.Append(LINKFLAGS=['-isysroot', sdk])
""")
22 changes: 22 additions & 0 deletions .github/workflows/build-and-publish-docs-on-dispatch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Build and Publish Docs on Dispatch

on:
workflow_dispatch:

jobs:
get-python-version:
uses: scikit-package/release-scripts/.github/workflows/_get-python-version-latest.yml@v0
with:
python_version: 0

docs:
uses: scikit-package/release-scripts/.github/workflows/_release-docs.yml@v0
with:
project: libdiffpy
c_extension: true
headless: false
# true: install the project with `python -m pip install -e . --no-deps`.
# false: skip project installation; still install dependencies and build docs.
# libdiffpy is a C++ library and does not need a Python package installed for docs.
install_project: false
python_version: ${{ fromJSON(needs.get-python-version.outputs.latest_python_version) }}
10 changes: 10 additions & 0 deletions .github/workflows/check-news-item.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: Check for News

on:
pull_request_target:

jobs:
check-news-item:
uses: scikit-package/release-scripts/.github/workflows/_check-news-item.yml@v0
with:
project: libdiffpy
82 changes: 82 additions & 0 deletions .github/workflows/matrix-and-codecov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: Matrix and Codecov

on:
push:
branches:
- main

workflow_call:
secrets:
CODECOV_TOKEN:
required: false
workflow_dispatch:

concurrency:
group: matrix-${{ github.ref }}
cancel-in-progress: ${{ !startsWith(github.ref, 'refs/tags/') }}

jobs:
matrix-coverage:
name: C++ tests (${{ matrix.os }})
runs-on: ${{ matrix.os }}
timeout-minutes: 45
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest, macos-15-intel]
include:
- os: ubuntu-latest
shell: bash -l {0}
build: coverage
jobs: 4
- os: windows-latest
shell: cmd /C CALL {0}
build: fast
jobs: 4
- os: macos-latest
shell: bash -l {0}
build: fast
jobs: 2
- os: macos-15-intel
shell: bash -l {0}
build: fast
jobs: 4
defaults:
run:
shell: ${{ matrix.shell }}

steps:
- name: Check out libdiffpy
uses: actions/checkout@v6
with:
fetch-depth: 0

- name: Set up C++ tests
uses: ./.github/actions/setup-tests

- name: Build and run C++ tests
run: scons -j${{ matrix.jobs }} build=${{ matrix.build }} test

- name: Generate coverage report
if: runner.os == 'Linux'
run: >-
gcovr --gcov-executable "$CONDA_PREFIX/bin/gcov"
--root . --filter 'build/coverage-.*/diffpy/'
--xml coverage.xml

- name: Save coverage report
if: runner.os == 'Linux'
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: coverage.xml
if-no-files-found: error

- name: Upload coverage to Codecov
# Fork push builds have no upstream Codecov token; keep their artifact.
if: runner.os == 'Linux' && github.repository == 'diffpy/libdiffpy'
uses: codecov/codecov-action@v5
with:
files: coverage.xml
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}
Loading
Loading