<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ship.git/cmd, branch agent-mode</title>
<subtitle>Deploy to your VPS in one command</subtitle>
<id>https://code.northwest.io/ship.git/atom?h=agent-mode</id>
<link rel='self' href='https://code.northwest.io/ship.git/atom?h=agent-mode'/>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/'/>
<updated>2026-02-17T16:09:34+00:00</updated>
<entry>
<title>Preserve existing Caddyfiles on redeploy</title>
<updated>2026-02-17T16:09:34+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-17T16:09:34+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=b976b147e2e5e34b940c69fee7d7c121e12cd9a8'/>
<id>urn:sha1:b976b147e2e5e34b940c69fee7d7c121e12cd9a8</id>
<content type='text'>
Don't overwrite Caddyfile if it already exists. This preserves
manual customizations (NIP-05 routes, custom headers, etc.).

First deploy generates Caddyfile, subsequent deploys leave it alone.
</content>
</entry>
<entry>
<title>Show custom domains in ship list and status</title>
<updated>2026-02-17T16:06:00+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-17T16:06:00+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=c1b0bb8b149a251a5802557a8d8ab649170a83ad'/>
<id>urn:sha1:c1b0bb8b149a251a5802557a8d8ab649170a83ad</id>
<content type='text'>
Read actual domain from Caddyfile instead of assuming subdomain.
Works for both apps and static sites.
</content>
</entry>
<entry>
<title>Fix port collision bug, add --container-port flag</title>
<updated>2026-02-17T15:59:50+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-17T15:59:50+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=d97bb6f53eefd2139115d39bca7e17d565222472'/>
<id>urn:sha1:d97bb6f53eefd2139115d39bca7e17d565222472</id>
<content type='text'>
Port allocation:
- Use atomic flock-based allocation via /etc/ship/next_port
- Prevents race conditions when multiple deploys run concurrently
- Each app still gets its port stored in /etc/ship/ports/&lt;name&gt;

Docker container port:
- Add --container-port flag (default 80)
- Template now uses {{.ContainerPort}} instead of hardcoded 80
- Supports containers that listen on 8080, 3000, etc.
</content>
</entry>
<entry>
<title>Remove v1 code, simplify state to just base_domain</title>
<updated>2026-02-17T15:54:26+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-17T15:54:26+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=6b2c04728cd914f27ae62c1df0bf5df24ac9a628'/>
<id>urn:sha1:6b2c04728cd914f27ae62c1df0bf5df24ac9a628</id>
<content type='text'>
- Delete all v1 commands (deploy, init, list, status, remove, etc.)
- Delete v1 env/ and host/ subcommand directories
- Simplify state.go: remove NextPort, Apps, AllocatePort, etc.
- Local state now only tracks default_host + base_domain per host
- Ports and deploys are tracked on the server (/etc/ship/ports/)
- host init now creates minimal state.json
</content>
</entry>
<entry>
<title>Add --domain flag to v2 CLI flags</title>
<updated>2026-02-17T01:03:35+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-17T01:03:35+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=1abcef3197371c47c67c9238ab8ba9b185355d94'/>
<id>urn:sha1:1abcef3197371c47c67c9238ab8ba9b185355d94</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add --domain flag support to v2 deploy</title>
<updated>2026-02-17T01:02:36+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-17T01:02:36+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=a48a911cc29ec7571ac07008bea3801745d5c00d'/>
<id>urn:sha1:a48a911cc29ec7571ac07008bea3801745d5c00d</id>
<content type='text'>
Allows specifying a custom domain instead of using the auto-generated
subdomain pattern. Usage: ship . --domain bdw.to
</content>
</entry>
<entry>
<title>feat: auto-generate SSH key and guide auth setup in host init</title>
<updated>2026-02-16T06:03:09+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-16T06:03:09+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=29ad8c336116c01b10cacdd72b36e31cd3aa08f7'/>
<id>urn:sha1:29ad8c336116c01b10cacdd72b36e31cd3aa08f7</id>
<content type='text'>
- ensureSSHKey() generates ed25519 key if none exists
- If SSH auth fails, returns JSON with pubkey and setup instructions
- Provides ssh-copy-id command for easy key deployment
</content>
</entry>
<entry>
<title>fix: set ownership before rsync for Docker deploy</title>
<updated>2026-02-16T03:11:12+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-16T03:11:12+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=385577a14de35dcf70996ccfee6508d54e090c16'/>
<id>urn:sha1:385577a14de35dcf70996ccfee6508d54e090c16</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix: split sudo commands to fix ownership for rsync upload</title>
<updated>2026-02-16T03:09:20+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-16T03:09:20+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=e2c65318328d435d34d73a8a974de70762b40ae7'/>
<id>urn:sha1:e2c65318328d435d34d73a8a974de70762b40ae7</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix: Caddy install permission issue with gpg dearmor</title>
<updated>2026-02-16T03:07:39+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-16T03:07:39+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/ship.git/commit/?id=016d41c60b56c6f07a1963811c295f917bf278dd'/>
<id>urn:sha1:016d41c60b56c6f07a1963811c295f917bf278dd</id>
<content type='text'>
</content>
</entry>
</feed>
