182 Commits

Author SHA1 Message Date
79ada9cd1c
feat: add net/gitshallow (for incremental updates to data repos) 2026-03-08 16:51:51 -06:00
d06a45381a
feat: add cmd/smtp-test for debugging smtp auth and delivery 2026-03-08 16:51:51 -06:00
ce4c430013
wip: add more middleware examples 2026-03-08 16:51:51 -06:00
6a371a5aa7
feat(calendar): parse reminder durations 2026-03-08 16:51:51 -06:00
6c7919b918
wip(calendar): rework field access 2026-03-08 16:51:51 -06:00
9d713cbe9b
f: feat(calendar): calculate fixed and floating yearl and monthly events 2026-03-08 16:51:51 -06:00
c7c28b4c0a
f: feat(calendar): calculate fixed and floating yearl and monthly events 2026-03-08 16:51:51 -06:00
9bee18185d
wip: feat(calendar): calculate fixed and floating yearl and monthly events 2026-03-08 16:51:51 -06:00
0be871376d
f(ai): add WithFormat to change format without changing Generate signature 2026-03-08 16:51:51 -06:00
0b284375ff
f(ai): add WithModel to change model on-the-fly 2026-03-08 16:51:51 -06:00
ee9ba995d6
f(ai): fix interface / add type guard 2026-03-08 16:51:51 -06:00
a76ca7f86e
feat(ai): add Ollama and OpenAI helpers 2026-03-08 16:51:51 -06:00
05096da65a
feat: add cmd/smbtest for debugging smb connection issues 2026-03-08 16:51:51 -06:00
4146c62f37
ref(cmd/monorelease): fix tag and version output, start flagset 2026-03-08 16:51:51 -06:00
ac6a039698
WIP: feat(cmd/monorelease): fix versioning 2026-03-08 16:51:51 -06:00
3abf0838c2
WIP: feat(cmd/monorelease): better table 2026-03-08 16:51:51 -06:00
c8c2b63e93
WIP: feat(cmd/monorelease): show table 2026-03-08 16:51:51 -06:00
6438ef8064
WIP: feat(cmd/monorelease): show bins 2026-03-08 16:51:51 -06:00
50cfc1fa32
WIP: feat: add cmd/monorelease for checking version info 2026-03-08 16:51:51 -06:00
3db8580d5a
feat: add tools/gitver for monorepo versioning 2026-03-08 16:51:51 -06:00
e4edb8fe2e
feat: add ./scripts/concat-for-context.sh to reduce total file count 2026-03-08 16:51:51 -06:00
663b00b0c7
doc: add PROMPT.md for Ai context 2026-03-08 16:51:51 -06:00
dd7672d2c2
feat: add cmd/api-example as server boilerplate 2026-03-08 16:51:50 -06:00
7414630a4b
f: cmd/cli-example 2026-03-08 16:51:50 -06:00
222f3cc0fe
feat: add cmd/cli-example for reference, and Ai context 2026-03-08 16:51:50 -06:00
6244d8dd32
wip:feat(auth/jwt): add jwk fetch and jwt verify 2026-03-08 16:51:50 -06:00
92e1ae9992
docs(monorel): add README tools/monorel/v0.6.5 2026-03-08 15:55:11 -06:00
bd2443cb58
fix(monorel): various path, module root, and --recursive fixes 2026-03-08 15:51:26 -06:00
fd3cb8ba99
feat(monorel): add goarch/goarm/goamd64 to build matrix with --almost-all/--ios/--android-ndk
Default matrix (conservative, CGO_ENABLED=0):
  goos:   darwin freebsd js linux netbsd openbsd wasip1 windows
  goarch: amd64 arm arm64 mips64le mipsle ppc64le riscv64 wasm
  goarm:  6 7  (always included when arm is in goarch)

--almost-all widens to esoteric goos (aix dragonfly illumos plan9
solaris), adds 386/loong64/mips/mips64/ppc64/s390x to goarch, and
emits goamd64: v1 v2 v3 v4.

--ios generates an active iOS build entry (CGO_ENABLED=1, arm64)
instead of the default commented stub.

--android-ndk generates an active Android NDK build entry
(CGO_ENABLED=1, arm64) instead of the default commented stub.

Both --ios and --android-ndk are available on init and release.
The existing -A flag (include hidden dirs) is unchanged.
2026-03-08 15:49:24 -06:00
1cb478b475
fix(http/androidsmsgateway): revert to using observed phoneNumber field rather than the documented recipient,sender ones 2026-03-05 14:00:55 -07: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
c32acd5a74
ref(auth/csvauth): don't hold mutex longer than necessary 2026-03-03 03:05:05 -07:00
020b00c353
feat(http/androidsmsgateway): add webhook examples, JSON, CSV, and signature verification 2026-03-03 03:01:56 -07:00
66dde73bd4
chore(auth/csvauth): add .goreleaser.yaml auth/csvauth/v1.2.4 2026-03-03 02:31:36 -07:00
249385c775
fix(auth/csvauth): load tokens into hashmap so that they can be retrieved by CredentialKeys auth/csvauth/v1.2.3 auth/v1.1.1 2026-03-03 02:26:34 -07:00
d415a8c743
fix(auth/csvauth): turn the old CLI-only warnings and errors into returned errors 2026-03-03 01:21:36 -07:00
8842791e34
fix(auth): update test 2026-03-03 00:01:15 -07:00
92f865912a
fix(auth): add missing arg to NewBasicRequestAuthenticator 2026-03-02 23:18:05 -07:00
846d14baf5
feat(auth): add BasicRequestAuthenticator auth/v1.1.0 2026-03-02 12:32:01 -07:00
8056a07d10
chore(tools/monorel): add .goreleaser.yaml tools/monorel/v0.6.4 2026-03-01 19:13:50 -07:00
8405be04ad
feat(monorel): use YAML anchors to DRY up multi-binary build matrices
When a module has more than one binary, the shared build options (env,
ldflags, goos) are defined once via a YAML anchor on the first build and
merged into the rest with <<: *build_defaults.  Single-binary modules use
plain fields with no anchor overhead.

  - id: gsheet2csv          - id: gsheet2csv
    binary: gsheet2csv        binary: gsheet2csv
    env:              →       <<: &build_defaults
      - CGO_ENABLED=0           env:
    goos:                         - CGO_ENABLED=0
      - aix                     goos:
      - ...                       - aix
  - id: gsheet2env               - ...
    binary: gsheet2env      - id: gsheet2env
    env:                      binary: gsheet2env
      - CGO_ENABLED=0           <<: *build_defaults
    goos: ...

The commented-out ios stubs follow the same pattern using a separate
build_defaults_ios anchor so they remain consistent when uncommented.

Also extracts defaultGoos to a package-level var to avoid repetition.
2026-03-01 19:13:50 -07:00
445a6e9c07
feat(monorel): expand default build matrix to all practical CGO_ENABLED=0 targets
Replace linux/windows/darwin with the full CGO_ENABLED=0 goos list:
  aix, darwin, dragonfly, freebsd, illumos, js, linux, netbsd, openbsd,
  plan9, solaris, wasip1, windows

Add commented-out stanzas for each binary for platforms that require extra
tooling:
  - iOS  (CGO_ENABLED=1, Xcode toolchain required)
  - Android (CGO_ENABLED=0 arm64-only; NDK required for full CGO builds)

Archive formats unchanged (tar.gz + tar.zst / zip + tar.gz for Windows).
2026-03-01 19:13:50 -07:00
1289f3e5b6
fix(monorel): guard .goreleaser.yaml overwrite in release; loosen compat check
release subcommand:
- Replace yamlLooksCorrect with yamlIsCompatible: file is considered OK if
  {{ .ProjectName }} is absent AND at least one binary's VERSION string is
  present.  Extra hand-edited binaries (like fixtures) no longer trigger a
  rewrite.
- Before overwriting an existing file, prompt the user [Y/n].  --yes does
  not skip this prompt; --force does.  If stdin is not a terminal and
  --force is not set, the command errors rather than silently clobbering.

init subcommand: unchanged — still uses the strict yamlLooksCorrect check
(all binaries must be present, ldflags must include main.version).
2026-03-01 19:13:50 -07:00
c14bc239f5
fix(monorel): always create GitHub release as draft+prerelease, finalise after upload
gh release create now always uses --draft --prerelease so artifacts can be
uploaded before the release becomes visible. A final "Finalise release
visibility" step then runs gh release edit to remove whichever flags should
not remain:

  --draft=false       unless --draft flag given (keep as draft)
  --prerelease=false  unless --prerelease flag given OR the tag has a
                      pre-release suffix (-pre3, .dirty, etc.)

Flag meaning change:
  --draft      = keep release in draft state after uploading (don't publish)
  --prerelease = keep release marked pre-release even for clean vX.Y.Z tags
2026-03-01 19:13:50 -07:00
f87bfeb438
feat(monorel): add --draft and --prerelease flags to release subcommand
The gh release create flags are now explicit and always emitted:
  --draft / --draft=false
  --prerelease / --prerelease=false

Publish step (gh release edit --draft=false) logic:
  --draft --prerelease : NO  (stays as draft pre-release)
  --draft only         : YES (draft needs publishing)
  --prerelease only    : NO  (published immediately as pre-release)
  neither              : NO  (published immediately)

The step prompt adapts: "create draft pre-release / draft / pre-release /
GitHub release <tag>" depending on the flag combination.
2026-03-01 19:13:50 -07:00
b6fd4072bf
refactor(monorel): replace bash script output with interactive step runner
Replace printModuleScript (which emitted a bash script to stdout) with an
interactive step runner for the release subcommand:

- Each step shows the command(s) it will run, then prompts [Y/n]
- --dry-run: show steps without prompting or running (replaces old default)
- --yes: run all steps without prompting (happy-path automation)

New types/functions:
  releaseStep       — title, prompt, display lines, skip flag, run func
  printModuleHeader — extracted header/info block (always shown)
  buildModuleSteps  — constructs the ordered step list for one module
  runSteps          — executes steps per dryRun/yes flags
  execIn            — runs a command streaming to the terminal
  execInEnv         — like execIn with extra environment variables

Goreleaser archive globs are expanded at step-run time (after goreleaser
has built the dist/ directory) rather than being passed as shell globs.
The gh release create --notes flag receives the notes string directly
instead of via a shell variable.
2026-03-01 19:13:50 -07:00
e6f82ed91b
feat(monorel): print "found config ... with monorepo support" when yaml is ok
When an existing .goreleaser.yaml passes yamlLooksCorrect() and needs no
update, both init and release now print:

  found config ./cmd/tcpfwd/.goreleaser.yaml with monorepo support

Path is shown relative to cwd (via cwdRelPath helper).
2026-03-01 19:13:50 -07:00
f3eff585c4
feat(monorel): match goreleaser comment style in generated .goreleaser.yaml
- Replace "Generated by monorel" header with goreleaser-style preamble
  ("This file is generated by monorel ... check the docs at goreleaser.com")
- Add modeline explainer comment block before the yaml-language-server line
- Add "you may remove this if you don't need go generate" comment inline
- Combine name_template comments into goreleaser-style single comment
  ("this name template makes the OS and Arch compatible with uname")
2026-03-01 19:13:50 -07:00
98bdc47746
feat(monorel): validate existing .goreleaser.yaml instead of diffing content
Replace the exact-content comparison with yamlLooksCorrect(), which checks
three semantic markers:

  - -X main.version={{.Env.VERSION}} present (version injection)
  - <binname>_{{ .Env.VERSION }}_ present for every binary (archive naming)
  - {{ .ProjectName }} / {{.ProjectName}} absent (not a stock template)

If the file passes all checks it is left completely untouched, preserving
any compatible local edits. Only files that fail a check are regenerated.
2026-03-01 19:13:50 -07:00