Merge pull request #8 from Hanzei/plugin_version

Extract plugin version from manifest
This commit is contained in:
Joram Wilander 2018-09-19 08:40:53 -04:00 committed by GitHub
commit a0e9acdbaf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 39 additions and 16 deletions

View file

@ -4,6 +4,7 @@ NPM ?= $(shell command -v npm 2> /dev/null)
HTTP ?= $(shell command -v http 2> /dev/null) HTTP ?= $(shell command -v http 2> /dev/null)
CURL ?= $(shell command -v curl 2> /dev/null) CURL ?= $(shell command -v curl 2> /dev/null)
MANIFEST_FILE ?= plugin.json MANIFEST_FILE ?= plugin.json
BUNDLE_NAME = $(PLUGIN_ID)_$(PLUGIN_VERSION).tar.gz
# Verify environment, and define PLUGIN_ID, HAS_SERVER and HAS_WEBAPP as needed. # Verify environment, and define PLUGIN_ID, HAS_SERVER and HAS_WEBAPP as needed.
include build/setup.mk include build/setup.mk
@ -61,9 +62,9 @@ ifneq ($(HAS_WEBAPP),)
mkdir -p dist/$(PLUGIN_ID)/webapp/dist; mkdir -p dist/$(PLUGIN_ID)/webapp/dist;
cp -r webapp/dist/* dist/$(PLUGIN_ID)/webapp/dist/; cp -r webapp/dist/* dist/$(PLUGIN_ID)/webapp/dist/;
endif endif
cd dist && tar -cvzf $(PLUGIN_ID).tar.gz $(PLUGIN_ID) cd dist && tar -cvzf $(BUNDLE_NAME) $(PLUGIN_ID)
@echo plugin built at: dist/$(PLUGIN_ID).tar.gz @echo plugin built at: dist/$(BUNDLE_NAME)
# dist builds and bundles the plugin # dist builds and bundles the plugin
.PHONY: dist .PHONY: dist
@ -81,7 +82,7 @@ ifneq ($(and $(MM_SERVICESETTINGS_SITEURL),$(MM_ADMIN_USERNAME),$(MM_ADMIN_PASSW
(TOKEN=`http --print h POST $(MM_SERVICESETTINGS_SITEURL)/api/v4/users/login login_id=$(MM_ADMIN_USERNAME) password=$(MM_ADMIN_PASSWORD) | grep Token | cut -f2 -d' '` && \ (TOKEN=`http --print h POST $(MM_SERVICESETTINGS_SITEURL)/api/v4/users/login login_id=$(MM_ADMIN_USERNAME) password=$(MM_ADMIN_PASSWORD) | grep Token | cut -f2 -d' '` && \
http --print b GET $(MM_SERVICESETTINGS_SITEURL)/api/v4/users/me Authorization:"Bearer $$TOKEN" && \ http --print b GET $(MM_SERVICESETTINGS_SITEURL)/api/v4/users/me Authorization:"Bearer $$TOKEN" && \
http --print b DELETE $(MM_SERVICESETTINGS_SITEURL)/api/v4/plugins/$(PLUGIN_ID) Authorization:"Bearer $$TOKEN" && \ http --print b DELETE $(MM_SERVICESETTINGS_SITEURL)/api/v4/plugins/$(PLUGIN_ID) Authorization:"Bearer $$TOKEN" && \
http --print b --check-status --form POST $(MM_SERVICESETTINGS_SITEURL)/api/v4/plugins plugin@dist/$(PLUGIN_ID).tar.gz Authorization:"Bearer $$TOKEN" && \ http --print b --check-status --form POST $(MM_SERVICESETTINGS_SITEURL)/api/v4/plugins plugin@dist/$(BUNDLE_NAME) Authorization:"Bearer $$TOKEN" && \
http --print b POST $(MM_SERVICESETTINGS_SITEURL)/api/v4/plugins/$(PLUGIN_ID)/enable Authorization:"Bearer $$TOKEN" && \ http --print b POST $(MM_SERVICESETTINGS_SITEURL)/api/v4/plugins/$(PLUGIN_ID)/enable Authorization:"Bearer $$TOKEN" && \
http --print b POST $(MM_SERVICESETTINGS_SITEURL)/api/v4/users/logout Authorization:"Bearer $$TOKEN" \ http --print b POST $(MM_SERVICESETTINGS_SITEURL)/api/v4/users/logout Authorization:"Bearer $$TOKEN" \
) )
@ -89,7 +90,7 @@ else ifneq ($(and $(MM_SERVICESETTINGS_SITEURL),$(MM_ADMIN_USERNAME),$(MM_ADMIN_
@echo "Installing plugin via API" @echo "Installing plugin via API"
$(eval TOKEN := $(shell curl -i -X POST $(MM_SERVICESETTINGS_SITEURL)/api/v4/users/login -d '{"login_id": "$(MM_ADMIN_USERNAME)", "password": "$(MM_ADMIN_PASSWORD)"}' | grep Token | cut -f2 -d' ' 2> /dev/null)) $(eval TOKEN := $(shell curl -i -X POST $(MM_SERVICESETTINGS_SITEURL)/api/v4/users/login -d '{"login_id": "$(MM_ADMIN_USERNAME)", "password": "$(MM_ADMIN_PASSWORD)"}' | grep Token | cut -f2 -d' ' 2> /dev/null))
@curl -s -H "Authorization: Bearer $(TOKEN)" -X DELETE $(MM_SERVICESETTINGS_SITEURL)/api/v4/plugins/$(PLUGIN_ID) > /dev/null @curl -s -H "Authorization: Bearer $(TOKEN)" -X DELETE $(MM_SERVICESETTINGS_SITEURL)/api/v4/plugins/$(PLUGIN_ID) > /dev/null
@curl -s -H "Authorization: Bearer $(TOKEN)" -X POST $(MM_SERVICESETTINGS_SITEURL)/api/v4/plugins -F "plugin=@dist/$(PLUGIN_ID).tar.gz" > /dev/null && \ @curl -s -H "Authorization: Bearer $(TOKEN)" -X POST $(MM_SERVICESETTINGS_SITEURL)/api/v4/plugins -F "plugin=@dist/$(BUNDLE_NAME)" > /dev/null && \
curl -s -H "Authorization: Bearer $(TOKEN)" -X POST $(MM_SERVICESETTINGS_SITEURL)/api/v4/plugins/$(PLUGIN_ID)/enable > /dev/null && \ curl -s -H "Authorization: Bearer $(TOKEN)" -X POST $(MM_SERVICESETTINGS_SITEURL)/api/v4/plugins/$(PLUGIN_ID)/enable > /dev/null && \
echo "OK." || echo "Sorry, something went wrong." echo "OK." || echo "Sorry, something went wrong."
else ifneq ($(wildcard ../mattermost-server/.*),) else ifneq ($(wildcard ../mattermost-server/.*),)

View file

@ -13,9 +13,13 @@ import (
const PluginIdGoFileTemplate = `package main const PluginIdGoFileTemplate = `package main
const PluginId = "%s" const PluginId = "%s"
const PluginVersion = "%s"
` `
const PluginIdJsFileTemplate = `export default '%s'; const PluginIdJsFileTemplate = `export default {
PluginId: '%s',
PluginVersion: '%s',
};
` `
func main() { func main() {
@ -30,9 +34,12 @@ func main() {
cmd := os.Args[1] cmd := os.Args[1]
switch cmd { switch cmd {
case "plugin_id": case "id":
dumpPluginId(manifest) dumpPluginId(manifest)
case "version":
dumpPluginVersion(manifest)
case "has_server": case "has_server":
if manifest.HasServer() { if manifest.HasServer() {
fmt.Printf("true") fmt.Printf("true")
@ -81,25 +88,30 @@ func dumpPluginId(manifest *model.Manifest) {
fmt.Printf("%s", manifest.Id) 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 // applyManifest propagates the plugin_id into the server and webapp folders, as necessary
func applyManifest(manifest *model.Manifest) error { func applyManifest(manifest *model.Manifest) error {
if manifest.HasServer() { if manifest.HasServer() {
if err := ioutil.WriteFile( if err := ioutil.WriteFile(
"server/plugin_id.go", "server/manifest.go",
[]byte(fmt.Sprintf(PluginIdGoFileTemplate, manifest.Id)), []byte(fmt.Sprintf(PluginIdGoFileTemplate, manifest.Id, manifest.Version)),
0644, 0644,
); err != nil { ); err != nil {
return errors.Wrap(err, "failed to write server/plugin_id.go") return errors.Wrap(err, "failed to write server/manifest.go")
} }
} }
if manifest.HasWebapp() { if manifest.HasWebapp() {
if err := ioutil.WriteFile( if err := ioutil.WriteFile(
"webapp/src/plugin_id.js", "webapp/src/manifest.js",
[]byte(fmt.Sprintf(PluginIdJsFileTemplate, manifest.Id)), []byte(fmt.Sprintf(PluginIdJsFileTemplate, manifest.Id, manifest.Version)),
0644, 0644,
); err != nil { ); err != nil {
return errors.Wrap(err, "failed to open webapp/src/plugin_id.js") return errors.Wrap(err, "failed to open webapp/src/manifest.js")
} }
} }

View file

@ -8,11 +8,17 @@ endif
$(shell cd build/manifest && $(GO) build -o ../bin/manifest) $(shell cd build/manifest && $(GO) build -o ../bin/manifest)
# Extract the plugin id from the manifest. # Extract the plugin id from the manifest.
PLUGIN_ID ?= $(shell build/bin/manifest plugin_id) PLUGIN_ID ?= $(shell build/bin/manifest id)
ifeq ($(PLUGIN_ID),) ifeq ($(PLUGIN_ID),)
$(error "Cannot parse id from $(MANIFEST_FILE)") $(error "Cannot parse id from $(MANIFEST_FILE)")
endif endif
# Extract the plugin version from the manifest.
PLUGIN_VERSION ?= $(shell build/bin/manifest version)
ifeq ($(PLUGIN_VERSION),)
$(error "Cannot parse id from $(MANIFEST_FILE)")
endif
# Determine if a server is defined in the manifest. # Determine if a server is defined in the manifest.
HAS_SERVER ?= $(shell build/bin/manifest has_server) HAS_SERVER ?= $(shell build/bin/manifest has_server)

View file

@ -1,3 +1,4 @@
package main package main
const PluginId = "com.mattermost.sample-plugin" const PluginId = "com.mattermost.sample-plugin"
const PluginVersion = "0.0.1"

View file

@ -1,4 +1,4 @@
import PluginId from './plugin_id'; import Manifest from './manifest';
export default class Plugin { export default class Plugin {
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
@ -7,4 +7,4 @@ export default class Plugin {
} }
} }
window.registerPlugin(PluginId, new Plugin()); window.registerPlugin(Manifest.PluginId, new Plugin());

4
webapp/src/manifest.js Normal file
View file

@ -0,0 +1,4 @@
export default {
PluginId: 'com.mattermost.sample-plugin',
PluginVersion: '0.0.1',
};

View file

@ -1 +0,0 @@
export default 'com.mattermost.sample-plugin';