working commit

This commit is contained in:
2026-03-01 17:07:20 +02:00
parent 9fa5a00421
commit 86c7831cd8
19 changed files with 27 additions and 112 deletions

View File

@@ -1,4 +1,4 @@
package client
package repocli
import (
"encoding/base64"

View File

@@ -1,4 +1,4 @@
package client
package repocli
import (
"context"

View File

@@ -1,4 +1,4 @@
package client
package repocli
import (
"crypto/tls"

View File

@@ -1,4 +1,4 @@
package client
package repocli
import (
"github.com/stretchr/testify/require"

View File

@@ -1,4 +1,4 @@
package client
package repocli
import (
"context"

View File

@@ -1,4 +1,4 @@
package client
package repocli
import (
"github.com/stretchr/testify/require"

View File

@@ -1,4 +1,4 @@
package client
package repocli
import (
"context"

View File

@@ -1,4 +1,4 @@
package client
package repocli
import (
"crypto/sha256"

View File

@@ -1,4 +1,4 @@
package client
package repocli
import (
"context"

View File

@@ -1,4 +1,4 @@
package client
package repocli
import (
"bytes"

View File

@@ -1,4 +1,4 @@
package client
package repocli
import (
"context"

6
go.mod
View File

@@ -2,10 +2,14 @@ module client
go 1.25.0
require github.com/stretchr/testify v1.11.1
require (
github.com/opencontainers/image-spec v1.1.0
github.com/stretchr/testify v1.11.1
)
require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

6
go.sum
View File

@@ -1,5 +1,11 @@
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=

View File

@@ -1,4 +1,4 @@
package client
package repocli
import (
"context"

View File

@@ -1,4 +1,4 @@
package client
package repocli
const (
MediaTypeDDMLv2 = "application/vnd.docker.distribution.manifest.list.v2+json"

View File

@@ -1,4 +1,4 @@
package client
package repocli
import (
"context"

View File

@@ -1,4 +1,4 @@
package client
package repocli
import (
"bytes"

View File

@@ -1,4 +1,4 @@
package client
package repocli
import (
"context"

View File

@@ -1,95 +0,0 @@
package client
import (
"net/url"
"strings"
)
type Repository struct {
urlobj *url.URL
user, pass string
base string
}
func NewRepository(rawrepo string) (*Repository, error) {
repo := &Repository{}
if !strings.Contains(rawrepo, "://") {
rawrepo = "https://" + rawrepo
}
urlobj, err := url.Parse(rawrepo)
if err != nil {
return repo, err
}
if urlobj.User != nil {
repo.user = urlobj.User.Username()
repo.pass, _ = urlobj.User.Password()
urlobj.User = nil
}
repo.urlobj = urlobj
repo.base = repo.urlobj.Path
repo.urlobj.Path = "/"
repo.urlobj = urlobj
return repo, err
}
func (repo *Repository) Manifest(tag string) string {
curl := repo.urlobj.JoinPath("/v2", repo.base, "/manifests", tag)
return curl.String()
}
func (repo *Repository) Blob(digest string) string {
curl := repo.urlobj.JoinPath("/v2", repo.base, "/blobs", digest)
return curl.String()
}
func (repo *Repository) Upload() string {
curl := repo.urlobj.JoinPath("/v2", repo.base, "/blobs/uploads/")
return curl.String()
}
func (repo *Repository) Patch(loc string) (string, error) {
var curl *url.URL
var out string
var err error
if isUUID(loc) {
curl = repo.urlobj.JoinPath("/v2/", repo.base, "/blobs/uploads/", loc)
return curl.String(), nil
}
if strings.Contains(loc, "://") {
curl, err = url.Parse(loc)
if err != nil {
return out, err
}
} else {
curl = repo.urlobj.JoinPath(loc)
}
out = curl.String()
return out, err
}
func (repo *Repository) Put(loc, digest string) (string, error) {
var curl *url.URL
var out string
var err error
if isUUID(loc) {
curl = repo.urlobj.JoinPath("/v2/", repo.base, "/blobs/uploads/", loc)
} else if strings.Contains(loc, "://") {
curl, err = url.Parse(loc)
if err != nil {
return out, err
}
} else {
curl = repo.urlobj.JoinPath(loc)
}
query := curl.Query()
query.Set("digest", digest)
curl.RawQuery = query.Encode()
out = curl.String()
return out, err
}
func (repo *Repository) Userinfo() (string, string) {
return repo.user, repo.pass
}