Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
34 changes: 16 additions & 18 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -1,49 +1,47 @@
---
name: Bug report
about: Create a bug report to help us improve calendaring-sync
about: Report something calendaring-sync does wrong
title: '[Bug] '
labels: ''
assignees: ''
---

<!-- This template is here to guide you and help us. If you can't complete everything here, that is fine. -->
<!-- Fill in what you can; a partial report still helps. -->

## Describe the bug
## What happened

<!-- A clear and concise description of the bug. -->
<!-- What calendaring-sync did. -->

## To reproduce
## How to reproduce it

<!-- Add the necessary steps and code examples to reproduce the issue on your machine. -->
<!-- The steps and code that show it, as small as you can make them. -->

```python
import calendaring_sync
### ...
```

Output:

<!-- Add logs, stack traces, or error outputs to help explain the issue. -->
<!-- The traceback, log, or other output. -->

```pycon

```

## Expected behavior
## What you expected

<!-- A clear and concise description of what you expected to happen. -->
<!-- What calendaring-sync should have done instead. -->

## Environment

<!-- Complete the following information. -->

- [ ] Operating system: <!-- For example, Ubuntu 22, macOS Tahoe 26, Windows 10 -->
- [ ] Python version: <!-- For example, Python 3.14 -->
- [ ] calendaring-sync version: <!-- Run `python3 -c 'from calendaring_sync import __version__; print(__version__)'` -->
- [ ] Adapter and server, if one is involved: <!-- For example, the CalDAV adapter, python-caldav 3.6.0, Radicale 3.8.3 -->
- [ ] Operating system: <!-- Such as Ubuntu 24.04, macOS 26, or Windows 11 -->
- [ ] Python version: <!-- Such as 3.14 -->
- [ ] calendaring-sync version: <!-- Run `python -c "import calendaring_sync; print(calendaring_sync.__version__)"` -->
- [ ] Store: <!-- Such as SQLiteStore, MemoryStore, or one you wrote -->
- [ ] Adapter, its client library's version, and the server, if one is involved:

## Additional context

<!-- Add any other context about the issue here, including related issues and pull requests. -->
<!-- Related issues or pull requests, or anything else that helps. -->

- [ ] I tested it with the latest version.
- [ ] I reproduced it with the latest release.
7 changes: 5 additions & 2 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@

blank_issues_enabled: true
contact_links:
- name: Documentation
url: https://calendaring-sync.readthedocs.io/en/stable/
about: Guides for each task, the design and why it works that way, and the full API reference
- name: Discussions
url: https://github.com/pycalendar/calendaring-sync/discussions
about: For questions, ideas, and community discussions
url: https://github.com/PyCalendar/calendaring-sync/discussions
about: Questions, ideas, and help with using calendaring-sync
13 changes: 3 additions & 10 deletions .github/ISSUE_TEMPLATE/empty-issue.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,12 @@
---
name: Blank issue
about: Unstructured template for anything not covered by bug reports
about: Anything a bug report doesn't fit
title: ''
labels: ''
assignees: ''
---

<!--
This is an unstructured issue template to use if you don't need guidance.

Here are some hints, though.

- Show code.
- Show logs, stack traces, error output, or other output that differs from what you expect.
- Add links to related issues or pull requests.

Thanks for taking your time to report this!
Show code, and the output that differs from what you expected, and link
related issues or pull requests. For a question, Discussions is the place.
-->
50 changes: 13 additions & 37 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,64 +2,40 @@
<!--- SPDX-License-Identifier: AGPL-3.0-or-later -->

<!--

INSTRUCTIONS

Fill out the pull request template as described below.

Do not edit or remove section headings as they are required, except "Additional information" which is optional.

Comments may be removed.
Comments consist of the content between each pair of HTML comment delimiters, inclusively.

Keep the section headings; "Additional information" is optional.
You can delete these comments.
-->

## Linked issue

<!--
Replace `ISSUE_NUMBER` with the issue number that your pull request addresses.
This links the pull request to the related issue.

Choose the appropriate form:

- If you completely resolve the issue, then use `"Closes"`.
This form will automatically close the related issue when the PR gets merged.
- If you contribute to solving part of the issue, use "Contributes to".
This form keeps the issue open for future work.
"Closes" closes the issue when the pull request merges. For part of an issue,
write "Contributes to" instead, which leaves it open.
-->

- Closes #ISSUE_NUMBER
<!-- Change "Closes" to "Contributes to" above for a partial contribution. -->

<!--
You may also link to open pull requests that address the same issue, if applicable.

- See #PULL_REQUEST_NUMBER
-->

## Description

<!--
Write a description of the fixes or improvements.
What you found and what you changed, in your own words.
-->

## Checklist

<!--
Do not edit the checkbox list items.

To indicate that you completed an item, place an `x` inside the checkbox, such as `[x]`.
Mark each item you did with an x, such as [x]. Don't edit the items.
-->

- [ ] I added a change log entry, following the [change log instructions](https://calendaring-sync.readthedocs.io/en/latest/contribute.html#change-log).
- [ ] I followed calendaring-sync's [Artificial intelligence policy](https://calendaring-sync.readthedocs.io/en/latest/contribute.html#artificial-intelligence-policy) and disclosed my AI use in my commit messages and change log entry, if applicable.
- [ ] I added or updated tests, if applicable.
- [ ] I ran and ensured all tests pass locally, following [Running tests](https://calendaring-sync.readthedocs.io/en/latest/contribute.html#running-tests).
- [ ] If I changed an adapter, I ran its integration tests against every server I could start.
- [ ] I added or edited documentation as necessary.
- [ ] I ran the [checks CI runs](https://calendaring-sync.readthedocs.io/en/stable/contribute.html#check-your-change), and they pass.
- [ ] I added or updated [tests](https://calendaring-sync.readthedocs.io/en/stable/contribute.html#running-tests) for what I changed.
- [ ] If I changed an adapter, I ran its [integration tests](https://calendaring-sync.readthedocs.io/en/stable/contribute.html#running-tests) against every server I could start.
- [ ] I updated the [documentation](https://calendaring-sync.readthedocs.io/en/stable/contribute.html#writing-documentation) that my change makes untrue.
- [ ] I added a [change log entry](https://calendaring-sync.readthedocs.io/en/stable/contribute.html#change-log), or the change doesn't need one.
- [ ] I followed the [artificial intelligence policy](https://calendaring-sync.readthedocs.io/en/stable/contribute.html#artificial-intelligence-policy) and disclosed any AI use.

## Additional information

<!--
Upload screenshots, videos, links to documentation, or any other relevant information.
Anything else a reviewer needs, such as logs, screenshots, or related pull requests.
-->
6 changes: 3 additions & 3 deletions .github/workflows/integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,15 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "3.14"
python-version: "3.15"
pip-version: "26.2.2"

- name: Install dependencies
Expand All @@ -44,7 +44,7 @@ jobs:
# nothing starts them here.
- name: Run integration tests
run: |
pytest src/calendaring_sync/tests/test_sync_integration.py \
pytest src/calendaring_sync/tests/test_caldav_integration.py \
src/calendaring_sync/tests/test_jmap_integration.py

- name: Stop Stalwart
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,25 +29,25 @@ jobs:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
fetch-depth: 0

- uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "3.14"
python-version: "3.15"
pip-version: "26.2.2"

- run: pip install build twine==7.0.0
- run: pip install build==1.6.1 twine==7.0.0

- name: Build package
run: python -m build

- name: Check built distribution
run: twine check dist/*

- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: distribution
path: dist/
Expand All @@ -62,7 +62,7 @@ jobs:
permissions:
id-token: write # required for PyPI trusted publishing (OIDC)
steps:
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
with:
name: distribution
path: dist/
Expand All @@ -77,7 +77,7 @@ jobs:
permissions:
contents: write # required to create the GitHub release
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
fetch-depth: 0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/reuse.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

Expand Down
34 changes: 19 additions & 15 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,15 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "3.14"
python-version: "3.15"
pip-version: "26.2.2"

- name: Install towncrier
Expand All @@ -48,18 +48,18 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "3.14"
python-version: "3.15"
pip-version: "26.2.2"

- name: Install ruff
run: pip install ruff==0.16.10
run: pip install ruff==0.17.2

- name: Lint code
run: ruff check .
Expand All @@ -72,22 +72,22 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "3.14"
python-version: "3.15"
pip-version: "26.2.2"

- name: Install docutils
run: pip install docutils==0.22.4
run: pip install docutils==0.23

- name: Install Vale
run: |
curl -sL https://github.com/errata-ai/vale/releases/download/v3.24.0/vale_3.24.0_Linux_64-bit.tar.gz | tar -xz -C /usr/local/bin vale
curl -sL https://github.com/errata-ai/vale/releases/download/v3.25.1/vale_3.25.1_Linux_64-bit.tar.gz | tar -xz -C /usr/local/bin vale

- name: Sync Vale styles
run: vale sync
Expand All @@ -100,14 +100,15 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
# Read the Docs builds with 3.14, its newest Python.
python-version: "3.14"
pip-version: "26.2.2"

Expand All @@ -117,26 +118,29 @@ jobs:
- name: Build docs
run: sphinx-build -W -b html docs docs/_build/html

- name: Check links
run: sphinx-build -b linkcheck docs docs/_build/linkcheck

mypy:
name: Type check with mypy
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
with:
python-version: "3.14"
python-version: "3.15"
pip-version: "26.2.2"

- name: Install dependencies
run: pip install -e ".[dev]"

- name: Type check
run: python -m mypy src/calendaring_sync --ignore-missing-imports
run: python -m mypy src/calendaring_sync docs/examples --ignore-missing-imports

test:
name: Test on Python ${{ matrix.python-version }}
Expand All @@ -147,11 +151,11 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.11", "3.12", "3.13", "3.14"]
python-version: ["3.11", "3.12", "3.13", "3.14", "3.15"]

steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
fetch-depth: 0
Expand Down
Loading
Loading