manifest.[go|js] files are autogenerated so we dont need to show diffs, cope with conflicts in merge operations or show the diff in github.
126 lines
2.9 KiB
Go
126 lines
2.9 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
|
|
"github.com/mattermost/mattermost-server/model"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
const pluginIDGoFileTemplate = `// This file is automatically generated. Do not modify it manually.
|
|
|
|
package main
|
|
|
|
var manifest = struct {
|
|
ID string
|
|
Version string
|
|
}{
|
|
ID: "%s",
|
|
Version: "%s",
|
|
}
|
|
`
|
|
|
|
const pluginIDJSFileTemplate = `// This file is automatically generated. Do not modify it manually.
|
|
|
|
export const id = '%s';
|
|
export const version = '%s';
|
|
`
|
|
|
|
func main() {
|
|
if len(os.Args) <= 1 {
|
|
panic("no cmd specified")
|
|
}
|
|
|
|
manifest, err := findManifest()
|
|
if err != nil {
|
|
panic("failed to find manifest: " + err.Error())
|
|
}
|
|
|
|
cmd := os.Args[1]
|
|
switch cmd {
|
|
case "id":
|
|
dumpPluginID(manifest)
|
|
|
|
case "version":
|
|
dumpPluginVersion(manifest)
|
|
|
|
case "has_server":
|
|
if manifest.HasServer() {
|
|
fmt.Printf("true")
|
|
}
|
|
|
|
case "has_webapp":
|
|
if manifest.HasWebapp() {
|
|
fmt.Printf("true")
|
|
}
|
|
|
|
case "apply":
|
|
if err := applyManifest(manifest); err != nil {
|
|
panic("failed to apply manifest: " + err.Error())
|
|
}
|
|
|
|
default:
|
|
panic("unrecognized command: " + cmd)
|
|
}
|
|
}
|
|
|
|
func findManifest() (*model.Manifest, error) {
|
|
_, manifestFilePath, err := model.FindManifest(".")
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "failed to find manifest in current working directory")
|
|
}
|
|
manifestFile, err := os.Open(manifestFilePath)
|
|
if err != nil {
|
|
return nil, errors.Wrapf(err, "failed to open %s", manifestFilePath)
|
|
}
|
|
defer manifestFile.Close()
|
|
|
|
// Re-decode the manifest, disallowing unknown fields. When we write the manifest back out,
|
|
// we don't want to accidentally clobber anything we won't preserve.
|
|
var manifest model.Manifest
|
|
decoder := json.NewDecoder(manifestFile)
|
|
decoder.DisallowUnknownFields()
|
|
if err = decoder.Decode(&manifest); err != nil {
|
|
return nil, errors.Wrap(err, "failed to parse manifest")
|
|
}
|
|
|
|
return &manifest, nil
|
|
}
|
|
|
|
// dumpPluginId writes the plugin id from the given manifest to standard out
|
|
func dumpPluginID(manifest *model.Manifest) {
|
|
fmt.Printf("%s", manifest.Id)
|
|
}
|
|
|
|
// dumpPluginVersion writes the plugin version from the given manifest to standard out
|
|
func dumpPluginVersion(manifest *model.Manifest) {
|
|
fmt.Printf("%s", manifest.Version)
|
|
}
|
|
|
|
// applyManifest propagates the plugin_id into the server and webapp folders, as necessary
|
|
func applyManifest(manifest *model.Manifest) error {
|
|
if manifest.HasServer() {
|
|
if err := ioutil.WriteFile(
|
|
"server/manifest.go",
|
|
[]byte(fmt.Sprintf(pluginIDGoFileTemplate, manifest.Id, manifest.Version)),
|
|
0644,
|
|
); err != nil {
|
|
return errors.Wrap(err, "failed to write server/manifest.go")
|
|
}
|
|
}
|
|
|
|
if manifest.HasWebapp() {
|
|
if err := ioutil.WriteFile(
|
|
"webapp/src/manifest.js",
|
|
[]byte(fmt.Sprintf(pluginIDJSFileTemplate, manifest.Id, manifest.Version)),
|
|
0644,
|
|
); err != nil {
|
|
return errors.Wrap(err, "failed to open webapp/src/manifest.js")
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|