Commit Graph

37 Commits

Author SHA1 Message Date
dependabot[bot] bcfc1a92fb Bump pip from 26.0 to 26.1 (#69)
Bumps [pip](https://github.com/pypa/pip) from 26.0 to 26.1.
- [Changelog](https://github.com/pypa/pip/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/pip/compare/26.0...26.1)

---
updated-dependencies:
- dependency-name: pip
  dependency-version: '26.1'
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-07 08:46:46 +02:00
dependabot[bot] 5cf1d99e5b Bump astral-sh/setup-uv from 8.0.0 to 8.1.0 in the github-actions group (#68)
Bumps the github-actions group with 1 update: [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv).


Updates `astral-sh/setup-uv` from 8.0.0 to 8.1.0
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](https://github.com/astral-sh/setup-uv/compare/cec208311dfd045dd5311c1add060b2062131d57...08807647e7069bb48b6ef5acd8ec9567f424441b)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 8.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-28 16:56:49 +02:00
dependabot[bot] 8d6295151e Bump pytest from 8.4.2 to 9.0.3 (#67)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.4.2 to 9.0.3.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.4.2...9.0.3)

---
updated-dependencies:
- dependency-name: pytest
  dependency-version: 9.0.3
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-14 11:03:59 +02:00
Riccardo Schirone 111a6cd995 Validate rendered cloud-init templates against official schema (#63)
* Validate rendered cloud-init templates against official schema

Add jsonschema dev dependency and two new tests that render the Jinja2
cloud-init template (with and without Tailscale) then validate the
output against canonical/cloud-init's JSON schema. Tests skip gracefully
when the network is unavailable.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Pin cloud-init schema to 22.4.2 and load from local test data

Replace the network-fetched schema (from cloud-init main) with a local
copy pinned to version 22.4.2 — the oldest cloud-init shipped by any
currently supported DigitalOcean image (Debian 12 bookworm). This
addresses review feedback to avoid validating against a schema newer
than what target distros actually support, and removes the network
dependency so tests work offline.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 17:03:16 +02:00
Grzegorz Wierzowiecki b9dde90cc6 Auto power-on after resize and interactive disk resize option (#50)
* Auto power-on after resize and add 'nodisk' confirmation option

DigitalOcean leaves droplets powered off after resize, with no API flag
to auto-restart.  Previously, `dropkit resize` completed silently with
the droplet off — users had to discover this and run `dropkit on`
manually.

Now the resize command:

1. Automatically powers the droplet back on after resize completes,
   using the same pattern as `dropkit on` (with status polling and
   progress messages).

2. Offers a "nodisk" answer in the confirmation prompt when disk resize
   would increase disk size.  This supports the common workflow of
   temporarily scaling up CPU/RAM for heavy builds or benchmarks and
   scaling back down later — which requires NOT resizing the disk
   (disk resize is permanent and prevents future downsizing).

   The prompt changes from:
     Are you sure? [yes/no]
   to:
     Are you sure? [yes/nodisk/no]

   with a tip explaining the option.  The "nodisk" choice only appears
   when relevant (disk flag is true AND new size has larger disk).

Expected terminal experience after resize:

  ✓ Resize completed successfully

  Powering on droplet...
  ✓ Power on action started (ID: 3105287233)
  Waiting for droplet to power on...
  ✓ Droplet powered on successfully

  Droplet claude-code-box has been resized to s-2vcpu-4gb and is now active

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Make disk resize an interactive option when not specified via flag

Per reviewer feedback, instead of a "nodisk" escape hatch in the
confirmation prompt, make --disk/--no-disk a tri-state (True/False/None).
When neither flag is passed, the user is asked interactively — consistent
with how region, size, and image are already handled.

The interactive question only appears when the new size has a different
disk size.  It defaults to "no" (skip disk resize) since disk resize
is permanent and prevents future downsizing.

Flow with no flags:
  Changes:
    Disk:  25 GB → 80 GB (+55 GB)

  Disk resize is PERMANENT and cannot be undone.
  Skipping disk resize keeps the option to downsize later.
  Resize disk too? [yes/no] (no):

Flow with --no-disk: skips the question, shows "not resized"
Flow with --disk: skips the question, proceeds with disk resize

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Move interactive disk question before table display and drop isinstance guards

Address ret2libc's review feedback:
- Ask the interactive disk question BEFORE building the changes table,
  so the displayed disk row reflects the user's actual choice
- Remove unnecessary isinstance(disk_diff, int) guards since disk_diff
  is always int (computed with an isinstance ternary that defaults to 0)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 15:24:25 +02:00
dependabot[bot] 9159934207 Bump cryptography from 46.0.6 to 46.0.7 (#65)
Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.6 to 46.0.7.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/46.0.6...46.0.7)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-version: 46.0.7
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-09 09:04:49 +02:00
dependabot[bot] 220ab654c3 Bump astral-sh/setup-uv from 7.6.0 to 8.0.0 in the github-actions group (#64)
Bumps the github-actions group with 1 update: [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv).


Updates `astral-sh/setup-uv` from 7.6.0 to 8.0.0
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](https://github.com/astral-sh/setup-uv/compare/37802adc94f370d6bfd71619e3f0bf239e1f3b78...cec208311dfd045dd5311c1add060b2062131d57)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 8.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-07 17:46:32 +02:00
dm 2bf36e2304 Fix Docker APT source to work with both Ubuntu and Debian images (#59)
The cloud-init template hardcoded the Docker APT repo URL for Ubuntu,
which breaks on Debian images (e.g. Debian 13 "trixie"). Replace the
static apt.sources block with a runcmd script that detects the distro
via /etc/os-release and configures the correct Docker repo dynamically.
Also uses dpkg --print-architecture instead of hardcoding amd64.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 14:33:11 +02:00
dependabot[bot] 2b12d2fc01 Bump pygments from 2.19.2 to 2.20.0 (#62)
Bumps [pygments](https://github.com/pygments/pygments) from 2.19.2 to 2.20.0.
- [Release notes](https://github.com/pygments/pygments/releases)
- [Changelog](https://github.com/pygments/pygments/blob/master/CHANGES)
- [Commits](https://github.com/pygments/pygments/compare/2.19.2...2.20.0)

---
updated-dependencies:
- dependency-name: pygments
  dependency-version: 2.20.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-31 11:29:44 +02:00
dependabot[bot] e13abff17a Bump cryptography from 46.0.5 to 46.0.6 (#61)
Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.5 to 46.0.6.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/46.0.5...46.0.6)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-version: 46.0.6
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-30 09:04:59 +02:00
dependabot[bot] f42cbe8850 Bump astral-sh/setup-uv from 7.3.1 to 7.6.0 in the github-actions group (#55)
Bumps the github-actions group with 1 update: [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv).


Updates `astral-sh/setup-uv` from 7.3.1 to 7.6.0
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](https://github.com/astral-sh/setup-uv/compare/5a095e7a2014a4212f075830d4f7277575a9d098...37802adc94f370d6bfd71619e3f0bf239e1f3b78)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 7.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-27 16:57:35 +01:00
dependabot[bot] 1418ae9d83 Bump requests from 2.32.5 to 2.33.0 (#57)
Bumps [requests](https://github.com/psf/requests) from 2.32.5 to 2.33.0.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.32.5...v2.33.0)

---
updated-dependencies:
- dependency-name: requests
  dependency-version: 2.33.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-27 16:45:33 +01:00
Riccardo Schirone f6bb0e9aca Add E2E lifecycle test and CI workflow (#43)
* Add E2E lifecycle test for create/destroy workflow

  Bash script that exercises the full droplet lifecycle: create (no
  Tailscale), verify SSH config, run commands over SSH, destroy, and
  verify cleanup

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: dm <alexis.challande@trailofbits.com>
2026-03-24 14:57:58 +01:00
Grzegorz Wierzowiecki 44cb274bcc Show actual disk size instead of size spec in resize command (#51)
* Show actual disk size instead of size spec in resize command

After a --no-disk resize, `dropkit resize` showed the size spec's disk
(e.g. 80 GB for s-2vcpu-4gb) instead of the droplet's actual disk
(25 GB).  This is confusing for users planning temporary scale-ups —
they need to see their real disk to know if they can scale back down.

Read disk from `droplet["disk"]` (actual allocation) instead of
`droplet["size"]["disk"]` (what the size tier offers).  When the two
differ, show an inline hint: "25 GB (size spec: 80 GB, disk was not
resized)" so the situation is immediately clear.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Use actual droplet vcpus and memory, not just disk

Read all three resource fields from the droplet object directly
(droplet["vcpus"], droplet["memory"], droplet["disk"]) instead of
from the size spec (droplet["size"]["vcpus"], etc.).  After a
--no-disk resize these can diverge — the size spec reflects the
new tier while the droplet retains its original resources.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 11:45:47 +01:00
Grzegorz Wierzowiecki 3fc2da20ba Add monthly cost column to dropkit list output (#54)
Show per-resource and total monthly costs in the list/ls command so
engineers can see at a glance what their infrastructure is costing.

* Droplet cost from DO API size object (price_monthly field)
* Snapshot cost calculated at $0.06/GB/month (DO standard rate)
* Total cost shown in summary line at the bottom
* --cost/--no-cost flag to toggle the column (shown by default)

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 10:40:14 +01:00
Grzegorz Wierzowiecki b4df5c9d3a Offer to delete leftover hibernation snapshot on droplet destroy (#49)
* Offer to delete leftover hibernation snapshot on droplet destroy

When a user hibernates a droplet then wakes it up but declines to delete
the snapshot, the snapshot is left behind. If they later `dropkit destroy`
the droplet, the orphaned snapshot persists silently, incurring storage
costs. After destroying the droplet, check for a matching hibernation
snapshot and prompt the user to delete it.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Change snapshot deletion default to 'no' in destroy command

Respect the user's earlier choice: if they declined to delete the
snapshot during wakeup, defaulting to 'yes' here would second-guess
that decision. Default to 'no' so the prompt is informational rather
than presumptive.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 18:17:28 +01:00
Riccardo Schirone 212306c568 Update default Ubuntu image to 25.10 and extract slug constants (#48)
* Update default Ubuntu image from 25.04 to 25.10

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Extract default region/size/image slugs into constants

Replace duplicated hardcoded strings across config.py, main.py, and
tests with DEFAULT_REGION, DEFAULT_SIZE, and DEFAULT_IMAGE constants
defined in config.py.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 10:01:13 +01:00
dependabot[bot] eba4cfcfa3 Bump astral-sh/setup-uv from 7.3.0 to 7.3.1 in the github-actions group (#47)
Bumps the github-actions group with 1 update: [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv).


Updates `astral-sh/setup-uv` from 7.3.0 to 7.3.1
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](https://github.com/astral-sh/setup-uv/compare/eac588ad8def6316056a12d4907a9d4d84ff7a3b...5a095e7a2014a4212f075830d4f7277575a9d098)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 7.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-10 16:02:43 +01:00
Riccardo Schirone 0efeea52bb Add Jinja2 template validation test and pre-commit hook (#45)
* Remove escaped chars in comments

* Add Jinja2 template validation test and pre-commit hook

Catch template syntax errors early with a unit test that parses and
renders the default cloud-init template, and a pre-commit hook that
validates all templates in dropkit/templates/ on change.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 14:23:39 +01:00
Riccardo Schirone fde89df590 Fix Jinja2 escaping of zsh PROMPT in cloud-init template (#41)
* Fix Jinja2 escaping of zsh PROMPT in cloud-init template

The zsh PROMPT string contains `%` sequences that Jinja2 interprets
as template syntax. Wrap in {% raw %}...{% endraw %} to preserve
the literal prompt definition.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add a warning to the cloud-init jinja template

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:58:28 +01:00
dm 5982a3b55e Simplify CLAUDE.md project structure to directories only (#42)
Ran /claude-md-management:revise-claude-md to audit CLAUDE.md against
the actual codebase. The file-level tree was stale (missing lock.py,
ui.py, version_check.py and several test files). Replace with a
directory-only layout that won't drift when files are added.

Also document the --cov-fail-under=29 threshold from pyproject.toml.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-23 10:53:44 +01:00
William Tan c8fe3cd7c3 Show Tailscale IP in droplet list (#39)
Add a Tailscale IP column to `dropkit ls` output. The IP is read from
the SSH config — if the configured hostname is a Tailscale IP (100.x.x.x),
it's displayed; otherwise shows "—".

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 09:57:09 +01:00
William Tan b1a25d88d0 Fix Tailscale logout ordering to prevent SSH connectivity loss (#40)
Update both `prepare_for_hibernate` and `destroy` to switch SSH config
to the droplet's public IP before logging out of Tailscale. Previously,
the Tailscale logout happened first, which killed the Tailscale IP route
that SSH was using — causing the logout command itself to hang or fail.

Also adds `--verbose` flag to the `hibernate` command.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 09:50:04 +01:00
William Tan 5653454ea6 add some aliases, list => ls, destroy => rm (#38) 2026-02-20 08:46:16 +01:00
Akshith G dfa984831d Remove Zprezto/p10k and add Makefile help target (#37)
* Strip Zprezto and p10k from cloud-init shell config

* Add help as default Makefile target
2026-02-20 08:45:50 +01:00
dependabot[bot] e8bc422bcf Bump astral-sh/setup-uv from 7.2.0 to 7.3.0 in the github-actions group (#36)
Bumps the github-actions group with 1 update: [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv).


Updates `astral-sh/setup-uv` from 7.2.0 to 7.3.0
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](https://github.com/astral-sh/setup-uv/compare/61cb8a9741eeb8a550a1b8544337180c0fc8476b...eac588ad8def6316056a12d4907a9d4d84ff7a3b)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 7.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-17 15:59:41 +01:00
William Tan 77069f5516 Allow resizing hibernated droplets by modifying the size tag (#34)
* allow resizing hibernated droplets by modifying the size tag

* Prevent removal of protected tags (owner, firewall) in untag_resource

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 12:49:24 -05:00
William Tan b5c099840b Fix macOS Tailscale CLI discovery for App Store installs (#35)
* Fix macOS Tailscale CLI discovery for App Store installs

On macOS, Tailscale installed via the App Store places its CLI at
/Applications/Tailscale.app/Contents/MacOS/Tailscale, which is not in
PATH. Add find_tailscale_cli() helper that checks PATH first, then
falls back to the macOS App Store location on darwin.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Address PR feedback: better error message, remove excessive test

Distinguish "Tailscale not found" from "not running" when the local
check fails, so users know whether to install or start Tailscale.
Remove the overly comprehensive binary_vanishes race condition test.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 12:48:17 -05:00
Dan Guido 059fbf02db Rename Claude settings and update tobcloud references (#33)
- Rename .claude/settings.local.json to .claude/settings.json
- Add .claude/settings.local.json to .gitignore
- Replace uv run tobcloud with uv run dropkit in permissions

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 12:22:54 -05:00
dependabot[bot] 9dad1f0647 Bump cryptography from 46.0.3 to 46.0.5 (#32)
Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.3 to 46.0.5.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/46.0.3...46.0.5)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-version: 46.0.5
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-11 10:48:46 +01:00
Riccardo Schirone eae5bc1cf4 Generalize email domain handling in documentation and tests (#27)
* Generalize email domain handling in documentation and tests

- Add .worktrees/ to .gitignore for git worktree support
- Update _sanitize_email_for_username docstring to be domain-agnostic
- Change CLAUDE.md example from trailofbits.com to example.com
- Add tests for google.com, gmail.com, corporate, and plus addressing

The code already supported any email domain; this updates docs and
tests to reflect that capability.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Address PR review comments

- Remove redundant trailofbits.com regex, simplify to split("@")[0]
- Rename test to clarify backwards compatibility intent

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Dan Guido <dan@trailofbits.com>
2026-02-09 19:26:59 +01:00
dependabot[bot] 714de47762 Bump pip from 25.3 to 26.0 (#31)
Bumps [pip](https://github.com/pypa/pip) from 25.3 to 26.0.
- [Changelog](https://github.com/pypa/pip/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/pip/compare/25.3...26.0)

---
updated-dependencies:
- dependency-name: pip
  dependency-version: '26.0'
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-09 09:34:16 +01:00
Riccardo Schirone 9895dd9d5e Fix known_hosts removal for hashed entries (#28)
Replace manual file parsing with ssh-keygen -R which properly handles
both hashed (|1|...) and unhashed entries. macOS and many Linux systems
use HashKnownHosts by default, making the previous implementation unable
to remove entries.

Changes:
- Use ssh-keygen -R for each hostname instead of parsing the file
- Detect successful removal via "updated" in stdout
- Backup files are now .old (ssh-keygen default) instead of .bak
- Bracketed entries ([host]:port) now require exact format

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 15:58:05 -05:00
dm a875f3d430 Rename tobcloud references to dropkit in tests (#29)
* Rename tobcloud references to dropkit in tests

Update test data and test method names to use the new project name.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Format test_ssh_config.py

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 15:57:55 -05:00
dm 3b4db20ae6 Add CODEOWNERS file (#30)
Assigns @ret2libc as code owner for all files in the repository.

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 15:57:48 -05:00
dependabot[bot] 50a2661d98 Bump the github-actions group with 2 updates (#26)
Bumps the github-actions group with 2 updates: [actions/checkout](https://github.com/actions/checkout) and [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv).


Updates `actions/checkout` from 4.2.2 to 6.0.2
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/11bd71901bbe5b1630ceea73d27597364c9af683...de0fac2e4500dabe0009e67214ff5f5447ce83dd)

Updates `astral-sh/setup-uv` from 5.4.1 to 7.2.0
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](https://github.com/astral-sh/setup-uv/compare/0c5e2b8115b80b4c7c5ddf6ffdd634974642d182...61cb8a9741eeb8a550a1b8544337180c0fc8476b)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: astral-sh/setup-uv
  dependency-version: 7.2.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-29 21:55:35 -05:00
Dan Guido bc36073036 Initial commit 2026-01-29 21:53:58 -05:00