Hi @henderkes,
Thanks for sending those packages over. I was able to recreate some issues with those packages and we are currently still looking for the cause. I'll send over an update once I have a bit more information.
Thanks,
Rich
Hi @henderkes,
Thanks for sending those packages over. I was able to recreate some issues with those packages and we are currently still looking for the cause. I'll send over an update once I have a bit more information.
Thanks,
Rich
There are certain types of OCI images that are not supported in ProGet (covered in this forums post), but the application/vnd.oci.image.manifest.v1+json image type manifest is supported. I'm guessing this is a quirk with Artifactory. What I have learned through implementing this importer is that Artifactory is very dependent on the order of accept headers. It is possible that the order is not quite right. Our order for the importers are:
private static HttpRequestMessage CreateDockerHttpRequest(HttpMethod method, string url)
{
var request = new HttpRequestMessage(method, url);
// Order matters here, especially with Artifactory
request.Headers.Accept.Add(new("application/vnd.docker.distribution.manifest.v2+json"));
request.Headers.Accept.Add(new("application/vnd.docker.distribution.manifest.list.v2+json"));
request.Headers.Accept.Add(new("application/vnd.docker.distribution.manifest.v1+prettyjws"));
request.Headers.Accept.Add(new("application/json"));
request.Headers.Accept.Add(new("application/vnd.oci.image.manifest.v1+json"));
request.Headers.Accept.Add(new("application/vnd.oci.image.index.v1+json"));
return request;
}
Is it possible to share an example Docker file that we could build an image that has this import image? That way I can verify it mixed with standard Docker images.
Thanks,
Rich
Hi @mayorovp_3701,
This is a bug you should definitely report to GitLab -- it's clearly required by the API and all other registries support it. Without that API defined, we have to "make guesses" based on undocumented conventions (i.e. /v3-flatcontainer/{id}), which causes headaches down the line. That's why there's an API contract :)
I don't know how/why it works with dotnet sdk -- perhaps it's using a different endpoint, or maybe it's not actually working and just going to NuGet.org. Whatever the case, it doesn't make sense for us to build workarounds for easily-fixable bugs on GitLab when other vendors seem to follow the API contract.
-- Dean
Hi @henderkes,
I did try to download that script to extract the repo you were referring to, but Alpine does not have bash installed, only ash, so I get an error when attempting to run it. Could you please provide me a direct link? To be honest, this all screams a configuration error on Alpine or an issue with the APK directly.
In my test, I created a feed in ProGet with a connector created pointing to "https://repos.zend.com/zendphp/apk_alpine320/x86_64/". I then added my feed to alpine, apk update, and then apk add php85zend. Everything worked as expected.
Thanks,
Rich
Hi @jw ,
Nice catch, we'll add pgutil builds delete and pgutil builds projects delete via PG-3189
You may be able to use pgutil builds create to archive a build (`--inactive), but I'm not sure. Either way, there's no way to flip it back, so we will update it.
The create command can also update, but it's not clear, so we will edit the help text to clarify.
-- Dean
Hi @henderkes,
Can you provide where you are getting your test packages from? I have a feeling it has to do with them more than the index. I setup the environment you specified with alpine packages I pulled from Zend PHP and had no issues. I was able to update the index and install multiple packages.
Thanks,
Rich
Hi @henderkes,
Thank you for sending all this over! We are going to dig into this a bit further and will let you know what we find.
Thanks,
Rich
@jonathan-werder_8656 great point, we'll add that to our list to document! Thanks for pointing it out
Hi @tim-vanryzin_8423 ,
Great question on developer experience! We're very curious to learn that ourselves, so please let us know as you implement it.
First and foremost, if you haven't already, check out the Recently Published & Aged Packages rules blog article to see how this works and our current advice. FYI - we are likely going to change the best practices guidance in 2026 to discourage download blocking.
From an API/technical standpoint, it's simply not possible to "hide" the fact that 1.12.15 is the latest version. So, if you have a connector, ProGet will report the latest version as reported by the connector.
But even it were technically possible, there's no simply great developer experience here. Keep in mind that most never look at the ProGet ui -- they configure things once, and forgeet about it.
So really, it's just a question of when you want the developer to find out they can't use Xyz-1.12.15. Here are the general options:
pgutil builds audit on your build server, and you can see if the packages are noncompliant; this is where we are shifting our advice, as a failed build at that stage will be so much more obvious than a 400 buried in a package restore stepUltimately this requires training developers to use lock files and not always get latest. That's why we are shifting to pgutil builds audit -- it's almost self-training. When their builds fail, they will see the reason clearly and should be able to adjust their code/configuration to not use a non-compliant version.
-- Dean
Thanks! This will be fixed in today's release of ProGet 2025.17 as PG-3187.