Skip to content

feat: restore provider parity with upstream apprise v1.13.0 - #96

Merged
Eli Bosley (elibosley) merged 5 commits into
mainfrom
chore/sync-upstream-version
Aug 31, 2026
Merged

Eli Bosley (elibosley) merged 5 commits into
mainfrom
chore/sync-upstream-version

Conversation

@github-actions

@github-actions github-actions Bot commented Aug 24, 2026 •

Copy link
Copy Markdown
Contributor

Summary

This branch ports upstream Apprise v1.13.0 changes into the Go implementation and restores provider request and schema parity.

Why This Exists

Upstream v1.13.0 changed provider names, URL schemas, request formats, encryption, routing, body limits, and path quoting.

Without these changes, the Go port can reject valid URLs or send requests that differ from Python Apprise.

Resolution

The branch updates the upstream version pin and ports the v1.13.0 behavior.

It refreshes parity metadata, request cases, and golden fixtures used to compare Go with Python Apprise.

Reviewer Considerations

  • Review the removal of NotificationAPI and the replacement with Pingram.
  • Review the new Pinglet and Trigv schemas, including their request paths and metadata handling.
  • Review Bark AES-GCM encryption, Telegram Rich Message templates, Microsoft Workflows routing, and Matrix body limits.
  • Review RFC 3986 path quoting changes across request builders.
  • Review regenerated schema tables and golden fixtures against Python Apprise v1.13.0.
  • Pingram golden generation canonicalizes JSON object key order because upstream iterates a channel set; arrays and values remain unchanged.
  • This PR targets v1.13.0, which matches the local Python reference used for parity. It does not include v1.13.1.

Behavior Changes

  • Add Pingram, Pinglet, and Trigv provider schemas.
  • Remove the obsolete NotificationAPI provider schemas.
  • Add Bark encrypted payloads and Telegram Rich Message templates.
  • Add the Microsoft Workflows custom routing identifier.
  • Apply per-mode Matrix body limits.
  • Match upstream URL path quoting for affected providers.
  • Report Pinglet's default path and empty metadata maps in schema inputs.

Implementation Summary

  • Update the upstream version pin to v1.13.0.
  • Port changed notifier behavior and add the new notifier implementations.
  • Regenerate schema metadata, parity cases, and golden request fixtures.
  • Extend schema input parity handling for Pinglet defaults.
  • Make Pingram golden JSON deterministic across Python hash seeds with an opt-in manifest flag.

Verification

  • GOCACHE="$PWD/.gocache" go test ./... — PASS
  • GOCACHE="$PWD/.gocache" go vet ./... — PASS
  • PYTHONHASHSEED=42 APPRISE_CAPTURE_CACHE=0 .venv/bin/python internal/testutil/scripts/update_golden.py --check — PASS
  • Python reference used by parity tests: Apprise v1.13.0.

Risk

Moderate; the change spans 56 files and many provider implementations. The full Go test suite and static analysis pass, and request parity remains covered by the existing fixtures.

Eli Bosley (elibosley) and others added 3 commits August 24, 2026 12:19
Ports everything v1.13.0 changed on the wire:

- Replace NotificationAPI (napi/notificationapi) with Pingram (pingram):
  single Bearer API key, /send endpoint, optional recipient ids, and the
  new call channel.
- Add Pinglet (pinglet/pinglets) and Trigv (trigv/trigvs) notifiers with
  schema entries, provider fixtures, and golden captures.
- Port Bark AES-GCM encryption (?key=): ordered compact-JSON plaintext,
  token_urlsafe-shaped IV, deterministic via APPRISE_BARK_TEST_IV on both
  sides of the harness.
- Port Telegram Rich Message templates (?template= with :token
  substitution posting to sendRichMessage); template mode bypasses the
  framework fold/convert/split the way upstream's gen_calls does.
- Add the Microsoft Workflows Power Automate CU routing id
  (?route=/?routeid=), inserted as /cu/{id} on the request path.
- Give Matrix its per-mode dynamic body limits (webhook 65000, server
  60000/29000, e2ee 40000/19000) now that upstream computes body_maxlen
  per instance.
- Match upstream's RFC 3986 path quoting (safe set /:@!$&'()*+=) when
  json/form/xml/gotify/enigma2/apprise/parsep rebuild request paths.
- Regenerate the probed tables (arg rules, choice args, host
  requirements, token formats), the affected schema entries, and the
  emby/jellyfin/reddit goldens that embed the upstream version string.

Parity suite: 54 passed, 0 failed; schema coverage, golden update check,
provider parity, and golden parity all PASS.
@github-actions
github-actions Bot force-pushed the chore/sync-upstream-version branch from b7617bc to faacdaa Compare August 31, 2026 12:20
@github-actions github-actions Bot changed the title chore: sync upstream apprise version to v1.13.0 chore: sync upstream apprise version to v1.13.1 Aug 31, 2026
@elibosley
Eli Bosley (elibosley) force-pushed the chore/sync-upstream-version branch from faacdaa to 9e7953a Compare August 31, 2026 15:45
@elibosley Eli Bosley (elibosley) changed the title chore: sync upstream apprise version to v1.13.1 feat: restore provider parity with upstream apprise v1.13.0 Aug 31, 2026
Purpose:
- Align Pinglet schema input metadata with upstream Apprise.

Before:
- Pinglet omitted the default fullpath value and empty badges/data maps.

Problem:
- Schema input parity failed for pinglet and pinglets.

New behavior:
- Report fullpath as / and include empty badges and data maps.

Implementation:
- Extend the existing schema fallback tables for both Pinglet schemes.
@elibosley
Eli Bosley (elibosley) force-pushed the chore/sync-upstream-version branch from 9e7953a to 5500506 Compare August 31, 2026 15:48
Purpose:
- Make Pingram golden fixtures reproducible across Python processes.

Before:
- Pingram payload keys were serialized in Python set iteration order.

Problem:
- Different PYTHONHASHSEED values made the golden update check fail intermittently.

New behavior:
- Pingram JSON object keys are canonicalized before the fixture is written.

Implementation:
- Add an opt-in manifest flag, preserve arrays and values, and regenerate the Pingram golden fixture.
@elibosley
Eli Bosley (elibosley) merged commit ba3d984 into main Aug 31, 2026
27 checks passed
@elibosley
Eli Bosley (elibosley) deleted the chore/sync-upstream-version branch August 31, 2026 16:30
@knope-bot knope-bot Bot mentioned this pull request Aug 31, 2026
Eli Bosley (elibosley) added a commit that referenced this pull request Aug 31, 2026
## Summary

- Port Lauther and Signalgrid from upstream Apprise v1.13.1.
- Allow periods in Pingram JWT-style API keys.
- Correct the Matrix API version label and align the compatibility
version and versioned request fixtures.

## Why This Exists

PR #96 brought the Go port through upstream v1.13.0. This follow-up
isolates the remaining code-relevant changes from upstream v1.13.1.

## Resolution

The new providers are registered with the target and parity registries,
validate their upstream URL forms, and reproduce the upstream request
shapes. Signalgrid sends one request per channel and keeps processing
later channels after an earlier failure. Lauther drops attachments when
a message body is present, matching upstream behavior.

The generated enforcement tables and overflow limits now include both
providers. Pingram accepts JWT-style API keys containing periods, and
the compatibility version is 1.13.1.

## Reviewer Considerations

- New provider traffic is covered by request goldens and Python-vs-Go
sequence parity.
- Lauther priority parsing checks the `lowest`/`low` prefix overlap and
rejects out-of-range numeric values.
- The latest commit restructures the intentional nonnumeric-priority
fallback for the repository lint rule without changing its behavior.
- Attachment-only sends remain unsupported for the new providers, while
body-plus-attachment sends preserve the upstream drop behavior.
- Python-only packaging, documentation, logging, and memory-handle
changes are intentionally not ported because they have no Go runtime
equivalent.

## Verification

- Focused Lauther, Signalgrid, and Pingram golden/request parity:
passed.
- Full provider golden/request parity: passed.
- Schema input/detail and generated enforcement-table parity: passed.
- Golden consistency check: passed.
- `GOCACHE=$PWD/.gocache go test ./... -count=1`: passed.
- `GOCACHE=$PWD/.gocache go vet ./...`: passed.
- `git diff --check`: passed.

## Risk

Risk is low. The changes are isolated to two new request paths, two
small upstream metadata corrections, generated tables, and parity
fixtures. Tests use the existing local capture harness, so live service
acceptance remains the only untested external dependency.


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added Lauther notification support, including priorities and optional
notification metadata.
* Added SignalGrid notifications with single- and multi-channel delivery
and critical alerts.
* **Improvements**
  * Pingram API keys now support periods, including JWT-style keys.
  * Corrected the Matrix API version label.
  * Added provider request-size and title limits.
* **Compatibility**
* Updated compatibility metadata and supported provider request fixtures
to version 1.13.1.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Eli Bosley (elibosley) pushed a commit that referenced this pull request Sep 1, 2026
> [!IMPORTANT]
> Merging this pull request will create this release

## Features

- restore provider parity with upstream apprise v1.13.0 (#96)
- port upstream Apprise v1.13.1 fixes (#98)

Co-authored-by: knope-bot[bot] <152252888+knope-bot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant