1
0
Fork 0
mirror of https://github.com/imjasonh/kontain.me synced 2026-07-18 14:47:48 +00:00

support HEAD for the rest of them

This commit is contained in:
Jason Hall 2021-01-28 22:15:47 -05:00
parent 6d00baaf15
commit d466ea0402
6 changed files with 128 additions and 7 deletions

View file

@ -84,6 +84,25 @@ func (s *server) serveWaitManifest(w http.ResponseWriter, r *http.Request) {
parts := strings.Split(path, "/")
name := strings.Join(parts[:len(parts)-2], "/")
// If request is for image by digest, try to serve it from GCS.
tagOrDigest := parts[len(parts)-1]
if strings.HasPrefix(tagOrDigest, "sha256:") {
desc, err := s.storage.BlobExists(ctx, tagOrDigest)
if err != nil {
s.error.Printf("ERROR (storage.BlobExists): %s", err)
serve.Error(w, serve.ErrNotFound)
return
}
if r.Method == http.MethodHead {
w.Header().Set("Docker-Content-Digest", tagOrDigest)
w.Header().Set("Content-Type", string(desc.MediaType))
w.Header().Set("Content-Length", fmt.Sprintf("%d", desc.Size))
return
}
serve.Blob(w, r, tagOrDigest)
return
}
// The image has already been built; serve it.
ck := cacheKey(name)
if _, err := s.storage.BlobExists(ctx, ck); err == nil {
@ -102,7 +121,7 @@ func (s *server) serveWaitManifest(w http.ResponseWriter, r *http.Request) {
}
// No cached image or placeholder exists; enqueue a new task.
tag := strings.TrimPrefix(r.URL.Path, fmt.Sprintf("/v2/%s/manifests/", name))
tag := tagOrDigest
if tag == "latest" {
tag = "10s"
}