mirror of
https://github.com/git-pkgs/proxy.git
synced 2026-07-06 22:33:19 -04:00
Compare commits
7 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
95318dedff |
||
|
|
b45757ea86 |
||
|
|
a8c0562c97 |
||
|
|
81d19b7632 |
||
|
|
7888296193 |
||
|
|
787b76dfe7 | ||
|
|
bb214bb7b2 |
5 changed files with 43 additions and 6 deletions
4
.github/workflows/ci.yml
vendored
4
.github/workflows/ci.yml
vendored
|
|
@ -22,7 +22,7 @@ jobs:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
|
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
|
||||||
with:
|
with:
|
||||||
go-version: ${{ matrix.go-version }}
|
go-version: ${{ matrix.go-version }}
|
||||||
|
|
||||||
|
|
@ -40,7 +40,7 @@ jobs:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
|
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
|
||||||
with:
|
with:
|
||||||
go-version: '1.25'
|
go-version: '1.25'
|
||||||
|
|
||||||
|
|
|
||||||
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
|
|
@ -22,7 +22,7 @@ jobs:
|
||||||
- uses: sigstore/cosign-installer@6f9f17788090df1f26f669e9d70d6ae9567deba6 # v4.1.2
|
- uses: sigstore/cosign-installer@6f9f17788090df1f26f669e9d70d6ae9567deba6 # v4.1.2
|
||||||
|
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
|
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
|
||||||
with:
|
with:
|
||||||
go-version-file: go.mod
|
go-version-file: go.mod
|
||||||
cache: false
|
cache: false
|
||||||
|
|
|
||||||
2
.github/workflows/swagger.yml
vendored
2
.github/workflows/swagger.yml
vendored
|
|
@ -17,7 +17,7 @@ jobs:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
|
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
|
||||||
with:
|
with:
|
||||||
go-version: '1.25'
|
go-version: '1.25'
|
||||||
|
|
||||||
|
|
|
||||||
2
.github/workflows/zizmor.yml
vendored
2
.github/workflows/zizmor.yml
vendored
|
|
@ -26,4 +26,4 @@ jobs:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Run zizmor
|
- name: Run zizmor
|
||||||
uses: zizmorcore/zizmor-action@5f14fd08f7cf1cb1609c1e344975f152c7ee938d # v0.5.6
|
uses: zizmorcore/zizmor-action@192e21d79ab29983730a13d1382995c2307fbcaa # v0.5.7
|
||||||
|
|
|
||||||
|
|
@ -316,6 +316,10 @@ func (h *ComposerHandler) handleDownload(w http.ResponseWriter, r *http.Request)
|
||||||
// stable and dev versions resolve correctly.
|
// stable and dev versions resolve correctly.
|
||||||
metaURLs := h.metadataURLsForVersion(vendor, pkg, version)
|
metaURLs := h.metadataURLsForVersion(vendor, pkg, version)
|
||||||
|
|
||||||
|
h.proxy.Logger.Debug("resolving download URL",
|
||||||
|
"package", packageName, "version", version,
|
||||||
|
"metadata_urls", metaURLs)
|
||||||
|
|
||||||
var downloadURL string
|
var downloadURL string
|
||||||
for _, metaURL := range metaURLs {
|
for _, metaURL := range metaURLs {
|
||||||
url, err := h.findDownloadURLFromMetadata(r.Context(), metaURL, packageName, version)
|
url, err := h.findDownloadURLFromMetadata(r.Context(), metaURL, packageName, version)
|
||||||
|
|
@ -331,10 +335,17 @@ func (h *ComposerHandler) handleDownload(w http.ResponseWriter, r *http.Request)
|
||||||
}
|
}
|
||||||
|
|
||||||
if downloadURL == "" {
|
if downloadURL == "" {
|
||||||
|
h.proxy.Logger.Debug("version not found in any metadata source",
|
||||||
|
"package", packageName, "version", version,
|
||||||
|
"tried_urls", metaURLs)
|
||||||
http.Error(w, "version not found", http.StatusNotFound)
|
http.Error(w, "version not found", http.StatusNotFound)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
h.proxy.Logger.Debug("resolved download URL",
|
||||||
|
"package", packageName, "version", version,
|
||||||
|
"download_url", downloadURL)
|
||||||
|
|
||||||
result, err := h.proxy.GetOrFetchArtifactFromURL(r.Context(), "composer", packageName, version, filename, downloadURL)
|
result, err := h.proxy.GetOrFetchArtifactFromURL(r.Context(), "composer", packageName, version, filename, downloadURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
h.proxy.Logger.Error("failed to get artifact", "error", err)
|
h.proxy.Logger.Error("failed to get artifact", "error", err)
|
||||||
|
|
@ -372,6 +383,9 @@ func (h *ComposerHandler) metadataURLsForVersion(vendor, pkg, version string) []
|
||||||
// An error is returned only on transport failure; a missing document (non-200)
|
// An error is returned only on transport failure; a missing document (non-200)
|
||||||
// or a missing version both yield an empty string so the caller can fall back.
|
// or a missing version both yield an empty string so the caller can fall back.
|
||||||
func (h *ComposerHandler) findDownloadURLFromMetadata(ctx context.Context, metaURL, packageName, version string) (string, error) {
|
func (h *ComposerHandler) findDownloadURLFromMetadata(ctx context.Context, metaURL, packageName, version string) (string, error) {
|
||||||
|
h.proxy.Logger.Debug("fetching upstream metadata for download lookup",
|
||||||
|
"url", metaURL, "package", packageName, "version", version)
|
||||||
|
|
||||||
req, err := http.NewRequestWithContext(ctx, http.MethodGet, metaURL, nil)
|
req, err := http.NewRequestWithContext(ctx, http.MethodGet, metaURL, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
|
|
@ -383,6 +397,9 @@ func (h *ComposerHandler) findDownloadURLFromMetadata(ctx context.Context, metaU
|
||||||
}
|
}
|
||||||
defer func() { _ = resp.Body.Close() }()
|
defer func() { _ = resp.Body.Close() }()
|
||||||
|
|
||||||
|
h.proxy.Logger.Debug("upstream metadata response",
|
||||||
|
"url", metaURL, "status", resp.StatusCode)
|
||||||
|
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
|
|
@ -392,7 +409,27 @@ func (h *ComposerHandler) findDownloadURLFromMetadata(ctx context.Context, metaU
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
return h.findDownloadURL(metadata, packageName, version), nil
|
// Expand minified Composer v2 format so that inherited fields (including
|
||||||
|
// dist) are present on every version entry. Without this, versions that
|
||||||
|
// inherit dist from a previous entry will appear to have no download URL.
|
||||||
|
if metadata["minified"] == "composer/2.0" {
|
||||||
|
h.proxy.Logger.Debug("expanding minified metadata", "url", metaURL)
|
||||||
|
if packages, ok := metadata["packages"].(map[string]any); ok {
|
||||||
|
for pkgName, versions := range packages {
|
||||||
|
versionList, ok := versions.([]any)
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
packages[pkgName] = expandMinifiedVersions(versionList)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
url := h.findDownloadURL(metadata, packageName, version)
|
||||||
|
h.proxy.Logger.Debug("download URL lookup result",
|
||||||
|
"url", metaURL, "package", packageName, "version", version,
|
||||||
|
"download_url", url)
|
||||||
|
return url, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// findDownloadURL finds the dist URL for a specific version in metadata.
|
// findDownloadURL finds the dist URL for a specific version in metadata.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue