mirror of
https://github.com/beshu-tech/deltaglider.git
synced 2026-05-24 07:46:54 +02:00
v6.2.0: deprecate Python deltaglider in favor of deltaglider_proxy (Rust) (#9)
The Rust `deltaglider_proxy` ships proxy + CLI + UI in one binary with a byte-identical wire format. Maintaining both has been a duplication tax (metadata-namespace fix v6.1.2 had to land twice). This release is the final feature release; security/bug fixes stop here. What this commit does: - CLI: every invocation prints a deprecation notice to stderr pointing at github.com/beshu-tech/deltaglider_proxy with a one-line migration alias (`alias dg='deltaglider_proxy s3'`). Banner prints once per process; suppress via DG_SUPPRESS_DEPRECATION=1 for CI that hasn't migrated yet. - README: prominent deprecation banner at the top with the migration command and the archive-timing notice (~1 week after v6.2.0 ships). - pyproject.toml: description prefixed with "DEPRECATED" so PyPI search results show the warning. Classifier moved Beta -> Inactive. - CHANGELOG: v6.2.0 entry under "Deprecated" documenting the migration path + archive plan, preserving the carried-forward Fixed/Changed/ Added items from Unreleased. Repo archive timing: Maintainer will archive ~1 week after v6.2.0 hits PyPI to give users a window to see the stderr notice on their next update. PyPI installs continue to work indefinitely. No behaviour changes to the wire format, the CLI surface, or the metadata schema. Existing buckets remain readable forever. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+32
-2
@@ -5,9 +5,39 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
## [6.2.0] - 2026-05-22 — Final release; project deprecated
|
||||
|
||||
### Fixed
|
||||
### Deprecated
|
||||
- **The `deltaglider` Python package is deprecated as of this release.**
|
||||
The canonical implementation is now
|
||||
[`deltaglider_proxy`](https://github.com/beshu-tech/deltaglider_proxy), a
|
||||
single Rust binary that ships the S3-compatible proxy, the `s3` CLI
|
||||
(every Python subcommand has a 1:1 Rust equivalent), and the web UI.
|
||||
Wire format is byte-identical: data written by this tool is readable
|
||||
by `deltaglider_proxy` and vice versa.
|
||||
- **Every CLI invocation now prints a deprecation banner to stderr.**
|
||||
Set `DG_SUPPRESS_DEPRECATION=1` to silence it for CI/automation that
|
||||
hasn't migrated yet.
|
||||
- **PyPI classifier bumped to `Development Status :: 7 - Inactive`.**
|
||||
- **Repo will be archived approximately one week after this release.**
|
||||
PyPI installs continue to work indefinitely (PyPI never deletes
|
||||
published versions), but no further updates or security fixes will
|
||||
land. File new issues against
|
||||
[`deltaglider_proxy`](https://github.com/beshu-tech/deltaglider_proxy/issues).
|
||||
|
||||
Migration:
|
||||
```bash
|
||||
brew install beshu-tech/tap/deltaglider_proxy
|
||||
# or grab a binary from
|
||||
# https://github.com/beshu-tech/deltaglider_proxy/releases
|
||||
|
||||
alias dg='deltaglider_proxy s3'
|
||||
dg cp foo s3://bucket/foo
|
||||
dg ls s3://bucket
|
||||
dg migrate s3://src s3://dest
|
||||
```
|
||||
|
||||
### Fixed (carried from Unreleased)
|
||||
- **Direct-upload metadata now uses the canonical `dg-*` dashed namespace.** Pre-fix, files routed through `_upload_direct` (non-delta-eligible extensions: `.sha1`, `.sha512`, etc.) wrote metadata with bare underscored keys (`original_name`, `file_sha256`, `compression`) while delta and reference uploads correctly used the namespaced form (`dg-original-name`, `dg-file-sha256`, `dg-compression`). Downstream consumers — most visibly the [DeltaGlider Proxy](https://github.com/beshu-tech/deltaglider_proxy) — only recognised the dashed form, so every `.sha1`/`.sha512` listing triggered a `PATHOLOGICAL | Missing/corrupt DG metadata` warning. Aligned the writer to the canonical scheme so new uploads stop producing log spam.
|
||||
|
||||
### Changed
|
||||
|
||||
@@ -1,5 +1,40 @@
|
||||
# DeltaGlider
|
||||
|
||||
> ## ⚠️ DEPRECATED — use [`deltaglider_proxy`](https://github.com/beshu-tech/deltaglider_proxy)
|
||||
>
|
||||
> This Python package is **deprecated as of v6.2.0** (this is the last
|
||||
> feature release). The canonical implementation is now
|
||||
> **[`deltaglider_proxy`](https://github.com/beshu-tech/deltaglider_proxy)** —
|
||||
> a single Rust binary that ships the S3-compatible proxy, the CLI, and
|
||||
> the web UI. Wire format is byte-identical: data written by this tool
|
||||
> is readable by `deltaglider_proxy` and vice versa.
|
||||
>
|
||||
> **Migration:**
|
||||
> ```bash
|
||||
> # Install the Rust binary (proxy + CLI + UI, one artifact):
|
||||
> brew install beshu-tech/tap/deltaglider_proxy
|
||||
> # or download from https://github.com/beshu-tech/deltaglider_proxy/releases
|
||||
>
|
||||
> # Optional alias for Python-style ergonomics:
|
||||
> alias dg='deltaglider_proxy s3'
|
||||
>
|
||||
> # Every Python subcommand has a 1:1 Rust equivalent:
|
||||
> deltaglider cp … → deltaglider_proxy s3 cp …
|
||||
> deltaglider migrate … → deltaglider_proxy s3 migrate …
|
||||
> deltaglider stats … → deltaglider_proxy s3 stats …
|
||||
> ```
|
||||
>
|
||||
> The Python repository will be **archived** approximately one week
|
||||
> after the v6.2.0 release. PyPI installs will continue to work
|
||||
> indefinitely (PyPI never deletes published versions), but no further
|
||||
> updates or security fixes will land here. Open issues and PRs should
|
||||
> go to [`deltaglider_proxy`](https://github.com/beshu-tech/deltaglider_proxy/issues).
|
||||
>
|
||||
> The stderr deprecation notice can be suppressed with
|
||||
> `DG_SUPPRESS_DEPRECATION=1` for CI that hasn't migrated yet.
|
||||
|
||||
---
|
||||
|
||||
[](https://pypi.org/project/deltaglider/)
|
||||
[](https://github.com/beshu-tech/deltaglider)
|
||||
[](LICENSE)
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
|
||||
[project]
|
||||
name = "deltaglider"
|
||||
dynamic = ["version"]
|
||||
description = "Store 4TB in 5GB: S3-compatible storage with 99.9% compression for versioned files"
|
||||
description = "DEPRECATED — migrate to deltaglider_proxy (Rust): https://github.com/beshu-tech/deltaglider_proxy . Store 4TB in 5GB: S3-compatible storage with 99.9% compression for versioned files."
|
||||
authors = [
|
||||
{name = "Beshu Tech", email = "info@beshu.tech"},
|
||||
]
|
||||
@@ -32,7 +32,7 @@ keywords = [
|
||||
"devops",
|
||||
]
|
||||
classifiers = [
|
||||
"Development Status :: 4 - Beta",
|
||||
"Development Status :: 7 - Inactive",
|
||||
"Intended Audience :: Developers",
|
||||
"Intended Audience :: System Administrators",
|
||||
"Operating System :: OS Independent",
|
||||
|
||||
@@ -142,6 +142,42 @@ def _version_callback(ctx: click.Context, param: click.Parameter, value: bool) -
|
||||
ctx.exit(0)
|
||||
|
||||
|
||||
# Deprecation banner shown at the top of every CLI invocation (stderr).
|
||||
# Suppressed by setting DG_SUPPRESS_DEPRECATION=1 in the environment — for
|
||||
# CI/automation that hasn't migrated yet and doesn't want noise on every
|
||||
# run. Print only once per process; some commands (e.g. `migrate`) invoke
|
||||
# `cli` callbacks transitively.
|
||||
_DEPRECATION_PRINTED = False
|
||||
|
||||
|
||||
def _print_deprecation_notice() -> None:
|
||||
global _DEPRECATION_PRINTED
|
||||
if _DEPRECATION_PRINTED:
|
||||
return
|
||||
_DEPRECATION_PRINTED = True
|
||||
if os.environ.get("DG_SUPPRESS_DEPRECATION") == "1":
|
||||
return
|
||||
click.echo(
|
||||
"═════════════════════════════════════════════════════════════════\n"
|
||||
" deltaglider (Python) is DEPRECATED as of v6.2.0.\n"
|
||||
"\n"
|
||||
" The canonical implementation is now `deltaglider_proxy`, a single\n"
|
||||
" Rust binary that ships the S3-compatible proxy, the CLI, and the\n"
|
||||
" web UI. Wire format is byte-identical with this tool.\n"
|
||||
"\n"
|
||||
" brew install beshu-tech/tap/deltaglider_proxy # or download:\n"
|
||||
" https://github.com/beshu-tech/deltaglider_proxy/releases\n"
|
||||
"\n"
|
||||
" Then:\n"
|
||||
" alias dg='deltaglider_proxy s3'\n"
|
||||
" dg cp s3://bucket/key .\n"
|
||||
"\n"
|
||||
" Suppress this notice: DG_SUPPRESS_DEPRECATION=1\n"
|
||||
"═════════════════════════════════════════════════════════════════",
|
||||
err=True,
|
||||
)
|
||||
|
||||
|
||||
@click.group()
|
||||
@click.option("--debug", is_flag=True, help="Enable debug logging")
|
||||
@click.option(
|
||||
@@ -154,9 +190,14 @@ def _version_callback(ctx: click.Context, param: click.Parameter, value: bool) -
|
||||
)
|
||||
@click.pass_context
|
||||
def cli(ctx: click.Context, debug: bool) -> None:
|
||||
"""DeltaGlider - Delta-aware S3 file storage wrapper."""
|
||||
"""DeltaGlider - Delta-aware S3 file storage wrapper.
|
||||
|
||||
DEPRECATED as of v6.2.0. Migrate to `deltaglider_proxy` — see
|
||||
https://github.com/beshu-tech/deltaglider_proxy
|
||||
"""
|
||||
import logging
|
||||
|
||||
_print_deprecation_notice()
|
||||
log_level = "DEBUG" if debug else os.environ.get("DG_LOG_LEVEL", "INFO")
|
||||
ctx.obj = create_service(log_level)
|
||||
logging.getLogger("deltaglider").info("deltaglider %s", __version__)
|
||||
|
||||
Reference in New Issue
Block a user