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  }