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