-
Notifications
You must be signed in to change notification settings - Fork 129
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[MM-45] Update plugin with respect to phase 1 upgrades (#1009)
* [MM-45] Update plugin with respect to phase 1 upgrades * Sync with playbooks: install-go-tools, gotestsum, and dynamic versions (#192) * Revert "Update main.go (#154)" This reverts commit be4a281d0cc791d10e6e5ae917b325b2f054e475. * Revert "[MM-33506] Use embed package to include plugin manifest (#145)" This reverts commit ca9ee3c17c6920a636a33f378e17395afd6f329f. * Revert "Don't generate manifest.ts (#127)" This reverts commit 18d30b50bc7ba800c9f05bfd82970781db0aea3e. * install-go-tools target, adopt gotestsum * bring back make apply + automatic versioning * Update build/manifest/main.go Co-authored-by: Michael Kochell <[email protected]> * suppress git describe error when no tags match * make version/release notes opt-in * fix whitespace in Makefile * document version management options --------- Co-authored-by: Michael Kochell <[email protected]> * Fetch plugin logs from server (#193) Co-authored-by: Jesse Hallam <[email protected]> --------- Co-authored-by: Mattermost Build <[email protected]> Co-authored-by: Jesse Hallam <[email protected]> Co-authored-by: Michael Kochell <[email protected]> Co-authored-by: Ben Schumacher <[email protected]>
- Loading branch information
1 parent
20f948a
commit 8a1f5b5
Showing
68 changed files
with
1,085 additions
and
460 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
server/manifest.go linguist-generated=true | ||
webapp/src/manifest.js linguist-generated=true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,21 @@ | ||
GO ?= $(shell command -v go 2> /dev/null) | ||
NPM ?= $(shell command -v npm 2> /dev/null) | ||
CURL ?= $(shell command -v curl 2> /dev/null) | ||
MANIFEST_FILE ?= plugin.json | ||
MM_DEBUG ?= | ||
GOPATH ?= $(shell go env GOPATH) | ||
GO_TEST_FLAGS ?= -race | ||
GO_BUILD_FLAGS ?= | ||
MM_UTILITIES_DIR ?= ../mattermost-utilities | ||
DLV_DEBUG_PORT := 2346 | ||
DEFAULT_GOOS := $(shell go env GOOS) | ||
DEFAULT_GOARCH := $(shell go env GOARCH) | ||
|
||
export GO111MODULE=on | ||
|
||
# We need to export GOBIN to allow it to be set | ||
# for processes spawned from the Makefile | ||
export GOBIN ?= $(PWD)/bin | ||
|
||
# You can include assets this directory into the bundle. This can be e.g. used to include profile pictures. | ||
ASSETS_DIR ?= assets | ||
|
||
|
@@ -20,7 +25,6 @@ default: all | |
|
||
# Verify environment, and define PLUGIN_ID, PLUGIN_VERSION, HAS_SERVER and HAS_WEBAPP as needed. | ||
include build/setup.mk | ||
include build/legacy.mk | ||
|
||
BUNDLE_NAME ?= $(PLUGIN_ID)-$(PLUGIN_VERSION).tar.gz | ||
|
||
|
@@ -36,27 +40,38 @@ else | |
endif | ||
|
||
## Checks the code style, tests, builds and bundles the plugin. | ||
.PHONY: all | ||
all: check-style test dist | ||
|
||
## Runs golangci-lint and eslint. | ||
## Propagates plugin manifest information into the server/ and webapp/ folders. | ||
.PHONY: apply | ||
apply: | ||
./build/bin/manifest apply | ||
|
||
## Install go tools | ||
install-go-tools: | ||
@echo Installing go tools | ||
$(GO) install github.com/golangci/golangci-lint/cmd/[email protected] | ||
$(GO) install gotest.tools/[email protected] | ||
|
||
## Runs eslint and golangci-lint | ||
.PHONY: check-style | ||
check-style: webapp/.npminstall golangci-lint | ||
check-style: apply webapp/node_modules install-go-tools | ||
@echo Checking for style guide compliance | ||
|
||
## TODO: Add check-types as well | ||
ifneq ($(HAS_WEBAPP),) | ||
cd webapp && npm run lint | ||
endif | ||
|
||
## Run golangci-lint on codebase. | ||
.PHONY: golangci-lint | ||
golangci-lint: | ||
@if ! [ -x "$$(command -v golangci-lint)" ]; then \ | ||
echo "golangci-lint is not installed. Please see https://github.com/golangci/golangci-lint#install for installation instructions."; \ | ||
exit 1; \ | ||
fi; \ | ||
|
||
# It's highly recommended to run go-vet first | ||
# to find potential compile errors that could introduce | ||
# weird reports at golangci-lint step | ||
ifneq ($(HAS_SERVER),) | ||
@echo Running golangci-lint | ||
golangci-lint run ./... | ||
$(GO) vet ./... | ||
$(GOBIN)/golangci-lint run ./... | ||
endif | ||
|
||
## Builds the server, if it exists, for all supported architectures, unless MM_SERVICESETTINGS_ENABLEDEVELOPER is set | ||
.PHONY: server | ||
|
@@ -79,81 +94,134 @@ endif | |
endif | ||
|
||
## Ensures NPM dependencies are installed without having to run this all the time. | ||
webapp/.npminstall: | ||
webapp/node_modules: $(wildcard webapp/package.json) | ||
ifneq ($(HAS_WEBAPP),) | ||
cd webapp && $(NPM) install | ||
touch $@ | ||
endif | ||
|
||
## Builds the webapp, if it exists. | ||
.PHONY: webapp | ||
webapp: webapp/.npminstall | ||
webapp: webapp/node_modules | ||
ifneq ($(HAS_WEBAPP),) | ||
ifeq ($(MM_DEBUG),) | ||
cd webapp && $(NPM) run build; | ||
else | ||
cd webapp && $(NPM) run debug; | ||
endif | ||
|
||
## Builds the webapp in debug mode, if it exists. | ||
.PHONY: webapp-debug | ||
webapp-debug: webapp/.npminstall | ||
ifneq ($(HAS_WEBAPP),) | ||
cd webapp && \ | ||
$(NPM) run debug; | ||
endif | ||
|
||
## Generates a tar bundle of the plugin for install. | ||
.PHONY: bundle | ||
bundle: | ||
rm -rf dist/ | ||
mkdir -p dist/$(PLUGIN_ID) | ||
cp $(MANIFEST_FILE) dist/$(PLUGIN_ID)/ | ||
./build/bin/manifest dist | ||
ifneq ($(wildcard $(ASSETS_DIR)/.),) | ||
cp -r $(ASSETS_DIR) dist/$(PLUGIN_ID)/ | ||
endif | ||
ifneq ($(HAS_PUBLIC),) | ||
cp -r public dist/$(PLUGIN_ID)/ | ||
endif | ||
ifneq ($(HAS_SERVER),) | ||
mkdir -p dist/$(PLUGIN_ID)/server/dist; | ||
cp -r server/dist/* dist/$(PLUGIN_ID)/server/dist/; | ||
mkdir -p dist/$(PLUGIN_ID)/server | ||
cp -r server/dist dist/$(PLUGIN_ID)/server/ | ||
endif | ||
ifneq ($(HAS_WEBAPP),) | ||
mkdir -p dist/$(PLUGIN_ID)/webapp/dist; | ||
cp -r webapp/dist/* dist/$(PLUGIN_ID)/webapp/dist/; | ||
mkdir -p dist/$(PLUGIN_ID)/webapp | ||
cp -r webapp/dist dist/$(PLUGIN_ID)/webapp/ | ||
endif | ||
cd dist && tar -cvzf $(BUNDLE_NAME) $(PLUGIN_ID) | ||
|
||
@echo plugin built at: dist/$(BUNDLE_NAME) | ||
|
||
## Builds and bundles the plugin. | ||
.PHONY: dist | ||
dist: apply server webapp bundle | ||
dist: apply server webapp bundle | ||
|
||
## Installs the plugin to a (development) server. | ||
## It uses the API if appropriate environment variables are defined, | ||
## and otherwise falls back to trying to copy the plugin to a sibling mattermost-server directory. | ||
## Builds and installs the plugin to a server. | ||
.PHONY: deploy | ||
deploy: dist | ||
./build/bin/deploy $(PLUGIN_ID) dist/$(BUNDLE_NAME) | ||
./build/bin/pluginctl deploy $(PLUGIN_ID) dist/$(BUNDLE_NAME) | ||
|
||
## Builds and installs the plugin to a server, updating the webapp automatically when changed. | ||
.PHONY: watch | ||
watch: apply server bundle | ||
ifeq ($(MM_DEBUG),) | ||
cd webapp && $(NPM) run build:watch | ||
else | ||
cd webapp && $(NPM) run debug:watch | ||
endif | ||
|
||
## Installs a previous built plugin with updated webpack assets to a server. | ||
.PHONY: deploy-from-watch | ||
deploy-from-watch: bundle | ||
./build/bin/pluginctl deploy $(PLUGIN_ID) dist/$(BUNDLE_NAME) | ||
|
||
## Setup dlv for attaching, identifying the plugin PID for other targets. | ||
.PHONY: setup-attach | ||
setup-attach: | ||
$(eval PLUGIN_PID := $(shell ps aux | grep "plugins/${PLUGIN_ID}" | grep -v "grep" | awk -F " " '{print $$2}')) | ||
$(eval NUM_PID := $(shell echo -n ${PLUGIN_PID} | wc -w)) | ||
|
||
@if [ ${NUM_PID} -gt 2 ]; then \ | ||
echo "** There is more than 1 plugin process running. Run 'make kill reset' to restart just one."; \ | ||
exit 1; \ | ||
fi | ||
|
||
## Check if setup-attach succeeded. | ||
.PHONY: check-attach | ||
check-attach: | ||
@if [ -z ${PLUGIN_PID} ]; then \ | ||
echo "Could not find plugin PID; the plugin is not running. Exiting."; \ | ||
exit 1; \ | ||
else \ | ||
echo "Located Plugin running with PID: ${PLUGIN_PID}"; \ | ||
fi | ||
|
||
## Attach dlv to an existing plugin instance. | ||
.PHONY: attach | ||
attach: setup-attach check-attach | ||
dlv attach ${PLUGIN_PID} | ||
|
||
.PHONY: debug-deploy | ||
debug-deploy: debug-dist deploy | ||
## Attach dlv to an existing plugin instance, exposing a headless instance on $DLV_DEBUG_PORT. | ||
.PHONY: attach-headless | ||
attach-headless: setup-attach check-attach | ||
dlv attach ${PLUGIN_PID} --listen :$(DLV_DEBUG_PORT) --headless=true --api-version=2 --accept-multiclient | ||
|
||
.PHONY: debug-dist | ||
debug-dist: apply server webapp-debug bundle | ||
## Detach dlv from an existing plugin instance, if previously attached. | ||
.PHONY: detach | ||
detach: setup-attach | ||
@DELVE_PID=$(shell ps aux | grep "dlv attach ${PLUGIN_PID}" | grep -v "grep" | awk -F " " '{print $$2}') && \ | ||
if [ "$$DELVE_PID" -gt 0 ] > /dev/null 2>&1 ; then \ | ||
echo "Located existing delve process running with PID: $$DELVE_PID. Killing." ; \ | ||
kill -9 $$DELVE_PID ; \ | ||
fi | ||
|
||
## Runs any lints and unit tests defined for the server and webapp, if they exist. | ||
.PHONY: test | ||
test: webapp/.npminstall | ||
test: apply webapp/node_modules install-go-tools | ||
ifneq ($(HAS_SERVER),) | ||
$(GOBIN)/gotestsum -- -v ./... | ||
endif | ||
ifneq ($(HAS_WEBAPP),) | ||
cd webapp && $(NPM) run test; | ||
endif | ||
|
||
## Runs any lints and unit tests defined for the server and webapp, if they exist, optimized | ||
## for a CI environment. | ||
.PHONY: test-ci | ||
test-ci: apply webapp/node_modules install-go-tools | ||
ifneq ($(HAS_SERVER),) | ||
$(GO) test -v $(GO_TEST_FLAGS) ./server/... | ||
$(GOBIN)/gotestsum --format standard-verbose --junitfile report.xml -- ./... | ||
endif | ||
ifneq ($(HAS_WEBAPP),) | ||
cd webapp && $(NPM) run fix && $(NPM) run test; | ||
cd webapp && $(NPM) run test; | ||
endif | ||
|
||
## Creates a coverage report for the server code. | ||
.PHONY: coverage | ||
coverage: webapp/.npminstall | ||
coverage: apply webapp/node_modules | ||
ifneq ($(HAS_SERVER),) | ||
$(GO) test $(GO_TEST_FLAGS) -coverprofile=server/coverage.txt ./server/... | ||
$(GO) tool cover -html=server/coverage.txt | ||
|
@@ -170,6 +238,31 @@ else | |
endif | ||
endif | ||
|
||
## Disable the plugin. | ||
.PHONY: disable | ||
disable: detach | ||
./build/bin/pluginctl disable $(PLUGIN_ID) | ||
|
||
## Enable the plugin. | ||
.PHONY: enable | ||
enable: | ||
./build/bin/pluginctl enable $(PLUGIN_ID) | ||
|
||
## Reset the plugin, effectively disabling and re-enabling it on the server. | ||
.PHONY: reset | ||
reset: detach | ||
./build/bin/pluginctl reset $(PLUGIN_ID) | ||
|
||
## Kill all instances of the plugin, detaching any existing dlv instance. | ||
.PHONY: kill | ||
kill: detach | ||
$(eval PLUGIN_PID := $(shell ps aux | grep "plugins/${PLUGIN_ID}" | grep -v "grep" | awk -F " " '{print $$2}')) | ||
|
||
@for PID in ${PLUGIN_PID}; do \ | ||
echo "Killing plugin pid $$PID"; \ | ||
kill -9 $$PID; \ | ||
done; \ | ||
|
||
## Clean removes all build artifacts. | ||
.PHONY: clean | ||
clean: | ||
|
@@ -179,13 +272,20 @@ ifneq ($(HAS_SERVER),) | |
rm -fr server/dist | ||
endif | ||
ifneq ($(HAS_WEBAPP),) | ||
rm -fr webapp/.npminstall | ||
rm -fr webapp/junit.xml | ||
rm -fr webapp/dist | ||
rm -fr webapp/node_modules | ||
endif | ||
rm -fr build/bin/ | ||
|
||
.PHONY: logs | ||
logs: | ||
./build/bin/pluginctl logs $(PLUGIN_ID) | ||
|
||
.PHONY: logs-watch | ||
logs-watch: | ||
./build/bin/pluginctl logs-watch $(PLUGIN_ID) | ||
|
||
# Help documentation à la https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html | ||
help: | ||
@cat Makefile | grep -v '\.PHONY' | grep -v '\help:' | grep -B1 -E '^[a-zA-Z0-9_.-]+:.*' | sed -e "s/:.*//" | sed -e "s/^## //" | grep -v '\-\-' | sed '1!G;h;$$!d' | awk 'NR%2{printf "\033[36m%-30s\033[0m",$$0;next;}1' | sort | ||
@cat Makefile build/*.mk | grep -v '\.PHONY' | grep -v '\help:' | grep -B1 -E '^[a-zA-Z0-9_.-]+:.*' | sed -e "s/:.*//" | sed -e "s/^## //" | grep -v '\-\-' | sed '1!G;h;$$!d' | awk 'NR%2{printf "\033[36m%-30s\033[0m",$$0;next;}1' | sort |
Oops, something went wrong.