Skip to content

Nightly builds: publish Darling service + viewer + pg-runtime zip - #1550

Merged
erikdarlingdata merged 2 commits into
devfrom
feature/nightly-darling-artifacts
Jul 17, 2026
Merged

Nightly builds: publish Darling service + viewer + pg-runtime zip#1550
erikdarlingdata merged 2 commits into
devfrom
feature/nightly-darling-artifacts

Conversation

@erikdarlingdata

Copy link
Copy Markdown
Owner

Summary

The nightly release carried only Dashboard, Lite, and the CLI Installer — testing Darling in another environment meant cloning and building dev. This mirrors the release workflow's Darling artifact into nightly.yml so every nightly publishes a public PerformanceMonitorDarling-<version>.zip.

Changes

  • Restore + publish DarlingService and DarlingViewer (locked-mode restore, same publish commands as build.yml)
  • pg-runtime cache + fetch with the same content-hash cache key build.yml uses (pg-runtime-<os>-<hash of fetch-pg-runtime.ps1>), so the ~340MB EDB/TimescaleDB fetch runs at most once per pin-set and nightly/release runs share the assembled zip when the cache is visible
  • Package in the exact release layout (build.yml "Package Darling (signed)"): service at the archive root with darling.sample.json alongside, viewer under viewer\, pg-runtime.zip beside the service exe where DarlingManagedPostgres extracts it on first run — staged from publish/ instead of signed/ since nightly artifacts are unsigned across the board
  • The zip flows into SHA256SUMS.txt and the nightly release automatically via the existing releases/*.zip glob
  • CHANGELOG [Unreleased] entry + link-ref

Why

Erik needs to stand Darling up on a server in a different environment via an agent. With this, the agent downloads the public nightly zip (stable URL: https://github.com/erikdarlingdata/PerformanceMonitor/releases/download/nightly/PerformanceMonitorDarling-<version>.zip) instead of needing the repo + SDK to build from dev.

Testing

  • nightly.yml parses clean (YAML validated)
  • Steps are verbatim mirrors of the release-proven build.yml equivalents (publish commands, cache key/path, fetch guard, package layout)
  • Real proof is the next nightly run (or a manual workflow_dispatch after merge — the workflow already supports it)

🤖 Generated with Claude Code

erikdarlingdata and others added 2 commits July 17, 2026 10:15
The nightly release carried only Dashboard/Lite/Installer, so testing
Darling in another environment meant building from dev. Mirror the
release workflow's Darling artifact into the nightly job:

- restore + publish DarlingService and DarlingViewer (locked-mode)
- pg-runtime cache + fetch with the SAME content-hash key build.yml
  uses, so the ~340MB EDB/TimescaleDB fetch runs at most once per
  pin-set and nightly/release share the assembled zip
- package PerformanceMonitorDarling-<version>.zip in the release
  layout: service at root (darling.sample.json alongside), viewer
  under viewer\, pg-runtime.zip beside the service exe where
  DarlingManagedPostgres extracts it on first run
- the zip flows into SHA256SUMS.txt and the nightly release via the
  existing releases/*.zip glob; unsigned like every nightly artifact

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
PerformanceMonitor.Darling.Service has no packages.lock.json, so a
--locked-mode restore fails with NU1004. build.yml never restores it
directly either — the release path's dotnet publish does the implicit
restore. Mirror that: locked restore for the viewer only (which has a
lock file), publish handles the service.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@erikdarlingdata
erikdarlingdata merged commit 64c3c36 into dev Jul 17, 2026
2 checks passed
@erikdarlingdata
erikdarlingdata deleted the feature/nightly-darling-artifacts branch July 17, 2026 14:25
pull Bot pushed a commit to ehtick/PerformanceMonitor that referenced this pull request Jul 29, 2026
…hat executes

Scheduled workflows always execute the DEFAULT branch's copy of the
workflow file, while nightly artifacts deliberately build from dev's
tree. That skew is exactly how the 2026-07-26 scheduled nightly failed
(run 30194606068): main's stale copy still read Dashboard/Dashboard.csproj,
a path erikdarlingdata#1612 moved to deprecated/ on dev, so 'Set nightly version' died
on a file missing from the tree it had just checked out. Same trap as
before (erikdarlingdata#1550/erikdarlingdata#1551) - syncing the file again would fix tonight and
re-break at the next pre-release layout drift.

Structural fix instead: on schedule the workflow does nothing but
re-dispatch itself onto the dev ref (GITHUB_TOKEN can create
workflow_dispatch runs; the Actions recursion guard exempts
workflow_dispatch, and the dispatched run cannot loop back because it
arrives as workflow_dispatch, not schedule). A workflow_dispatch run
executes the DISPATCHED ref's copy of the file - dev's, current by
definition - so after a one-time sync of this file to main, main's copy
has exactly one tree-independent job that must keep working, and nightly
logic changes take effect the night they merge to dev.

Semantics preserved: manual dispatches (from_schedule defaults false)
always build, exactly as before; the scheduled path keeps the 24h
new-commit check via from_schedule=true; the artifact-publishing build
job stays pinned to ref dev so a branch dispatch still cannot ship
branch binaries.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant