Mono repo -> Master (#22553)
Combines the following repositories into one: https://github.com/mattermost/mattermost-server https://github.com/mattermost/mattermost-webapp https://github.com/mattermost/focalboard https://github.com/mattermost/mattermost-plugin-playbooks
Этот коммит содержится в:
3
server/build/.gitignore
поставляемый
Обычный файл
3
server/build/.gitignore
поставляемый
Обычный файл
@@ -0,0 +1,3 @@
|
||||
diff.txt
|
||||
latest.sql
|
||||
migrated.sql
|
||||
104
server/build/Dockerfile
Обычный файл
104
server/build/Dockerfile
Обычный файл
@@ -0,0 +1,104 @@
|
||||
FROM debian:buster-slim@sha256:5b0b1a9a54651bbe9d4d3ee96bbda2b2a1da3d2fa198ddebbced46dfdca7f216
|
||||
|
||||
|
||||
# Setting bash as our shell, and enabling pipefail option
|
||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||
|
||||
# Some ENV variables
|
||||
ENV PATH="/mattermost/bin:${PATH}"
|
||||
ARG PUID=2000
|
||||
ARG PGID=2000
|
||||
ARG MM_PACKAGE="https://releases.mattermost.com/7.9.1/mattermost-7.9.1-linux-amd64.tar.gz?src=docker"
|
||||
|
||||
# # Install needed packages and indirect dependencies
|
||||
RUN apt-get update \
|
||||
&& apt-get install --no-install-recommends -y \
|
||||
ca-certificates=20200601~deb10u2 \
|
||||
curl=7.64.0-4+deb10u2 \
|
||||
mime-support=3.62 \
|
||||
unrtf=0.21.10-clean-1 \
|
||||
wv=1.2.9-4.2+b2 \
|
||||
poppler-utils=0.71.0-5 \
|
||||
tidy=2:5.6.0-10 \
|
||||
libssl1.1=1.1.1n-0+deb10u3 \
|
||||
sensible-utils=0.0.12 \
|
||||
libsasl2-modules-db=2.1.27+dfsg-1+deb10u2 \
|
||||
libsasl2-2=2.1.27+dfsg-1+deb10u2 \
|
||||
libldap-common=2.4.47+dfsg-3+deb10u7 \
|
||||
libldap-2.4-2=2.4.47+dfsg-3+deb10u7 \
|
||||
libicu63=63.1-6+deb10u3 \
|
||||
libxml2=2.9.4+dfsg1-7+deb10u4 \
|
||||
ucf=3.0038+nmu1 \
|
||||
openssl=1.1.1n-0+deb10u3 \
|
||||
libkeyutils1=1.6-6 \
|
||||
libkrb5support0=1.17-3+deb10u4 \
|
||||
libk5crypto3=1.17-3+deb10u4 \
|
||||
libkrb5-3=1.17-3+deb10u4 \
|
||||
libgssapi-krb5-2=1.17-3+deb10u4 \
|
||||
libnghttp2-14=1.36.0-2+deb10u1 \
|
||||
libpsl5=0.20.2-2 \
|
||||
librtmp1=2.4+20151223.gitfa8646d.1-2 \
|
||||
libssh2-1=1.8.0-2.1 \
|
||||
libcurl4=7.64.0-4+deb10u2 \
|
||||
fonts-dejavu-core=2.37-1 \
|
||||
fontconfig-config=2.13.1-2 \
|
||||
libbsd0=0.9.1-2+deb10u1 \
|
||||
libexpat1=2.2.6-2+deb10u4 \
|
||||
libpng16-16=1.6.36-6 \
|
||||
libfreetype6=2.9.1-3+deb10u2 \
|
||||
libfontconfig1=2.13.1-2 \
|
||||
libpixman-1-0=0.36.0-1 \
|
||||
libxau6=1:1.0.8-1+b2 \
|
||||
libxdmcp6=1:1.1.2-3 \
|
||||
libxcb1=1.13.1-2 \
|
||||
libx11-data=2:1.6.7-1+deb10u2 \
|
||||
libx11-6=2:1.6.7-1+deb10u2 \
|
||||
libxcb-render0=1.13.1-2 \
|
||||
libxcb-shm0=1.13.1-2 \
|
||||
libxext6=2:1.3.3-1+b2 \
|
||||
libxrender1=1:0.9.10-1 \
|
||||
libcairo2=1.16.0-4+deb10u1 \
|
||||
libcurl3-gnutls=7.64.0-4+deb10u5 \
|
||||
libglib2.0-0=2.58.3-2+deb10u3 \
|
||||
libgsf-1-common=1.14.45-1 \
|
||||
libgsf-1-114=1.14.45-1 \
|
||||
libjbig0=2.1-3.1+b2 \
|
||||
libjpeg62-turbo=1:1.5.2-2+deb10u1 \
|
||||
liblcms2-2=2.9-3 \
|
||||
libnspr4=2:4.20-1 \
|
||||
libsqlite3-0=3.27.2-3+deb10u1 \
|
||||
libnss3=2:3.42.1-1+deb10u5 \
|
||||
libopenjp2-7=2.3.0-2+deb10u2 \
|
||||
libwebp6=0.6.1-2+deb10u1 \
|
||||
libtiff5=4.1.0+git191117-2~deb10u4 \
|
||||
libpoppler82=0.71.0-5 \
|
||||
libtidy5deb1=2:5.6.0-10 \
|
||||
libwmf0.2-7=0.2.8.4-14 \
|
||||
libwv-1.2-4=1.2.9-4.2+b2 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Set mattermost group/user and download Mattermost
|
||||
RUN mkdir -p /mattermost/data /mattermost/plugins /mattermost/client/plugins \
|
||||
&& addgroup -gid ${PGID} mattermost \
|
||||
&& adduser -q --disabled-password --uid ${PUID} --gid ${PGID} --gecos "" --home /mattermost mattermost \
|
||||
&& if [ -n "$MM_PACKAGE" ]; then curl $MM_PACKAGE | tar -xvz ; \
|
||||
else echo "please set the MM_PACKAGE" ; exit 127 ; fi \
|
||||
&& chown -R mattermost:mattermost /mattermost /mattermost/data /mattermost/plugins /mattermost/client/plugins
|
||||
|
||||
# We should refrain from running as privileged user
|
||||
USER mattermost
|
||||
|
||||
#Healthcheck to make sure container is ready
|
||||
HEALTHCHECK --interval=30s --timeout=10s \
|
||||
CMD curl -f http://localhost:8065/api/v4/system/ping || exit 1
|
||||
|
||||
# Configure entrypoint and command
|
||||
COPY entrypoint.sh /
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
WORKDIR /mattermost
|
||||
CMD ["mattermost"]
|
||||
|
||||
EXPOSE 8065 8067 8074 8075
|
||||
|
||||
# Declare volumes for mount point directories
|
||||
VOLUME ["/mattermost/data", "/mattermost/logs", "/mattermost/config", "/mattermost/plugins", "/mattermost/client/plugins"]
|
||||
3
server/build/Dockerfile.buildenv
Обычный файл
3
server/build/Dockerfile.buildenv
Обычный файл
@@ -0,0 +1,3 @@
|
||||
FROM golang:1.19.5@sha256:bb9811fad43a7d6fd2173248d8331b2dcf5ac9af20976b1937ecd214c5b8c383
|
||||
|
||||
RUN apt-get update && apt-get install -y make git apt-transport-https ca-certificates curl software-properties-common build-essential zip xmlsec1 jq
|
||||
11
server/build/MIT-COMPILED-LICENSE.md
Обычный файл
11
server/build/MIT-COMPILED-LICENSE.md
Обычный файл
@@ -0,0 +1,11 @@
|
||||
Mattermost MIT Compiled License
|
||||
|
||||
**Note: this license does not cover source code, for information on source code licensing see LICENSE.txt in the Mattermost source code.
|
||||
|
||||
Copyright (c) 2016-present Mattermost, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software;
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
1
server/build/PRIVACY_POLICY.md
Обычный файл
1
server/build/PRIVACY_POLICY.md
Обычный файл
@@ -0,0 +1 @@
|
||||
https://mattermost.com/privacy-policy/
|
||||
21
server/build/README.md
Обычный файл
21
server/build/README.md
Обычный файл
@@ -0,0 +1,21 @@
|
||||
## About this folder
|
||||
|
||||
This folder contains some files that we use to build the `mattermost-server` and other files like privacy policy and licenses.
|
||||
|
||||
The `Dockerfile` in this folder (`Dockerfile.buildenv`) is the build environment for our current builds you can find the docker image to download [here](https://hub.docker.com/r/mattermost/mattermost-build-server/tags/) or build your own.
|
||||
|
||||
|
||||
|
||||
### Docker Image for building the Server
|
||||
|
||||
We have a docker image to build `mattermost-server` and it is based on Go docker image.
|
||||
|
||||
In our Docker Hub Repository we have the following images:
|
||||
|
||||
- `mattermost/mattermost-build-server:dec-7-2018` which is based on Go 1.11 you can use for MM versions <= `5.8.0`
|
||||
- `mattermost/mattermost-build-server:feb-28-2019` which is based on Go 1.12 you can use for MM versions >= `5.9.0` <= `5.15.0`
|
||||
- `mattermost/mattermost-build-server:sep-17-2019` which is based on Go 1.12.9 you can use for MM versions >= `5.16.0`
|
||||
- `mattermost/mattermost-build-server:20200322_golang-1.14.1` which is based on Go 1.14.1 you can use for MM versions >= `5.24.x`
|
||||
- `mattermost/mattermost-build-server:20201023_golang-1.14.6` which is based on Go 1.14.6 you can use for MM versions >= `5.25.x`
|
||||
- `mattermost/mattermost-build-server:20201119_golang-1.15.5` which is based on Go 1.15.5 you can use for MM versions >= `5.26.x` to `5.37.x`
|
||||
- `mattermost/mattermost-build-server:20210810_golang-1.16.7` which is based on Go 1.16.X you can use for MM versions >= `5.38.x`
|
||||
61
server/build/contrib/gitlab/.gitlab-ci.yml
Обычный файл
61
server/build/contrib/gitlab/.gitlab-ci.yml
Обычный файл
@@ -0,0 +1,61 @@
|
||||
lint:
|
||||
allow_failure: true
|
||||
image: golangci/golangci-lint
|
||||
script:
|
||||
- GO111MODULE=off GOBIN=$PWD/bin go get -u github.com/mattermost/mattermost-govet
|
||||
- make config-reset
|
||||
- make check-style
|
||||
|
||||
test-quick:
|
||||
image: docker
|
||||
variables:
|
||||
DOCKER_HOST: tcp://docker:2375
|
||||
DOCKER_TLS_CERTDIR: ""
|
||||
TEST_DATABASE_MYSQL_DSN: "mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s&multiStatements=true"
|
||||
TEST_DATABASE_POSTGRESQL_DSN: "postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10"
|
||||
TEST_DATABASE_MYSQL_ROOT_PASSWD: "mostest"
|
||||
services:
|
||||
- docker:dind
|
||||
before_script:
|
||||
- apk add --no-cache bash docker-compose go make
|
||||
- make start-docker
|
||||
script:
|
||||
- docker run
|
||||
--env MM_NO_DOCKER=true
|
||||
--env-file "build/dotenv/test.env"
|
||||
--mount "type=bind,source=$PWD,target=$PWD"
|
||||
--network "$CI_PROJECT_NAME"_mm-test
|
||||
docker
|
||||
/bin/sh -c "
|
||||
cd $PWD;
|
||||
apk add --no-cache bash docker-compose go mailcap make;
|
||||
make test-server-quick;
|
||||
"
|
||||
|
||||
test-full:
|
||||
rules:
|
||||
- if: '$CI_COMMIT_REF_NAME == "master"'
|
||||
image: docker
|
||||
variables:
|
||||
DOCKER_HOST: tcp://docker:2375
|
||||
DOCKER_TLS_CERTDIR: ""
|
||||
TEST_DATABASE_MYSQL_DSN: "mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s&multiStatements=true"
|
||||
TEST_DATABASE_POSTGRESQL_DSN: "postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10"
|
||||
TEST_DATABASE_MYSQL_ROOT_PASSWD: "mostest"
|
||||
services:
|
||||
- docker:dind
|
||||
before_script:
|
||||
- apk add --no-cache bash docker-compose go make
|
||||
- make start-docker
|
||||
script:
|
||||
- docker run
|
||||
--env MM_NO_DOCKER=true
|
||||
--env-file "build/dotenv/test.env"
|
||||
--mount "type=bind,source=$PWD,target=$PWD"
|
||||
--network "$CI_PROJECT_NAME"_mm-test
|
||||
docker
|
||||
/bin/sh -c "
|
||||
cd $PWD;
|
||||
apk add --no-cache bash docker-compose go mailcap make;
|
||||
make test-server;
|
||||
"
|
||||
7
server/build/contrib/gitlab/README.md
Обычный файл
7
server/build/contrib/gitlab/README.md
Обычный файл
@@ -0,0 +1,7 @@
|
||||
# GitLab CI/CD configuration for Mattermost
|
||||
|
||||
The [.gitlab-ci.yml](./.gitlab-ci.yml) file in this directory provides a [GitLab CI/CD configuration file](https://docs.gitlab.com/ee/ci/yaml/gitlab_ci_yaml.html) that can be used to run linting and unit testing for the Mattermost application.
|
||||
|
||||
## Usage
|
||||
|
||||
To configure your GitLab instance to use this configuration file (and without having to move it to the base directory in this git repository), you can configure the [`CI_CONFIG_PATH` predefined variable](https://docs.gitlab.com/ee/ci/variables/predefined_variables.html) for the repository in GitLab with the configuration file path (`build/contrib/gitlab/.gitlab-ci.yml`).
|
||||
63
server/build/docker-compose-generator/main.go
Обычный файл
63
server/build/docker-compose-generator/main.go
Обычный файл
@@ -0,0 +1,63 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
type DockerCompose struct {
|
||||
Version string `yaml:"version"`
|
||||
Services map[string]*Container `yaml:"services"`
|
||||
}
|
||||
|
||||
type Container struct {
|
||||
Command string `yaml:"command,omitempty"`
|
||||
Image string `yaml:"image,omitempty"`
|
||||
Network []string `yaml:"networks,omitempty"`
|
||||
DependsOn []string `yaml:"depends_on,omitempty"`
|
||||
}
|
||||
|
||||
func main() {
|
||||
validServices := map[string]int{
|
||||
"mysql": 3306,
|
||||
"postgres": 5432,
|
||||
"minio": 9000,
|
||||
"inbucket": 9001,
|
||||
"openldap": 389,
|
||||
"elasticsearch": 9200,
|
||||
"dejavu": 1358,
|
||||
"keycloak": 8080,
|
||||
"prometheus": 9090,
|
||||
"grafana": 3000,
|
||||
"mysql-read-replica": 3306, // FIXME: not recognizing the successfully running service on port 3307.
|
||||
}
|
||||
command := []string{}
|
||||
for _, arg := range os.Args[1:] {
|
||||
port, ok := validServices[arg]
|
||||
if !ok {
|
||||
panic(fmt.Sprintf("Unknown service %s", arg))
|
||||
}
|
||||
command = append(command, fmt.Sprintf("%s:%d", arg, port))
|
||||
}
|
||||
|
||||
var dockerCompose DockerCompose
|
||||
dockerCompose.Version = "2.4"
|
||||
dockerCompose.Services = map[string]*Container{}
|
||||
dockerCompose.Services["start_dependencies"] = &Container{
|
||||
Image: "mattermost/mattermost-wait-for-dep:latest",
|
||||
Network: []string{"mm-test"},
|
||||
DependsOn: os.Args[1:],
|
||||
Command: strings.Join(command, " "),
|
||||
}
|
||||
resultData, err := yaml.Marshal(dockerCompose)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("Unable to serialize the docker-compose file: %s.", err.Error()))
|
||||
}
|
||||
fmt.Println(string(resultData))
|
||||
}
|
||||
128
server/build/docker-compose.common.yml
Обычный файл
128
server/build/docker-compose.common.yml
Обычный файл
@@ -0,0 +1,128 @@
|
||||
version: '2.4'
|
||||
services:
|
||||
mysql:
|
||||
image: "mysql/mysql-server:5.7.12"
|
||||
restart: always
|
||||
networks:
|
||||
- mm-test
|
||||
environment:
|
||||
MYSQL_ROOT_HOST: "%"
|
||||
MYSQL_ROOT_PASSWORD: mostest
|
||||
MYSQL_PASSWORD: mostest
|
||||
MYSQL_USER: mmuser
|
||||
MYSQL_DATABASE: mattermost_test
|
||||
healthcheck:
|
||||
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
|
||||
interval: 5s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
volumes:
|
||||
- ./docker/mysql.conf.d/source.cnf:/etc/mysql/conf.d/mysql.cnf
|
||||
mysql-read-replica:
|
||||
image: "mysql/mysql-server:5.7.12"
|
||||
restart: always
|
||||
networks:
|
||||
- mm-test
|
||||
ports:
|
||||
- 3307:3306
|
||||
environment:
|
||||
MYSQL_ROOT_HOST: "%"
|
||||
MYSQL_ROOT_PASSWORD: mostest
|
||||
MYSQL_PASSWORD: mostest
|
||||
MYSQL_USER: mmuser
|
||||
MYSQL_DATABASE: mattermost_test
|
||||
healthcheck:
|
||||
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
|
||||
interval: 5s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
volumes:
|
||||
- ./docker/mysql.conf.d/replica.cnf:/etc/mysql/conf.d/mysql.cnf
|
||||
postgres:
|
||||
image: "postgres:10"
|
||||
restart: always
|
||||
networks:
|
||||
- mm-test
|
||||
environment:
|
||||
POSTGRES_USER: mmuser
|
||||
POSTGRES_PASSWORD: mostest
|
||||
POSTGRES_DB: mattermost_test
|
||||
command: postgres -c 'config_file=/etc/postgresql/postgresql.conf'
|
||||
volumes:
|
||||
- "./docker/postgres.conf:/etc/postgresql/postgresql.conf"
|
||||
healthcheck:
|
||||
test: [ "CMD", "pg_isready", "-h", "localhost" ]
|
||||
interval: 5s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
minio:
|
||||
image: "minio/minio:RELEASE.2019-10-11T00-38-09Z"
|
||||
command: "server /data"
|
||||
networks:
|
||||
- mm-test
|
||||
environment:
|
||||
MINIO_ACCESS_KEY: minioaccesskey
|
||||
MINIO_SECRET_KEY: miniosecretkey
|
||||
MINIO_SSE_MASTER_KEY: "my-minio-key:6368616e676520746869732070617373776f726420746f206120736563726574"
|
||||
inbucket:
|
||||
image: "inbucket/inbucket:stable"
|
||||
restart: always
|
||||
environment:
|
||||
INBUCKET_WEB_ADDR: "0.0.0.0:9001"
|
||||
INBUCKET_POP3_ADDR: "0.0.0.0:10110"
|
||||
INBUCKET_SMTP_ADDR: "0.0.0.0:10025"
|
||||
networks:
|
||||
- mm-test
|
||||
openldap:
|
||||
image: "osixia/openldap:1.4.0"
|
||||
restart: always
|
||||
networks:
|
||||
- mm-test
|
||||
environment:
|
||||
LDAP_TLS_VERIFY_CLIENT: "never"
|
||||
LDAP_ORGANISATION: "Mattermost Test"
|
||||
LDAP_DOMAIN: "mm.test.com"
|
||||
LDAP_ADMIN_PASSWORD: "mostest"
|
||||
elasticsearch:
|
||||
image: "mattermost/mattermost-elasticsearch-docker:7.17.3"
|
||||
networks:
|
||||
- mm-test
|
||||
environment:
|
||||
http.host: "0.0.0.0"
|
||||
http.port: 9200
|
||||
http.cors.enabled: "true"
|
||||
http.cors.allow-origin: "http://localhost:1358,http://127.0.0.1:1358"
|
||||
http.cors.allow-headers: "X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization"
|
||||
http.cors.allow-credentials: "true"
|
||||
transport.host: "127.0.0.1"
|
||||
ES_JAVA_OPTS: "-Xms512m -Xmx512m"
|
||||
dejavu:
|
||||
image: "appbaseio/dejavu:3.4.2"
|
||||
networks:
|
||||
- mm-test
|
||||
keycloak:
|
||||
image: "jboss/keycloak:10.0.2"
|
||||
restart: always
|
||||
environment:
|
||||
KEYCLOAK_USER: mmuser
|
||||
KEYCLOAK_PASSWORD: mostest
|
||||
DB_VENDOR: h2
|
||||
KEYCLOAK_IMPORT: /setup/realm.json
|
||||
networks:
|
||||
- mm-test
|
||||
volumes:
|
||||
- "./docker/keycloak:/setup"
|
||||
prometheus:
|
||||
image: "prom/prometheus"
|
||||
volumes:
|
||||
- "./docker/prometheus${IS_LINUX}.yml:/etc/prometheus/prometheus.yml"
|
||||
networks:
|
||||
- mm-test
|
||||
grafana:
|
||||
image: "grafana/grafana"
|
||||
volumes:
|
||||
- "./docker/grafana/grafana.ini:/etc/grafana/grafana.ini"
|
||||
- "./docker/grafana/provisioning:/etc/grafana/provisioning"
|
||||
- "./docker/grafana/dashboards:/var/lib/grafana/dashboards"
|
||||
networks:
|
||||
- mm-test
|
||||
65
server/build/docker-compose.yml
Обычный файл
65
server/build/docker-compose.yml
Обычный файл
@@ -0,0 +1,65 @@
|
||||
version: '2.4'
|
||||
services:
|
||||
mysql:
|
||||
extends:
|
||||
file: docker-compose.common.yml
|
||||
service: mysql
|
||||
tmpfs: /var/lib/mysql
|
||||
volumes:
|
||||
- "./docker/mysql.conf.d:/etc/mysql/conf.d"
|
||||
postgres:
|
||||
extends:
|
||||
file: docker-compose.common.yml
|
||||
service: postgres
|
||||
tmpfs: /var/lib/postgresql/data
|
||||
minio:
|
||||
extends:
|
||||
file: docker-compose.common.yml
|
||||
service: minio
|
||||
inbucket:
|
||||
extends:
|
||||
file: docker-compose.common.yml
|
||||
service: inbucket
|
||||
openldap:
|
||||
extends:
|
||||
file: docker-compose.common.yml
|
||||
service: openldap
|
||||
elasticsearch:
|
||||
extends:
|
||||
file: docker-compose.common.yml
|
||||
service: elasticsearch
|
||||
dejavu:
|
||||
extends:
|
||||
file: docker-compose.common.yml
|
||||
service: dejavu
|
||||
keycloak:
|
||||
extends:
|
||||
file: docker-compose.common.yml
|
||||
service: keycloak
|
||||
prometheus:
|
||||
extends:
|
||||
file: docker-compose.common.yml
|
||||
service: prometheus
|
||||
grafana:
|
||||
extends:
|
||||
file: docker-compose.common.yml
|
||||
service: grafana
|
||||
|
||||
start_dependencies:
|
||||
image: mattermost/mattermost-wait-for-dep:latest
|
||||
networks:
|
||||
- mm-test
|
||||
depends_on:
|
||||
- mysql
|
||||
- postgres
|
||||
- minio
|
||||
- inbucket
|
||||
- openldap
|
||||
- elasticsearch
|
||||
- prometheus
|
||||
- grafana
|
||||
command: postgres:5432 mysql:3306 minio:9000 inbucket:9001 openldap:389 elasticsearch:9200 prometheus:9090 grafana:3000
|
||||
|
||||
networks:
|
||||
mm-test:
|
||||
driver: bridge
|
||||
15
server/build/docker/grafana/dashboards/README.md
Обычный файл
15
server/build/docker/grafana/dashboards/README.md
Обычный файл
@@ -0,0 +1,15 @@
|
||||
# Developer Dashboards
|
||||
|
||||
This folder contains a modified form of the following Grafana dashboards:
|
||||
* [Mattermost Performance Monitoring](https://grafana.com/grafana/dashboards/2542)
|
||||
* [Mattermost Performance Monitoring (Bonus Metrics)](https://grafana.com/grafana/dashboards/2545)
|
||||
* [Mattermost Performance KPI Metrics](https://grafana.com/grafana/dashboards/2539)
|
||||
|
||||
The dashboards are modified from the version available on grafana.com since [Grafana doesn't currently support variables](https://github.com/grafana/grafana/issues/10786) (i.e. `${DS_MATTERMOST}`) and has no way of binding the datasource with the dashboards at the time of provisioning. Instead of falling back to the REST API to effect these changes, the following in-place changes were made to the exported dashboards available above:
|
||||
* Remove the top-level `__inputs` key
|
||||
* Remove the top-level `__requires` key
|
||||
* Replace all instances of `${DS_MATTERMOST}` with `Prometheus`, matching the name of the provisioned datasource.
|
||||
|
||||
Upon using the dashboards within Grafana however, it immediately adds various missing fields, presumably due to some internal migration. This results in a spurious prompt to "save" the dashboard. To avoid confusion, these changes were subsequently exported and written back into the provisioned dashboards above.
|
||||
|
||||
This entire process above will need to be repeated in the event newer versions of these dashboards are published.
|
||||
129
server/build/docker/grafana/dashboards/home.json
Обычный файл
129
server/build/docker/grafana/dashboards/home.json
Обычный файл
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"annotations": {
|
||||
"list": [
|
||||
{
|
||||
"builtIn": 1,
|
||||
"datasource": "-- Grafana --",
|
||||
"enable": true,
|
||||
"hide": true,
|
||||
"iconColor": "rgba(0, 211, 255, 1)",
|
||||
"name": "Annotations & Alerts",
|
||||
"type": "dashboard"
|
||||
}
|
||||
]
|
||||
},
|
||||
"editable": true,
|
||||
"gnetId": null,
|
||||
"graphTooltip": 0,
|
||||
"id": 5,
|
||||
"links": [],
|
||||
"panels": [
|
||||
{
|
||||
"datasource": null,
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"custom": {}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 3,
|
||||
"w": 24,
|
||||
"x": 0,
|
||||
"y": 0
|
||||
},
|
||||
"id": 1,
|
||||
"title": "",
|
||||
"type": "welcome"
|
||||
},
|
||||
{
|
||||
"datasource": null,
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"custom": {}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 15,
|
||||
"w": 12,
|
||||
"x": 0,
|
||||
"y": 3
|
||||
},
|
||||
"headings": true,
|
||||
"id": 3,
|
||||
"limit": 30,
|
||||
"links": [],
|
||||
"query": "Mattermost",
|
||||
"recent": false,
|
||||
"search": true,
|
||||
"starred": false,
|
||||
"tags": [],
|
||||
"title": "Dashboards",
|
||||
"type": "dashlist"
|
||||
},
|
||||
{
|
||||
"datasource": null,
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"custom": {}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"gridPos": {
|
||||
"h": 15,
|
||||
"w": 12,
|
||||
"x": 12,
|
||||
"y": 3
|
||||
},
|
||||
"id": 4,
|
||||
"links": [],
|
||||
"options": {
|
||||
"feedUrl": "https://grafana.com/blog/news.xml"
|
||||
},
|
||||
"title": "Latest from the blog",
|
||||
"type": "news"
|
||||
}
|
||||
],
|
||||
"schemaVersion": 26,
|
||||
"style": "dark",
|
||||
"tags": [],
|
||||
"templating": {
|
||||
"list": []
|
||||
},
|
||||
"time": {
|
||||
"from": "now-6h",
|
||||
"to": "now"
|
||||
},
|
||||
"timepicker": {
|
||||
"hidden": true,
|
||||
"refresh_intervals": [
|
||||
"5s",
|
||||
"10s",
|
||||
"30s",
|
||||
"1m",
|
||||
"5m",
|
||||
"15m",
|
||||
"30m",
|
||||
"1h",
|
||||
"2h",
|
||||
"1d"
|
||||
],
|
||||
"time_options": [
|
||||
"5m",
|
||||
"15m",
|
||||
"1h",
|
||||
"6h",
|
||||
"12h",
|
||||
"24h",
|
||||
"2d",
|
||||
"7d",
|
||||
"30d"
|
||||
],
|
||||
"type": "timepicker"
|
||||
},
|
||||
"timezone": "browser",
|
||||
"title": "Home",
|
||||
"uid": "4yRNKfaGz",
|
||||
"version": 1
|
||||
}
|
||||
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
9
server/build/docker/grafana/grafana.ini
Обычный файл
9
server/build/docker/grafana/grafana.ini
Обычный файл
@@ -0,0 +1,9 @@
|
||||
[auth]
|
||||
disable_login_form = false
|
||||
|
||||
[auth.anonymous]
|
||||
enabled = true
|
||||
org_role = Editor
|
||||
|
||||
[dashboards]
|
||||
default_home_dashboard_path = /var/lib/grafana/dashboards/home.json
|
||||
@@ -0,0 +1,14 @@
|
||||
apiVersion: 1
|
||||
|
||||
providers:
|
||||
- name: 'mattermost'
|
||||
orgId: 1
|
||||
folder: 'mattermost'
|
||||
type: file
|
||||
disableDeletion: true
|
||||
updateIntervalSeconds: 300
|
||||
allowUiUpdates: true
|
||||
options:
|
||||
# <string, required> path to dashboard files on disk. Required when using the 'file' type
|
||||
path: /var/lib/grafana/dashboards
|
||||
foldersFromFilesStructure: true
|
||||
@@ -0,0 +1,11 @@
|
||||
apiVersion: 1
|
||||
|
||||
datasources:
|
||||
- name: Prometheus
|
||||
type: 'prometheus'
|
||||
access: 'proxy'
|
||||
orgId: 1
|
||||
url: 'http://prometheus:9090'
|
||||
isDefault: true
|
||||
version: 1
|
||||
editable: false
|
||||
61
server/build/docker/keycloak/README.md
Обычный файл
61
server/build/docker/keycloak/README.md
Обычный файл
@@ -0,0 +1,61 @@
|
||||
To use this keycloak image, we suggest you to use this configuration settings:
|
||||
|
||||
- Enable Login With SAML 2.0: `true`
|
||||
- Enable Synchronizing SAML Accounts With AD/LDAP: `true`
|
||||
- Override SAML bind data with AD/LDAP information: `false`
|
||||
- Identity Provider Metadata URL: empty string
|
||||
- SAML SSO URL: `http://localhost:8484/auth/realms/mattermost/protocol/saml`
|
||||
- Identity Provider Issuer URL: `http://localhost:8484/auth/realms/mattermost`
|
||||
- Identity Provider Public Certificate: The file `keycloak.crt` in this same directory
|
||||
- Verify Signature: `true`
|
||||
- Service Provider Login URL: `http://localhost:8065/login/sso/saml`
|
||||
- Service Provider Identifier: `http://localhost:8065/login/sso/saml`
|
||||
- Enable Encryption: `false`
|
||||
- Sign Request: `false`
|
||||
- Email Attribute: `email`
|
||||
- Username Attribute: `username`
|
||||
- Id Attribute: `id`
|
||||
- First Name Attribute: `firstName`
|
||||
- Last Name Attribute: `lastName`
|
||||
|
||||
or overwrite your SamleSettings section with this settings in your config.json file (if you are not using
|
||||
database configuration) and restart the server:
|
||||
|
||||
```json
|
||||
"SamlSettings": {
|
||||
"Enable": true,
|
||||
"EnableSyncWithLdap": true,
|
||||
"EnableSyncWithLdapIncludeAuth": false,
|
||||
"IgnoreGuestsLdapSync": false,
|
||||
"Verify": true,
|
||||
"Encrypt": false,
|
||||
"SignRequest": false,
|
||||
"IdpUrl": "http://localhost:8484/auth/realms/mattermost/protocol/saml",
|
||||
"IdpDescriptorUrl": "http://localhost:8484/auth/realms/mattermost",
|
||||
"IdpMetadataUrl": "",
|
||||
"ServiceProviderIdentifier": "http://localhost:8065/login/sso/saml",
|
||||
"AssertionConsumerServiceURL": "http://localhost:8065/login/sso/saml",
|
||||
"SignatureAlgorithm": "RSAwithSHA1",
|
||||
"CanonicalAlgorithm": "Canonical1.0",
|
||||
"ScopingIDPProviderId": "",
|
||||
"ScopingIDPName": "",
|
||||
"IdpCertificateFile": "saml-idp.crt",
|
||||
"PublicCertificateFile": "",
|
||||
"PrivateKeyFile": "",
|
||||
"IdAttribute": "id",
|
||||
"GuestAttribute": "",
|
||||
"EnableAdminAttribute": false,
|
||||
"AdminAttribute": "",
|
||||
"FirstNameAttribute": "firstName",
|
||||
"LastNameAttribute": "lastName",
|
||||
"EmailAttribute": "email",
|
||||
"UsernameAttribute": "username",
|
||||
"NicknameAttribute": "",
|
||||
"LocaleAttribute": "",
|
||||
"PositionAttribute": "",
|
||||
"LoginButtonText": "SAML",
|
||||
"LoginButtonColor": "#34a28b",
|
||||
"LoginButtonBorderColor": "#2389D7",
|
||||
"LoginButtonTextColor": "#ffffff"
|
||||
},
|
||||
```
|
||||
3
server/build/docker/keycloak/keycloak.crt
Обычный файл
3
server/build/docker/keycloak/keycloak.crt
Обычный файл
@@ -0,0 +1,3 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICmzCCAYMCBgFyzt0uTDANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZtYXN0ZXIwHhcNMjAwNjE5MjMxMzIxWhcNMzAwNjE5MjMxNTAxWjARMQ8wDQYDVQQDDAZtYXN0ZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2F7Ce+UoGvaSBtuo4ZEPASjDPl2uMK4ADcjDf9LBaVGCEu9Zs2yVIb45F27RrEMQOxph2mpBnKQQajlkIi28ABCxTgWvOhw+w8D+a6g2yphjS8hB5jAcgkw2jkHIKBfyMnjqxZRi33k+7oBhaDKosyCvThKG/QbqC293/ckvBZUJaLEoJn4s0eQoE0oQekXg0Snfhx7JqAqtvrOXtsACb5vbGGLnZIdi9SxcLDAC7mHviU2c7GQKAGVLo4aLYlJnr8by7yIEGvYmnjDx393V8XluKjc/DIsyEP9M4LmStzRRMd81DmZCOg0zx8AXVcqZCsERLOvflvX1bMM7/QtvfAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAHCyf7wTY8ZrPcqWuBj6JfD9iw+45dT4ZOAIlPXL5+wwYzdA7kkSfF7GCXLyYD0U6QEB2SA0RFPXU25WfIVMbDP1OyM4oCbzEqQvAeWkTxe0P+ZWgEUfVN9jgv4N9l/oUXiHkvyZi9K1KM8oLK3j1/YSAqBx60P6iS69a49Pry4eb6ab5mZyU/Tp7Ll7wTpdFW1o/pY9GCcX8cEBhfp+Jm2sVGczIF0s/aJ69rtcK1f8wmXOgY2VKx0eQ00wSOtkHvcPPWAmZzlkpYzdPSmMjluWVusA1T4QPOj44dxB+xI62i25BKUlQpWMmKaZX4Zb6QTUAyvDZusySnwMbr20ijE=
|
||||
-----END CERTIFICATE-----
|
||||
1966
server/build/docker/keycloak/realm.json
Обычный файл
1966
server/build/docker/keycloak/realm.json
Обычный файл
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
19
server/build/docker/mysql.conf.d/custom.cnf
Обычный файл
19
server/build/docker/mysql.conf.d/custom.cnf
Обычный файл
@@ -0,0 +1,19 @@
|
||||
[mysqld]
|
||||
bind-address = 0.0.0.0
|
||||
|
||||
log-output = NONE
|
||||
slow-query-log = 0
|
||||
innodb_flush_log_at_trx_commit = 2
|
||||
innodb_flush_method = nosync
|
||||
innodb_lock_wait_timeout = 50
|
||||
innodb_log_buffer_size = 3M
|
||||
innodb_buffer_pool_size = 180M
|
||||
|
||||
max_connect_errors = 1000000
|
||||
max_connections = 900
|
||||
|
||||
character-set-server = utf8
|
||||
sql_mode = ""
|
||||
innodb = FORCE
|
||||
default-storage-engine = Memory
|
||||
max_allowed_packet = 256M
|
||||
3
server/build/docker/mysql.conf.d/replica.cnf
Обычный файл
3
server/build/docker/mysql.conf.d/replica.cnf
Обычный файл
@@ -0,0 +1,3 @@
|
||||
[mysqld]
|
||||
|
||||
server-id = 2
|
||||
4
server/build/docker/mysql.conf.d/source.cnf
Обычный файл
4
server/build/docker/mysql.conf.d/source.cnf
Обычный файл
@@ -0,0 +1,4 @@
|
||||
[mysqld]
|
||||
|
||||
server-id = 1
|
||||
log-bin = mysql-bin
|
||||
38
server/build/docker/nginx/default.conf
Обычный файл
38
server/build/docker/nginx/default.conf
Обычный файл
@@ -0,0 +1,38 @@
|
||||
upstream app_cluster {
|
||||
server leader:8065 fail_timeout=10s max_fails=10;
|
||||
server follower:8065 fail_timeout=10s max_fails=10;
|
||||
server follower2:8065 fail_timeout=10s max_fails=10;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 8065;
|
||||
|
||||
location ~ /api/v[0-9]+/(users/)?websocket$ {
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_http_version 1.1;
|
||||
client_max_body_size 50M;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Frame-Options SAMEORIGIN;
|
||||
proxy_buffers 256 16k;
|
||||
proxy_buffer_size 16k;
|
||||
proxy_read_timeout 600s;
|
||||
proxy_pass http://app_cluster;
|
||||
}
|
||||
|
||||
location / {
|
||||
client_max_body_size 50M;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Frame-Options SAMEORIGIN;
|
||||
proxy_pass http://app_cluster;
|
||||
}
|
||||
}
|
||||
7
server/build/docker/postgres.conf
Обычный файл
7
server/build/docker/postgres.conf
Обычный файл
@@ -0,0 +1,7 @@
|
||||
max_connections = 300
|
||||
listen_addresses = '*'
|
||||
fsync = off
|
||||
full_page_writes = off
|
||||
default_text_search_config = 'pg_catalog.english'
|
||||
commit_delay=1000
|
||||
logging_collector=off
|
||||
8
server/build/docker/prometheus-linux.yml
Обычный файл
8
server/build/docker/prometheus-linux.yml
Обычный файл
@@ -0,0 +1,8 @@
|
||||
global:
|
||||
scrape_interval: 5s
|
||||
evaluation_interval: 60s
|
||||
|
||||
scrape_configs:
|
||||
- job_name: 'mattermost'
|
||||
static_configs:
|
||||
- targets: ['172.17.0.1:8067']
|
||||
8
server/build/docker/prometheus.yml
Обычный файл
8
server/build/docker/prometheus.yml
Обычный файл
@@ -0,0 +1,8 @@
|
||||
global:
|
||||
scrape_interval: 5s
|
||||
evaluation_interval: 60s
|
||||
|
||||
scrape_configs:
|
||||
- job_name: 'mattermost'
|
||||
static_configs:
|
||||
- targets: ['host.docker.internal:8067']
|
||||
1
server/build/dotenv/test-schema-validation.env
Обычный файл
1
server/build/dotenv/test-schema-validation.env
Обычный файл
@@ -0,0 +1 @@
|
||||
IS_CI=true
|
||||
15
server/build/dotenv/test.env
Обычный файл
15
server/build/dotenv/test.env
Обычный файл
@@ -0,0 +1,15 @@
|
||||
TEST_DATABASE_MYSQL_DSN=mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s&multiStatements=true
|
||||
TEST_DATABASE_POSTGRESQL_DSN=postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10
|
||||
TEST_DATABASE_MYSQL_ROOT_PASSWD=mostest
|
||||
GOBIN=/mattermost/mattermost-server/bin
|
||||
|
||||
CI_INBUCKET_HOST=inbucket
|
||||
CI_MINIO_HOST=minio
|
||||
CI_INBUCKET_PORT=9001
|
||||
CI_MINIO_PORT=9000
|
||||
CI_INBUCKET_SMTP_PORT=10025
|
||||
CI_LDAP_HOST=openldap
|
||||
IS_CI=true
|
||||
MM_EMAILSETTINGS_SMTPSERVER=inbucket
|
||||
MM_EMAILSETTINGS_SMTPPORT=10025
|
||||
MM_ELASTICSEARCHSETTINGS_CONNECTIONURL=http://elasticsearch:9200
|
||||
7
server/build/entrypoint.sh
Исполняемый файл
7
server/build/entrypoint.sh
Исполняемый файл
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ "${1:0:1}" = '-' ]; then
|
||||
set -- mattermost "$@"
|
||||
fi
|
||||
|
||||
exec "$@"
|
||||
57
server/build/gitlab-dc.common.yml
Обычный файл
57
server/build/gitlab-dc.common.yml
Обычный файл
@@ -0,0 +1,57 @@
|
||||
version: '2.4'
|
||||
services:
|
||||
minio:
|
||||
image: ${CI_REGISTRY}/mattermost/ci/images/minio:RELEASE.2019-10-11T00-38-09Z-1
|
||||
command: "server /data"
|
||||
environment:
|
||||
MINIO_ACCESS_KEY: minioaccesskey
|
||||
MINIO_SECRET_KEY: miniosecretkey
|
||||
MINIO_SSE_MASTER_KEY: "my-minio-key:6368616e676520746869732070617373776f726420746f206120736563726574"
|
||||
inbucket:
|
||||
image: ${CI_REGISTRY}/mattermost/ci/images/inbucket:v3.0.0-rc1-2-gc64e7a6-1
|
||||
restart: always
|
||||
environment:
|
||||
INBUCKET_WEB_ADDR: "0.0.0.0:9001"
|
||||
INBUCKET_POP3_ADDR: "0.0.0.0:10110"
|
||||
INBUCKET_SMTP_ADDR: "0.0.0.0:10025"
|
||||
openldap:
|
||||
image: ${CI_REGISTRY}/mattermost/ci/images/openldap:1.4.0-1
|
||||
restart: always
|
||||
environment:
|
||||
LDAP_TLS_VERIFY_CLIENT: "never"
|
||||
LDAP_ORGANISATION: "Mattermost Test"
|
||||
LDAP_DOMAIN: "mm.test.com"
|
||||
LDAP_ADMIN_PASSWORD: "mostest"
|
||||
elasticsearch:
|
||||
image: ${CI_REGISTRY}/mattermost/ci/images/mattermost-elasticsearch-docker:7.17.3
|
||||
environment:
|
||||
http.host: "0.0.0.0"
|
||||
http.port: 9200
|
||||
http.cors.enabled: "true"
|
||||
http.cors.allow-origin: "http://localhost:1358,http://127.0.0.1:1358"
|
||||
http.cors.allow-headers: "X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization"
|
||||
http.cors.allow-credentials: "true"
|
||||
transport.host: "127.0.0.1"
|
||||
ES_JAVA_OPTS: "-Xms512m -Xmx512m"
|
||||
dejavu:
|
||||
image: ${CI_REGISTRY}/mattermost/ci/images/dejavu:3.4.2-1
|
||||
keycloak:
|
||||
image: ${CI_REGISTRY}/mattermost/ci/images/keycloak:10.0.2-1
|
||||
restart: always
|
||||
environment:
|
||||
KEYCLOAK_USER: mmuser
|
||||
KEYCLOAK_PASSWORD: mostest
|
||||
DB_VENDOR: h2
|
||||
KEYCLOAK_IMPORT: /setup/realm.json
|
||||
volumes:
|
||||
- "./docker/keycloak:/setup"
|
||||
prometheus:
|
||||
image: ${CI_REGISTRY}/mattermost/ci/images/prometheus:2.27.1-1
|
||||
volumes:
|
||||
- "./docker/prometheus-linux.yml:/etc/prometheus/prometheus.yml"
|
||||
grafana:
|
||||
image: ${CI_REGISTRY}/mattermost/ci/images/grafana:8.0.1-1
|
||||
volumes:
|
||||
- "./docker/grafana/grafana.ini:/etc/grafana/grafana.ini"
|
||||
- "./docker/grafana/provisioning:/etc/grafana/provisioning"
|
||||
- "./docker/grafana/dashboards:/var/lib/grafana/dashboards"
|
||||
102
server/build/gitlab-dc.mysql.yml
Обычный файл
102
server/build/gitlab-dc.mysql.yml
Обычный файл
@@ -0,0 +1,102 @@
|
||||
version: '2.4'
|
||||
services:
|
||||
mysql:
|
||||
image: ${CI_REGISTRY}/mattermost/ci/images/mysql:5.7-1
|
||||
restart: always
|
||||
environment:
|
||||
MYSQL_ROOT_HOST: "%"
|
||||
MYSQL_ROOT_PASSWORD: mostest
|
||||
MYSQL_PASSWORD: mostest
|
||||
MYSQL_USER: mmuser
|
||||
MYSQL_DATABASE: mattermost_test
|
||||
healthcheck:
|
||||
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
|
||||
interval: 5s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
tmpfs: /var/lib/mysql
|
||||
volumes:
|
||||
- "./docker/mysql.conf.d:/etc/mysql/conf.d"
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- mysql
|
||||
minio:
|
||||
extends:
|
||||
file: gitlab-dc.common.yml
|
||||
service: minio
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- minio
|
||||
inbucket:
|
||||
extends:
|
||||
file: gitlab-dc.common.yml
|
||||
service: inbucket
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- inbucket
|
||||
openldap:
|
||||
extends:
|
||||
file: gitlab-dc.common.yml
|
||||
service: openldap
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- openldap
|
||||
elasticsearch:
|
||||
extends:
|
||||
file: gitlab-dc.common.yml
|
||||
service: elasticsearch
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- elasticsearch
|
||||
dejavu:
|
||||
extends:
|
||||
file: gitlab-dc.common.yml
|
||||
service: dejavu
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- dejavu
|
||||
keycloak:
|
||||
extends:
|
||||
file: gitlab-dc.common.yml
|
||||
service: keycloak
|
||||
prometheus:
|
||||
extends:
|
||||
file: gitlab-dc.common.yml
|
||||
service: prometheus
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- prometheus
|
||||
grafana:
|
||||
extends:
|
||||
file: gitlab-dc.common.yml
|
||||
service: grafana
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- grafana
|
||||
|
||||
start_dependencies:
|
||||
image: ${CI_REGISTRY}/mattermost/ci/images/mattermost-wait-for-dep:latest-1
|
||||
depends_on:
|
||||
- mysql
|
||||
- minio
|
||||
- inbucket
|
||||
- openldap
|
||||
- elasticsearch
|
||||
- prometheus
|
||||
- grafana
|
||||
command: mysql:3306 minio:9000 inbucket:9001 openldap:389 elasticsearch:9200 prometheus:9090 grafana:3000
|
||||
networks:
|
||||
default:
|
||||
|
||||
networks:
|
||||
default:
|
||||
external:
|
||||
name: ${COMPOSE_PROJECT_NAME}
|
||||
101
server/build/gitlab-dc.postgres.yml
Обычный файл
101
server/build/gitlab-dc.postgres.yml
Обычный файл
@@ -0,0 +1,101 @@
|
||||
version: '2.4'
|
||||
services:
|
||||
postgres:
|
||||
image: ${CI_REGISTRY}/mattermost/ci/images/postgres:10-1
|
||||
restart: always
|
||||
environment:
|
||||
POSTGRES_USER: mmuser
|
||||
POSTGRES_PASSWORD: mostest
|
||||
POSTGRES_DB: mattermost_test
|
||||
command: postgres -c 'config_file=/etc/postgresql/postgresql.conf'
|
||||
volumes:
|
||||
- "./docker/postgres.conf:/etc/postgresql/postgresql.conf"
|
||||
healthcheck:
|
||||
test: [ "CMD", "pg_isready", "-h", "localhost" ]
|
||||
interval: 5s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- postgres
|
||||
minio:
|
||||
extends:
|
||||
file: gitlab-dc.common.yml
|
||||
service: minio
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- minio
|
||||
inbucket:
|
||||
extends:
|
||||
file: gitlab-dc.common.yml
|
||||
service: inbucket
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- inbucket
|
||||
openldap:
|
||||
extends:
|
||||
file: gitlab-dc.common.yml
|
||||
service: openldap
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- openldap
|
||||
elasticsearch:
|
||||
extends:
|
||||
file: gitlab-dc.common.yml
|
||||
service: elasticsearch
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- elasticsearch
|
||||
dejavu:
|
||||
extends:
|
||||
file: gitlab-dc.common.yml
|
||||
service: dejavu
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- dejavu
|
||||
keycloak:
|
||||
extends:
|
||||
file: gitlab-dc.common.yml
|
||||
service: keycloak
|
||||
prometheus:
|
||||
extends:
|
||||
file: gitlab-dc.common.yml
|
||||
service: prometheus
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- prometheus
|
||||
grafana:
|
||||
extends:
|
||||
file: gitlab-dc.common.yml
|
||||
service: grafana
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- grafana
|
||||
|
||||
start_dependencies:
|
||||
image: ${CI_REGISTRY}/mattermost/ci/images/mattermost-wait-for-dep:latest-1
|
||||
depends_on:
|
||||
- postgres
|
||||
- minio
|
||||
- inbucket
|
||||
- openldap
|
||||
- elasticsearch
|
||||
- prometheus
|
||||
- grafana
|
||||
command: postgres:5432 minio:9000 inbucket:9001 openldap:389 elasticsearch:9200 prometheus:9090 grafana:3000
|
||||
networks:
|
||||
default:
|
||||
|
||||
|
||||
networks:
|
||||
default:
|
||||
external:
|
||||
name: ${COMPOSE_PROJECT_NAME}
|
||||
36
server/build/gitlab-dc.schemamysql.yml
Обычный файл
36
server/build/gitlab-dc.schemamysql.yml
Обычный файл
@@ -0,0 +1,36 @@
|
||||
version: '2.4'
|
||||
services:
|
||||
mysql:
|
||||
image: ${CI_REGISTRY}/mattermost/ci/images/mysql:5.7-1
|
||||
restart: always
|
||||
environment:
|
||||
MYSQL_ROOT_HOST: "%"
|
||||
MYSQL_ROOT_PASSWORD: mostest
|
||||
MYSQL_PASSWORD: mostest
|
||||
MYSQL_USER: mmuser
|
||||
MYSQL_DATABASE: mattermost_test
|
||||
healthcheck:
|
||||
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
|
||||
interval: 5s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
tmpfs: /var/lib/mysql
|
||||
volumes:
|
||||
- "./docker/mysql.conf.d:/etc/mysql/conf.d"
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- mysql
|
||||
|
||||
start_dependencies:
|
||||
image: ${CI_REGISTRY}/mattermost/ci/images/mattermost-wait-for-dep:latest-1
|
||||
depends_on:
|
||||
- mysql
|
||||
command: mysql:3306
|
||||
networks:
|
||||
default:
|
||||
|
||||
networks:
|
||||
default:
|
||||
external:
|
||||
name: ${COMPOSE_PROJECT_NAME}
|
||||
34
server/build/gitlab-dc.schemapostgres.yml
Обычный файл
34
server/build/gitlab-dc.schemapostgres.yml
Обычный файл
@@ -0,0 +1,34 @@
|
||||
version: '2.4'
|
||||
services:
|
||||
postgres:
|
||||
image: ${CI_REGISTRY}/mattermost/ci/images/postgres:10-1
|
||||
restart: always
|
||||
environment:
|
||||
POSTGRES_USER: mmuser
|
||||
POSTGRES_PASSWORD: mostest
|
||||
POSTGRES_DB: mattermost_test
|
||||
command: postgres -c 'config_file=/etc/postgresql/postgresql.conf'
|
||||
volumes:
|
||||
- "./docker/postgres.conf:/etc/postgresql/postgresql.conf"
|
||||
healthcheck:
|
||||
test: [ "CMD", "pg_isready", "-h", "localhost" ]
|
||||
interval: 5s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
networks:
|
||||
default:
|
||||
aliases:
|
||||
- postgres
|
||||
|
||||
start_dependencies:
|
||||
image: ${CI_REGISTRY}/mattermost/ci/images/mattermost-wait-for-dep:latest-1
|
||||
depends_on:
|
||||
- postgres
|
||||
command: postgres:5432
|
||||
networks:
|
||||
default:
|
||||
|
||||
networks:
|
||||
default:
|
||||
external:
|
||||
name: ${COMPOSE_PROJECT_NAME}
|
||||
80
server/build/legacy.mk
Обычный файл
80
server/build/legacy.mk
Обычный файл
@@ -0,0 +1,80 @@
|
||||
# test-te used to just run the team edition tests, but now runs whatever is available
|
||||
test-te: test-server
|
||||
|
||||
# test-ee used to just run the enterprise edition tests, but now runs whatever is available
|
||||
test-ee: test-server
|
||||
|
||||
## Old target to run go vet. Now it just invokes golangci-lint.
|
||||
govet: golangci-lint
|
||||
|
||||
gofmt: ## Runs gofmt against all packages. This is now subsumed by make golangci-lint.
|
||||
@echo Running GOFMT
|
||||
|
||||
@for package in $(TE_PACKAGES) $(EE_PACKAGES); do \
|
||||
echo "Checking "$$package; \
|
||||
files=$$($(GO) list $(GOFLAGS) -f '{{range .GoFiles}}{{$$.Dir}}/{{.}} {{end}}' $$package); \
|
||||
if [ "$$files" ]; then \
|
||||
gofmt_output=$$(gofmt -d -s $$files 2>&1); \
|
||||
if [ "$$gofmt_output" ]; then \
|
||||
echo "$$gofmt_output"; \
|
||||
echo "gofmt failure"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
fi; \
|
||||
done
|
||||
@echo "gofmt success"; \
|
||||
|
||||
# check-licenses was used to check the license of the files, but now is done through mattermost-govet
|
||||
check-licenses: vet
|
||||
|
||||
# clean old docker images
|
||||
clean-old-docker:
|
||||
@echo Removing docker containers
|
||||
|
||||
@if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/mattermost-mysql$$ | wc -l) -eq 1 ]; then \
|
||||
echo removing mattermost-mysql; \
|
||||
docker stop mattermost-mysql > /dev/null; \
|
||||
docker rm -v mattermost-mysql > /dev/null; \
|
||||
fi
|
||||
|
||||
@if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/mattermost-mysql-unittest$$ | wc -l) -eq 1 ]; then \
|
||||
echo removing mattermost-mysql-unittest; \
|
||||
docker stop mattermost-mysql-unittest > /dev/null; \
|
||||
docker rm -v mattermost-mysql-unittest > /dev/null; \
|
||||
fi
|
||||
|
||||
@if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/mattermost-postgres$$ | wc -l) -eq 1 ]; then \
|
||||
echo removing mattermost-postgres; \
|
||||
docker stop mattermost-postgres > /dev/null; \
|
||||
docker rm -v mattermost-postgres > /dev/null; \
|
||||
fi
|
||||
|
||||
@if [ $(shell docker ps -a --no-trunc --quiet --filter name=^/mattermost-postgres-unittest$$ | wc -l) -eq 1 ]; then \
|
||||
echo removing mattermost-postgres-unittest; \
|
||||
docker stop mattermost-postgres-unittest > /dev/null; \
|
||||
docker rm -v mattermost-postgres-unittest > /dev/null; \
|
||||
fi
|
||||
|
||||
@if [ $(shell docker ps -a | grep -ci mattermost-openldap) -eq 1 ]; then \
|
||||
echo removing mattermost-openldap; \
|
||||
docker stop mattermost-openldap > /dev/null; \
|
||||
docker rm -v mattermost-openldap > /dev/null; \
|
||||
fi
|
||||
|
||||
@if [ $(shell docker ps -a | grep -ci mattermost-inbucket) -eq 1 ]; then \
|
||||
echo removing mattermost-inbucket; \
|
||||
docker stop mattermost-inbucket > /dev/null; \
|
||||
docker rm -v mattermost-inbucket > /dev/null; \
|
||||
fi
|
||||
|
||||
@if [ $(shell docker ps -a | grep -ci mattermost-minio) -eq 1 ]; then \
|
||||
echo removing mattermost-minio; \
|
||||
docker stop mattermost-minio > /dev/null; \
|
||||
docker rm -v mattermost-minio > /dev/null; \
|
||||
fi
|
||||
|
||||
@if [ $(shell docker ps -a | grep -ci mattermost-elasticsearch) -eq 1 ]; then \
|
||||
echo removing mattermost-elasticsearch; \
|
||||
docker stop mattermost-elasticsearch > /dev/null; \
|
||||
docker rm -v mattermost-elasticsearch > /dev/null; \
|
||||
fi
|
||||
72
server/build/local-test-env.sh
Исполняемый файл
72
server/build/local-test-env.sh
Исполняемый файл
@@ -0,0 +1,72 @@
|
||||
#!/bin/bash
|
||||
|
||||
export COMPOSE_PROJECT_NAME=localdev
|
||||
local_cmdname=${0##*/}
|
||||
|
||||
usage()
|
||||
{
|
||||
cat << USAGE >&2
|
||||
Usage:
|
||||
$local_cmdname up/down
|
||||
USAGE
|
||||
exit 1
|
||||
}
|
||||
|
||||
up()
|
||||
{
|
||||
docker-compose run --rm start_dependencies
|
||||
|
||||
docker-compose exec openldap bash -c 'echo -e "dn: ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: organizationalunit" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest'
|
||||
docker-compose exec openldap bash -c 'echo -e "dn: uid=test.one,ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: iNetOrgPerson\nsn: User\ncn: Test1\nmail: success+testone@simulator.amazonses.com" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest'
|
||||
docker-compose exec openldap bash -c 'ldappasswd -s Password1 -D "cn=admin,dc=mm,dc=test,dc=com" -x "uid=test.one,ou=testusers,dc=mm,dc=test,dc=com" -w mostest'
|
||||
docker-compose exec openldap bash -c 'echo -e "dn: uid=test.two,ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: iNetOrgPerson\nsn: User\ncn: Test2\nmail: success+testtwo@simulator.amazonses.com" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest'
|
||||
docker-compose exec openldap bash -c 'ldappasswd -s Password1 -D "cn=admin,dc=mm,dc=test,dc=com" -x "uid=test.two,ou=testusers,dc=mm,dc=test,dc=com" -w mostest'
|
||||
docker-compose exec openldap bash -c 'echo -e "dn: cn=tgroup,ou=testusers,dc=mm,dc=test,dc=com\nobjectclass: groupOfUniqueNames\nuniqueMember: uid=test.one,ou=testusers,dc=mm,dc=test,dc=com" | ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest'
|
||||
|
||||
docker run -it -u root \
|
||||
--privileged \
|
||||
-v $GOPATH:/go \
|
||||
-w /go/src/github.com/mattermost/mattermost-server/ \
|
||||
--net ${COMPOSE_PROJECT_NAME}_mm-test \
|
||||
--env-file=dotenv/test.env
|
||||
-e GOPATH="/go" \
|
||||
-e MM_SQLSETTINGS_DATASOURCE="postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10" \
|
||||
-e MM_SQLSETTINGS_DRIVERNAME=postgres
|
||||
mattermost/mattermost-build-server:20210810_golang-1.16.7 bash
|
||||
}
|
||||
|
||||
down()
|
||||
{
|
||||
docker-compose down
|
||||
}
|
||||
|
||||
# process arguments
|
||||
while [[ $# -gt 0 ]]
|
||||
do
|
||||
case "$1" in
|
||||
up)
|
||||
echo "Starting Containers"
|
||||
up
|
||||
break
|
||||
;;
|
||||
|
||||
down)
|
||||
echo "Stopping Containers"
|
||||
down
|
||||
break
|
||||
;;
|
||||
|
||||
--help)
|
||||
usage
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unknown argument: $1" >&2
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ "$1" == "" ]]; then
|
||||
usage
|
||||
fi
|
||||
28
server/build/notice-file/Readme.md
Обычный файл
28
server/build/notice-file/Readme.md
Обычный файл
@@ -0,0 +1,28 @@
|
||||
# Notice.txt File Configuration
|
||||
|
||||
We are automatically generating Notice.txt by using first-level dependencies of the project. The related pipeline uses `config.yaml` stored in this folder.
|
||||
|
||||
|
||||
## Configuration
|
||||
|
||||
Sample:
|
||||
|
||||
```
|
||||
title: "Mattermost Playbooks"
|
||||
copyright: "©2015-present Mattermost, Inc. All Rights Reserved. See LICENSE for license information."
|
||||
description: "This document includes a list of open source components used in Mattermost Playbooks, including those that have been modified."
|
||||
search:
|
||||
- "go.mod"
|
||||
- "client/go.mod"
|
||||
dependencies: []
|
||||
devDependencies: []
|
||||
```
|
||||
|
||||
| Field | Type | Purpose |
|
||||
| :-- | :-- | :-- |
|
||||
| title | string | Field content will be used as a title of the application. See first line of `NOTICE.txt` file. |
|
||||
| copyright | string | Field content will be used as a copyright message. See second line of `NOTICE.txt` file. |
|
||||
| description | string | Field content will be used as notice file description. See third line of `NOTICE.txt` file. |
|
||||
| dependencies | array | If any dependency name mentioned, it will be automatically added even if it is not a first-level dependency. |
|
||||
| devDependencies | array | If any dependency name mentioned, it will be added when it is referenced in devDependency section. |
|
||||
| search | array | Pipeline will search for package.json/go.mod files mentioned here. Globstar format is supported ie. `x/**/go.mod`. |
|
||||
11
server/build/notice-file/config.yaml
Обычный файл
11
server/build/notice-file/config.yaml
Обычный файл
@@ -0,0 +1,11 @@
|
||||
---
|
||||
|
||||
title: "Mattermost Server"
|
||||
copyright: "©2015-present Mattermost,Inc. All Rights Reserved. See LICENSE for license information."
|
||||
description: "This document includes a list of open source components used in Mattermost Server, including those that have been modified."
|
||||
search:
|
||||
- "go.mod"
|
||||
dependencies: []
|
||||
devDependencies: []
|
||||
|
||||
...
|
||||
52
server/build/plugin-production-public-key.gpg
Обычный файл
52
server/build/plugin-production-public-key.gpg
Обычный файл
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
d+eYY64=
|
||||
=UePK
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
269
server/build/release.mk
Обычный файл
269
server/build/release.mk
Обычный файл
@@ -0,0 +1,269 @@
|
||||
dist: | check-style test package
|
||||
|
||||
build-linux: build-linux-amd64 build-linux-arm64
|
||||
|
||||
build-linux-amd64:
|
||||
@echo Build Linux amd64
|
||||
ifeq ($(BUILDER_GOOS_GOARCH),"linux_amd64")
|
||||
env GOOS=linux GOARCH=amd64 $(GO) build -o $(GOBIN) $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./...
|
||||
else
|
||||
mkdir -p $(GOBIN)/linux_amd64
|
||||
env GOOS=linux GOARCH=amd64 $(GO) build -o $(GOBIN)/linux_amd64 $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./...
|
||||
endif
|
||||
|
||||
build-linux-arm64:
|
||||
@echo Build Linux arm64
|
||||
ifeq ($(BUILDER_GOOS_GOARCH),"linux_arm64")
|
||||
env GOOS=linux GOARCH=arm64 $(GO) build -o $(GOBIN) $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./...
|
||||
else
|
||||
mkdir -p $(GOBIN)/linux_arm64
|
||||
env GOOS=linux GOARCH=arm64 $(GO) build -o $(GOBIN)/linux_arm64 $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./...
|
||||
endif
|
||||
|
||||
build-osx:
|
||||
@echo Build OSX amd64
|
||||
ifeq ($(BUILDER_GOOS_GOARCH),"darwin_amd64")
|
||||
env GOOS=darwin GOARCH=amd64 $(GO) build -o $(GOBIN) $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./...
|
||||
else
|
||||
mkdir -p $(GOBIN)/darwin_amd64
|
||||
env GOOS=darwin GOARCH=amd64 $(GO) build -o $(GOBIN)/darwin_amd64 $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./...
|
||||
endif
|
||||
@echo Build OSX arm64
|
||||
ifeq ($(BUILDER_GOOS_GOARCH),"darwin_arm64")
|
||||
env GOOS=darwin GOARCH=arm64 $(GO) build -o $(GOBIN) $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./...
|
||||
else
|
||||
mkdir -p $(GOBIN)/darwin_arm64
|
||||
env GOOS=darwin GOARCH=arm64 $(GO) build -o $(GOBIN)/darwin_arm64 $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./...
|
||||
endif
|
||||
|
||||
build-windows:
|
||||
@echo Build Windows amd64
|
||||
ifeq ($(BUILDER_GOOS_GOARCH),"windows_amd64")
|
||||
env GOOS=windows GOARCH=amd64 $(GO) build -o $(GOBIN) $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./...
|
||||
else
|
||||
mkdir -p $(GOBIN)/windows_amd64
|
||||
env GOOS=windows GOARCH=amd64 $(GO) build -o $(GOBIN)/windows_amd64 $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./...
|
||||
endif
|
||||
|
||||
build-cmd-linux:
|
||||
@echo Build CMD Linux amd64
|
||||
ifeq ($(BUILDER_GOOS_GOARCH),"linux_amd64")
|
||||
env GOOS=linux GOARCH=amd64 $(GO) build -o $(GOBIN) $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./cmd/...
|
||||
else
|
||||
mkdir -p $(GOBIN)/linux_amd64
|
||||
env GOOS=linux GOARCH=amd64 $(GO) build -o $(GOBIN)/linux_amd64 $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./cmd/...
|
||||
endif
|
||||
@echo Build CMD Linux arm64
|
||||
ifeq ($(BUILDER_GOOS_GOARCH),"linux_arm64")
|
||||
env GOOS=linux GOARCH=arm64 $(GO) build -o $(GOBIN) $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./cmd/...
|
||||
else
|
||||
mkdir -p $(GOBIN)/linux_arm64
|
||||
env GOOS=linux GOARCH=arm64 $(GO) build -o $(GOBIN)/linux_arm64 $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./cmd/...
|
||||
endif
|
||||
|
||||
build-cmd-osx:
|
||||
@echo Build CMD OSX amd64
|
||||
ifeq ($(BUILDER_GOOS_GOARCH),"darwin_amd64")
|
||||
env GOOS=darwin GOARCH=amd64 $(GO) build -o $(GOBIN) $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./cmd/...
|
||||
else
|
||||
mkdir -p $(GOBIN)/darwin_amd64
|
||||
env GOOS=darwin GOARCH=amd64 $(GO) build -o $(GOBIN)/darwin_amd64 $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./cmd/...
|
||||
endif
|
||||
@echo Build CMD OSX arm64
|
||||
ifeq ($(BUILDER_GOOS_GOARCH),"darwin_arm64")
|
||||
env GOOS=darwin GOARCH=arm64 $(GO) build -o $(GOBIN) $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./cmd/...
|
||||
else
|
||||
mkdir -p $(GOBIN)/darwin_arm64
|
||||
env GOOS=darwin GOARCH=arm64 $(GO) build -o $(GOBIN)/darwin_arm64 $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./cmd/...
|
||||
endif
|
||||
|
||||
build-cmd-windows:
|
||||
@echo Build CMD Windows amd64
|
||||
ifeq ($(BUILDER_GOOS_GOARCH),"windows_amd64")
|
||||
env GOOS=windows GOARCH=amd64 $(GO) build -o $(GOBIN) $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./cmd/...
|
||||
else
|
||||
mkdir -p $(GOBIN)/windows_amd64
|
||||
env GOOS=windows GOARCH=amd64 $(GO) build -o $(GOBIN)/windows_amd64 $(GOFLAGS) -trimpath -tags '$(GOTAGS)' -ldflags '$(LDFLAGS)' ./cmd/...
|
||||
endif
|
||||
|
||||
build: setup-go-work build-client build-linux build-windows build-osx
|
||||
|
||||
build-cmd: setup-go-work build-client build-cmd-linux build-cmd-windows build-cmd-osx
|
||||
|
||||
build-client:
|
||||
@echo Building mattermost web app
|
||||
|
||||
cd $(BUILD_WEBAPP_DIR) && $(MAKE) dist
|
||||
|
||||
package-prep:
|
||||
@ echo Packaging mattermost
|
||||
@# Remove any old files
|
||||
rm -Rf $(DIST_ROOT)
|
||||
|
||||
@# Resource directories
|
||||
mkdir -p $(DIST_PATH)/config
|
||||
cp -L config/README.md $(DIST_PATH)/config
|
||||
OUTPUT_CONFIG=$(PWD)/$(DIST_PATH)/config/config.json go run ./scripts/config_generator
|
||||
cp -RL fonts $(DIST_PATH)
|
||||
cp -RL templates $(DIST_PATH)
|
||||
rm -rf $(DIST_PATH)/templates/*.mjml $(DIST_PATH)/templates/partials/
|
||||
cp -RL i18n $(DIST_PATH)
|
||||
|
||||
@# Disable developer settings
|
||||
sed -i'' -e 's|"ConsoleLevel": "DEBUG"|"ConsoleLevel": "INFO"|g' $(DIST_PATH)/config/config.json
|
||||
sed -i'' -e 's|"SiteURL": "http://localhost:8065"|"SiteURL": ""|g' $(DIST_PATH)/config/config.json
|
||||
|
||||
@# Reset email sending to original configuration
|
||||
sed -i'' -e 's|"SendEmailNotifications": true,|"SendEmailNotifications": false,|g' $(DIST_PATH)/config/config.json
|
||||
sed -i'' -e 's|"FeedbackEmail": "test@example.com",|"FeedbackEmail": "",|g' $(DIST_PATH)/config/config.json
|
||||
sed -i'' -e 's|"ReplyToAddress": "test@example.com",|"ReplyToAddress": "",|g' $(DIST_PATH)/config/config.json
|
||||
sed -i'' -e 's|"SMTPServer": "localhost",|"SMTPServer": "",|g' $(DIST_PATH)/config/config.json
|
||||
sed -i'' -e 's|"SMTPPort": "2500",|"SMTPPort": "",|g' $(DIST_PATH)/config/config.json
|
||||
chmod 600 $(DIST_PATH)/config/config.json
|
||||
|
||||
@# Package web app
|
||||
mkdir -p $(DIST_PATH)/client
|
||||
cp -RL $(BUILD_WEBAPP_DIR)/channels/dist/* $(DIST_PATH)/client
|
||||
|
||||
@# Help files
|
||||
ifeq ($(BUILD_ENTERPRISE_READY),true)
|
||||
cp $(BUILD_ENTERPRISE_DIR)/ENTERPRISE-EDITION-LICENSE.txt $(DIST_PATH)
|
||||
cp -L $(BUILD_ENTERPRISE_DIR)/cloud/config/cloud_defaults.json $(DIST_PATH)/config
|
||||
else
|
||||
cp build/MIT-COMPILED-LICENSE.md $(DIST_PATH)
|
||||
endif
|
||||
cp ../NOTICE.txt $(DIST_PATH)
|
||||
cp ../README.md $(DIST_PATH)
|
||||
if [ -f ../manifest.txt ]; then \
|
||||
cp ../manifest.txt $(DIST_PATH); \
|
||||
fi
|
||||
|
||||
@# Import Mattermost plugin public key
|
||||
gpg --import build/plugin-production-public-key.gpg
|
||||
|
||||
@# Download prepackaged plugins
|
||||
mkdir -p tmpprepackaged
|
||||
@cd tmpprepackaged && for plugin_package in $(PLUGIN_PACKAGES) ; do \
|
||||
for ARCH in "osx-amd64" "windows-amd64" "linux-amd64" ; do \
|
||||
curl -f -O -L https://plugins-store.test.mattermost.com/release/$$plugin_package-$$ARCH.tar.gz; \
|
||||
curl -f -O -L https://plugins-store.test.mattermost.com/release/$$plugin_package-$$ARCH.tar.gz.sig; \
|
||||
done; \
|
||||
done
|
||||
|
||||
package-general:
|
||||
@# Create needed directories
|
||||
mkdir -p $(DIST_PATH_GENERIC)/bin
|
||||
mkdir -p $(DIST_PATH_GENERIC)/logs
|
||||
mkdir -p $(DIST_PATH_GENERIC)/prepackaged_plugins
|
||||
|
||||
@# Copy binary
|
||||
ifeq ($(BUILDER_GOOS_GOARCH),"$(CURRENT_PACKAGE_ARCH)")
|
||||
cp $(GOBIN)/$(MM_BIN_NAME) $(DIST_PATH_GENERIC)/bin # from native bin dir, not cross-compiled
|
||||
else
|
||||
cp $(GOBIN)/$(CURRENT_PACKAGE_ARCH)/$(MM_BIN_NAME) $(DIST_PATH_GENERIC)/bin # from cross-compiled bin dir
|
||||
endif
|
||||
|
||||
#Download MMCTL for $(MMCTL_PLATFORM)
|
||||
scripts/download_mmctl_release.sh $(MMCTL_PLATFORM) $(DIST_PATH_GENERIC)/bin
|
||||
|
||||
ifeq ("darwin_arm64","$(CURRENT_PACKAGE_ARCH)")
|
||||
echo "No plugins yet for $(CURRENT_PACKAGE_ARCH) platform, skipping..."
|
||||
else ifeq ("linux_arm64","$(CURRENT_PACKAGE_ARCH)")
|
||||
echo "No plugins yet for $(CURRENT_PACKAGE_ARCH) platform, skipping..."
|
||||
else
|
||||
@# Prepackage plugins
|
||||
@for plugin_package in $(PLUGIN_PACKAGES) ; do \
|
||||
ARCH=$(PLUGIN_ARCH); \
|
||||
if [ "$$ARCH" != "linux-amd64" ]; then \
|
||||
case $$plugin_package in \
|
||||
"mattermost-plugin-calls"*) continue ;; \
|
||||
esac; \
|
||||
fi; \
|
||||
cp tmpprepackaged/$$plugin_package-$$ARCH.tar.gz $(DIST_PATH_GENERIC)/prepackaged_plugins; \
|
||||
cp tmpprepackaged/$$plugin_package-$$ARCH.tar.gz.sig $(DIST_PATH_GENERIC)/prepackaged_plugins; \
|
||||
HAS_ARCH=`tar -tf $(DIST_PATH_GENERIC)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz | grep -oE "dist/plugin-.*"`; \
|
||||
if [ "$$HAS_ARCH" != "dist/plugin-$(subst _,-,$(CURRENT_PACKAGE_ARCH))" ]; then \
|
||||
echo "Contains $$HAS_ARCH in $$plugin_package-$$ARCH.tar.gz but needs dist/plugin-$(subst _,-,$(CURRENT_PACKAGE_ARCH))"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
gpg --verify $(DIST_PATH_GENERIC)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz.sig $(DIST_PATH_GENERIC)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz; \
|
||||
if [ $$? -ne 0 ]; then \
|
||||
echo "Failed to verify $$plugin_package-$$ARCH.tar.gz|$$plugin_package-$$ARCH.tar.gz.sig"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
done
|
||||
endif
|
||||
|
||||
package-osx-amd64: package-prep
|
||||
DIST_PATH_GENERIC=$(DIST_PATH_OSX_AMD64) CURRENT_PACKAGE_ARCH=darwin_amd64 PLUGIN_ARCH=osx-amd64 MMCTL_PLATFORM="Darwin-x86_64" MM_BIN_NAME=mattermost $(MAKE) package-general
|
||||
@# Package
|
||||
tar -C $(DIST_PATH_OSX_AMD64)/.. -czf $(DIST_PATH)-$(BUILD_TYPE_NAME)-osx-amd64.tar.gz mattermost ../mattermost
|
||||
@# Cleanup
|
||||
rm -rf $(DIST_ROOT)/osx_amd64
|
||||
|
||||
package-osx-arm64: package-prep
|
||||
DIST_PATH_GENERIC=$(DIST_PATH_OSX_ARM64) CURRENT_PACKAGE_ARCH=darwin_arm64 PLUGIN_ARCH=osx-arm64 MMCTL_PLATFORM="Darwin-arm64" MM_BIN_NAME=mattermost $(MAKE) package-general
|
||||
@# Package
|
||||
tar -C $(DIST_PATH_OSX_ARM64)/.. -czf $(DIST_PATH)-$(BUILD_TYPE_NAME)-osx-arm64.tar.gz mattermost ../mattermost
|
||||
@# Cleanup
|
||||
rm -rf $(DIST_ROOT)/osx_arm64
|
||||
|
||||
package-osx: package-osx-amd64 package-osx-arm64
|
||||
|
||||
package-linux-amd64: package-prep
|
||||
DIST_PATH_GENERIC=$(DIST_PATH_LIN_AMD64) CURRENT_PACKAGE_ARCH=linux_amd64 PLUGIN_ARCH=linux-amd64 MMCTL_PLATFORM="Linux-x86_64" MM_BIN_NAME=mattermost $(MAKE) package-general
|
||||
@# Package
|
||||
tar -C $(DIST_PATH_LIN_AMD64)/.. -czf $(DIST_PATH)-$(BUILD_TYPE_NAME)-linux-amd64.tar.gz mattermost ../mattermost
|
||||
@# Cleanup
|
||||
rm -rf $(DIST_ROOT)/linux_amd64
|
||||
|
||||
package-linux-arm64: package-prep
|
||||
DIST_PATH_GENERIC=$(DIST_PATH_LIN_ARM64) CURRENT_PACKAGE_ARCH=linux_arm64 PLUGIN_ARCH=linux-arm64 MMCTL_PLATFORM="Linux-aarch64" MM_BIN_NAME=mattermost $(MAKE) package-general
|
||||
@# Package
|
||||
tar -C $(DIST_PATH_LIN_ARM64)/.. -czf $(DIST_PATH)-$(BUILD_TYPE_NAME)-linux-arm64.tar.gz mattermost ../mattermost
|
||||
@# Cleanup
|
||||
rm -rf $(DIST_ROOT)/linux_arm64
|
||||
|
||||
package-linux: package-linux-amd64 package-linux-arm64
|
||||
|
||||
package-windows: package-prep
|
||||
@# Create needed directories
|
||||
mkdir -p $(DIST_PATH_WIN)/bin
|
||||
mkdir -p $(DIST_PATH_WIN)/logs
|
||||
mkdir -p $(DIST_PATH_WIN)/prepackaged_plugins
|
||||
|
||||
@# Copy binary
|
||||
ifeq ($(BUILDER_GOOS_GOARCH),"windows_amd64")
|
||||
cp $(GOBIN)/mattermost.exe $(DIST_PATH_WIN)/bin # from native bin dir, not cross-compiled
|
||||
else
|
||||
cp $(GOBIN)/windows_amd64/mattermost.exe $(DIST_PATH_WIN)/bin # from cross-compiled bin dir
|
||||
endif
|
||||
#Download MMCTL for Windows
|
||||
scripts/download_mmctl_release.sh "Windows" $(DIST_PATH_WIN)/bin
|
||||
@# Prepackage plugins
|
||||
@for plugin_package in $(PLUGIN_PACKAGES) ; do \
|
||||
ARCH="windows-amd64"; \
|
||||
case $$plugin_package in \
|
||||
"mattermost-plugin-calls"*) continue ;; \
|
||||
esac; \
|
||||
cp tmpprepackaged/$$plugin_package-$$ARCH.tar.gz $(DIST_PATH_WIN)/prepackaged_plugins; \
|
||||
cp tmpprepackaged/$$plugin_package-$$ARCH.tar.gz.sig $(DIST_PATH_WIN)/prepackaged_plugins; \
|
||||
HAS_ARCH=`tar -tf $(DIST_PATH_WIN)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz | grep -oE "dist/plugin-.*"`; \
|
||||
if [ "$$HAS_ARCH" != "dist/plugin-windows-amd64.exe" ]; then \
|
||||
echo "Contains $$HAS_ARCH in $$plugin_package-$$ARCH.tar.gz but needs dist/plugin-windows-amd64.exe"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
gpg --verify $(DIST_PATH_WIN)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz.sig $(DIST_PATH_WIN)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz; \
|
||||
if [ $$? -ne 0 ]; then \
|
||||
echo "Failed to verify $$plugin_package-$$ARCH.tar.gz|$$plugin_package-$$ARCH.tar.gz.sig"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
done
|
||||
@# Package
|
||||
cd $(DIST_PATH_WIN)/.. && zip -9 -r -q -l ../mattermost-$(BUILD_TYPE_NAME)-windows-amd64.zip mattermost ../mattermost && cd ../..
|
||||
@# Cleanup
|
||||
rm -rf $(DIST_ROOT)/windows
|
||||
|
||||
package: package-osx package-linux package-windows
|
||||
rm -rf tmpprepackaged
|
||||
rm -rf $(DIST_PATH)
|
||||
Ссылка в новой задаче
Block a user