Add bin to Composer Metadata (#32099)

This PR addresses the missing `bin` field in Composer metadata, which
currently causes vendor-provided binaries to not be symlinked to
`vendor/bin` during installation.

In the current implementation, running `composer install` does not
publish the binaries, leading to issues where expected binaries are not
available.

By properly declaring the `bin` field, this PR ensures that binaries are
correctly symlinked upon installation, as described in the [Composer
documentation](https://getcomposer.org/doc/articles/vendor-binaries.md).
pull/31664/head
Jamie Schouten 2 months ago committed by GitHub
parent a802508f88
commit d351a42494
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 1
      modules/packages/composer/metadata.go
  2. 8
      tests/integration/api_packages_composer_test.go

@ -48,6 +48,7 @@ type Metadata struct {
Homepage string `json:"homepage,omitempty"` Homepage string `json:"homepage,omitempty"`
License Licenses `json:"license,omitempty"` License Licenses `json:"license,omitempty"`
Authors []Author `json:"authors,omitempty"` Authors []Author `json:"authors,omitempty"`
Bin []string `json:"bin,omitempty"`
Autoload map[string]any `json:"autoload,omitempty"` Autoload map[string]any `json:"autoload,omitempty"`
AutoloadDev map[string]any `json:"autoload-dev,omitempty"` AutoloadDev map[string]any `json:"autoload-dev,omitempty"`
Extra map[string]any `json:"extra,omitempty"` Extra map[string]any `json:"extra,omitempty"`

@ -36,6 +36,7 @@ func TestPackageComposer(t *testing.T) {
packageType := "composer-plugin" packageType := "composer-plugin"
packageAuthor := "Gitea Authors" packageAuthor := "Gitea Authors"
packageLicense := "MIT" packageLicense := "MIT"
packageBin := "./bin/script"
var buf bytes.Buffer var buf bytes.Buffer
archive := zip.NewWriter(&buf) archive := zip.NewWriter(&buf)
@ -49,6 +50,9 @@ func TestPackageComposer(t *testing.T) {
{ {
"name": "` + packageAuthor + `" "name": "` + packageAuthor + `"
} }
],
"bin": [
"` + packageBin + `"
] ]
}`)) }`))
archive.Close() archive.Close()
@ -210,6 +214,8 @@ func TestPackageComposer(t *testing.T) {
assert.Len(t, pkgs[0].Authors, 1) assert.Len(t, pkgs[0].Authors, 1)
assert.Equal(t, packageAuthor, pkgs[0].Authors[0].Name) assert.Equal(t, packageAuthor, pkgs[0].Authors[0].Name)
assert.Equal(t, "zip", pkgs[0].Dist.Type) assert.Equal(t, "zip", pkgs[0].Dist.Type)
assert.Equal(t, "7b40bfd6da811b2b78deec1e944f156dbb2c747b", pkgs[0].Dist.Checksum) assert.Equal(t, "4f5fa464c3cb808a1df191dbf6cb75363f8b7072", pkgs[0].Dist.Checksum)
assert.Len(t, pkgs[0].Bin, 1)
assert.Equal(t, packageBin, pkgs[0].Bin[0])
}) })
} }

Loading…
Cancel
Save