fix: make template build, lint and test cleanly out of the box

This commit is contained in:
2026-09-25 09:05:40 +03:00
parent f3452876da
commit f0e09ef8c9
24 changed files with 128 additions and 244 deletions
+12 -3
View File
@@ -1,7 +1,16 @@
MM_RUDDER_CALLS_PROD= # Скопируйте в .env и заполните. Файл .env не попадает в git.
MM_RUDDER_DATAPLANE_URL=
# Адрес сервера Loop и токен системного администратора для make deploy
MM_SERVICESETTINGS_SITEURL=http://localhost:8065 MM_SERVICESETTINGS_SITEURL=http://localhost:8065
MM_ADMIN_TOKEN= MM_ADMIN_TOKEN=
# true — собирать серверную часть только под ваш компьютер и linux-amd64 (быстрее).
# Такая сборка НЕ запустится на сервере с ARM (linux-arm64). Для релиза закомментируйте.
MM_SERVICESETTINGS_ENABLEDEVELOPER=true MM_SERVICESETTINGS_ENABLEDEVELOPER=true
#MM_DEBUG=true
# true — сборка без оптимизаций для отладчика Delve и с исходниками для браузера
#MM_DEBUG=true
# Ключи RudderStack для серверной телеметрии. Пустые — телеметрия выключена.
MM_RUDDER_CALLS_PROD=
MM_RUDDER_DATAPLANE_URL=
+1 -1
View File
@@ -7,7 +7,7 @@ jobs:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
uses: wilix-infra/actions/.gitea/workflows/loop-plugin-with-marketplace-template.yml@master uses: wilix-infra/actions/.gitea/workflows/loop-plugin-with-marketplace-template.yml@master
with: with:
go_version: "1.21" go_version: "1.24"
node_version: "22.14.0" node_version: "22.14.0"
vault_secrets_base_path: dev/wilix/loop/data/ci/plugin vault_secrets_base_path: dev/wilix/loop/data/ci/plugin
artifacts_url: https://artifacts.wilix.dev artifacts_url: https://artifacts.wilix.dev
+6 -10
View File
@@ -10,11 +10,10 @@ MM_UTILITIES_DIR ?= ../mattermost-utilities
DLV_DEBUG_PORT := 2346 DLV_DEBUG_PORT := 2346
DEFAULT_GOOS := $(shell go env GOOS) DEFAULT_GOOS := $(shell go env GOOS)
DEFAULT_GOARCH := $(shell go env GOARCH) DEFAULT_GOARCH := $(shell go env GOARCH)
SANS_RESTAPITEST = $(shell go list ./... | grep -v 'git.wilix.dev/loop/loop-plugin-apps/test/restapitest' | sed -e 's/git.wilix.dev\/loop\/loop-plugin-apps\//.\//g')
ifneq (,$(wildcard ./.env)) ifneq (,$(wildcard ./.env))
include .env include .env
export $(shell sed 's/=.*//' .env) export $(shell sed -n 's/^\([A-Za-z_][A-Za-z0-9_]*\)=.*/\1/p' .env)
endif endif
export GO111MODULE=on export GO111MODULE=on
@@ -39,8 +38,8 @@ endif
# ==================================================================================== # ====================================================================================
# Used for semver bumping # Used for semver bumping
PROTECTED_BRANCH := master PROTECTED_BRANCH := master
APP_NAME := $(shell basename -s .git `git config --get remote.origin.url`) APP_NAME := $(shell basename -s .git `git config --get remote.origin.url` 2>/dev/null)
CURRENT_VERSION := $(shell git describe --abbrev=0 --tags) CURRENT_VERSION := $(shell git describe --abbrev=0 --tags 2>/dev/null)
VERSION_PARTS := $(subst ., ,$(subst v,,$(subst -rc, ,$(CURRENT_VERSION)))) VERSION_PARTS := $(subst ., ,$(subst v,,$(subst -rc, ,$(CURRENT_VERSION))))
MAJOR := $(word 1,$(VERSION_PARTS)) MAJOR := $(word 1,$(VERSION_PARTS))
MINOR := $(word 2,$(VERSION_PARTS)) MINOR := $(word 2,$(VERSION_PARTS))
@@ -159,7 +158,7 @@ apply:
.PHONY: deps .PHONY: deps
deps: deps:
@$(GO) install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.51.2 @$(GO) install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.6.2
@$(GO) install github.com/nicksnyder/go-i18n/v2/goi18n@v2.2.0 @$(GO) install github.com/nicksnyder/go-i18n/v2/goi18n@v2.2.0
## Runs eslint and golangci-lint ## Runs eslint and golangci-lint
@@ -318,7 +317,7 @@ detach: setup-attach
.PHONY: test .PHONY: test
test: webapp/node_modules test: webapp/node_modules
ifneq ($(HAS_SERVER),) ifneq ($(HAS_SERVER),)
$(GO) test -v $(GO_TEST_FLAGS) $(SANS_RESTAPITEST) $(GO) test -v $(GO_TEST_FLAGS) ./...
endif endif
ifneq ($(HAS_WEBAPP),) ifneq ($(HAS_WEBAPP),)
cd webapp && $(NPM) run test; cd webapp && $(NPM) run test;
@@ -328,7 +327,7 @@ endif
.PHONY: coverage .PHONY: coverage
coverage: webapp/node_modules coverage: webapp/node_modules
ifneq ($(HAS_SERVER),) ifneq ($(HAS_SERVER),)
$(GO) test $(GO_TEST_FLAGS) -coverprofile=server/coverage.txt $(SANS_RESTAPITEST) $(GO) test $(GO_TEST_FLAGS) -coverprofile=server/coverage.txt ./...
$(GO) tool cover -html=server/coverage.txt $(GO) tool cover -html=server/coverage.txt
endif endif
@@ -382,9 +381,6 @@ ifneq ($(HAS_WEBAPP),)
rm -fr webapp/node_modules rm -fr webapp/node_modules
endif endif
rm -fr build/bin/ rm -fr build/bin/
rm -fr test/restapitest/mattermost.log
rm -fr test/restapitest/notifications.log
rm -fr test/restapitest/data/
# Help documentation à la https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html # Help documentation à la https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
help: help:
+26 -10
View File
@@ -4,21 +4,26 @@
Шаблон включает серверную часть на Go и клиентскую часть на React/TypeScript, настроенный билд через Makefile, пример REST API и базовую структуру Redux store. Шаблон включает серверную часть на Go и клиентскую часть на React/TypeScript, настроенный билд через Makefile, пример REST API и базовую структуру Redux store.
Подробное руководство по разработке плагинов: [developers.loop.ru/integrate/plugin-development](https://developers.loop.ru/integrate/plugin-development).
> **Совместимость.** Возможности плагинов в Loop соответствуют Mattermost 9.11.7. Поэтому серверная часть зафиксирована на `github.com/mattermost/mattermost/server/public v0.1.6` — в этой версии ровно те методы API и хуки, что есть в Loop, и компилятор не даст вызвать недоступный метод. Не обновляйте этот пакет.
## Требования ## Требования
| Инструмент | Версия | | Инструмент | Версия |
|-----------|--------| |-----------|--------|
| Go | 1.21+ | | Go | 1.24+ |
| Node.js | 22+ | | Node.js | 22+ |
| Yarn | 4.x | | Yarn | 4.x (`corepack enable`) |
## Быстрый старт ## Быстрый старт
### 1. Клонировать шаблон ### 1. Клонировать шаблон
```bash ```bash
git clone <url-репозитория> my-plugin git clone https://git.wilix.dev/loop/loop-plugin-starter-template.git my-plugin
cd my-plugin cd my-plugin
rm -rf .git && git init
``` ```
### 2. Переименовать плагин ### 2. Переименовать плагин
@@ -45,7 +50,13 @@ module git.example.com/your-org/my-plugin
Затем обновите все импорты в `server/`: Затем обновите все импорты в `server/`:
```bash ```bash
find server/ -type f -name "*.go" | xargs sed -i 's|git.wilix.dev/loop/loop-plugin-starter-template|git.example.com/your-org/my-plugin|g' # macOS
grep -rl 'git.wilix.dev/loop/loop-plugin-starter-template' server build | \
xargs sed -i '' 's|git.wilix.dev/loop/loop-plugin-starter-template|git.example.com/your-org/my-plugin|g'
# Linux / WSL
grep -rl 'git.wilix.dev/loop/loop-plugin-starter-template' server build | \
xargs sed -i 's|git.wilix.dev/loop/loop-plugin-starter-template|git.example.com/your-org/my-plugin|g'
``` ```
### 4. Установить зависимости и собрать ### 4. Установить зависимости и собрать
@@ -68,6 +79,7 @@ make dist
├── plugin.json # Манифест плагина (ID, имя, версия) ├── plugin.json # Манифест плагина (ID, имя, версия)
├── Makefile # Команды сборки ├── Makefile # Команды сборки
├── .env.example # Пример переменных окружения ├── .env.example # Пример переменных окружения
├── assets/ # Файлы, которые попадут в архив (иконка и т. п.)
│ │
├── server/ ├── server/
│ ├── main.go # Точка входа серверной части │ ├── main.go # Точка входа серверной части
@@ -76,7 +88,7 @@ make dist
│ ├── api.go # HTTP маршруты и обработчики │ ├── api.go # HTTP маршруты и обработчики
│ ├── configuration.go # Конфигурация плагина │ ├── configuration.go # Конфигурация плагина
│ ├── store.go # Работа с key-value хранилищем │ ├── store.go # Работа с key-value хранилищем
│ └── telemetry.go # Телеметрия │ └── telemetry.go # Телеметрия (включается ключами RudderStack при сборке)
│ │
└── webapp/ └── webapp/
└── src/ └── src/
@@ -124,14 +136,16 @@ make dist
## Makefile: команды сборки ## Makefile: команды сборки
```bash ```bash
make # Линтинг, тесты и полная сборка
make dist # Полная сборка (server + webapp + tar.gz) make dist # Полная сборка (server + webapp + tar.gz)
make server # Только серверная часть make server # Только серверная часть
make webapp # Только клиентская часть make webapp # Только клиентская часть
make check-style # Линтинг (golangci-lint + eslint) make check-style # Линтинг (golangci-lint v2 + eslint)
make test # Запуск тестов make test # Запуск тестов
make clean # Очистить артефакты сборки make clean # Очистить артефакты сборки
make deploy # Сборка и деплой на сервер (требует .env) make deploy # Сборка и деплой на сервер (требует .env)
make watch # Сборка + hot reload webapp make watch # Пересборка webapp при изменениях (загрузка — make deploy-from-watch)
make deps # Установить golangci-lint и goi18n
``` ```
Полный список команд: `make help` Полный список команд: `make help`
@@ -148,8 +162,9 @@ cp .env.example .env
|-----------|----------| |-----------|----------|
| `MM_SERVICESETTINGS_SITEURL` | URL вашего Loop-сервера (для деплоя) | | `MM_SERVICESETTINGS_SITEURL` | URL вашего Loop-сервера (для деплоя) |
| `MM_ADMIN_TOKEN` | Токен администратора (для деплоя через `make deploy`) | | `MM_ADMIN_TOKEN` | Токен администратора (для деплоя через `make deploy`) |
| `MM_SERVICESETTINGS_ENABLEDEVELOPER` | `true` — билд только под текущую ОС (ускоряет разработку) | | `MM_SERVICESETTINGS_ENABLEDEVELOPER` | `true` — билд только под текущую ОС и linux-amd64 (ускоряет разработку, но не запустится на ARM-сервере) |
| `MM_DEBUG` | `true` — билд без оптимизаций (для отладчика dlv) | | `MM_DEBUG` | `true` — билд без оптимизаций (для отладчика dlv) и webapp с source maps |
| `MM_RUDDER_CALLS_PROD`, `MM_RUDDER_DATAPLANE_URL` | Ключи RudderStack для серверной телеметрии. Пустые — телеметрия выключена |
## Деплой ## Деплой
@@ -157,7 +172,8 @@ cp .env.example .env
1. Соберите плагин: `make dist` 1. Соберите плагин: `make dist`
2. Загрузите `dist/<plugin-id>-<version>.tar.gz` в Loop: 2. Загрузите `dist/<plugin-id>-<version>.tar.gz` в Loop:
**Администрирование → Управление плагинами → Загрузить плагин** **Системная консоль → Плагины → Управление плагинами → Загрузить плагин**.
Загрузка должна быть разрешена на сервере: `PluginSettings.EnableUploads = true` (или `MM_PLUGINSETTINGS_ENABLEUPLOADS=true`)
### Деплой через `make deploy` ### Деплой через `make deploy`
+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="#1C58D9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 2v6M15 2v6M6 8h12v4a6 6 0 0 1-12 0V8zM12 18v4"/></svg>

After

Width:  |  Height:  |  Size: 243 B

+7 -62
View File
@@ -1,58 +1,18 @@
# Include custome targets and environment variables here # Include custom targets and environment variables here
default: all default: all
# If there's no MM_RUDDER_PLUGINS_PROD, add DEV data GO_MODULE := $(shell $(GO) list -m)
RUDDER_WRITE_KEY = "" BUILD_HASH = $(shell git rev-parse HEAD 2>/dev/null)
ifdef MM_RUDDER_PLUGINS_PROD LDFLAGS += -X "$(GO_MODULE)/server/plugin.buildHash=$(BUILD_HASH)"
RUDDER_WRITE_KEY = $(MM_RUDDER_PLUGINS_PROD) LDFLAGS += -X "$(GO_MODULE)/server/plugin.rudderWriteKey=$(MM_RUDDER_CALLS_PROD)"
endif LDFLAGS += -X "$(GO_MODULE)/server/plugin.rudderDataplaneURL=$(MM_RUDDER_DATAPLANE_URL)"
BUILD_DATE = $(shell date -u)
BUILD_HASH = $(shell git rev-parse HEAD)
BUILD_HASH_SHORT = $(shell git rev-parse --short HEAD)
LDFLAGS += -X "plugin.buildHash=$(BUILD_HASH)"
LDFLAGS+= -X "plugin.isDebug=$(MM_DEBUG)"
LDFLAGS += -X "plugin.rudderWriteKey=$(MM_RUDDER_CALLS_PROD)"
LDFLAGS += -X "plugin.rudderDataplaneURL=$(MM_RUDDER_DATAPLANE_URL)"
GO_BUILD_FLAGS += -ldflags '$(LDFLAGS)' GO_BUILD_FLAGS += -ldflags '$(LDFLAGS)'
GO_TEST_FLAGS += -ldflags '$(LDFLAGS)' GO_TEST_FLAGS += -ldflags '$(LDFLAGS)'
MM_SERVER_PATH ?= ${PWD}/../mattermost-server
export MM_SERVER_PATH
## Generates mock golang interfaces for testing
.PHONY: mock
mock:
ifneq ($(HAS_SERVER),)
go install github.com/golang/mock/mockgen@v1.6.0
mockgen -destination server/mocks/mock_proxy/mock_expand_getter.go git.wilix.dev/loop/loop-plugin-starter-template/server/proxy ExpandGetter
mockgen -destination server/mocks/mock_upstream/mock_upstream.go git.wilix.dev/loop/loop-plugin-starter-template/upstream Upstream
mockgen -destination server/mocks/mock_store/mock_appstore.go git.wilix.dev/loop/loop-plugin-starter-template/server/store AppStore
mockgen -destination server/mocks/mock_store/mock_session.go git.wilix.dev/loop/loop-plugin-starter-template/server/store SessionStore
endif
## Generates mock golang interfaces for testing
.PHONY: clean_mock
clean_mock:
ifneq ($(HAS_SERVER),)
rm -rf ./server/mocks
endif
## Run Go REST API system tests
.PHONY: test-rest-api
test-rest-api: dist
@echo Running REST API tests
ifneq ($(RUN),)
PLUGIN_BUNDLE=$(shell pwd)/dist/$(BUNDLE_NAME) $(GO) test -v $(GO_TEST_FLAGS) ./test/restapitest --run $(RUN)
else
PLUGIN_BUNDLE=$(shell pwd)/dist/$(BUNDLE_NAME) $(GO) test -v $(GO_TEST_FLAGS) ./test/restapitest
endif
## Extract new translation messages ## Extract new translation messages
.PHONY: i18n-extract-server .PHONY: i18n-extract-server
i18n-extract-server: i18n-extract-server:
@goi18n extract -format json -outdir assets/i18n/ server/ utils/ apps/ cmd/ upstream/ @goi18n extract -format json -outdir assets/i18n/ server/
@for x in assets/i18n/active.*.json; do echo $$x | sed 's/active/translate/' | sed 's/^/touch /' | bash; done @for x in assets/i18n/active.*.json; do echo $$x | sed 's/active/translate/' | sed 's/^/touch /' | bash; done
@goi18n merge -format json -outdir assets/i18n/ assets/i18n/active.*.json @goi18n merge -format json -outdir assets/i18n/ assets/i18n/active.*.json
@echo "Please update your assets/i18n/translate.*.json files and execute \"make i18n-merge-server\"" @echo "Please update your assets/i18n/translate.*.json files and execute \"make i18n-merge-server\""
@@ -65,18 +25,3 @@ i18n-merge-server:
@goi18n merge -format json -outdir assets/i18n/ assets/i18n/active.*.json assets/i18n/translate.*.json @goi18n merge -format json -outdir assets/i18n/ assets/i18n/active.*.json assets/i18n/translate.*.json
@rm -f assets/i18n/translate.*.json @rm -f assets/i18n/translate.*.json
@echo "Translations merged, please verify your "git diff" before you submit the changes" @echo "Translations merged, please verify your "git diff" before you submit the changes"
## Run a simple Mattermost Server
.PHONY: dev_server
dev_server:
cd dev && docker-compose up mattermost db
## Run the hello-world app
.PHONY: run-example-hello-4000
run-example-hello-4000:
cd test/hello-world && go run .
## Run the test app
.PHONY: run-test-app-8081
run-test-app-8081:
cd test/app && go run .
+1 -1
View File
@@ -108,7 +108,7 @@ func findManifest() (*model.Manifest, error) {
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "failed to open %s", manifestFilePath) return nil, errors.Wrapf(err, "failed to open %s", manifestFilePath)
} }
defer manifestFile.Close() defer func() { _ = manifestFile.Close() }()
// Re-decode the manifest, disallowing unknown fields. When we write the manifest back out, // 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. // we don't want to accidentally clobber anything we won't preserve.
+1 -1
View File
@@ -125,7 +125,7 @@ func deploy(ctx context.Context, client *model.Client4, pluginID, bundlePath str
if err != nil { if err != nil {
return fmt.Errorf("failed to open %s: %w", bundlePath, err) return fmt.Errorf("failed to open %s: %w", bundlePath, err)
} }
defer pluginBundle.Close() defer func() { _ = pluginBundle.Close() }()
log.Print("Uploading plugin via API.") log.Print("Uploading plugin via API.")
_, _, err = client.UploadPluginForced(ctx, pluginBundle) _, _, err = client.UploadPluginForced(ctx, pluginBundle)
+4 -8
View File
@@ -6,18 +6,19 @@ toolchain go1.24.10
require ( require (
github.com/gorilla/mux v1.8.1 github.com/gorilla/mux v1.8.1
github.com/mattermost/mattermost/server/public v0.1.16 github.com/mattermost/mattermost/server/public v0.1.6
github.com/pkg/errors v0.9.1 github.com/pkg/errors v0.9.1
github.com/rudderlabs/analytics-go v3.3.3+incompatible github.com/rudderlabs/analytics-go v3.3.3+incompatible
) )
require ( require (
github.com/beevik/etree v1.5.1 // indirect filippo.io/edwards25519 v1.1.0 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect github.com/blang/semver/v4 v4.0.0 // indirect
github.com/dyatlov/go-opengraph/opengraph v0.0.0-20220524092352-606d7b1e5f8a // indirect github.com/dyatlov/go-opengraph/opengraph v0.0.0-20220524092352-606d7b1e5f8a // indirect
github.com/fatih/color v1.18.0 // indirect github.com/fatih/color v1.18.0 // indirect
github.com/francoispqt/gojay v1.2.13 // indirect github.com/francoispqt/gojay v1.2.13 // indirect
github.com/go-asn1-ber/asn1-ber v1.5.7 // indirect github.com/go-asn1-ber/asn1-ber v1.5.7 // indirect
github.com/go-sql-driver/mysql v1.8.1 // indirect
github.com/golang/protobuf v1.5.4 // indirect github.com/golang/protobuf v1.5.4 // indirect
github.com/google/uuid v1.6.0 // indirect github.com/google/uuid v1.6.0 // indirect
github.com/gorilla/websocket v1.5.3 // indirect github.com/gorilla/websocket v1.5.3 // indirect
@@ -26,20 +27,17 @@ require (
github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-plugin v1.6.3 // indirect github.com/hashicorp/go-plugin v1.6.3 // indirect
github.com/hashicorp/yamux v0.1.2 // indirect github.com/hashicorp/yamux v0.1.2 // indirect
github.com/jonboulle/clockwork v0.5.0 // indirect github.com/kr/text v0.2.0 // indirect
github.com/lib/pq v1.10.9 // indirect github.com/lib/pq v1.10.9 // indirect
github.com/mattermost/go-i18n v1.11.1-0.20211013152124-5c415071e404 // indirect github.com/mattermost/go-i18n v1.11.1-0.20211013152124-5c415071e404 // indirect
github.com/mattermost/gosaml2 v0.9.0 // indirect
github.com/mattermost/ldap v0.0.0-20231116144001-0f480c025956 // indirect github.com/mattermost/ldap v0.0.0-20231116144001-0f480c025956 // indirect
github.com/mattermost/logr/v2 v2.0.22 // indirect github.com/mattermost/logr/v2 v2.0.22 // indirect
github.com/mattermost/xml-roundtrip-validator v0.1.0 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-isatty v0.0.20 // indirect
github.com/oklog/run v1.1.0 // indirect github.com/oklog/run v1.1.0 // indirect
github.com/pborman/uuid v1.2.1 // indirect github.com/pborman/uuid v1.2.1 // indirect
github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml v1.9.5 // indirect
github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect
github.com/russellhaering/goxmldsig v1.5.0 // indirect
github.com/segmentio/backo-go v1.1.0 // indirect github.com/segmentio/backo-go v1.1.0 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect github.com/sirupsen/logrus v1.9.3 // indirect
github.com/tidwall/gjson v1.18.0 // indirect github.com/tidwall/gjson v1.18.0 // indirect
@@ -52,7 +50,6 @@ require (
github.com/wiggin77/srslog v1.0.1 // indirect github.com/wiggin77/srslog v1.0.1 // indirect
github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c // indirect github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c // indirect
golang.org/x/crypto v0.38.0 // indirect golang.org/x/crypto v0.38.0 // indirect
golang.org/x/mod v0.24.0 // indirect
golang.org/x/net v0.40.0 // indirect golang.org/x/net v0.40.0 // indirect
golang.org/x/sys v0.33.0 // indirect golang.org/x/sys v0.33.0 // indirect
golang.org/x/text v0.25.0 // indirect golang.org/x/text v0.25.0 // indirect
@@ -61,5 +58,4 @@ require (
google.golang.org/protobuf v1.36.6 // indirect google.golang.org/protobuf v1.36.6 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
) )
+8 -27
View File
@@ -6,12 +6,11 @@ dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl
dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU=
dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4=
dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU=
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A=
github.com/beevik/etree v1.5.1 h1:TC3zyxYp+81wAmbsi8SWUpZCurbxa6S8RITYRSkNRwo=
github.com/beevik/etree v1.5.1/go.mod h1:gPNJNaBGVZ9AwsidazFZyygnd+0pAU38N4D+WemwKNs=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
@@ -45,6 +44,8 @@ github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E=
@@ -88,15 +89,10 @@ github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6
github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU=
github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c=
github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo=
github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
github.com/jonboulle/clockwork v0.5.0 h1:Hyh9A8u51kptdkR+cqRpT1EebBwTn1oK9YfGYbdFz6I=
github.com/jonboulle/clockwork v0.5.0/go.mod h1:3mZlmanh0g2NDKO5TWZVJAfofYk64M7XN3SzBPjZF60=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@@ -110,16 +106,12 @@ github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm
github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mattermost/go-i18n v1.11.1-0.20211013152124-5c415071e404 h1:Khvh6waxG1cHc4Cz5ef9n3XVCxRWpAKUtqg9PJl5+y8= github.com/mattermost/go-i18n v1.11.1-0.20211013152124-5c415071e404 h1:Khvh6waxG1cHc4Cz5ef9n3XVCxRWpAKUtqg9PJl5+y8=
github.com/mattermost/go-i18n v1.11.1-0.20211013152124-5c415071e404/go.mod h1:RyS7FDNQlzF1PsjbJWHRI35exqaKGSO9qD4iv8QjE34= github.com/mattermost/go-i18n v1.11.1-0.20211013152124-5c415071e404/go.mod h1:RyS7FDNQlzF1PsjbJWHRI35exqaKGSO9qD4iv8QjE34=
github.com/mattermost/gosaml2 v0.9.0 h1:4GxvyRdT2X8KtrhuKjsByDqjA8o6P4q8Kvzo0RbO3CQ=
github.com/mattermost/gosaml2 v0.9.0/go.mod h1:1nMAdE2Psxaz+pj79Oytayi+hC3aZUi3SmJQlIe+sLM=
github.com/mattermost/ldap v0.0.0-20231116144001-0f480c025956 h1:Y1Tu/swM31pVwwb2BTCsOdamENjjWCI6qmfHLbk6OZI= github.com/mattermost/ldap v0.0.0-20231116144001-0f480c025956 h1:Y1Tu/swM31pVwwb2BTCsOdamENjjWCI6qmfHLbk6OZI=
github.com/mattermost/ldap v0.0.0-20231116144001-0f480c025956/go.mod h1:SRl30Lb7/QoYyohYeVBuqYvvmXSZJxZgiV3Zf6VbxjI= github.com/mattermost/ldap v0.0.0-20231116144001-0f480c025956/go.mod h1:SRl30Lb7/QoYyohYeVBuqYvvmXSZJxZgiV3Zf6VbxjI=
github.com/mattermost/logr/v2 v2.0.22 h1:npFkXlkAWR9J8payh8ftPcCZvLbHSI125mAM5/r/lP4= github.com/mattermost/logr/v2 v2.0.22 h1:npFkXlkAWR9J8payh8ftPcCZvLbHSI125mAM5/r/lP4=
github.com/mattermost/logr/v2 v2.0.22/go.mod h1:0sUKpO+XNMZApeumaid7PYaUZPBIydfuWZ0dqixXo+s= github.com/mattermost/logr/v2 v2.0.22/go.mod h1:0sUKpO+XNMZApeumaid7PYaUZPBIydfuWZ0dqixXo+s=
github.com/mattermost/mattermost/server/public v0.1.16 h1:CtTzNnuFCNndUaNfQse5NnvzfBZt+8P+wOU7OMn07zg= github.com/mattermost/mattermost/server/public v0.1.6 h1:k3upRnYfDY9CtVifQ+hQS6ZP4dGsU6I3oG1DCcBYy0c=
github.com/mattermost/mattermost/server/public v0.1.16/go.mod h1:hvxMXqfao9JDHM3auk8MLl7DD6jAuG0q27Kf9y6z1r0= github.com/mattermost/mattermost/server/public v0.1.6/go.mod h1:Dm5uf3z8ckDOKYD1cbnb1Uqm/G9WYIaouSP/HnH+Rbs=
github.com/mattermost/xml-roundtrip-validator v0.1.0 h1:RXbVD2UAl7A7nOTR4u7E3ILa4IbtvKBHw64LDsmu9hU=
github.com/mattermost/xml-roundtrip-validator v0.1.0/go.mod h1:qccnGMcpgwcNaBnxqpJpWWUiPNr5H3O8eDgGV9gT5To=
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
@@ -144,7 +136,6 @@ github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3v
github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1GshSTtih8C2gDs04w8dReiOGXrGLNoY= github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1GshSTtih8C2gDs04w8dReiOGXrGLNoY=
github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -155,15 +146,10 @@ github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
github.com/rudderlabs/analytics-go v3.3.3+incompatible h1:OG0XlKoXfr539e2t1dXtTB+Gr89uFW+OUNQBVhHIIBY= github.com/rudderlabs/analytics-go v3.3.3+incompatible h1:OG0XlKoXfr539e2t1dXtTB+Gr89uFW+OUNQBVhHIIBY=
github.com/rudderlabs/analytics-go v3.3.3+incompatible/go.mod h1:LF8/ty9kUX4PTY3l5c97K3nZZaX5Hwsvt+NBaRL/f30= github.com/rudderlabs/analytics-go v3.3.3+incompatible/go.mod h1:LF8/ty9kUX4PTY3l5c97K3nZZaX5Hwsvt+NBaRL/f30=
github.com/russellhaering/goxmldsig v1.2.0/go.mod h1:gM4MDENBQf7M+V824SGfyIUVFWydB7n0KkEubVJl+Tw=
github.com/russellhaering/goxmldsig v1.5.0 h1:AU2UkkYIUOTyZRbe08XMThaOCelArgvNfYapcmSjBNw=
github.com/russellhaering/goxmldsig v1.5.0/go.mod h1:x98CjQNFJcWfMxeOrMnMKg70lvDP6tE0nTaeUnjXDmk=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/segmentio/backo-go v1.1.0 h1:cJIfHQUdmLsd8t9IXqf5J8SdrOMn9vMa7cIvOavHAhc= github.com/segmentio/backo-go v1.1.0 h1:cJIfHQUdmLsd8t9IXqf5J8SdrOMn9vMa7cIvOavHAhc=
github.com/segmentio/backo-go v1.1.0/go.mod h1:ckenwdf+v/qbyhVdNPWHnqh2YdJBED1O9cidYyM5J18= github.com/segmentio/backo-go v1.1.0/go.mod h1:ckenwdf+v/qbyhVdNPWHnqh2YdJBED1O9cidYyM5J18=
@@ -201,8 +187,8 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY=
github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
@@ -249,8 +235,6 @@ golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL
golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU=
golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -323,10 +307,8 @@ google.golang.org/grpc v1.72.0/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3i
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
@@ -335,7 +317,6 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o=
+2 -1
View File
@@ -40,7 +40,8 @@ func (p *Plugin) InitApi() {
next.ServeHTTP(w, r) next.ServeHTTP(w, r)
return return
} }
http.Error(w, "Not authorized", http.StatusUnauthorized) w.WriteHeader(http.StatusUnauthorized)
p.sendError(w, "Not authorized")
}) })
}) })
+7 -5
View File
@@ -65,11 +65,13 @@ func (p *Plugin) OnConfigurationChange() error {
p.API.LogInfo("OnConfigurationChange") p.API.LogInfo("OnConfigurationChange")
var configuration = new(Configuration) var configuration = new(Configuration)
// Load the public Configuration fields from the Mattermost server Configuration. // Load the public Configuration fields from the Mattermost server Configuration.
err := p.API.LoadPluginConfiguration(configuration) if err := p.API.LoadPluginConfiguration(configuration); err != nil {
if err == nil {
p.SetConfiguration(configuration)
return nil
} else {
return errors.Wrap(err, "failed to load plugin Configuration") return errors.Wrap(err, "failed to load plugin Configuration")
} }
p.SetConfiguration(configuration)
if err := p.initTelemetry(p.API.GetConfig().LogSettings.EnableDiagnostics); err != nil {
p.API.LogWarn("failed to init telemetry", "error", err.Error())
}
return nil
} }
-3
View File
@@ -34,9 +34,6 @@ func (p *Plugin) OnActivate() error {
p.InitApi() p.InitApi()
} }
configuration := p.GetConfiguration()
p.configuration = configuration
bundlePath, err := p.API.GetBundlePath() bundlePath, err := p.API.GetBundlePath()
if err != nil { if err != nil {
return err return err
+6
View File
@@ -17,6 +17,12 @@ func (p *Plugin) uninitTelemetry() error {
} }
func (p *Plugin) initTelemetry(enableDiagnostics *bool) error { func (p *Plugin) initTelemetry(enableDiagnostics *bool) error {
// Ключи RudderStack задаются при сборке (MM_RUDDER_CALLS_PROD, MM_RUDDER_DATAPLANE_URL).
// Без них телеметрия просто выключена.
if rudderWriteKey == "" || rudderDataplaneURL == "" {
return nil
}
p.mut.Lock() p.mut.Lock()
defer p.mut.Unlock() defer p.mut.Unlock()
if p.telemetry == nil && enableDiagnostics != nil && *enableDiagnostics { if p.telemetry == nil && enableDiagnostics != nil && *enableDiagnostics {
-47
View File
@@ -1,47 +0,0 @@
{
"settings": {
"import/resolver": {
"typescript": {
"project": "./tsconfig.json"
}
},
"react": {
"version": "17.0.2"
}
},
"extends": [
"eslint:recommended",
"plugin:react-hooks/recommended",
"plugin:import/recommended",
"plugin:import/typescript"
],
"parser": "@typescript-eslint/parser",
"plugins": [
"react",
"import",
"@typescript-eslint",
"unused-imports"
],
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module",
"ecmaFeatures": {
"jsx": true,
"impliedStrict": true,
"modules": true,
"experimentalObjectRestSpread": true
}
},
"env": {
"browser": true,
"node": true,
"jquery": false,
"es6": true
},
"rules": {
"no-unused-vars": "warn",
"no-unused-expressions": "warn",
"unused-imports/no-unused-imports": "warn",
"import/no-named-as-default": "off"
}
}
+24
View File
@@ -0,0 +1,24 @@
import js from '@eslint/js';
import tseslint from 'typescript-eslint';
import reactHooks from 'eslint-plugin-react-hooks';
import unusedImports from 'eslint-plugin-unused-imports';
export default tseslint.config(
{ ignores: ['dist/', 'node_modules/', 'src/manifest.ts'] },
js.configs.recommended,
...tseslint.configs.recommended,
{
plugins: {
'react-hooks': reactHooks,
'unused-imports': unusedImports,
},
rules: {
...reactHooks.configs.recommended.rules,
'unused-imports/no-unused-imports': 'warn',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/ban-ts-comment': 'off',
// В шаблоне пустые типы — заготовки, которые вы заполните
'@typescript-eslint/no-empty-object-type': 'off',
},
},
);
+8 -4
View File
@@ -6,10 +6,14 @@
}, },
"scripts": { "scripts": {
"build": "vite build", "build": "vite build",
"build:watch": "vite build --watch",
"debug": "vite build --minify false --sourcemap inline",
"debug:watch": "vite build --minify false --sourcemap inline --watch",
"dev": "vite", "dev": "vite",
"lint": "eslint --ignore-pattern node_modules --ignore-pattern dist --ext .js --ext .jsx --ext tsx --ext ts . --quiet --cache", "lint": "eslint . --quiet --cache",
"fix": "eslint --ignore-pattern node_modules --ignore-pattern dist --ext .js --ext .jsx --ext tsx --ext ts . --quiet --fix --cache", "fix": "eslint . --quiet --fix --cache",
"check-types": "tsc" "check-types": "tsc",
"test": "echo \"no webapp tests\""
}, },
"devDependencies": { "devDependencies": {
"@babel/plugin-transform-modules-umd": "^7.27.1", "@babel/plugin-transform-modules-umd": "^7.27.1",
@@ -33,7 +37,7 @@
"eslint": "^9.26.0", "eslint": "^9.26.0",
"eslint-plugin-import": "2.22.0", "eslint-plugin-import": "2.22.0",
"eslint-plugin-react": "7.20.3", "eslint-plugin-react": "7.20.3",
"eslint-plugin-react-hooks": "4.0.6", "eslint-plugin-react-hooks": "5.2.0",
"eslint-plugin-unused-imports": "^4.1.4", "eslint-plugin-unused-imports": "^4.1.4",
"file-loader": "6.0.0", "file-loader": "6.0.0",
"identity-obj-proxy": "3.0.0", "identity-obj-proxy": "3.0.0",
+7 -16
View File
@@ -1,19 +1,10 @@
import React from "react"; import React from 'react';
import { useDispatch } from 'react-redux';
import { Provider } from 'react-redux';
import manifest from '../manifest';
import usePlugin from '../utils/usePlugin';
// Корневой компонент всегда присутствует на странице, но ничего не показывает сам по себе.
// Держите здесь то, что должно работать постоянно: модальные окна, фоновую логику.
// Доступ к объекту плагина — хук usePlugin() из ../utils/usePlugin.
const RootComponent: React.FC = () => { const RootComponent: React.FC = () => {
const dispatch = useDispatch(); return null;
const plugin = usePlugin(); };
return ( export default RootComponent;
<div>
{/* Add your root component content here */}
<p>Template Plugin Root Component</p>
</div>
)
}
export default RootComponent
-14
View File
@@ -1,14 +0,0 @@
import { getPluginAssetsPath } from '../utils/utils';
export const basePath = getPluginAssetsPath();
// Add your assets configuration here
export type AssetsType = {
// Define your asset types
}
const assets: AssetsType = {
// Add your assets here
} as const
export default assets
-5
View File
@@ -1,5 +0,0 @@
import Svgs from './svgs.js';
export {
Svgs,
};
+1 -1
View File
@@ -25,7 +25,7 @@ function pluginState(state: PluginStore = EmptyState, { type, data }: ActionType
case ACTIONS.EXAMPLE_ACTION: case ACTIONS.EXAMPLE_ACTION:
return { return {
...state, ...state,
// Handle action ...data,
} }
default: default:
return state; return state;
-1
View File
@@ -1 +0,0 @@
// trackEvent: (event: Telemetry.Event, source: Telemetry.Source, props?: Record<string, string>) => void,
-18
View File
@@ -1,18 +0,0 @@
import { getTheme } from 'loop-plugin-sdk/loop/redux/selectors/entities/preferences';
import { GlobalState } from 'loop-plugin-sdk/loop/types/store';
import React, { useEffect } from "react";
import { useSelector } from 'react-redux';
import { isDarkTheme } from './colorUtils';
const useIsDarkTheme = () => {
const [isDark, setIsDark] = React.useState(false);
const theme = useSelector((state: GlobalState) => getTheme(state))
useEffect(() => {
setIsDark(isDarkTheme());
}, [theme])
return isDark
}
export default useIsDarkTheme
+6 -6
View File
@@ -3117,12 +3117,12 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"eslint-plugin-react-hooks@npm:4.0.6": "eslint-plugin-react-hooks@npm:5.2.0":
version: 4.0.6 version: 5.2.0
resolution: "eslint-plugin-react-hooks@npm:4.0.6" resolution: "eslint-plugin-react-hooks@npm:5.2.0"
peerDependencies: peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
checksum: 10c0/bc261eb7b2ac177c86f397e65f556c0f1273fcb96ee07155e2611716fa0b6c9e687c99fa91925421c11ebb4b769c8b78624bb9c86ecf68a353297f17212f5697 checksum: 10c0/1c8d50fa5984c6dea32470651807d2922cc3934cf3425e78f84a24c2dfd972e7f019bee84aefb27e0cf2c13fea0ac1d4473267727408feeb1c56333ca1489385
languageName: node languageName: node
linkType: hard linkType: hard
@@ -5824,7 +5824,7 @@ __metadata:
eslint: "npm:^9.26.0" eslint: "npm:^9.26.0"
eslint-plugin-import: "npm:2.22.0" eslint-plugin-import: "npm:2.22.0"
eslint-plugin-react: "npm:7.20.3" eslint-plugin-react: "npm:7.20.3"
eslint-plugin-react-hooks: "npm:4.0.6" eslint-plugin-react-hooks: "npm:5.2.0"
eslint-plugin-unused-imports: "npm:^4.1.4" eslint-plugin-unused-imports: "npm:^4.1.4"
file-loader: "npm:6.0.0" file-loader: "npm:6.0.0"
identity-obj-proxy: "npm:3.0.0" identity-obj-proxy: "npm:3.0.0"