mirror of
https://github.com/go-gitea/gitea.git
synced 2026-08-04 08:27:31 +00:00
6487d14855
Fixes #21624 Adds the npm package version metadata fields that Gitea's npm registry was previously dropping on publish, and implements the `npm deprecate` command, which Gitea did not accept before. ### New / pass-through metadata fields The following are now parsed from the publish payload, persisted in the stored `npm.Metadata`, and re-emitted on the abbreviated version manifest returned to npm clients: - `hasInstallScript` — auto-detected from `scripts.preinstall` / `scripts.install` / `scripts.postinstall` (also honors a client-supplied value). Without this flag, `npm install` skips lifecycle scripts. - `_hasShrinkwrap` — authoritatively derived by inspecting the uploaded tarball for a top-level `*/npm-shrinkwrap.json` entry. Client-supplied values are ignored. Decompression failures fall back to `false` and do not block publish (integrity has already been validated). - `engines` (`map[string]string`) - `cpu`, `os` (`[]string`) - `directories` (`map[string]string`) - `funding` (`any`; preserves the spec's string / object / array shape) - `acceptDependencies` (`map[string]string`) - `deprecated` (`string`) `peerDependenciesMeta` was already in the stored struct but is now exercised by tests. ### `npm deprecate` support `npm deprecate <pkg-spec> <message>` PUTs the package document to the same URL as publish but with no `_attachments`. The router now detects that shape and routes to a new handler that updates each affected version's stored `Metadata.Deprecated` via `packages_model.UpdateVersion`. An empty message clears the flag (undeprecate). Unknown versions are silently skipped, matching npm's behavior. No new routes were added. Supported invocations include: - `npm deprecate my-thing@"< 0.2.3" "critical bug fixed in v0.2.3"` - `npm deprecate my-thing@1.x "1.x is no longer supported"` - `npm deprecate my-thing@1.0.0 ""` (undeprecate) --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: bircni <bircni@icloud.com>
37 lines
2.1 KiB
Go
37 lines
2.1 KiB
Go
// Copyright 2021 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package npm
|
|
|
|
// TagProperty is the name of the property for tag management
|
|
const TagProperty = "npm.tag"
|
|
|
|
// Metadata represents the metadata of a npm package
|
|
type Metadata struct {
|
|
Scope string `json:"scope,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
Author string `json:"author,omitempty"`
|
|
License License `json:"license,omitempty"`
|
|
ProjectURL string `json:"project_url,omitempty"`
|
|
Keywords []string `json:"keywords,omitempty"`
|
|
Dependencies map[string]string `json:"dependencies,omitempty"`
|
|
BundleDependencies []string `json:"bundleDependencies,omitempty"`
|
|
DevelopmentDependencies map[string]string `json:"development_dependencies,omitempty"`
|
|
PeerDependencies map[string]string `json:"peer_dependencies,omitempty"`
|
|
PeerDependenciesMeta map[string]any `json:"peer_dependencies_meta,omitempty"`
|
|
OptionalDependencies map[string]string `json:"optional_dependencies,omitempty"`
|
|
Bin map[string]string `json:"bin,omitempty"`
|
|
Readme string `json:"readme,omitempty"`
|
|
Repository Repository `json:"repository"`
|
|
HasInstallScript bool `json:"has_install_script,omitempty"`
|
|
HasShrinkwrap bool `json:"has_shrinkwrap,omitempty"`
|
|
Engines map[string]string `json:"engines,omitempty"`
|
|
CPU []string `json:"cpu,omitempty"`
|
|
OS []string `json:"os,omitempty"`
|
|
Directories map[string]string `json:"directories,omitempty"`
|
|
Funding any `json:"funding,omitempty"`
|
|
AcceptDependencies map[string]string `json:"accept_dependencies,omitempty"`
|
|
Deprecated string `json:"deprecated,omitempty"`
|
|
}
|