aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* ship-deploy: trigger on "ship it" and common deploy phrasesClawd7 days1-1/+1
| | | | Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* README: punchy openerClawd7 days1-1/+3
| | | | Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* README: broaden appeal, drop jargon in taglineClawd7 days1-1/+1
| | | | Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* README: remove impl reference in how it works blurbClawd7 days1-1/+1
| | | | Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* README: cleaner copy, drop internal history referencesClawd7 days1-33/+26
| | | | Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Rewrite README for skills-based approachClawd7 days1-118/+56
| | | | | | | | Replaces outdated v1 git-push/CLI docs with accurate description of the Claude skills system. Covers install, quick start, config format, server layout, and skill reference table. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Add setup.sh companion script for ship-setup skillClawd7 days2-62/+178
| | | | | | | | | | | Extracts server provisioning logic into a proper bash script rather than ad-hoc SSH commands in skill prose. Mirrors the behavior of the original `ship host init` Go CLI code exactly — Caddy install, directory structure, Caddyfile config, all idempotent. Updates SKILL.md to reference the script instead of inlining commands. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Add ship-* Claude skills and planClawd7 days9-0/+1109
| | | | | | | | | | | | | | | | | | | | Introduces a skills/ directory with 8 Claude skills that reimagine ship as a set of composable, human-driven deployment tools backed by Claude's reasoning rather than a rigid CLI. Skills: - ship-setup: one-time VPS config, saves host to ~/.config/ship/config.json - ship-status: derives live state from server, no local state file - ship-env: read/write env vars with merge semantics, never overwrites - ship-binary: deploy Go binaries with SQLite backup, correct restart behavior - ship-caddy: manage per-app Caddyfile with validate-before-reload - ship-service: systemd management and log inspection - ship-static: rsync static sites with SPA routing support - ship-deploy: orchestration runbook tying the others together Also adds SKILLS_PLAN.md documenting the architecture and rationale. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Clean up: drop v2 suffix, remove webuiClawd2026-02-196-440/+0
|
* fix: pass container port (not host port) as PORT env varClawd2026-02-181-5/+8
| | | | | | Docker deployments were passing the host port as PORT to the container, but the port mapping routes traffic to container port. This caused apps that read PORT from env to listen on the wrong port inside the container.
* fix: port allocator scans existing ports to avoid collisionsClawd2026-02-181-8/+2
| | | | | | | - Collapse multi-line allocScript to single line (fixes SSH+sudo mangling) - Scan /etc/ship/ports/* to find highest port in use - Use max(next_port, highest_used + 1) to prevent collisions - Fixes issue where stale/missing next_port caused port conflicts
* Remove remaining planning docs (SHIP_V2.md, SPEC.md)Clawd2026-02-172-739/+0
|
* Clean up obsolete docs and binariesClawd2026-02-176-686/+1
| | | | | | | | | Removed: - GIT_AND_GOMOD_PLAN.md (old planning) - PLAN_v0.2.0.md (old planning) - PROGRESS.md (v2 progress tracking, complete) - TODO.md (all items fixed) - ship-new binary (added to gitignore)
* Merge agent-mode: v2 rewrite completeClawd2026-02-1740-2828/+2919
|\ | | | | | | | | | | | | | | | | | | - Removed all v1 code (-2800 lines) - Simplified state to just default_host + base_domain - Atomic port allocation via flock - --container-port flag for Docker - Custom domains shown in ship list - Caddyfiles preserved on redeploy - JSON output by default, --pretty for humans
| * Mark custom Caddyfile support as fixedagent-modeClawd2026-02-171-10/+5
| |
| * Preserve existing Caddyfiles on redeployClawd2026-02-172-35/+43
| | | | | | | | | | | | | | 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.
| * Mark custom domains in list as fixedClawd2026-02-171-3/+4
| |
| * Show custom domains in ship list and statusClawd2026-02-172-3/+24
| | | | | | | | | | Read actual domain from Caddyfile instead of assuming subdomain. Works for both apps and static sites.
| * Update TODO: mark port collision and container port as fixedClawd2026-02-171-27/+15
| |
| * Fix port collision bug, add --container-port flagClawd2026-02-175-26/+40
| | | | | | | | | | | | | | | | | | | | | | | | 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/<name> 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.
| * Mark TODO #2 as fixedClawd2026-02-171-19/+6
| |
| * Remove v1 code, simplify state to just base_domainClawd2026-02-1726-2837/+9
| | | | | | | | | | | | | | | | | | - 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
| * Update TODO #2: simplify local state, remove v1 cruftClawd2026-02-171-4/+8
| |
| * Add TODO: support custom Caddyfile in repoClawd2026-02-161-0/+14
| |
| * Add TODOs: show custom domains in list, fix port collision bugClawd2026-02-161-0/+14
| |
| * Add TODO.md with known limitationsClawd2026-02-161-0/+41
| | | | | | | | | | - Docker container port hardcoded to 80 - ship host init doesn't create local state.json
| * Fix Docker port mapping: map host port to container port 80Clawd2026-02-161-1/+1
| | | | | | | | | | Most Docker web containers (nginx, etc.) listen on port 80 internally. The previous mapping assumed the container listened on the allocated port.
| * Add --domain flag to v2 CLI flagsClawd2026-02-162-0/+1
| |
| * Add --domain flag support to v2 deployClawd2026-02-162-2/+9
| | | | | | | | | | Allows specifying a custom domain instead of using the auto-generated subdomain pattern. Usage: ship . --domain bdw.to
| * Add source link to website footerClawd2026-02-161-0/+1
| |
| * Remove .claude from tracking, update .gitignoreClawd2026-02-162-18/+3
| |
| * Add website/ directory with landing pageClawd2026-02-162-0/+220
| |
| * feat: auto-generate SSH key and guide auth setup in host initClawd2026-02-151-2/+82
| | | | | | | | | | | | - 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
| * fix: set ownership before rsync for Docker deployClawd2026-02-151-0/+7
| |
| * fix: split sudo commands to fix ownership for rsync uploadClawd2026-02-151-2/+8
| |
| * fix: Caddy install permission issue with gpg dearmorClawd2026-02-151-3/+4
| |
| * fix: make ErrorResponse implement error interface for v1 compatClawd2026-02-151-0/+3
| |
| * fix: resolve build errors with v1 codeClawd2026-02-152-13/+10
| | | | | | | | | | | | | | - Rename validateName to validateNameV2 to avoid conflict - Fix host status to print JSON directly (remove unused resp) Builds successfully now
| * docs: update progress with all commit hashesClawd2026-02-151-0/+4
| |
| * feat(v2): wire up v2 as default interfaceClawd2026-02-152-4/+20
| | | | | | | | | | | | | | | | - main.go: v2 JSON interface is now default - Set SHIP_V1=1 to use legacy human-formatted output - initV2() called before rootV2Cmd.Execute() v2 rebuild complete - ready for testing
| * feat(v2): implement list, status, logs, remove commandsClawd2026-02-153-48/+351
| | | | | | | | | | | | | | | | | | | | | | - commands_v2.go: all subcommand implementations - list: enumerates deploys from /etc/ship/ports and /var/www - status: shows deploy details (type, port, running, TTL) - logs: fetches journalctl logs (or Caddy logs for static) - remove: full cleanup of all artifacts (service, caddy, files, docker) - All commands output JSON with proper error codes All core v2 commands now implemented
| * feat(v2): implement ship host init with JSON outputClawd2026-02-154-27/+380
| | | | | | | | | | | | | | | | | | | | | | | | - host_v2.go: full host initialization with JSON responses - Installs Caddy, Docker on Ubuntu/Debian - Creates /etc/ship/{env,ports,ttl} directories - Installs TTL cleanup timer (hourly systemd timer) - Cleanup script removes expired deploys completely - Preserves git deploy setup functionality (optional) - Added ErrInvalidArgs error code Critical 'host init' functionality preserved for v2
| * feat(v2): implement deploy flowsClawd2026-02-153-52/+376
| | | | | | | | | | | | | | | | | | | | | | | | - deploy_impl_v2.go: full implementations for static, docker, binary deploys - Static: rsync + Caddyfile generation + reload - Docker: rsync + build + systemd unit + env file + Caddyfile - Binary: scp + systemd unit + service user + env file + Caddyfile - Port allocation: server-side in /etc/ship/ports/ - TTL: server-side in /etc/ship/ttl/ - Health checks: HTTP GET with 30s retry loop All deploy types now functional (pending Go compilation test)
| * feat(v2): add CLI structure and deploy orchestrationClawd2026-02-153-10/+419
| | | | | | | | | | | | | | | | | | | | | | - cmd/ship/root_v2.go: new CLI with ship [PATH] as primary command - cmd/ship/deploy_v2.go: deploy orchestration with context struct - Placeholder implementations for static/docker/binary deploys - Placeholder subcommands (list, status, logs, remove, host) - Support for --name, --health, --ttl, --env flags - SHIP_PRETTY env var support Next: implement actual deploy flows
| * feat(v2): add output and detect packagesClawd2026-02-153-0/+358
| | | | | | | | | | | | | | | | - internal/output: JSON response types, error codes, exit codes, pretty output - internal/detect: auto-detection of project type (static/docker/binary) - PROGRESS.md: track rebuild progress Foundation for agent-first JSON interface per SPEC.md
| * docs: add comprehensive technical specificationClawd2026-02-151-0/+499
| |
| * docs: rewrite as agent-first tool, humans are afterthoughtClawd2026-02-151-172/+147
| |
| * docs: rename to SHIP_V2.md, JSON output is default not a flagClawd2026-02-152-34/+46
| |
| * docs: add agent mode design documentClawd2026-02-151-0/+271
|/
* fix: use project directory for static site .ship/ folderClawd2026-02-151-4/+7
| | | | | | | | | | Previously, deployStatic() checked for .ship/Caddyfile in the current working directory instead of the project directory (opts.Dir). This caused stale Caddyfiles from previous deployments to be reused when deploying multiple static sites from the same working directory. Now .ship/ is created inside the project directory, so each site maintains its own configuration.