54 Commits

Author SHA1 Message Date
4a9c331ef9
Fix INSERT INTO _migrations ordering in create and fixup
The create subcommand generated .up.sql files with INSERT INTO
_migrations as the FIRST statement, before the actual DDL. If the
DDL fails, the migration is incorrectly marked as applied. Move the
INSERT to be the LAST statement, matching how .down.sql already puts
DELETE FROM _migrations last.

Also fix the automatic fixup logic to append (not prepend) missing
INSERT statements to existing .up.sql files.

Fixes #86
2026-03-30 15:58:21 -06:00
87b666ffd3
chore(cmd/sql-migrate): add .goreleaser.yaml 2026-03-28 17:16:40 -06:00
690cf90d67
chore(cmd/sql-migrate): add .goreleaser.yaml 2026-03-23 11:43:08 -06:00
1f61095873
feat(sql-migrate): add sync subcommand
Adds `sql-migrate sync` which outputs a shell script that refreshes
the local migrations.log from the DB by running _migrations.sql.
Uses `|| true` so a fresh DB with no _migrations table yields an
empty log (all migrations pending) rather than an error.

Usage:
  sql-migrate -d ./db/migrations sync | sh
  sql-migrate -d ./db/migrations up | sh
2026-03-23 11:42:23 -06:00
b50696f64d feat(sql-migrate): skip +-prefixed files in migrations directory (refs #68) 2026-03-23 11:39:49 -06:00
3487702bf7 fix(sql-migrate): use 6-digit zero-padded number in init migration filename (refs #68) 2026-03-23 11:39:49 -06:00
4895012d67 fix(sql-migrate): use portable SQL in _migrations table (closes #37) 2026-03-23 11:39:49 -06:00
a4cb1e3bfd
doc: clarify how to create users and tokens
Signed-off-by: AJ ONeal <aj@therootcompany.com>
2026-03-19 21:17:57 -06:00
516b23eac3
feat+ref(cmd/smsapid): add sms:* endpoints, csvauth, cli flags, etc 2026-03-03 03:11:26 -07:00
4bda5b4580
ref(cmd/auth-proxy): consolidate generic token logic in auth package 2026-03-03 03:08:27 -07:00
6e4f25ff5e
chore(release): add .goreleaser.yaml for auth-proxy 2026-03-01 01:20:48 -07:00
18eec1f5cb
chore(release): update .goreleaser.yaml for cmd/tcpfwd 2026-03-01 00:29:33 -07:00
fc9f070285
chore(cmd/tcpfwd): update .goreleaser.yaml for monorepo 2026-03-01 00:22:44 -07:00
115efc0afb
chore(cmd/tcpfwd): goreleaser init 2026-03-01 00:18:32 -07:00
0762e64857
chore(cmd/tcpfwd): add go.mod (for git-tag-based releases) 2026-02-27 23:50:37 -07:00
d30ceb004d
chore(cmd/tcpfwd): minor cleanup, add license, lint 2026-02-27 23:35:00 -07:00
3e4ce3ac91
ref(cmd/tcpfwd): extract waitWithTimeout to simplify shutdown block
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-27 22:52:07 -07:00
0d356c0b26
feat(cmd/tcpfwd): add description to version/help output
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-27 22:16:49 -07:00
f9e06f131b
ref(cmd/tcpfwd): simplify parseForward with strings.Cut
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-27 22:13:10 -07:00
3f16e89f5c
ref(cmd/tcpfwd): remove implicit time.Now() for testability
- connEntry.isIdle(now, threshold): caller supplies now instead of time.Since
- connRegistry.closeIdle(now, threshold): passes now through to isIdle
- trackingConn gains a clock func() time.Time field used in Read/Write
- handleConn takes clock func() time.Time; uses it to init lastRead/lastWrite
  and passes it to trackingConn
- Call sites in main pass time.Now or time.Now() explicitly

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-27 22:08:56 -07:00
89f6e04516
feat(cmd/tcpfwd): add graceful shutdown with idle connection tracking
On SIGINT/SIGTERM:
- Stop accepting new connections
- Close connections idle longer than --idle-timeout (default 5s),
  determined by LastRead/LastWrite timestamps tracked per connection pair
- Wait for active connections to drain up to --shutdown-timeout (default 30s)
- Force-close any remaining connections if the timeout is exceeded

Also switches isClosedConn to use errors.Is(err, net.ErrClosed) and
exits the accept loop cleanly when a listener is closed during shutdown.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-27 22:05:04 -07:00
b08525b024
feat(cmd/tcpfwd): add multi-forward positional args and version/help
Accept any number of local-port:remote-host:remote-port forwards as
positional arguments. Backward-compatible with existing --port/--target
flags. Adds --version/-V/version and --help/help handling matching the
auth-proxy pattern, including printVersion printed to stderr at startup.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-27 21:54:51 -07:00
ec64afe390
feat: add tcpfwd to pipe connections 2026-02-27 21:25:33 -07:00
af6b0eb5a2
feat: add cmd/smsgwhookstocsv for smsapid (android sms gateway) jsonl to tsv 2026-02-27 02:48:13 -07:00
71eceb809f
feat: add cmd/smsapid for use with android-sms-gateway 2026-02-27 02:48:13 -07:00
4176923dd8
ref(cmd/sendsms): separate http/androidsmsgateway into own package 2026-02-27 02:42:50 -07:00
c08f7e342a
feat(cmd/sendsms): add back curl script for testing 2026-02-27 01:52:19 -07:00
de8630c136
fix(cmd/sendsms): send messages again (but not on dry-run), check ENVs 2026-02-27 01:52:19 -07:00
4e5277d133
fix(cmd/sendsms): randomize-csv now keeps header and adds back extension 2026-02-27 01:52:19 -07:00
7b40097396
fix(cmd/auth-proxy): show all working credentials, not just the first one 2026-02-27 00:26:43 -07:00
7a93b333ba
doc(cmd/auth-proxy): add README.md with examples and install instructions 2026-02-27 00:06:58 -07:00
13eeb6793b
feat: add cmd/auth-proxy to add Basic, Bearer, X-API-Key, or access_token auth to routes 2026-02-27 00:06:58 -07:00
21ea2d0613
chore(cmd/sql-migrate): bump v2.0.3 2026-01-31 21:22:42 -07:00
b6ffacd0a6
fix(cmd/sql-migrate): spell 'postgres' correctly 2026-01-31 21:21:53 -07:00
e7282c58f3
chore(cmd/sql-migrate): add explicit default for sqlCommand switch 2026-01-31 21:21:53 -07:00
dd4148b88e
chore(cmd/sql-migrate): make file path ormatting consistent for all 'found ./path/to/x' outtput 2026-01-31 21:21:53 -07:00
1ec145b3eb
ref(cmd/sql-migrate/v2): make INSERTs sortable, output cleanup 2026-01-31 01:18:58 -07:00
10236de205
feat(cmd/sql-migrate/v2): bump go.mod to v2 2026-01-31 00:20:07 -07:00
65f866970e
feat(cmd/sql-migrate/v2): store migrations in db, nix batches 2026-01-31 00:10:06 -07:00
8136b7f4b9
doc(sendsms): make README more inviting 2026-01-25 00:30:36 -07:00
fa9930c159
feat(sendsms): add script to randomize CSV data 2026-01-25 00:10:17 -07:00
674960b497
doc(sendsms): add README.md 2026-01-25 00:10:17 -07:00
8654c1c1f5
ref(sendsms): add --print-curl to improve --dry-run and general output 2026-01-25 00:10:17 -07:00
a050e5d0c7
ref(sendsms): hard error on leftover template strings, other output improvements 2026-01-25 00:10:17 -07:00
0c3c436c60
ref(sendsms): sane template defaults, separate sender interface 2026-01-25 00:10:17 -07:00
147a317cc0
ref(sendsms): lots of output improvements 2026-01-25 00:10:17 -07:00
5fdb4746cc
feat(sendsms): add --start-time, --stop-time, --max-duration, --min-delay 2026-01-25 00:10:17 -07:00
c56688a512
feat: add cmd/sendsms for texting lists from CSV 2026-01-25 00:10:17 -07:00
fe6300dacc
chore(cmd/sql-migrate): bump to version 1.0.2 2026-01-13 00:30:48 -07:00
eee1a95f52
ref(cmd/sql-migrate): add package, docs, minor flag parse change 2026-01-13 00:30:08 -07:00