129cebd94d
Updated the normalized observation schema to remove duplicate and/or unnecessary fields
ci/woodpecker/push/build-image Pipeline was successful
2026-03-17 11:04:51 -05:00
e42f2bc9de
Remove incorrect 'internal/' prefix from model package file header comments
2026-03-17 09:46:39 -05:00
9ddcf5e0df
Document the PostgreSQL schema contract in doc.go
ci/woodpecker/push/build-image Pipeline was successful
2026-03-17 09:33:07 -05:00
d0b58a4734
Updates to track feedkit v0.7.2 and to add a dedupe processor
ci/woodpecker/push/build-image Pipeline was successful
v0.7.2
2026-03-16 18:35:44 -05:00
6cd823f528
Update go.mod
ci/woodpecker/push/build-image Pipeline was successful
2026-03-16 15:37:31 -05:00
84da2bb689
Added a postgres sink implementation.
ci/woodpecker/push/build-image Pipeline failed
v0.7.1
2026-03-16 15:32:46 -05:00
859ee9dd5c
Updated go.sum
ci/woodpecker/push/build-image Pipeline was successful
2026-03-16 13:37:49 -05:00
ea113e2dcc
Updated processor/normalizer wiring to track Feedkit v0.7.0
ci/woodpecker/push/build-image Pipeline failed
v0.7.0
2026-03-16 13:35:51 -05:00
38bc162918
Updated go.sum
ci/woodpecker/push/build-image Pipeline was successful
2026-03-15 19:26:51 -05:00
eae9568afe
Updated source configuration to track Feedkit v0.6.0
ci/woodpecker/push/build-image Pipeline failed
v0.6.0
2026-03-15 19:22:57 -05:00
f464592c56
Updates to accommodate the new upstream version of feedkit (v0.5.0), which now supports both polling sources and streaming sources.
ci/woodpecker/push/build-image Pipeline was successful
v0.5.2
2026-02-08 15:05:53 -06:00
123e8ff763
Moved the standards package out of internal/ so it can be imported by downstream consumers.
ci/woodpecker/push/build-image Pipeline was successful
v0.5.1
2026-02-08 09:15:07 -06:00
5923592b53
Moved the weatherfeeder model out of internal/ so that downstream consumers can import it directly.
ci/woodpecker/push/build-image Pipeline was successful
v0.5.0
2026-02-08 08:56:16 -06:00
c96a6bb78b
Remove Go test files from .dockerignore; this will enable the CI system to run tests before building.
2026-02-08 08:55:35 -06:00
cff8c5f593
Merged SCHEMA.md into API.md and made some tweaks to ensure consistency with the underlying domain model.
ci/woodpecker/push/build-image Pipeline was successful
2026-02-07 19:36:50 -06:00
190420e908
Added a SCHEMA.md with espress documentation of the JSON output schemas emitted by weatherfeeder.
ci/woodpecker/push/build-image Pipeline was successful
2026-02-07 17:26:07 -06:00
9663fdfc43
Updated main.go to register the postgres and NATS sinks in addition to the stdout sink.
ci/woodpecker/push/build-image Pipeline was successful
2026-02-07 11:57:54 -06:00
ffd4dfa76d
Updated feedkit dependency to v0.4.1.
ci/woodpecker/manual/build-image Pipeline was successful
2026-02-07 11:37:53 -06:00
d858bc1f31
Updated Dockerfile and Woodpecker pipeline to use harbor.maximumdirect.net proxy cache for upstream images.
ci/woodpecker/manual/build-image Pipeline was successful
ci/woodpecker/push/build-image Pipeline was successful
2026-02-01 19:39:55 -06:00
2a88c3c5f3
Updated the Woodpecker pipeline to utilize caching.
ci/woodpecker/manual/build-image Pipeline was successful
2026-02-01 19:04:22 -06:00
33c35b5f4a
Update Dockerfile to streamline the weatherfeeder user creation.
ci/woodpecker/manual/build-image Pipeline was successful
2026-02-01 18:17:12 -06:00
df3f42ef30
Updated the Dockerfile to reflect best practices; removed the dropreplace lines after updates to go.mod.
ci/woodpecker/manual/build-image Pipeline was successful
2026-02-01 16:59:34 -06:00
e86d4a02e0
Added a go mod tidy step to the Dockerfile build.
ci/woodpecker/manual/build-image Pipeline was successful
2026-02-01 10:15:50 -06:00
ba95371418
Added a second dropreplace step for ejr/feedkit.
ci/woodpecker/manual/build-image Pipeline failed
2026-02-01 10:10:53 -06:00
5a92fc0401
Fixed a bug in the Dockerfile with respect to the location of the dropreplace for ejr/feedkit.
ci/woodpecker/manual/build-image Pipeline failed
2026-02-01 10:01:02 -06:00
f522840fed
Updated go.mod to require feedkit v0.4.0.
ci/woodpecker/manual/build-image Pipeline failed
2026-02-01 09:57:10 -06:00
a46cbe17d1
Updated the Dockerfile to drop the ejr/feedkit replacement and to run go test before building.
ci/woodpecker/manual/build-image Pipeline failed
2026-02-01 09:47:17 -06:00
7b8b3b98f2
Added a Dockerfile and completely refactored the Woodpecker pipeline.
ci/woodpecker/manual/build-image Pipeline failed
2026-02-01 09:38:26 -06:00
4600ca053b
woodpecker: Update pipeline to allow manual triggering.
2026-02-01 08:10:24 -06:00
88d2385576
woodpecker: allow manual pipeline triggering.
2026-02-01 07:33:01 -06:00
6cdbb29215
woodpecker: refactor pipeline to use kaniko.
2026-02-01 07:22:28 -06:00
62464f449e
More woodpecker changes.
2026-01-31 13:56:12 -06:00
db8c66832f
Removed privileged: true from the Woodpecker pipeline.
2026-01-31 13:53:27 -06:00
062b12c44f
Add CI/CD pipeline configuration for building and publishing weatherfeeder.
2026-01-31 13:50:09 -06:00
da0231b20f
Add day/night estimation for NWS observations based on solar elevation and update observation model.
2026-01-22 23:15:17 -06:00
c675045013
Updated documentation and added API.md to document the stable external wire format.
2026-01-17 17:39:18 -06:00
b4a67e208c
Updated model and normalizers to map provider “feels like” fields into a single ApparentTemperatureC field.
2026-01-17 10:36:19 -06:00
c12cf91115
normalizers: implemented openmeteo forecast normalizer.
2026-01-17 10:16:50 -06:00
b47f1b2051
sources: added an OpenMeteo forecast source.
2026-01-17 08:00:23 -06:00
b8804d32d2
refactor(normalizers): deduplicate synthetic station ID generation
...
- Add common SynthStationID helpers for coordinate-based providers
- Use shared helper for Open-Meteo and OpenWeather station ID synthesis
- Require both lat/lon when generating synthetic IDs to avoid misleading defaults
- Remove unused Open-Meteo normalizer wrapper code
This reduces cross-provider duplication while keeping provider-specific
mapping logic explicit and readable.
2026-01-16 22:13:44 -06:00
00e811f8f7
normalizers/nws: add NWS alerts normalizer and canonical alert mapping
...
- Introduce AlertsNormalizer to convert Raw NWS Alerts (SchemaRawNWSAlertsV1)
into canonical WeatherAlert runs (SchemaWeatherAlertV1)
- Add minimal NWS alerts response/types to support GeoJSON FeatureCollection parsing
- Map NWS alert properties (event, headline, severity, timing, area, references)
into model.WeatherAlert with best-effort timestamp handling
- Establish clear AsOf / EffectiveAt policy for alert runs to support stable
deduplication and snapshot semantics
- Register the new alerts normalizer alongside existing NWS observation and
forecast normalizers
2026-01-16 21:40:20 -06:00
2eb2d4b90f
feat(nws, normalizers): add NWS hourly forecast normalization and enforce canonical float rounding
...
- Implement full NWS hourly forecast normalizer (raw.nws.hourly.forecast.v1 → weather.forecast.v1)
- Add GeoJSON forecast types and helpers for NWS gridpoint hourly payloads
- Normalize temperatures, winds, humidity, PoP, and infer WMO condition codes from forecast text/icons
- Treat forecast IssuedAt as EffectiveAt for stable, dedupe-friendly event IDs
- Introduce project-wide float rounding at normalization finalization
- Round all float values in canonical payloads to 2 decimal places
- Apply consistently across pointers, slices, maps, and nested structs
- Preserve opaque structs (e.g., time.Time) unchanged
- Add SchemaRawNWSHourlyForecastV1 and align schema matching/comments
- Clean up NWS helper organization and comments
- Update documentation to reflect numeric wire-format and normalization policies
This establishes a complete, deterministic hourly forecast pipeline for NWS
and improves JSON output stability across all canonical weather schemas.
2026-01-16 10:28:32 -06:00
0fcc536885
Updates in preparation for adding forecast sources.
2026-01-16 00:04:37 -06:00
e10ba804ca
model: add explicit JSON tags and document canonical payload contract
...
Add lowerCamelCase JSON tags to canonical model types (observation, forecast,
alert) to stabilize the emitted wire format and make payload structure explicit
for downstream sinks.
Introduce internal/model/doc.go to document these structs as versioned,
schema-governed payloads and clarify compatibility expectations (additive
changes preferred; breaking changes require schema bumps).
No functional behavior changes; this formalizes the canonical output contract
ahead of additional sinks and consumers.
2026-01-15 22:39:37 -06:00
f13f43cf56
refactor(providers): centralize provider-specific parsing and invariants
...
- Introduce internal/providers/nws with shared timestamp parsing used by both
NWS sources and normalizers
- Migrate NWS observation source + normalizer to use the shared provider helper
for consistent RFC3339/RFC3339Nano handling
- Introduce internal/providers/openweather with a shared URL invariant helper
enforcing units=metric
- Remove duplicated OpenWeather URL validation logic from the observation source
- Align provider layering: move provider “contract/quirk” logic out of
normalizers and into internal/providers
- Update normalizer and standards documentation to clearly distinguish:
provider helpers (internal/providers) vs canonical mapping logic
(internal/normalizers)
This refactor reduces duplication between sources and normalizers, clarifies
layering boundaries, and establishes a scalable pattern for future forecast
and alert implementations.
2026-01-15 20:40:53 -06:00
a341aee5df
normalizers: Updated error handling within the JSON helper function.
2026-01-15 20:17:46 -06:00
d8db58c004
sources: standardize Event.ID on Source:EffectiveAt; simplify raw event helper
...
- Adopt an opinionated Event.ID policy across sources:
- use upstream-provided ID when available
- otherwise derive a stable ID from Source:EffectiveAt (RFC3339Nano, UTC)
- fall back to Source:EmittedAt when EffectiveAt is unavailable
- Add common/id helper to centralize ID selection logic and keep sources consistent
- Simplify common event construction by collapsing SingleRawEventAt/SingleRawEvent
into a single explicit SingleRawEvent helper (emittedAt passed in)
- Update NWS/Open-Meteo/OpenWeather observation sources to:
- compute EffectiveAt first
- generate IDs via the shared helper
- build envelopes via the unified SingleRawEvent helper
- Improve determinism and dedupe-friendliness without changing schemas or payloads
2026-01-15 19:38:15 -06:00
d9474b5a5b
v0.x: add reusable HTTP source spine; fix routing; upstream HTTP transport helper
...
- fix dispatch route compilation so empty Kinds matches all (nil), not none
- introduce internal/sources/common/HTTPSource to centralize HTTP polling boilerplate:
- standard cfg parsing (url + user_agent)
- default HTTP client + Accept/User-Agent headers
- consistent error wrapping
- refactor observation sources (nws/openmeteo/openweather) to use HTTPSource
- upstream generic HTTP fetch/limits/timeout helper from weatherfeeder to feedkit:
- move internal/sources/common/http.go -> feedkit/transport/http.go
- keep behavior: status checks, max-body limit, default timeout
2026-01-15 19:11:58 -06:00
1790218d38
Updated documentation for internal consistency.
v0.4.0
2026-01-15 10:47:59 -06:00
84c4efbc2e
normalizers/openweather: extract shared helpers into common.go
...
Refactor OpenWeather normalizers to improve structure and reuse by moving
provider-specific helper functions out of observation.go and into a new
common.go.
This keeps observation.go focused on schema matching and domain mapping,
preserves the “one normalizer per file” convention, and establishes a clear
home for helpers that will be shared by future OpenWeather forecast and alert
normalizers.
No functional behavior changes; this is a pure internal refactor.
2026-01-15 10:41:56 -06:00