Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
3714c85
chore(deps): use h3x endpoint branch
eareimu May 19, 2026
4dd2c9d
chore: update h3x lock
eareimu May 19, 2026
866a057
chore: update h3x dependency lock
eareimu May 19, 2026
81562fe
chore: update h3x dependency
eareimu May 20, 2026
c577fc3
fix(ipc): set socketpair fds nonblocking
eareimu May 20, 2026
3a088e2
refactor: rename genmeta-ssh crate to dssh
eareimu May 22, 2026
709c9f2
feat(webtransport): add dssh stream manager
eareimu May 26, 2026
59ea7ec
fix(webtransport): adapt stream manager to h3x session api
eareimu May 27, 2026
0db6d2e
feat(webtransport): add dssh conversation helpers
eareimu May 27, 2026
b3ff9ad
feat(webtransport): add dssh connect helpers
eareimu May 27, 2026
2f47357
refactor(ipc): generalize manage stream adapter
eareimu May 27, 2026
d9fe38a
feat(webtransport): parameterize dssh connect path
eareimu May 27, 2026
6565a67
refactor(webtransport): make dssh transport always available
eareimu May 27, 2026
2a72fc0
refactor(forward): accept typed conversation streams
eareimu May 27, 2026
fa2fb70
refactor(webtransport): remove legacy ssh3 stream protocol
eareimu May 27, 2026
e1eafd2
chore: refresh https git dependencies
eareimu May 28, 2026
29fdcbb
chore: align dependency policy
eareimu Jun 2, 2026
c1ebb0a
refactor: remove legacy ssh3 examples and docker tests
eareimu Jun 2, 2026
0374cd2
refactor(ipc): use receiver-chosen fd transfer
eareimu Jun 2, 2026
9108fe0
fix(ipc): retain owned bridge tasks
eareimu Jun 2, 2026
ce1e12a
fix(webtransport): use reset stream API
eareimu Jun 3, 2026
e1c44bf
fix: remove ipc fd delivery cancellation waits
eareimu Jun 5, 2026
5a1c0b7
fix: prepare dssh ipc socket before fd delivery
eareimu Jun 5, 2026
b3cac96
fix: update h3x hyper request error path
eareimu Jun 6, 2026
2ac1d51
refactor: make conversation own webtransport session
eareimu Jun 7, 2026
d5a193a
fix: return after remote session close
eareimu Jun 8, 2026
505c6d1
fix: add h3x dependency version
eareimu Jun 9, 2026
72dacb7
test: update webtransport session mocks
eareimu Jun 13, 2026
831a0f8
refactor: unify dssh test session fixture
eareimu Jun 13, 2026
a543caa
ci: add dssh release workflows
eareimu Jun 14, 2026
11d3046
ci: install pam development libraries
eareimu Jun 14, 2026
7a880e5
fix: align h3x dependency version
eareimu Jun 14, 2026
1d452e6
fix: drain dssh session output after exit notice
eareimu Jun 14, 2026
78c4c32
fix: align dssh session and forwarding semantics
eareimu Jun 14, 2026
1bf39c7
release: prepare v0.3.0
eareimu Jun 15, 2026
0a74612
release: converge h3x tag and gate forward helpers
eareimu Jun 15, 2026
db17345
release: converge registry deps and gate crates publish
eareimu Jun 15, 2026
27295b1
ci: gate dry-run by registry publish eligibility
eareimu Jun 15, 2026
425347f
refactor: rename dssh crate to dshell
eareimu Jun 15, 2026
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
45 changes: 45 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: CI

on:
push:
branches: [main]
pull_request:
branches: [main]

env:
CARGO_TERM_COLOR: always

jobs:
fmt:
name: Format
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- run: cargo fmt --check

clippy:
name: Clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2
- run: cargo clippy --all-targets --all-features -- -D warnings

test:
name: Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- name: Install PAM development libraries
run: |
sudo apt-get update
sudo apt-get install --yes libpam0g-dev
- uses: Swatinem/rust-cache@v2
- run: cargo test --all-features
116 changes: 116 additions & 0 deletions .github/workflows/publish-crates.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
name: Publish crates.io

on:
pull_request:
workflow_dispatch:
push:
branches:
- main
tags:
- "v*"

env:
CARGO_TERM_COLOR: always

jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write

steps:
- uses: actions/checkout@v4

- name: Install Rust stable toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1

- name: Install PAM development libraries
run: |
sudo apt-get update
sudo apt-get install --yes libpam0g-dev

- name: Check formatting
run: cargo fmt --check

- name: Run clippy
run: cargo clippy --all-targets --all-features -- -D warnings

- name: Run tests
run: cargo test --all-features

- name: Authenticate to crates.io
if: github.ref_type == 'tag' && startsWith(github.ref_name, 'v')
uses: rust-lang/crates-io-auth-action@v1
id: auth

- name: Release dshell crate
shell: bash
env:
CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}
run: |
set -euo pipefail

if [[ "${GITHUB_REF_TYPE}" == "tag" && "${GITHUB_REF_NAME}" == v* ]]; then
mode=publish
else
mode=dry-run
fi

package_name=dshell
package_version="$(cargo metadata --no-deps --format-version 1 | python3 -c 'import json, sys; print(json.load(sys.stdin)["packages"][0]["version"])')"

crate_state="$(
python3 - <<'PY' "$package_name" "$package_version"
import sys
import urllib.error
import urllib.request

name, version = sys.argv[1], sys.argv[2]
headers = {"User-Agent": "genmeta dshell publish workflow"}
version_url = f"https://crates.io/api/v1/crates/{name}/{version}"
version_request = urllib.request.Request(version_url, headers=headers)
try:
with urllib.request.urlopen(version_request, timeout=20) as response:
if response.status == 200:
print("published_version")
else:
raise SystemExit(f"unexpected crates.io status for {name} {version}: {response.status}")
except urllib.error.HTTPError as error:
if error.code == 404:
crate_url = f"https://crates.io/api/v1/crates/{name}"
crate_request = urllib.request.Request(crate_url, headers=headers)
try:
with urllib.request.urlopen(crate_request, timeout=20) as response:
if response.status == 200:
print("missing_version")
else:
raise SystemExit(f"unexpected crates.io crate status for {name}: {response.status}")
except urllib.error.HTTPError as crate_error:
if crate_error.code == 404:
print("missing_crate")
else:
raise
else:
raise
PY
)"

if [[ "$crate_state" == "published_version" ]]; then
echo "skip $package_name $package_version (already on crates.io)"
exit 0
fi

if [[ "$crate_state" == "missing_crate" ]]; then
echo "skip $package_name $package_version (crate not yet initialized on crates.io)"
exit 0
fi

if [[ "$mode" == "dry-run" ]]; then
echo "dry-run $package_name $package_version"
cargo publish --dry-run
exit 0
fi

echo "publish $package_name $package_version"
cargo publish
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/target
Cargo.lock
.sisyphus/
.worklog.md
plan.md
plan.md
Loading
Loading