Installation
There are two supported ways to run Heimdall: pull the container image published on every tagged release, or build it from source.
Container image (recommended)
The release workflow pushes two tags to GitHub Container Registry on every
vX.Y.Z Git tag:
docker pull ghcr.io/markeli/heimdall:latest
docker pull ghcr.io/markeli/heimdall:0.1.0
The image listens on port 8080 and looks for config.yml next to
Heimdall.Api.dll at /app/. Mount one in:
docker run --rm -p 8080:8080 \
-v $(pwd)/config.yml:/app/config.yml \
ghcr.io/markeli/heimdall:latest
You should see Heimdall log a startup line and accept connections on
http://localhost:8080. Probe it with:
curl -fsSL http://localhost:8080/healthz
# ok
If your environment requires explicit listen settings, override them via
configuration (heimdall.server.listen) or
environment variables (HEIMDALL_HEIMDALL__SERVER__LISTEN=...); see
Configuration overview.
From source
You need the .NET 10 SDK (matches global.json) and a checkout of the repo.
git clone https://github.com/Markeli/Heimdall.git
cd Heimdall
dotnet tool restore
dotnet cake --target=Test
dotnet run --project src/Heimdall.Api
The dev server binds to http://localhost:8080 and loads
src/Heimdall.Api/config.yml. See Building for
the Cake targets and Configuration overview
for the layered config files.
What you should see
The first request to the service index returns Heimdall-rewritten URLs:
curl -fsSL http://localhost:8080/nuget/strict/v3/index.json | jq '.resources[].type'
"RegistrationsBaseUrl/3.6.0"
"PackageBaseAddress/3.0.0"
"SearchQueryService"
Every @id in that document points back at Heimdall — clients never address
the upstream directly. From here, head over to the quick
start to wire up a NuGet client.