0a777792d8
A CPV code is now stored once, keeping its longest description
bwilliams2026-10-22 09:56:01 +01:00
b0f93fd437
config init now leaves out the test sources unless given --all
bwilliams2026-10-21 16:22:45 +01:00
f467c6c7da
The release tarball's files are now owned by root, not the user who built it
bwilliams2026-10-21 16:07:21 +01:00
71eca2f194
Terminal logging is now coloured only on an interactive terminal
v1.0.0
bwilliams2026-10-21 15:39:36 +01:00
2aeb2993b0
Added a systemd unit and logrotate configuration, packaged in the release
bwilliams2026-10-21 15:31:35 +01:00
1e3acaeff3
A .env file in the working directory is now optional
bwilliams2026-10-21 15:28:52 +01:00
0b1952bd69
Halved the table cells' horizontal padding
bwilliams2026-10-21 15:19:49 +01:00
7543d85de4
Shortened the table's "Values" with k, m and bn suffixes
bwilliams2026-10-21 15:14:57 +01:00
3bb2711276
Added the closing date to the table, and narrowed its columns to fit
bwilliams2026-10-21 14:47:56 +01:00
c678b02662
The fetcher's "saved opportunities" and "fetched opportunities" lines now name the source
bwilliams2026-10-21 14:36:22 +01:00
50ee510520
Start and end dates are now the contract's, with a new closing date
bwilliams2026-10-21 14:31:12 +01:00
43f9ef3223
Labelled an opportunity's ID as an OCID only when it is one
bwilliams2026-10-21 14:15:04 +01:00
64886a2f1e
Added links to EU Supply tenders, as there are to Find a Tender notices
bwilliams2026-10-21 14:14:47 +01:00
3a06132071
Added an EU Supply source, scraping the UK portal's public tenders
bwilliams2026-10-21 13:57:54 +01:00
5c62376b6e
Made the table's columns sortable
bwilliams2026-10-21 12:47:25 +01:00
c09c30ae71
Added a backfill in 7-day windows, and fetches now keep their data on a failure
bwilliams2026-10-21 12:40:39 +01:00
ff2aa316b5
Made the classification picker a tree, where ticking a code selects its whole branch
bwilliams2026-10-21 12:39:22 +01:00
4db268550b
Fixed releases with 1e9999 ("no limit") being skipped as unreadable
bwilliams2026-10-21 09:34:44 +01:00
79efcb5e91
Avoid printing the whole JSON response if it is over 1024 characters in length (print the length instead). This was resulting in huge log files. In addition, log any failing unmarshalls of releases (at debug level) as well as the error (at warn level)
bwilliams2026-10-21 09:34:01 +01:00
0543762330
Added skip rules, which mark new opportunities Skipped when they're fetched
bwilliams2026-10-20 08:55:19 +01:00
2e6c21f9dd
Swapped the order of the details and "Find a Tender" link buttons
bwilliams2026-10-19 10:40:27 +01:00
f8648d765a
Added a dialog with each opportunity's details and releases
bwilliams2026-10-19 10:32:33 +01:00
6fbf7e56b2
The classification filter now offers only the loaded opportunities' classifications
bwilliams2026-10-19 10:19:34 +01:00
0819fb442b
The filters are now remembered in localStorage
bwilliams2026-10-19 10:11:19 +01:00
746fa0a9c1
Added a "Published in the last X days" filter, applied by the backend
bwilliams2026-10-19 10:05:45 +01:00
b8244da2e5
Added a "Hide all visible" button
bwilliams2026-10-19 09:47:49 +01:00
b1cc9745ba
Code Conventions change: A new package now goes in the same change as the code that needs it
bwilliams2026-10-19 09:47:21 +01:00
e98f18b790
Added a link from each opportunity to its latest Find a Tender notice
bwilliams2026-10-19 09:38:14 +01:00
a6630f112f
Added tests for format and storage, run in UK time
bwilliams2026-10-16 16:46:08 +01:00
13232bb15c
Added tests for the opportunities' catch-up and the toasts
bwilliams2026-10-16 16:41:10 +01:00
49dd11be56
Errors now show as toasts in the bottom right corner
bwilliams2026-10-16 16:22:19 +01:00
115ee29a85
Added Vitest to web/, ready for tests
bwilliams2026-10-16 16:16:27 +01:00
65e5bc6b26
Added database.change_batch_retention, deleting old change batches
bwilliams2026-10-16 16:10:32 +01:00
1988d07a29
Ran the installed ocdsgen, and added a script that installs the dev tools
bwilliams2026-10-16 16:03:48 +01:00
5e6c011ecb
Embedded the frontend in the binary, and built it in the build script
bwilliams2026-10-16 16:03:15 +01:00
1832ea7437
Added the frontend in web/, following its code conventions, with linting and generated backend types
bwilliams2026-10-16 16:01:38 +01:00
9905ffb4cb
Served the frontend's build output from server.frontend.dir
bwilliams2026-10-16 16:00:34 +01:00
155b84caea
Added change batches, so clients can catch up on changed opportunities
bwilliams2026-10-16 15:25:48 +01:00
51d6470649
Added a ClassificationsUpdated event
bwilliams2026-10-16 15:24:37 +01:00
aa06b94870
Removed the message size limit from ws-test dial
bwilliams2026-10-16 15:23:49 +01:00
0e27d2b2f3
Added api/classifications endpoint, requiring a new query
bwilliams2026-10-16 14:44:12 +01:00
378ac59f41
Fixed some lint and code convention violations
bwilliams2026-10-16 14:43:37 +01:00
af7880ceac
Backend API updated to indicate nullable fields
bwilliams2026-10-16 14:38:48 +01:00
e32e270db0
Added a convention that sentinel errors go near the top of the file, and applied it
bwilliams2026-10-16 13:23:47 +01:00
848edc73e2
Published an OpportunityMarksUpdated event when an opportunity's marks change over the API
bwilliams2026-10-16 13:19:58 +01:00
70d62f280e
Added the opportunities REST API, read-only apart from their marks, described in OpenAPI 3.1 with swag
bwilliams2026-10-16 13:13:44 +01:00
6e101d2b4d
Added an events bus, and pushed OpportunitiesUpdated to WebSocket clients when the fetcher stores new opportunities
bwilliams2026-10-16 11:59:26 +01:00
284a589627
Made each source start from its newest stored release, with --since as an override
bwilliams2026-10-16 11:37:09 +01:00
3c4fde8dfd
Added --since to job-search serve, for the sources it fetches from
bwilliams2026-10-16 11:30:56 +01:00
b3d20c1db0
Made the fetcher save what it fetches, with fetcher.WithStore
bwilliams2026-10-16 11:26:16 +01:00
eba6af680f
Added config generate-csrf-key, to store a CSRF key that survives restarts and works across instances
bwilliams2026-10-16 10:53:13 +01:00
18db462d89
Made the fetcher a Fetcher type with per-source config, and ran it in job-search serve
bwilliams2026-10-16 10:44:38 +01:00
f0c171c8a8
Added --http-upgrade and --direct to ws-test dial, so it can connect to job-search serve or ws-test serve
bwilliams2026-10-16 09:47:38 +01:00
88f879d844
Made mock-fts take its base URL from --addr when --base-url isn't given
bwilliams2026-10-16 09:19:42 +01:00
ac44b45f06
Split fetch from jobsearch into a separate fetcher command, and renamed fetch once to fts-once
bwilliams2026-10-16 09:13:10 +01:00
5e61c11eb9
Split ws from jobsearch as a separate test utility rather than a feature of jobsearch
bwilliams2026-10-16 08:58:25 +01:00
02e3d910a2
Added access log to server and modified mock-fts to use it
bwilliams2026-10-16 08:38:41 +01:00
2490519c2b
Fixed a race condition in dial_test related to hub closing in-test
bwilliams2026-10-15 17:57:26 +01:00
a279405cae
Added the HTTP server and serve command, with proxy, CSRF, TLS and security header config; wsserve is now ws serve, alongside a new ws dial
bwilliams2026-10-15 17:47:40 +01:00
f3a91ad915
An empty api_root now fails at start, for an enabled find_a_tender or fts_mock source and for fetch once
bwilliams2026-10-15 16:27:49 +01:00
67215a6aaa
Added CODE_CONVENTIONS.md and linters to enforce it, and applied it across the codebase
bwilliams2026-10-15 16:26:42 +01:00
465358609a
Naming, layout and comments: descriptive full-word names, one item per line in wrapped calls and literals, and doc comments on exported names
bwilliams2026-10-15 16:12:56 +01:00
043e307663
Logging: structured slog messages throughout, and WithLogger options so callers choose the logger
bwilliams2026-10-15 16:10:52 +01:00
49b824d5a2
Added util.ByteSizeNoLimit: a byte size of -1 means no limit, and any other negative size is rejected
bwilliams2026-10-15 15:49:47 +01:00
e19c8c2b69
Imports split into three groups: standard library, third-party, then this project's own packages
bwilliams2026-10-14 17:40:06 +01:00
c9f42b62ad
Added websocket hub for handling websocket clients, with a wsserve command which runs a plain TCP server for receiving websocket hub clients, with server config, CSRF and rate limit middleware.
bwilliams2026-10-14 15:55:25 +01:00
803a8929e6
printLoadedConf modified to only print explicitly set config values (via env or config file)
bwilliams2026-10-14 15:38:38 +01:00
d6688a6754
File/package naming convention conforming better to go standards - as ugly as it is
bwilliams2026-10-13 16:31:47 +01:00
be4770cbab
Shortened configuration struct names from JobSearchConfig to JSC since they are distinguished by being in the config package anyway
bwilliams2026-10-13 16:16:34 +01:00
169c6c6b64config updated to improve setting values, writing changes and test coverage
bwilliams2026-10-13 13:19:01 +01:00
8f0e72821f
Updated config init to check the command arguments instead of using the --config flag (which is now hidden from it)
bwilliams2026-10-13 13:13:11 +01:00
045492a148
First pass implementation of an SQLite backing store for fetched opportunities
bwilliams2026-10-13 12:52:17 +01:00
9b0e6dccfe
Added source and user marks to opportunities type. Any ignored errors are deferred to //nolint with a comment instead of being silently dropped
bwilliams2026-10-13 12:40:11 +01:00
6e6dec68c0
Fixed lint issues and missing documentation
bwilliams2026-10-13 12:21:32 +01:00
7fd321df97
Added unit tests, documentation and function descriptions across the board. Increased cyclop complexity threshold to 15 which is a bit more sane than 10 and excluded _test.go files from linters.
bwilliams2026-10-09 18:27:51 +01:00
005b335371
Minor fixes: - Fixed function name typo - Fetcher/Run now returns a combination of errors if any workers error out. All other workers are ordered to shutdown if any one does error out - findATender now returns a pointer instead of an instance from New
bwilliams2026-10-09 18:26:10 +01:00
5cb3601e1f
Added fetch service and a mock Find a Tender server
bwilliams2026-10-09 18:02:32 +01:00
399eccf2de
Find a Tender API client updates
bwilliams2026-10-09 17:56:55 +01:00
69620e5f7d
Unit tests added for internal/config
bwilliams2026-10-09 17:07:50 +01:00
09644d0691
Moved config set/unset to internal/config/modify.go as Store and Purge.
bwilliams2026-10-09 17:07:06 +01:00
539e88e73c
removed copyright/license header from all files since it was getting tedious. It remains in the cmd main.go and there is still the LICENSE file
bwilliams2026-10-09 12:27:35 +01:00
e43b7a8370
Added fetch script for UK Gov FindATender service which is based on OCDS (with issues...)
bwilliams2026-10-09 10:08:11 +01:00
ff33ef082a
Refactored configuration to make sections less code intensive to add
bwilliams2026-10-08 14:49:41 +01:00
8b0cecb51b
Updated build script to produce release archives for git and to be more verbose
bwilliams2026-10-08 14:48:01 +01:00
da81e6ccd9
Silence usage on commands that apply
bwilliams2026-10-08 14:45:58 +01:00
6436253629
Refactored main.go into cmd/jobsearch/main.go (in case separate commands are introduced later) which has required the options mechanism to change slightly as well as the logging.
bwilliams2026-10-09 09:29:42 +01:00
de3ebf68c5
Added an unsafe reflect to detect if a log handler is JSON enabled or not
bwilliams2026-09-29 11:55:45 +01:00
a0fad30e99
Config to string, JSON and YAML methods added and updated print methods to use new methods
bwilliams2026-09-29 11:55:11 +01:00