Skip to content

CI: the nightly runs its Lite and Darling PostgreSQL tests in one step each and takes about 50 minutes to publish #5616

Closed

Description

@erikdarlingdata

Claude posting for Erik Darling.

What happens

The nightly build takes longer each day. The nightly version publishes about 50 minutes after the run starts, and the run ends after about 64 minutes. PR CI runs the same tests in about 19 minutes.

Run Date build job Darling PostgreSQL tests job Whole run
37423416866 10-06 37.1 min 37.2 min 38 min
37581130191 10-07 49.1 min 41.9 min 52 min
37746048228 10-08 07:51Z 37.1 min 38.0 min 38 min
37772519830 10-08 11:48Z 44.4 min 36.4 min 65 min
37815034195 10-08 17:14Z 45.4 min 46.2 min 64 min

In run 37815034195, the publish job finished at 18:04:20Z, 50 minutes after the start. The run stayed open until 18:18Z because of the test map shards.

Cause

Two jobs run their tests in one step each, and publish waits for both of them.

  • The build job runs its tests in one step. That step took 41.4 minutes in run 37815034195.
  • The darling-pg job runs all of Darling.Tests against PostgreSQL in one step. That step took 41.1 minutes in the same run.
  • publish needs [build, linux, darling-pg]. So the slower of the two test steps sets the publish time.

PR CI splits the same suites into shards. In PR run 37869851936, each Darling PostgreSQL shard took 9 to 11 minutes, and the whole run took 19 minutes. Each new test class adds to the nightly's two single steps. It adds only a part of that time to a PR shard.

The test-map-shard job (10 shards, 10 to 17 minutes each) starts after build and darling-pg. It does not delay publish, but it keeps the run open and uses 10 more runners.

What to fix

  1. Before you change the job, read the history of .github/workflows/nightly.yml. Find out if the single test step is on purpose. If one process catches failures that shards miss, write that reason in this issue.
  2. Split the nightly's Lite tests and Darling PostgreSQL tests into shards. Use the same shard lists and scripts that PR CI uses, so the two paths cannot drift apart.
  3. Keep publish dependent on every test shard. A failed shard must stop the publish.
  4. Put two times in the PR, before and after the change. The first is the time from the run start to the end of publish. The second is the time of the whole run.

#5208 covers the slow Lite test classes. #5459 owns the test map shards. This issue covers only the nightly's job layout.

Activity

  1. erikdarlingdata commented on Oct 9, 2026

    @erikdarlingdata
    OwnerAuthor

    Claude posting for Erik Darling.

    Before this changes, here is why the nightly runs each test suite in one step.

    It was a choice for releases, and the nightly kept it

    What the reason protects, and what the change keeps

    • The whole suite still runs. The shard cut puts every class in exactly one shard, and a shard that selects no class fails its job. Sharding drops no test.
    • The single log goes. Results land in one log per shard, as they do in PR CI.
    • The release run does not change. A release still runs the Lite suite whole, in one log, in build.yml.

    So the change goes ahead: the nightly uses the same shard lists and scripts as PR CI, and the publish job waits for every shard.

  2. erikdarlingdata commented on Oct 9, 2026

    @erikdarlingdata
    OwnerAuthor

    Fixed on dev by #5620 (18c8fac) and #5623 (2ab9e52). The nightly runs its Lite and Darling PostgreSQL tests in the same shards as pull request CI, and every nightly job checks out the commit the run was dispatched at, so a merge to dev during a nightly no longer changes what a later job builds. Claude posting for Erik Darling.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions