Space and color rows in query page (@MisterDA #265).
Duplicate the Rebuild selected button on top (@MisterDA #265).
Add a 'select-all' checkbox to the query page (@MisterDA #265).
Better printing of job duration (@MisterDA #252, @ewanmellor #259).
Speed up rendering of the Query page (@talex5 #262).
Remove RO bit on Windows file when deleting tmpdir (@MisterDA #270).
open_into open log files (@MisterDA #246).
Support Windows file separators (@MisterDA #246).
stalenessargument to allow ignoring inactive branches (@patricoferris #231).
default_refto get the default branch name (@patricoferris #231).
This means that callers can use this for debugging or labelling.
Log a message when cancelling a job finishes (@talex5 #261).
This avoids the confusing situation where the job finishes as you cancel, and you see the success message from the build as the last thing in the log, even though the job actually failed.
Move ANSI parser to its own repository (@talex5 #267, @MisterDA #268).
It's now at https://github.com/ocurrent/ansi
Update Dockerfile to latest opam-repository (@ewanmellor #251).
Fix typo in doc-strings (@tatchi #250).
Fmtfunctions (@MisterDA #245).
Update to latest x509 API changes (@talex5 #264).
Use mirage-crypto for id-of-repo digests (@talex5 #243).
Optimise the SQL query for the Query page, by adding an
index on the finish time and doing a case-insensitive
search (@talex5 #215).
Remove in-memory cache entries when no longer needed (@talex5 #235).
Analysis.quick_statfor faster stats (@talex5 #239).
With large pipelines (above 20,000 boxes or so) collecting the Prometheus stats
for pipeline states was getting slow.
Improve error message if a cancel hook raises (@talex5 #214).
Say which job raised the error.
Add dependency on conf-graphviz (@dra27 #225).
Add an architecture flag in the Docker builder to enable
multiarch builds (including 32-bit) (@avsm #213).
This can be used to check the latest version of an image without pulling it.
Add Docker Compose support to the Docker plugin (@avsm #228).
Log in before creating manifests (@talex5 #232).
Otherwise, we may hit the anonymous use limit.
git submodule update --init --recursive(@talex5 #224).
Otherwise, it's not really recursive.
Use the term
allowlistfor permitted usernames and make it case-insensitive (@avsm #210, @Julow #211).
Handle larger numbers of app installations (@talex5 #219).
GitHub sends them in batches, and we previously only used the first batch.
Replace custom logging in examples with Prometheus defaults (@talex5 #241).
Build fixes and cleanup:
Adapt to the Alcotest 1.2 interface (@talex5 #212).
Add missing dependency on
Switch from "capnpc" to "capnp compile" (@MisterDA #233).
capnpcis the old name, and isn't present on Windows.
ocaml/opamas the base image for the Dockerfile (@avsm #230).
Cmdliner.Term.term_resultfor correct error handling (@talex5 #241).
The main changes are:
"latching" of a previous pipeline stage output while building the new one.
For example, while doing
docker pullto check for updates to an image
it will continue using the old one until the check finishes.
Jobs with latched results are scheduled at a lower priority than jobs without
any output yet.
Many improvements to the web UI, including access controls, streaming of
logs, improved querying, and custom extra pages.
Allow user-defined pools (@talex5, #206).
Pool.of_fnso that users can provide their own pools. This allows
waiting for resources from an external service before marking a job as
Add simple job priorities (@talex5, #187).
Pools now have high and low priority queues.
The cache puts jobs on the low priority queue if they have a latched result available.
Allow jobs to latch previous output while rebuilding (@talex5, #178).
If a rebuild is triggered by the schedule, do the rebuild in the background
without changing the output to pending. This allows polling for changes
without disrupting the rest of the pipeline.
Such jobs are displayed with a gradient background (from the pending
colour on the left to the latched output's colour on the right).
Current_cache.Genericto control latching behaviour (@talex5, #179).
This provides the full API.
PUBLISHERare now special cases of
Also latch failed results when cache entries expire (@talex5, #202).
Don't clear latched result when auto-cancelling (@talex5, #195).
Fix rebuilding of stale cache entries (@talex5, #169).
If a build was already invalid when we loaded it from the database, we invalidated the key but didn't trigger an update properly.
Option.getcrash when shutting down (@talex5, #205).
If an error occurs on startup and a cache entry has expired then
we set config to None to exit the engine, and the timer thread tries to
read the config and crashes, hiding the real error.
Fix scheduled builds for very fast jobs (@talex5, #185).
We cleared the expiry timer when the job reported an active state. However,
if the job was very quick (no async operations) we wouldn't see this state.
Then we'd think the old timer was still in place and would be good to handle
the new deadline too. Reported by Kate.
Instancesubmodule (@talex5, #201).
The name "output" came from before the build and publish caches were unified and was confusing.
Handle uncaught exceptions in monitor read functions (@talex5, #191).
Delete directories with
Unix.unlinkwas causing high latencies in some cases.
Improvements to query page (@talex5, #196).
Add toggles to query page to allow rebuilding multiple jobs at once.
Filter by job ID prefix in the query page. This makes it easy to restrict results to a particular day (or month, hour, etc).
Filter by operation type in query page.
Allow filtering by rebuild status in query page.
Show job queue time and run time in query page.
Stream log files (@talex5, #165).
If the job is still running, keep the connection open and stream the data as it arrives.
Contextmodules (@talex5, #170).
Auto-generate links in nav-bar from routes (@talex5, #182).
Expose routes in web API. This allows the user to provide whatever routes they like, or to use their own server.
Update to new Routes API (@anuragsoni, #189 #190).
Add a basic access control system (@talex5, #172).
authn(if given) is used to create a "Login" link in the navbar.
has_roleis used to decide who can access which resource.
The GitHub plugin now provides an authentication backend that authenticates users with GitHub.
Display the build history in the job page (@talex5, #166).
Allows navigating to previous build results easily.
Extend, rather than replace, the context in
Truncate long tooltips in Graphviz diagrams. Graphviz rejects long messages with the error
longer than 16384?.
Return the RepoId after pushing a manifest (@talex5, #207).
Rawmodule with low-level API (@talex5, #168).
This is useful if you need to create your own custom components (for example,
because you want to use a
Current.tinput to generate one of the fixed
arguments such as
examples/docker_custom.mlfor an example.
Git checkout operations can use a lot of CPU and IO, so allow users to supply a pool to limit the number of concurrent operations.
Commit_id.pp_user_clonepublic (@talex5, #176).
Commit.idnow returns a
Commit.hashto get the hash.
Fix clone instructions for GitHub PRs (@talex5, #164).
GitHub only provides the
refs/pull/NNN/headbranches when fetching, not when cloning (with the default refspec).
Detect this case and show an alternative command that the user can run to reproduce the operation.
Get all installation repositories, not just the first 30 (@talex5, #193).
For now, as a precaution, ignore any installation that has configured all repositories to be tested (this is likely an accident).
If listing repositories fails, retry after 30s (@talex5, #198).
Installation.repositories ?include_archivedoption (@talex5, #203).
Filtering archived repositories is now the default.
There's not much point doing CI on them as you can't write the status result back.
GitHub.Installation.accountto get account name (@talex5, #204).
This allows monitoring the head of a public GitHub repository without needing
an OAuth token. It's useful for the
ocaml-ci-localcommand, allowing users
to test the pipeline easily.
Catch cohttp end-of-file exceptions (@talex5, #175).
Remove unicorn from error string (@talex5, #183).
When a GraphQL query returned a server error, we previously returned the body
of the HTTP response as the error message. However, this includes a large
picture of a unicorn, which is not suitable as an error string.
Upgrade TLS library to cope with Slack's new TLS policy (@talex5, #174 #194).
Update to dune 2 (@talex5, #171).
Add missing alcotest dependency (@talex5, #163).
The main new feature is that OCurrent now evaluates pipelines incrementally.
This means that services with large pipelines (such as ocaml-ci, with around
10,000 stages) can decide what they need to do without using an excessive
amount of CPU time.
Replace changed promises with
Evaluate pipelines incrementally (@talex5, #144)
Avoid unnecessary re-evaluations in
Change the representation of terms to support incremental evaluation (@talex5, #150)
Added Internals wiki
page explaining how OCurrent works.
Update README.md to link the API Docs (@shonfeder, #145)
Fix typo in README ("about" -> "above") (@smolck, #100)
Add support for run-arguments in docker plugin (@MagnusS, #96)
Current_dockerbuild (@SquidDev, #102)
Allow alternative Dockerfile filenames in
Docker.preadto get container stdout as a string (@kit-ty-kate, #120)
Make it easier to add custom Docker commands (@talex5, #130)
Git.fetch: don't take repository lock until the job starts (@talex5, #116)
Github.Api.head_ofto track individual branches (@talex5, #114)
Expose the low-level
refsfunction to get access to branch names and PR
numbers (@talex5, #123)
Commit.urito make links back to GitHub (@talex5, #131)
Better error if setting a GitHub commit status fails (@talex5, #151)
Only refresh the repository that generated the webhook event, not all of them (@talex5, #156)
Use routes library to simplify routing (@talex5, #160)
Add "/jobs" page with information about active jobs (@talex5, #125)
Mark HTML pages as UTF-8 (@talex5, #128)
Update to new Alcotest API (@talex5, #121)
Use mirage-crypto instead of nocrypto (@hannesm, #161)
Fix analysis with hidden
statenodes (@talex5, #134)
Allow cancelling a job while waiting for confirmation (@talex5 #137)
Fix merging of error states for pairs (@talex5, #147)
Report Prometheus metrics for pipeline stage states (@talex5, #115)
Report metric for cache evaluations (@talex5, #143)
Make dune transitive dependencies explicit (@CraigFe, #97)
Add OCaml-CI status badge to the README (@CraigFe, #107)
Explicitly enumerate accepted
--confirmvalues (@CraigFe, #108)
Primitiveand simplify the API (@talex5, #154)
Lwt_main.yieldwhile testing log patterns (@talex5, #155)
Current.collapseto allow collapsing parts of diagrams (@talex5, #152)
Current.with_contextto help with diagram layout (@talex5, #159)