Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
242cbe3
toml
sbillinge Aug 13, 2025
e9abe8f
Merge pull request #1 from sbillinge/toml
sbillinge Aug 13, 2025
3877b13
better behaved license
sbillinge Aug 14, 2025
8ee76b0
Merge pull request #2 from sbillinge/lic
sbillinge Aug 14, 2025
98ae035
chore: change dpx to src/diffpy
zmx27 Aug 16, 2025
274efae
chore: rename confutils to srxconfutils
zmx27 Aug 16, 2025
727d2c0
chore: change dpx to src in pyproject.toml
zmx27 Aug 16, 2025
6ec98e4
Merge pull request #3 from zmx27/change-package-structure
sbillinge Aug 16, 2025
1a987d8
fix: remove the use of the deprecated has_key function for dictionaries
zmx27 Aug 17, 2025
dda539a
Merge pull request #4 from zmx27/fix-haskey-deprecation
sbillinge Aug 18, 2025
a1ce96e
chore: update dict.iteritems() to dict.items()
zmx27 Aug 23, 2025
10e029c
Merge pull request #5 from zmx27/fix-iteritem-deprecation
sbillinge Aug 23, 2025
1fb129d
fix: add __iter__ and __next__ methods, and convert map object to a l…
zmx27 Aug 27, 2025
b4d12c9
Merge pull request #6 from zmx27/fix-enumerate
sbillinge Aug 28, 2025
d2d5e77
skpkg: move over precommit files and create pre-commit auto fixes
zmx27 Aug 28, 2025
f7b773e
Merge pull request #7 from zmx27/pre-commit-auto
sbillinge Aug 29, 2025
57e4561
style: fix codespell errors
zmx27 Aug 31, 2025
4124c74
Merge pull request #8 from zmx27/fix-codespell
sbillinge Sep 2, 2025
081340b
style: fix flake8 error for tools.py
zmx27 Sep 10, 2025
320513d
style: fix flake8 errors for config.py
zmx27 Sep 10, 2025
554a92c
Merge pull request #10 from zmx27/fix-flake8-config
sbillinge Sep 17, 2025
02e4dec
chore: use context manager for file reads and handle exceptions by ra…
zmx27 Sep 17, 2025
ab26c01
chore: update function names and write tests for them
zmx27 Sep 18, 2025
7bedcce
style: fix flake8 errors for configtraits.py
zmx27 Sep 18, 2025
7904691
Merge pull request #11 from zmx27/fix-flake8-configtraits
sbillinge Sep 19, 2025
b752126
chore: rename functions and move tmpfiles into conftest.py
zmx27 Sep 19, 2025
dc66eef
Merge pull request #9 from zmx27/fix-flake8-tools
sbillinge Sep 20, 2025
44f7f5d
skpkg: migrate src folder
zmx27 Sep 20, 2025
5f697c0
skpkg: migrate tests folder
zmx27 Sep 20, 2025
24338ce
skpkg: list dependencies in requirements folder
zmx27 Sep 20, 2025
6de173e
skpkg: add CI
zmx27 Sep 20, 2025
7f2205d
skpkg: add pyproject.toml
zmx27 Sep 20, 2025
14adc8d
skpkg: add the rest of the github files
zmx27 Sep 21, 2025
36f9ec3
chore: change pdfgetx to srxconfutils in the .github workflow files
zmx27 Sep 21, 2025
9691ebc
chore: fix copyright dates and delete dpx
zmx27 Sep 23, 2025
8092064
Merge pull request #12 from zmx27/setup-CI
sbillinge Sep 24, 2025
a4288da
skpkg: add config files readthedocs, codecov
zmx27 Sep 30, 2025
88b2170
Merge pull request #13 from zmx27/config
sbillinge Sep 30, 2025
e00efde
skpkg: add public facing files like authors, changelog, code-of-condu…
zmx27 Oct 1, 2025
16f5d7c
chore: delete old authors and licensenotice files
zmx27 Oct 1, 2025
de24e9a
skpkg: add MANIFEST.in
zmx27 Oct 1, 2025
9f2927d
skpkg: add cookiecutter.json
zmx27 Oct 1, 2025
4bf6b4a
chore: add indent to author names in authors.rst
zmx27 Oct 1, 2025
b756ca8
Merge pull request #14 from zmx27/docs
sbillinge Oct 1, 2025
4debd5c
skpkg: migrate readme.rst
zmx27 Oct 3, 2025
2a9c975
chore: add --file command mention to readme.rst
zmx27 Oct 3, 2025
a02354a
chore: delete the 'longer descriptions' line
zmx27 Oct 3, 2025
0270954
chore: update readme file
zmx27 Oct 5, 2025
4d86135
Merge pull request #15 from zmx27/migrate-readme
sbillinge Oct 7, 2025
0ad1dce
skpkg: add news file
zmx27 Oct 7, 2025
35e524e
chore: update file level comments
zmx27 Oct 7, 2025
67a8781
Merge pull request #16 from zmx27/skpkg
sbillinge Oct 7, 2025
be82a2a
chore: update build-wheel workflow file to match pdfgetx standards
zmx27 Oct 8, 2025
7bfbf6c
Merge pull request #17 from zmx27/github-workflows
sbillinge Oct 8, 2025
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
14 changes: 14 additions & 0 deletions .codecov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
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]
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.
8 changes: 8 additions & 0 deletions .codespell/ignore_words.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
;; 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
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
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
46 changes: 46 additions & 0 deletions .github/ISSUE_TEMPLATE/release_checklist.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
name: Release
about: Checklist and communication channel for PyPI and GitHub release
title: "Ready for <version-number> PyPI/GitHub release"
labels: "release"
assignees: ""
---

### PyPI/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, including API references (check no modules are
missing), tutorials, 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.
- [ ] Successfully run any tutorial examples or do functional testing with the latest Python version.
- [ ] Grammar and writing quality are checked (no typos).
- [ ] Install `pip install build twine`, run `python -m build` and `twine check dist/*` to ensure that the package can be built and is correctly formatted for PyPI release.

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

### PyPI/GitHub full-release preparation checklist:

- [ ] Create a new conda environment and install the rc from PyPI (`pip install <package-name>==??`)
- [ ] License information on PyPI is correct.
- [ ] Docs are deployed successfully to `https://<github-username-or-orgname>/<package-name>`.
- [ ] Successfully run all tests, tutorial examples or do functional testing.

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 the PyPI package, please check the following when creating a PR for conda-forge release.-->

- [ ] Ensure that the full release has appeared on PyPI successfully.
- [ ] New package dependencies listed in `conda.txt` and `tests.txt` are added to `meta.yaml` in the feedstock.
- [ ] 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: -->

- [ ] Run tutorial examples and conduct functional testing using the installation guide in the README. Attach screenshots/results as comments.
- [ ] Documentation (README, tutorials, 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).
-->
230 changes: 230 additions & 0 deletions .github/workflows/build-wheel-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,230 @@
name: Build Wheels and Release

on:
workflow_dispatch:
push:
tags:
- "*"

env:
PYTHON_VERSIONS: '["3.11","3.12","3.13"]'

permissions:
contents: write
actions: read
packages: write

concurrency:
group: build-wheels-${{ github.ref }}
cancel-in-progress: true

defaults:
run:
shell: bash {0}

jobs:
get-python-versions:
runs-on: ubuntu-latest
outputs:
py_ver: ${{ steps.set.outputs.py_ver }}
py_last: ${{ steps.set.outputs.py_last }}
steps:
- id: set
run: |
echo py_ver=$PYTHON_VERSIONS >> $GITHUB_OUTPUT
echo "py_last=${{ fromJson(env.PYTHON_VERSIONS)[0] }}" >> $GITHUB_OUTPUT

check-tag-on-main:
runs-on: ubuntu-latest
steps:
- name: Checkout repository with full history
uses: actions/checkout@v4
with:
token: ${{ secrets.PAT_TOKEN }}
fetch-depth: 0

- name: Verify tag
run: |
git fetch origin main
TAG_COMMIT=$(git rev-parse ${{ github.ref_name }})
if git merge-base --is-ancestor "$TAG_COMMIT" origin/main; then
echo "Tag ${{ github.ref_name }} ($TAG_COMMIT) is contained in main"
else
echo "::error::Tag ${{ github.ref_name }} ($TAG_COMMIT) is not found in main. Please release from the main branch."
exit 1
fi

check-tag-privilege:
# No third party actions used
uses: scikit-package/release-scripts/.github/workflows/_check-tag-privilege.yml@v0
with:
maintainer_github_username: sbillinge

build-sdist:
needs: [check-tag-privilege, get-python-versions, check-tag-on-main]
runs-on: ubuntu-latest

steps:
- name: Checkout
# GitHub officially-maintained actions
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Set up Python
# GitHub officially-maintained actions
uses: actions/setup-python@v5
with:
python-version: ${{ needs.get-python-versions.outputs.py_last }}

- name: Build docs and remove fonts that blow up the wheel size
run: |
python -m pip install Sphinx sphinx-rtd-theme sphinx-copybutton m2r
cd docs
make html
cd build/html/_static/css/fonts
find . -type f ! -name '*.ttf' -delete
cd ../..
rm -rf fonts
cd ..
rm -rf _sources
cd ..
rm -rf doctrees
cd ../..

- name: Make sdist
run: |
python -m pip install --upgrade pip build cython setuptools setuptools-git-versioning
python -m build --sdist --no-isolation

- name: Strip source codes
run: |
set -euo pipefail
tar xf dist/diffpy_srxconfutils-*.tar.gz
SRC_DIR=$(find . -maxdepth 1 -type d -name 'diffpy_srxconfutils-*' | head -n1)
find "$SRC_DIR" -type f -name '*.c' -print0 \
| xargs -0 perl -i.bak -0777 -pe 's{/\*.*?\*/}{}gs'
find "$SRC_DIR" -type f -name '*.c.bak' -delete
tar czf dist/"${SRC_DIR#./}".tar.gz "$SRC_DIR"
rm -rf "$SRC_DIR"

- name: Upload sdist
# GitHub officially-maintained actions
uses: actions/upload-artifact@v4
with:
name: sdist
path: dist/
retention-days: 1

- name: Upload INSTRUCTIONS.txt
uses: actions/upload-artifact@v4
with:
name: instructions
path: INSTRUCTIONS.txt

build-wheels:
needs: [build-sdist, get-python-versions]

name: Build wheels ${{ matrix.python }}-${{ matrix.buildplat }}
runs-on: ${{ matrix.buildplat }}
strategy:
fail-fast: false
matrix:
buildplat:
- ubuntu-latest
- macos-14
- windows-latest
python: ${{ fromJSON(needs.get-python-versions.outputs.py_ver) }}
steps:
- name: Download sdist
# GitHub officially-maintained actions
uses: actions/download-artifact@v4
with:
name: sdist
path: dist/

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}

- name: Build wheels
run: |
# setuptools-git-versioning only look into .git and PKG-INFO in the top directory
which python; python --version
which pip; pip --version
python -m pip install --upgrade pip build cython setuptools setuptools-git-versioning
tar xf dist/diffpy_srxconfutils-*.tar.gz
cd diffpy_srxconfutils-*
python -m pip wheel . --no-deps --no-build-isolation --wheel-dir ./../dist

- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.python }}-${{ matrix.buildplat }}
path: dist/*.whl

test-wheels:
needs: [build-wheels, get-python-versions]

name: Test wheels ${{ matrix.python }}-${{ matrix.buildplat }}
runs-on: ${{ matrix.buildplat }}
strategy:
fail-fast: false
matrix:
buildplat:
- ubuntu-latest
- macos-14
- windows-latest
python: ${{ fromJson(needs.get-python-versions.outputs.py_ver) }}
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Download wheels
uses: actions/download-artifact@v4
with:
name: wheels-${{ matrix.python }}-${{ matrix.buildplat }}
path: dist/

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}

- name: Install wheels
run: |
python -m pip install --upgrade pip pytest setuptools-git-versioning
python -m pip install dist/*.whl

- name: Assert no source files in installed package
run: |
# For debugging
# touch $(python -c "import sysconfig, os; print(os.path.join(sysconfig.get_paths()['purelib'], 'diffpy/srxconfutils', 'fake.py'))")
python - << 'EOF'
import os, glob, sys, sysconfig
sp = sysconfig.get_paths()['purelib']
pkg = os.path.join(sp, 'diffpy', 'srxconfutils')
patterns = [os.path.join(pkg, '*.py'),
os.path.join(pkg, '*.c')]
bad = []
for p in patterns:
bad.extend(glob.glob(p))

if bad:
print("Found leftover source files in installed package:")
for f in bad:
print(" -", f)
sys.exit(1)

print("No .py or .c files present in diffpy/srxconfutils/")
EOF

- name: Run tests
run: python -m pytest

release:
needs: [test-wheels]
uses: ./.github/workflows/release-github.yml
secrets:
PAT_TOKEN: ${{ secrets.PAT_TOKEN }}
12 changes: 12 additions & 0 deletions .github/workflows/check-news-item.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
name: Check for News

on:
pull_request_target:
branches:
- main

jobs:
check-news-item:
uses: scikit-package/release-scripts/.github/workflows/_check-news-item.yml@v0
with:
project: diffpy.srxconfutils
19 changes: 19 additions & 0 deletions .github/workflows/matrix-and-codecov-on-merge-to-main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: CI

on:
push:
branches:
- main
release:
types:
- prereleased
- published
workflow_dispatch:

jobs:
matrix-coverage:
uses: scikit-package/release-scripts/.github/workflows/_matrix-no-codecov-on-merge-to-main.yml@v0
with:
project: diffpy.srxconfutils
c_extension: false
headless: false
Loading
Loading