github.com/google/go-github/v70@v70.0.0/github/packages.go (about) 1 // Copyright 2020 The go-github AUTHORS. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style 4 // license that can be found in the LICENSE file. 5 6 package github 7 8 import ( 9 "encoding/json" 10 ) 11 12 // Package represents a GitHub package. 13 type Package struct { 14 ID *int64 `json:"id,omitempty"` 15 Name *string `json:"name,omitempty"` 16 PackageType *string `json:"package_type,omitempty"` // One of "npm", "maven", "rubygems", "docker", "nuget", "container". For webhook events "container" is "CONTAINER" 17 HTMLURL *string `json:"html_url,omitempty"` 18 Visibility *string `json:"visibility,omitempty"` 19 Owner *User `json:"owner,omitempty"` 20 CreatedAt *Timestamp `json:"created_at,omitempty"` 21 UpdatedAt *Timestamp `json:"updated_at,omitempty"` 22 23 // The following are only populated for webhook events 24 Namespace *string `json:"namespace,omitempty"` 25 Description *string `json:"description,omitempty"` 26 Ecosystem *string `json:"ecosystem,omitempty"` 27 PackageVersion *PackageVersion `json:"package_version,omitempty"` 28 Registry *PackageRegistry `json:"registry,omitempty"` 29 30 // The following are NOT populated for webhook events 31 URL *string `json:"url,omitempty"` 32 VersionCount *int64 `json:"version_count,omitempty"` 33 } 34 35 func (p Package) String() string { 36 return Stringify(p) 37 } 38 39 // PackageVersion represents a GitHub package version. 40 type PackageVersion struct { 41 ID *int64 `json:"id,omitempty"` 42 Name *string `json:"name,omitempty"` 43 URL *string `json:"url,omitempty"` 44 PackageHTMLURL *string `json:"package_html_url,omitempty"` 45 License *string `json:"license,omitempty"` 46 Description *string `json:"description,omitempty"` 47 CreatedAt *Timestamp `json:"created_at,omitempty"` 48 UpdatedAt *Timestamp `json:"updated_at,omitempty"` 49 Metadata json.RawMessage `json:"metadata,omitempty"` // For webhook events this will be []interface, else it will be of type PackageMetadata 50 51 // The following are only populated for webhook events 52 Version *string `json:"version,omitempty"` 53 Summary *string `json:"summary,omitempty"` 54 Body json.RawMessage `json:"body,omitempty"` // Can either be a string or of type PackageVersionBody 55 BodyHTML *string `json:"body_html,omitempty"` 56 Release *PackageRelease `json:"release,omitempty"` 57 Manifest *string `json:"manifest,omitempty"` 58 HTMLURL *string `json:"html_url,omitempty"` 59 TagName *string `json:"tag_name,omitempty"` 60 TargetCommitish *string `json:"target_commitish,omitempty"` 61 TargetOID *string `json:"target_oid,omitempty"` 62 Draft *bool `json:"draft,omitempty"` 63 Prerelease *bool `json:"prerelease,omitempty"` 64 ContainerMetadata *PackageEventContainerMetadata `json:"container_metadata,omitempty"` 65 DockerMetadata []interface{} `json:"docker_metadata,omitempty"` 66 NPMMetadata *PackageNPMMetadata `json:"npm_metadata,omitempty"` 67 NugetMetadata []*PackageNugetMetadata `json:"nuget_metadata,omitempty"` 68 RubyMetadata map[string]any `json:"ruby_metadata,omitempty"` 69 PackageFiles []*PackageFile `json:"package_files,omitempty"` 70 PackageURL *string `json:"package_url,omitempty"` 71 Author *User `json:"author,omitempty"` 72 SourceURL *string `json:"source_url,omitempty"` 73 InstallationCommand *string `json:"installation_command,omitempty"` 74 75 // The following are NOT populated for webhook events 76 DeletedAt *Timestamp `json:"deleted_at,omitempty"` 77 } 78 79 // GetBody returns the body field as a string if it's valid. 80 func (pv *PackageVersion) GetBody() (body string, ok bool) { 81 if pv == nil || pv.Body == nil { 82 return "", false 83 } 84 85 if err := json.Unmarshal(pv.Body, &body); err != nil { 86 return "", false 87 } 88 89 return body, true 90 } 91 92 // GetBodyAsPackageVersionBody returns the body field as a PackageVersionBody if it's valid. 93 func (pv *PackageVersion) GetBodyAsPackageVersionBody() (body *PackageVersionBody, ok bool) { 94 if pv == nil || pv.Body == nil { 95 return nil, false 96 } 97 98 if err := json.Unmarshal(pv.Body, &body); err != nil { 99 return nil, false 100 } 101 102 return body, true 103 } 104 105 // GetMetadata returns the metadata field as PackageMetadata if it's valid. 106 func (pv *PackageVersion) GetMetadata() (metadata *PackageMetadata, ok bool) { 107 if pv == nil || pv.Metadata == nil { 108 return nil, false 109 } 110 111 if err := json.Unmarshal(pv.Metadata, &metadata); err != nil { 112 return nil, false 113 } 114 115 return metadata, true 116 } 117 118 // GetRawMetadata returns the metadata field as a json.RawMessage. 119 func (pv *PackageVersion) GetRawMetadata() json.RawMessage { 120 if pv == nil || pv.Metadata == nil { 121 return json.RawMessage{} 122 } 123 124 return pv.Metadata 125 } 126 127 func (pv PackageVersion) String() string { 128 return Stringify(pv) 129 } 130 131 // PackageRelease represents a GitHub package version release. 132 type PackageRelease struct { 133 URL *string `json:"url,omitempty"` 134 HTMLURL *string `json:"html_url,omitempty"` 135 ID *int64 `json:"id,omitempty"` 136 TagName *string `json:"tag_name,omitempty"` 137 TargetCommitish *string `json:"target_commitish,omitempty"` 138 Name *string `json:"name,omitempty"` 139 Draft *bool `json:"draft,omitempty"` 140 Author *User `json:"author,omitempty"` 141 Prerelease *bool `json:"prerelease,omitempty"` 142 CreatedAt *Timestamp `json:"created_at,omitempty"` 143 PublishedAt *Timestamp `json:"published_at,omitempty"` 144 } 145 146 func (r PackageRelease) String() string { 147 return Stringify(r) 148 } 149 150 // PackageFile represents a GitHub package version release file. 151 type PackageFile struct { 152 DownloadURL *string `json:"download_url,omitempty"` 153 ID *int64 `json:"id,omitempty"` 154 Name *string `json:"name,omitempty"` 155 SHA256 *string `json:"sha256,omitempty"` 156 SHA1 *string `json:"sha1,omitempty"` 157 MD5 *string `json:"md5,omitempty"` 158 ContentType *string `json:"content_type,omitempty"` 159 State *string `json:"state,omitempty"` 160 Author *User `json:"author,omitempty"` 161 Size *int64 `json:"size,omitempty"` 162 CreatedAt *Timestamp `json:"created_at,omitempty"` 163 UpdatedAt *Timestamp `json:"updated_at,omitempty"` 164 } 165 166 func (pf PackageFile) String() string { 167 return Stringify(pf) 168 } 169 170 // PackageRegistry represents a GitHub package registry. 171 type PackageRegistry struct { 172 AboutURL *string `json:"about_url,omitempty"` 173 Name *string `json:"name,omitempty"` 174 Type *string `json:"type,omitempty"` 175 URL *string `json:"url,omitempty"` 176 Vendor *string `json:"vendor,omitempty"` 177 } 178 179 func (r PackageRegistry) String() string { 180 return Stringify(r) 181 } 182 183 // PackageListOptions represents the optional list options for a package. 184 type PackageListOptions struct { 185 // Visibility of packages "public", "internal" or "private". 186 Visibility *string `url:"visibility,omitempty"` 187 188 // PackageType represents the type of package. 189 // It can be one of "npm", "maven", "rubygems", "nuget", "docker", or "container". 190 PackageType *string `url:"package_type,omitempty"` 191 192 // State of package either "active" or "deleted". 193 State *string `url:"state,omitempty"` 194 195 ListOptions 196 } 197 198 // PackageMetadata represents metadata from a package. 199 type PackageMetadata struct { 200 PackageType *string `json:"package_type,omitempty"` 201 Container *PackageContainerMetadata `json:"container,omitempty"` 202 } 203 204 func (r PackageMetadata) String() string { 205 return Stringify(r) 206 } 207 208 // PackageContainerMetadata represents container metadata for docker container packages. 209 type PackageContainerMetadata struct { 210 Tags []string `json:"tags,omitempty"` 211 } 212 213 func (r PackageContainerMetadata) String() string { 214 return Stringify(r) 215 } 216 217 // PackageVersionBody represents the body field of a package version. 218 type PackageVersionBody struct { 219 Repo *Repository `json:"repository,omitempty"` 220 Info *PackageVersionBodyInfo `json:"info,omitempty"` 221 } 222 223 func (b PackageVersionBody) String() string { 224 return Stringify(b) 225 } 226 227 // PackageVersionBodyInfo represents the info field of a PackageVersionBody. 228 type PackageVersionBodyInfo struct { 229 Type *string `json:"type,omitempty"` 230 OID *string `json:"oid,omitempty"` 231 Mode *int64 `json:"mode,omitempty"` 232 Name *string `json:"name,omitempty"` 233 Path *string `json:"path,omitempty"` 234 Size *int64 `json:"size,omitempty"` 235 Collection *bool `json:"collection,omitempty"` 236 } 237 238 func (bi PackageVersionBodyInfo) String() string { 239 return Stringify(bi) 240 } 241 242 // PackageEventContainerMetadata represents metadata for container packages as part of a webhook event. 243 // See also PackageContainerMetadata. 244 type PackageEventContainerMetadata struct { 245 Labels map[string]any `json:"labels,omitempty"` 246 Manifest map[string]any `json:"manifest,omitempty"` 247 Tag *PackageEventContainerMetadataTag `json:"tag,omitempty"` 248 } 249 250 func (m PackageEventContainerMetadata) String() string { 251 return Stringify(m) 252 } 253 254 // PackageEventContainerMetadataTag represents a tag of a GitHub container package. 255 type PackageEventContainerMetadataTag struct { 256 Name *string `json:"name,omitempty"` 257 Digest *string `json:"digest,omitempty"` 258 } 259 260 func (mt PackageEventContainerMetadataTag) String() string { 261 return Stringify(mt) 262 } 263 264 // PackageNugetMetadata represents nuget metadata for a GitHub package. 265 type PackageNugetMetadata struct { 266 ID json.RawMessage `json:"id,omitempty"` // Can either be a int64 or string 267 Name *string `json:"name,omitempty"` 268 Value json.RawMessage `json:"value,omitempty"` // Can either be a bool, string, integer or object 269 } 270 271 func (nm PackageNugetMetadata) String() string { 272 return Stringify(nm) 273 } 274 275 // PackageNPMMetadata represents NPM metadata for a GitHub package. 276 type PackageNPMMetadata struct { 277 Name *string `json:"name,omitempty"` 278 Version *string `json:"version,omitempty"` 279 NPMUser *string `json:"npm_user,omitempty"` 280 Author map[string]string `json:"author,omitempty"` 281 Bugs map[string]string `json:"bugs,omitempty"` 282 Dependencies map[string]string `json:"dependencies,omitempty"` 283 DevDependencies map[string]string `json:"dev_dependencies,omitempty"` 284 PeerDependencies map[string]string `json:"peer_dependencies,omitempty"` 285 OptionalDependencies map[string]string `json:"optional_dependencies,omitempty"` 286 Description *string `json:"description,omitempty"` 287 Dist map[string]string `json:"dist,omitempty"` 288 GitHead *string `json:"git_head,omitempty"` 289 Homepage *string `json:"homepage,omitempty"` 290 License *string `json:"license,omitempty"` 291 Main *string `json:"main,omitempty"` 292 Repository map[string]string `json:"repository,omitempty"` 293 Scripts map[string]any `json:"scripts,omitempty"` 294 ID *string `json:"id,omitempty"` 295 NodeVersion *string `json:"node_version,omitempty"` 296 NPMVersion *string `json:"npm_version,omitempty"` 297 HasShrinkwrap *bool `json:"has_shrinkwrap,omitempty"` 298 Maintainers []interface{} `json:"maintainers,omitempty"` 299 Contributors []interface{} `json:"contributors,omitempty"` 300 Engines map[string]string `json:"engines,omitempty"` 301 Keywords []string `json:"keywords,omitempty"` 302 Files []string `json:"files,omitempty"` 303 Bin map[string]any `json:"bin,omitempty"` 304 Man map[string]any `json:"man,omitempty"` 305 Directories map[string]string `json:"directories,omitempty"` 306 OS []string `json:"os,omitempty"` 307 CPU []string `json:"cpu,omitempty"` 308 Readme *string `json:"readme,omitempty"` 309 InstallationCommand *string `json:"installation_command,omitempty"` 310 ReleaseID *int64 `json:"release_id,omitempty"` 311 CommitOID *string `json:"commit_oid,omitempty"` 312 PublishedViaActions *bool `json:"published_via_actions,omitempty"` 313 DeletedByID *int64 `json:"deleted_by_id,omitempty"` 314 } 315 316 func (nm PackageNPMMetadata) String() string { 317 return Stringify(nm) 318 }