apple / pkl

A configuration as code language with rich validation and tooling.
https://pkl-lang.org
Apache License 2.0
10.15k stars 271 forks source link

Dependency mirroring RFC #420

Open bvalyou opened 5 months ago

bvalyou commented 5 months ago

I have dependency mirroring and mirror replication as requirements for my intended use case. I have some ideas for how to hack around it short term but would like to understand how mirroring (referenced in https://github.com/apple/pkl/issues/153) is intended to work long term so I can limit rework later.

My guess is that there will be an argument to pkl project resolve like --mirror pkg.pkl-lang.org=example.com/pkl (supporting multiple mirrors) which would act as a replacer pattern for package manifests when pulling into the cache.

My current thought for working around it is to mirror the raw dependency (in an OCI repo, https://github.com/apple/pkl/issues/354) and for each dependency of my project

Then use all resolved dependencies as local dependencies.

I'll also have to mirror all transitive dependencies on the inbound side but that's workable.

It would be a big help to understand if this is wildly different from the planned mirror support or if I'm over-engineering it (which wouldn't shock me).

Thanks!

bioball commented 5 months ago

I know you already said mirroring is a requirement, but: would HTTP proxying be good enough for you?

To support mirroring, we are considering rewrite rules. This is hand-wavey, but, possibly would work by adding something to the Pkl settings file. Something like:

groovy

// ~/.pkl/settings.pkl

packageRewriteRules {
  [#"https://pkg.pkl-lang.org/.*/(\w+)#] = "https://my.company.com/$1/$1"
}

But, we wouldn't implement this if HTTP proxying is good enough.

bvalyou commented 5 months ago

HTTP proxy is not good enough, unfortunately