-
Notifications
You must be signed in to change notification settings - Fork 31
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[MM-232] Update plugin with respect to phase 1 upgrades #72
Open
ayusht2810
wants to merge
2
commits into
mattermost-community:master
Choose a base branch
from
Brightscout:MM-232
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 1 commit
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ | ||
server/manifest.go 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,2 @@ | ||
dist | ||
server/manifest.go |
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 +1 @@ | ||
14.21.1 | ||
16.13.1 |
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,17 +1,28 @@ | ||
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 | ||
|
||
## Define the default target (make all) | ||
.PHONY: default | ||
default: all | ||
|
||
# Verify environment, and define PLUGIN_ID, PLUGIN_VERSION, HAS_SERVER and HAS_WEBAPP as needed. | ||
include build/setup.mk | ||
|
||
|
@@ -22,120 +33,195 @@ ifneq ($(wildcard build/custom.mk),) | |
include build/custom.mk | ||
endif | ||
|
||
ifneq ($(MM_DEBUG),) | ||
GO_BUILD_GCFLAGS = -gcflags "all=-N -l" | ||
else | ||
GO_BUILD_GCFLAGS = | ||
endif | ||
|
||
## Checks the code style, tests, builds and bundles the plugin. | ||
.PHONY: all | ||
all: check-style test dist | ||
|
||
## Propagates plugin manifest information into the server/ and webapp/ folders as required. | ||
## Propagates plugin manifest information into the server/ and webapp/ folders. | ||
.PHONY: apply | ||
apply: | ||
./build/bin/manifest apply | ||
|
||
## Runs golangci-lint and eslint. | ||
## 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 | ||
|
||
ifneq ($(HAS_WEBAPP),) | ||
cd webapp && npm run lint | ||
cd webapp && npm run check-types | ||
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, including support for multiple architectures. | ||
## Builds the server, if it exists, for all supported architectures, unless MM_SERVICESETTINGS_ENABLEDEVELOPER is set. | ||
.PHONY: server | ||
server: | ||
ifneq ($(HAS_SERVER),) | ||
ifneq ($(MM_DEBUG),) | ||
$(info DEBUG mode is on; to disable, unset MM_DEBUG) | ||
endif | ||
mkdir -p server/dist; | ||
cd server && env GOOS=linux GOARCH=amd64 $(GO) build $(GO_BUILD_FLAGS) -o dist/plugin-linux-amd64; | ||
cd server && env GOOS=darwin GOARCH=amd64 $(GO) build $(GO_BUILD_FLAGS) -o dist/plugin-darwin-amd64; | ||
cd server && env GOOS=windows GOARCH=amd64 $(GO) build $(GO_BUILD_FLAGS) -o dist/plugin-windows-amd64.exe; | ||
ifneq ($(MM_SERVICESETTINGS_ENABLEDEVELOPER),) | ||
@echo Building plugin only for $(DEFAULT_GOOS)-$(DEFAULT_GOARCH) because MM_SERVICESETTINGS_ENABLEDEVELOPER is enabled | ||
cd server && env CGO_ENABLED=0 $(GO) build $(GO_BUILD_FLAGS) $(GO_BUILD_GCFLAGS) -trimpath -o dist/plugin-$(DEFAULT_GOOS)-$(DEFAULT_GOARCH); | ||
else | ||
cd server && env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GO) build $(GO_BUILD_FLAGS) $(GO_BUILD_GCFLAGS) -trimpath -o dist/plugin-linux-amd64; | ||
cd server && env CGO_ENABLED=0 GOOS=linux GOARCH=arm64 $(GO) build $(GO_BUILD_FLAGS) $(GO_BUILD_GCFLAGS) -trimpath -o dist/plugin-linux-arm64; | ||
cd server && env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 $(GO) build $(GO_BUILD_FLAGS) $(GO_BUILD_GCFLAGS) -trimpath -o dist/plugin-darwin-amd64; | ||
cd server && env CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 $(GO) build $(GO_BUILD_FLAGS) $(GO_BUILD_GCFLAGS) -trimpath -o dist/plugin-darwin-arm64; | ||
cd server && env CGO_ENABLED=0 GOOS=windows GOARCH=amd64 $(GO) build $(GO_BUILD_FLAGS) $(GO_BUILD_GCFLAGS) -trimpath -o dist/plugin-windows-amd64.exe; | ||
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)/ | ||
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 | ||
|
||
.PHONY: debug-deploy | ||
debug-deploy: debug-dist deploy | ||
## 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) | ||
|
||
.PHONY: debug-dist | ||
debug-dist: apply server webapp-debug bundle | ||
## 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} | ||
|
||
## 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 | ||
|
||
## 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),) | ||
$(GO) test -v $(GO_TEST_FLAGS) ./server/... | ||
$(GOBIN)/gotestsum -- -v ./... | ||
endif | ||
ifneq ($(HAS_WEBAPP),) | ||
cd webapp && $(NPM) run fix && $(NPM) run test; | ||
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),) | ||
$(GOBIN)/gotestsum --format standard-verbose --junitfile report.xml -- ./... | ||
endif | ||
ifneq ($(HAS_WEBAPP),) | ||
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 | ||
|
@@ -152,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: | ||
|
@@ -161,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 |
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
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the README should clarify the practice used in this particular plugin.