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  }