diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000..326a6920fe --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,126 @@ +stages: +# - test +# - build +# - publish + - create-vars + - trigger-build-ee + +include: + - project: mattermost/ci/mattermost-server + ref: master + file: private.yml +# - local: .gitlab-ci/test.yml +# - local: .gitlab-ci/test-schema.yml + +variables: + ONLY_BUILD: "yes" + ONLY_TEST: "no" + +empty: + stage: create-vars + script: + - echo "empty" + +#lint: +# image: golangci/golangci-lint:v1.31.0 +# stage: .pre +# script: +# - GO111MODULE=off GOBIN=$PWD/bin go get -u github.com/mattermost/mattermost-govet +# - make config-reset +# - make check-style #todo MM_VET_OPENSPEC_PATH='$CI_PROJECT_DIR/mattermost-api-reference/v4/html/static/mattermost-openapi-v4.yaml' +# timeout: 60 mins +# rules: +# - if: '$ONLY_BUILD != "yes"' +# +#layers: +# image: mattermost/mattermost-build-server:20201023_golang-1.14.6 +# stage: .pre +# script: +# - make store-layers +# - if [[ -n $(git status --porcelain) ]]; then echo "Please update the store layers using make store-layers"; exit 1; fi +# - git reset --hard +# - make app-layers +# - if [[ -n $(git status --porcelain) ]]; then echo "Please update the app layers using make app-layers"; exit 1; fi +# - git reset --hard +# rules: +# - if: '$ONLY_BUILD != "yes"' +# +#test-postgres: +# extends: .test +# tags: +# - docker +# variables: +# MM_SQLSETTINGS_DATASOURCE: "postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10" +# MM_SQLSETTINGS_DRIVERNAME: postgres +# rules: +# - if: '$ONLY_BUILD != "yes"' +# +#test-mysql: +# extends: .test +# tags: +# - docker +# variables: +# MM_SQLSETTINGS_DATASOURCE: "mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8&multiStatements=true" +# MM_SQLSETTINGS_DRIVERNAME: mysql +# rules: +# - if: '$ONLY_BUILD != "yes"' +# +#test-schema-postgres: +# extends: .test-schema +# tags: +# - docker +# script: +# - echo "Creating databases" +# - docker-compose --no-ansi exec -T postgres sh -c 'exec echo "CREATE DATABASE migrated; CREATE DATABASE latest;" | exec psql -U mmuser mattermost_test' +# - echo "Importing postgres dump from version 5.0" +# - docker-compose --no-ansi exec -T postgres psql -U mmuser -d migrated < ../scripts/mattermost-postgresql-5.0.sql +# - > +# docker run -d -it --name server-postgres --net build_mm-test \ +# --env-file="dotenv/test-schema-validation.env" \ +# --env MM_SQLSETTINGS_DATASOURCE="postgres://mmuser:mostest@postgres:5432/migrated?sslmode=disable&connect_timeout=10" \ +# --env MM_SQLSETTINGS_DRIVERNAME=postgres \ +# -v $CI_PROJECT_DIR:/mattermost-server \ +# -w /mattermost-server \ +# mattermost/mattermost-build-server:20201023_golang-1.14.6 \ +# bash -c "ulimit -n 8096; make ARGS='version' run-cli && make MM_SQLSETTINGS_DATASOURCE='postgres://mmuser:mostest@postgres:5432/latest?sslmode=disable&connect_timeout=10' ARGS='version' run-cli" +# - docker logs -f server-postgres +# - echo "Generating dump" +# - docker-compose --no-ansi exec -T postgres pg_dump --schema-only -d migrated -U mmuser > migrated.sql +# - docker-compose --no-ansi exec -T postgres pg_dump --schema-only -d latest -U mmuser > latest.sql +# - echo "Removing databases created for db comparison" +# - docker-compose --no-ansi exec -T postgres sh -c 'exec echo "DROP DATABASE migrated; DROP DATABASE latest;" | exec psql -U mmuser mattermost_test' +# - echo "Generating diff" +# - diff migrated.sql latest.sql > diff.txt && echo "Both schemas are same" || (echo "Schema mismatch" && cat diff.txt && exit 1) +# rules: +# - if: '$ONLY_BUILD != "yes"' +# +#test-schema-mysql: +# extends: .test-schema +# tags: +# - docker +# script: +# - echo "Creating databases" +# - docker-compose --no-ansi exec -T mysql mysql -uroot -pmostest -e "CREATE DATABASE migrated; CREATE DATABASE latest; GRANT ALL PRIVILEGES ON migrated.* TO mmuser; GRANT ALL PRIVILEGES ON latest.* TO mmuser" +# - echo "Importing mysql dump from version 5.0" +# - docker-compose --no-ansi exec -T mysql mysql -D migrated -uroot -pmostest < ../scripts/mattermost-mysql-5.0.sql +# - > +# docker run -d -it --name server-mysql --net build_mm-test \ +# --env-file="dotenv/test-schema-validation.env" \ +# --env MM_SQLSETTINGS_DATASOURCE="mmuser:mostest@tcp(mysql:3306)/migrated?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s" \ +# --env MM_SQLSETTINGS_DRIVERNAME=mysql \ +# -v $CI_PROJECT_DIR:/mattermost-server \ +# -w /mattermost-server \ +# mattermost/mattermost-build-server:20201023_golang-1.14.6 \ +# bash -c "ulimit -n 8096; make ARGS='version' run-cli && make MM_SQLSETTINGS_DATASOURCE='mmuser:mostest@tcp(mysql:3306)/latest?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s' ARGS='version' run-cli" +# - docker logs -f server-mysql +# - echo "Ignoring known MySQL mismatch 'ChannelMembers.SchemeGuest'" +# - docker-compose --no-ansi exec -T mysql mysql -D migrated -uroot -pmostest -e "ALTER TABLE ChannelMembers DROP COLUMN SchemeGuest;" || echo "drop failed" +# - docker-compose --no-ansi exec -T mysql mysql -D latest -uroot -pmostest -e "ALTER TABLE ChannelMembers DROP COLUMN SchemeGuest;" || echo "drop failed" +# - echo "Generating dump" +# - docker-compose --no-ansi exec -T mysql mysqldump --skip-opt --no-data --compact -u root -pmostest migrated > migrated.sql +# - docker-compose --no-ansi exec -T mysql mysqldump --skip-opt --no-data --compact -u root -pmostest latest > latest.sql +# - echo "Removing databases created for db comparison" +# - docker-compose --no-ansi exec -T mysql mysql -uroot -pmostest -e 'DROP DATABASE migrated; DROP DATABASE latest' +# - echo "Generating diff" +# rules: +# - if: '$ONLY_BUILD != "yes"' diff --git a/.gitlab-ci/test-schema.yml b/.gitlab-ci/test-schema.yml new file mode 100644 index 0000000000..f70f36a69c --- /dev/null +++ b/.gitlab-ci/test-schema.yml @@ -0,0 +1,23 @@ +.test-schema: + stage: test + image: mattermost/mattermost-build-docker:20201023_19.03.12 + variables: + DOCKER_TLS_CERTDIR: "" + DOCKER_HOST: tcp://docker:2375/ + DOCKER_DRIVER: overlay2 + DOCKER_CONTENT_TRUST: 0 + DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE: "" + services: + - name: docker:19.03.12-dind + alias: dind + before_script: + - docker ps + + - ulimit -n 8096 + - cd build + - docker-compose --no-ansi run --rm start_dependencies + - cat ../tests/test-data.ldif | docker-compose --no-ansi exec -T openldap bash -c 'ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest' + - docker-compose --no-ansi exec -T minio sh -c 'mkdir -p /data/mattermost-test' + - sleep 5 + - docker run --net build_mm-test appropriate/curl:latest sh -c "until curl --max-time 5 --output - http://mysql:3306; do echo waiting for mysql; sleep 5; done;" + - docker run --net build_mm-test appropriate/curl:latest sh -c "until curl --max-time 5 --output - http://elasticsearch:9200; do echo waiting for elasticsearch; sleep 5; done;" diff --git a/.gitlab-ci/test.yml b/.gitlab-ci/test.yml new file mode 100644 index 0000000000..9fdaca9ad4 --- /dev/null +++ b/.gitlab-ci/test.yml @@ -0,0 +1,53 @@ +.test: + stage: test + image: mattermost/mattermost-build-docker:20201023_19.03.12 + variables: + DOCKER_TLS_CERTDIR: "" + DOCKER_HOST: tcp://docker:2375/ + DOCKER_DRIVER: overlay2 + DOCKER_CONTENT_TRUST: 0 + DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE: "" + + MM_SQLSETTINGS_DATASOURCE: "postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10" + MM_SQLSETTINGS_DRIVERNAME: postgres + services: + - name: docker:19.03.12-dind + alias: dind + script: + - mkdir -p client/plugins + - mkdir -p build/test-results + - mkdir -p build/logs + - cd build + - docker-compose --no-ansi run --rm start_dependencies + - cat ../tests/test-data.ldif | docker-compose --no-ansi exec -T openldap bash -c 'ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest' + - docker-compose --no-ansi exec -T minio sh -c 'mkdir -p /data/mattermost-test' + - sleep 5 + - docker run --net build_mm-test appropriate/curl:latest sh -c "until curl --max-time 5 --output - http://mysql:3306; do echo waiting for mysql; sleep 5; done;" + - docker run --net build_mm-test appropriate/curl:latest sh -c "until curl --max-time 5 --output - http://elasticsearch:9200; do echo waiting for elasticsearch; sleep 5; done;" + - ulimit -n 8096 + # todo: remove setting GOBIN here, once circleci can be removed (see build/dotenv/test.env) + - > + time docker run -it -d --name server --net build_mm-test \ + --env-file=dotenv/test.env \ + --env MM_SQLSETTINGS_DATASOURCE=$MM_SQLSETTINGS_DATASOURCE \ + --env MM_SQLSETTINGS_DRIVERNAME=$MM_SQLSETTINGS_DRIVERNAME \ + --env GOBIN=$PWD/bin \ + -v $CI_PROJECT_DIR:/mattermost-server \ + -w /mattermost-server \ + mattermost/mattermost-build-server:20201023_golang-1.14.6 \ + bash -c "ulimit -n 8096; make test-server BUILD_NUMBER=$CI_COMMIT_SHA TESTFLAGS= TESTFLAGSEE=;" + - docker logs -f server + - docker-compose logs --tail="all" -t --no-color > logs/docker-compose_logs + - docker ps -a --no-trunc > logs/docker_ps + - docker stats -a --no-stream > logs/docker_stats + - tar -czvf logs/docker_logs.tar.gz logs/docker-compose_logs logs/docker_ps logs/docker_stats + - cp ../report.xml test-results + - DOCKER_EXIT_CODE=$(docker inspect server --format='{{.State.ExitCode}}') + - echo $DOCKER_EXIT_CODE + - exit $DOCKER_EXIT_CODE + artifacts: + paths: + - build/logs + reports: + junit: build/test-results/report.xml + expire_in: 7 days