Repository navigation
release: 1.7.0 - #254
Merged
Merged
release: 1.7.0#254
Conversation
release: 1.6.2 back to develop
docs(gitflow): match the flow the repo follows (#220)
docs(gitflow): only the tag carries v (#222)
…amples fix(examples): regenerate the function examples (#225)
examples/stock is a stock with reservation built from every boost resource it can use: REST, gRPC and MCP doors in app api, a CloudEvents/NATS function in app worker, log and prometheus service middlewares, a memory or MongoDB repository, a resty reserver that calls app api, the publisher announcing stock.reserved, and @config options, each chosen by config. Defaults need no infra. The tests run each door in process and each switch in a child process. CLAUDE.md: a new resource lands in this app in the same PR.
feat(examples): add the complete stock app (#227)
…230) The adapter logged "listening on :8080/" whatever port and path it used. It now logs boost.bootstrap.function.adapter.cloudevents.http.port and .path; the examples/stock worker test asserts it.
fix(function): log the port the cloudevents http adapter listens on (#230)
A Conflict means the state does not allow the call (HTTP 409); only a duplicate is AlreadyExists. A gRPC client checking AlreadyExists for a Conflict now gets Aborted.
fix(grpc): answer a Conflict with Aborted, not AlreadyExists (#232)
mongo Conn (v1, v2) gets Close, which disconnects its client; inject generates a stop hook for it and for the redis Client and ClusterClient, as the fx modules of mongo and redis now do. The examples are regenerated.
fix(inject): close the mongo and redis clients when the app stops (#234)
The mongo datastore of the site example opened its conn by hand, so the app never closed it and the factory plugins were left out. It takes the *mongofact.Conn inject builds, with health and prometheus; gen/, the site hero and the root README show the generated client.
…238) They shared one, so an app taking both got only the first module.
fix(fx): give the redis client and cluster modules a sync.Once each (#238)
errors.NotFoundf adds " not found" to its message, so the stock example answered "nope is not in stock not found" on REST, gRPC and MCP. Build the error with NewNotFound, and say on each suffixing f-constructor of model/errors that its format names the thing.
fix(examples): say once that an unknown sku is not in stock (#240)
An app named orders-updater was rejected, so services had to pick names that no longer matched their repo or deployment. App names now follow ^[a-z][a-z0-9]*(-[a-z0-9]+)*$: - cmd/<app> and gen/builder/<app> keep the hyphens; - the Go package drops them (orders-updater -> ordersupdater); - the config path element is the camelCase that the koanf env loader produces, so ORDERS__UPDATER_FUNCTION_ADAPTER reaches ordersUpdater.function.adapter. A name whose package would be a Go keyword or main is rejected. Server names keep the old rule. The simple example's worker becomes order-worker, so its child-process tests prove the env mapping end to end. Golden test and README mapping table included.
feat(builder): accept kebab-case app names (#242)
@job(app=<name>) on a func(context.Context) error generates an app that boots, runs the handler once and stops: exit 0 on nil, 1 on an error logged at ERROR. SIGTERM cancels the handler's context; a job cut short exits 1. bootstrap/job holds the handler type and fx/modules/bootstrap/job runs it. A job app runs nothing else: a server or a @function in it fails the generation. builder/examples/simple gains app stock-audit, with e2e tests of the three exits, and examples/stock gains app stock-check.
…ries (#244) A *sql.DB parameter with @Inject(index=0, name=gold, drivers=[godror]) is now a client inject builds: the driver names the boost factory (godror or pgx), the config lives under boost.factory.<driver>.clients.<name>, the sql plugins (health, otel, datadog) are passed as values and the module closes the DB when the app stops. Exactly one driver; consumers of one DB name the same driver or only one names it; a DB no consumer names a driver for, drivers on a DB the app provides, or a default DB another generator asks for without a driver fail the generation. examples/stock gains an oracle stock on the generated DB.
@server(type=, name=, app=, plugins=[...]) in the package doc of internal/pkg/server/<transport>/ makes the door provide the []Plugin of the server: one table of plugin names per type (rest, grpc, mcp, cloudevents), so a new server type is a new row. A server with no @server and no @provide []Plugin gets the default set of its type; config only turns one plugin off. - annotation: package docs, collected when the collector opts in - inject: package entries are no component - cloudevents otel plugin: disabled keeps the adapter's options - examples/stock: plugins.go gone, @server and the shared REST model under internal/pkg/server; tests for a plugin on and one turned off - site shop, root README, examples: @server, gen regenerated
docs(examples): README of examples/stock (#246)
…for its skill (#252) #242, #243 and #244 merged with their package READMEs but the claude-plugin boost skill never heard of them, because CLAUDE.md put plugin docs out of scope. Now each change ships its package README, root README and site, and opens an issue in xgodev/claude-plugin; boost still does not edit the plugin.
docs(claude): every change updates docs, site and asks claude-plugin for its skill (#252)
…255) CodeQL go/sql-injection flags the mongo stock datastores: the sku from the request goes straight into the filter. A Go string never becomes a Mongo operator, but the example took any text as a sku, created "$gt" and sent it to every datastore. The stock services now reject a sku outside [a-z0-9-]{1,64} as NotValid (400, InvalidArgument, tool error) and both mongo datastores, shown in README and site, match the sku with $eq.
fix(examples): check the sku before the stock and match it with $eq (#255)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Milestone 1.7.0 (16 issues). Features: kebab-case app names (#242), @job door (#243), @Inject builds *sql.DB through godror/pgx (#244), @server picks the plugins of each server (#247), complete examples/stock app (#227, #246). Fixes: #225, #230, #232, #234, #238, #240. This branch only bumps the version in README.md and docs/site/index.html.