Files
93b79d2103 feat(v5): prepare the Rust DDNS development line (#728)
* feat(rust): add parallel DDNS MVP

Add a synchronous Rust client with compatible configuration, IP discovery, caching, and the first four providers.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): address review compatibility gaps

Handle DNSPod failures safely, accept Python-compatible log thresholds, document Rust regex limits, and tolerate non-Unicode environment entries.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): preserve generated provider options

Serialize endpoint overrides and --extra.* values so generated configuration files reproduce accepted CLI settings.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): align provider and config behavior

Keep provider lookup parameters scoped, continue DNSPod zone discovery safely, and match Python configuration and regex semantics.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): harden credentials and CI scoping

Redact provider credentials, align remaining config/cache behavior, and avoid running language-specific builds for unrelated changes while preserving required checks.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): preserve authenticated URL compatibility

Translate embedded URL credentials to Basic auth, align generated TTL defaults, and run Rust checks for the abc PR target.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): isolate caches and aggregate safe errors

Keep Python cache files untouched, redact retained failures, and continue multi-provider runs after log setup errors.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* feat(rust): complete providers and distribution

Port the remaining DNS providers and aliases, add protected native/container release workflows, and provide a checksum-aware Rust installer.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* docs(agents): register Rust development guide

Keep the generated project structure contract aligned with the new bilingual Rust documentation.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): address review feedback

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* refactor(rust): simplify core design

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* refactor(rust): use typed borrowed core

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* refactor(rust): streamline transport state

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* test(rust): share provider fixtures

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* test(rust): expand end-to-end coverage

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): simplify provider modes and lookup handling

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* chore(v5): prepare isolated Rust development line

Keep Rust changes on the v5 integration line and prepare artifacts without publishing or changing the stable Python entrypoint.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): redact credential-bearing URL paths

Hide non-root URL paths in diagnostics and omit URI text from transport errors while preserving actual request URLs.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): fully mask credential values

Replace credential prefixes and suffixes with a constant opaque marker while retaining raw and percent-encoded masking.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): correct provider signing and zone lookup errors

Use RFC3986 canonical queries for Huawei signing. Distinguish documented NameSilo and ClouDNS zone misses from authentication, HTTP, and provider failures. Add offline regressions and matching V5 documentation.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): preserve address spelling for regex rules

Match regex rules against the extracted address text without IPv6 canonicalization, while retaining strict IpAddr validation and parsed return values. Cover original spelling, invalid candidates, family filtering, and matching boundaries.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): reject unusable local IPs and malformed record lists

Filter loopback and unspecified addresses before local indexing. Reject malformed ClouDNS, Huawei, and NameSilo record lookups without creating duplicates while retaining valid empty responses. Isolate installer test globals and cleanup traps in subshells.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): keep DNS.COM signatures out of diagnostics

Use the sensitive request path for signed DNS.COM bodies, omit raw HTTP and JSON failure responses, and redact signatures echoed in API messages. Preserve request signing and ordinary HTTP diagnostics with offline regressions.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): mask form credentials and validate upgrades before replacement

Reuse the form encoder for credential redaction and smoke-test temporary installer binaries before replacing a working installation. Cover rejected upgrades and existing trailing-period IP parsing without changing address extraction.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): preserve provider updates and V5 preparation contracts

Send Huawei canonical query bytes unchanged, accept nonempty single-label domains at configuration ingress, and honor AliDNS/ESA extras on unchanged addresses. Require V5 prereleases in artifact preparation with offline regression coverage.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(rust): accept separated negative CLI integers

Recognize negative integer tokens as required scalar values without consuming option names. Preserve per-option range validation and cover log-level aliases, inline parity, and real CLI execution.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(ci): use architecture names for Rust QEMU setup

Install only the arm64 emulator on the amd64 OCI preparation runner while preserving linux/amd64,linux/arm64 for Buildx. Strengthen offline workflow contracts to distinguish the two inputs.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-09-12 00:39:34 +08:00

60 lines
1.4 KiB
YAML

name: Build Documentation
on:
push:
branches: [ master, main, v5 ]
paths:
- 'docs/**'
- 'README.md'
- 'README.en.md'
- 'ddns/config/field-model.json'
- 'schema/**'
- 'tests/config/**'
- '.github/workflows/build-docs.yml'
pull_request:
branches: [ master, main, v5 ]
paths:
- 'docs/**'
- 'README.md'
- 'README.en.md'
- 'ddns/config/field-model.json'
- '.github/workflows/build-docs.yml'
workflow_dispatch:
permissions:
pages: write
id-token: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v7
- name: Setup Node.js
uses: actions/setup-node@v7
with:
node-version: '24'
cache: 'npm'
cache-dependency-path: 'docs/package.json'
- name: Install dependencies
working-directory: docs
run: npm install
- name: Build documentation
working-directory: docs
run: npm run build
- name: Upload artifact
uses: actions/upload-pages-artifact@v5
with:
path: docs/.vitepress/dist/
- name: Deploy to GitHub Pages
if: (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main')
id: deployment
uses: actions/deploy-pages@v5