ci #186
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: ci | |
on: | |
schedule: | |
- cron: "0 0 * * *" | |
pull_request: | |
push: | |
branches: | |
- master | |
env: | |
TERM: xterm | |
GO_VERSION: 1.19.6 | |
NODE_VERSION: 16.15.0 | |
jobs: | |
lint: | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: ci/checkout-repo | |
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 | |
- name: ci/setup-go | |
uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 | |
with: | |
go-version: "${{ env.GO_VERSION }}" | |
cache: true | |
- name: ci/install-tests-deps | |
run: make deps | |
- name: ci/checking-code-style | |
run: make check-style | |
- name: ci/go-tidy | |
run: go mod tidy -v | |
- name: ci/check-diff-on-gomod | |
run: git --no-pager diff --exit-code go.mod go.sum || (echo "Please run \"go mod tidy\" and commit the changes in go.mod and go.sum." && exit 1) | |
- name: ci/run-mocks | |
run: make mock | |
- name: ci/check-diff-on-generated-mocks | |
run: git --no-pager diff --exit-code server/mocks* || (echo "Please run \"make mock\" and commit the changes in the generated files." && exit 1) | |
- name: ci/run-make-i18n-extract-server | |
run: make i18n-extract-server | |
- name: ci/check-diff-on-webapp-i18n-files | |
run: git --no-pager diff --exit-code assets/i18n/* || (echo "Please run \"make i18n-extract-server\" and commit the changes in the generated files." && exit 1) | |
# Do NOT run on master since we are going to rebuild on the CD workflow | |
# Do NOT run on scheduled runs . No need for the binaries everynight | |
build: | |
runs-on: ubuntu-22.04 | |
if: ${{ !(github.ref_name == 'master' || github.event_name == 'schedule') }} | |
needs: | |
- lint | |
steps: | |
- name: ci/checkout-repo | |
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 | |
with: | |
fetch-depth: 0 # We need these for proper release notes | |
- name: ci/setup-go | |
uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 | |
with: | |
go-version: "${{ env.GO_VERSION }}" | |
cache: true | |
- name: ci/build | |
run: make dist | |
- name: ci/generate-release-notes | |
run: | | |
printf "Supported Mattermost Server Versions: **$(cat plugin.json | jq .min_server_version -r)+** \n## Enhancements\n\n## Fixes\n" >> dist/release-notes.md | |
if [[ $(git tag -l | wc -l) -eq 1 ]]; then | |
git log --pretty='format:- %h %s' --abbrev-commit --no-decorate --no-color $(git rev-list --max-parents=0 HEAD) HEAD >> dist/release-notes.md | |
else | |
git log --pretty='format:- %h %s' --abbrev-commit --no-decorate --no-color $(git describe --tags --abbrev=0 $(git describe --tags --abbrev=0)^)..HEAD >> dist/release-notes.md | |
fi | |
- name: ci/upload-artifacts | |
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 | |
with: | |
name: dist | |
path: | | |
dist/*.tar.gz | |
dist/release-notes.md | |
retention-days: 5 ## No need to keep CI builds more than 5 days | |
test: | |
runs-on: ubuntu-22.04 | |
needs: | |
- lint | |
steps: | |
- name: ci/checkout-repo | |
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 | |
- name: ci/setup-go | |
uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 | |
with: | |
go-version: "${{ env.GO_VERSION }}" | |
cache: true | |
- name: ci/test | |
run: make test | |
coverage: # Do NOT run on scheduled runs | |
runs-on: ubuntu-22.04 | |
if: ${{ !(github.event_name == 'schedule') }} | |
needs: | |
- lint | |
steps: | |
- name: ci/checkout-repo | |
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 | |
- name: ci/setup-go | |
uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 | |
with: | |
go-version: "${{ env.GO_VERSION }}" | |
cache: true | |
- name: ci/coverage | |
run: make coverage | |
- name: ci/upload-coverage | |
uses: codecov/codecov-action@d9f34f8cd5cb3b3eb79b3e4b5dae3a16df499a70 # v3.3.1 | |
with: | |
files: server/coverage.txt | |
test-rest-postgres11: | |
runs-on: ubuntu-22.04 | |
needs: | |
- lint | |
services: | |
postgres: | |
image: postgres:11.13 | |
env: | |
POSTGRES_USER: mmuser | |
POSTGRES_DB: mattermost_test | |
POSTGRES_HOST_AUTH_METHOD: trust | |
ports: | |
- 5432:5432 | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
steps: | |
- name: ci/checkout-repo | |
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 | |
- name: ci/checkout-mattermost-server-repo | |
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 | |
with: | |
repository: mattermost/mattermost-server | |
path: mattermost-server | |
ref: v7.7.0 | |
- name: ci/setup-go | |
uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 | |
with: | |
go-version: "${{ env.GO_VERSION }}" | |
cache: true | |
- name: ci/test-with-db | |
env: | |
MM_SERVICESETTINGS_ENABLEDEVELOPER: true | |
MM_SERVER_PATH: ${{ github.workspace }}/mattermost-server | |
run: make test-rest-api | |
e2e-cypress-tests-pinned: # Run only on master push and scheduled runs | |
runs-on: ubuntu-latest-4-cores | |
if: ${{ github.ref_name == 'master' || github.event_name == 'schedule' }} | |
needs: | |
- lint | |
services: | |
postgres: | |
image: postgres:11.13 | |
env: | |
POSTGRES_USER: mmuser | |
POSTGRES_PASSWORD: mostest | |
POSTGRES_DB: mattermost_test | |
POSTGRES_HOST_AUTH_METHOD: trust | |
ports: | |
- 5432:5432 | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
minio: | |
image: minio/minio:RELEASE.2019-10-11T00-38-09Z | |
env: | |
MINIO_ACCESS_KEY: minioaccesskey | |
MINIO_SECRET_KEY: miniosecretkey | |
MINIO_SSE_MASTER_KEY: "my-minio-key:6368616e676520746869732070617373776f726420746f206120736563726574" | |
inbucket: | |
image: mattermost/inbucket:release-1.2.0 | |
ports: | |
- 10080:10080 | |
- 10110:10110 | |
- 10025:10025 | |
elasticsearch: | |
image: mattermost/mattermost-elasticsearch-docker:7.0.0 | |
env: | |
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" | |
ports: | |
- 9200:9200 | |
mattermost-server: | |
image: mattermost/mattermost-enterprise-edition:release-7.7 | |
env: | |
DB_HOST: postgres | |
DB_PORT_NUMBER: 5432 | |
MM_DBNAME: mattermost_test | |
MM_USERNAME: mmuser | |
MM_PASSWORD: mostest | |
CI_INBUCKET_HOST: inbucket | |
CI_INBUCKET_PORT: 10080 | |
CI_MINIO_HOST: minio | |
IS_CI: true | |
MM_CLUSTERSETTINGS_READONLYCONFIG: false | |
MM_EMAILSETTINGS_SMTPSERVER: inbucket | |
MM_EMAILSETTINGS_SMTPPORT: 10025 | |
MM_ELASTICSEARCHSETTINGS_CONNECTIONURL: http://elasticsearch:9200 | |
MM_EXPERIMENTALSETTINGS_USENEWSAMLLIBRARY: true | |
MM_SQLSETTINGS_DATASOURCE: "postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10" | |
MM_SQLSETTINGS_DRIVERNAME: postgres | |
MM_PLUGINSETTINGS_ENABLEUPLOADS: true | |
MM_SERVICESETTINGS_SITEURL: http://localhost:8065 | |
MM_PLUGINSETTINGS_AUTOMATICPREPACKAGEDPLUGINS: false | |
MM_ANNOUNCEMENTSETTINGS_ADMINNOTICESENABLED: false | |
MM_FEATUREFLAGS_AppsEnabled: true | |
ports: | |
- 8065:8065 | |
- 4000:4000 | |
env: | |
TYPE: NONE | |
PULL_REQUEST: "" | |
HEADLESS: true | |
DASHBOARD_ENABLE: false | |
FULL_REPORT: false | |
MM_SERVICESETTINGS_SITEURL: http://localhost:8065 | |
MM_ADMIN_EMAIL: [email protected] | |
MM_ADMIN_USERNAME: sysadmin | |
MM_ADMIN_PASSWORD: Sys@dmin-sample1 | |
TEST_DATABASE_URL: postgres://mmuser:mostest@localhost:5432/mattermost_test | |
MM_SERVICESETTINGS_ENABLEDEVELOPER: true | |
steps: | |
- name: ci/checkout-repo | |
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 | |
- name: ci/setup-go | |
uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 | |
with: | |
go-version: "${{ env.GO_VERSION }}" | |
cache: true | |
- name: ci/setup-node | |
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 | |
with: | |
node-version: "${{ env.NODE_VERSION }}" | |
cache: "npm" | |
cache-dependency-path: test/e2e/package-lock.json | |
- name: ci/create-admin-user | |
run: | | |
STATUSCODE=$(curl -X POST -H "Content-Type: application/json" -d '{"email": "'${MM_ADMIN_EMAIL}'", "username": "'${MM_ADMIN_USERNAME}'", "password": "'${MM_ADMIN_PASSWORD}'"}' ${MM_SERVICESETTINGS_SITEURL}/api/v4/users -w "%{http_code}" -o /dev/stderr) | |
if test $STATUSCODE -ne 201; then exit 1; fi | |
- name: ci/install-apps-plugin | |
run: make deploy | |
- name: ci/start-hello-app | |
run: | | |
echo "Mattermost Server Container ID: ${{ job.services.mattermost-server.id }}" | |
cd test/hello-world | |
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build . | |
docker cp hello-world ${{ job.services.mattermost-server.id }}:/hello-world | |
docker exec -d ${{ job.services.mattermost-server.id }} /hello-world | |
- name: ci/install-tests-deps | |
run: | | |
cd test/e2e | |
npm install | |
- name: ci/run-cypress-tests | |
run: | | |
cd test/e2e | |
npm run test | |
e2e-cypress-tests-master: # Run only on master push and scheduled runs | |
runs-on: ubuntu-latest-4-cores | |
if: ${{ github.ref_name == 'master' || github.event_name == 'schedule' }} | |
needs: | |
- lint | |
services: | |
postgres: | |
image: postgres:11.13 | |
env: | |
POSTGRES_USER: mmuser | |
POSTGRES_PASSWORD: mostest | |
POSTGRES_DB: mattermost_test | |
POSTGRES_HOST_AUTH_METHOD: trust | |
ports: | |
- 5432:5432 | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
minio: | |
image: minio/minio:RELEASE.2019-10-11T00-38-09Z | |
env: | |
MINIO_ACCESS_KEY: minioaccesskey | |
MINIO_SECRET_KEY: miniosecretkey | |
MINIO_SSE_MASTER_KEY: "my-minio-key:6368616e676520746869732070617373776f726420746f206120736563726574" | |
inbucket: | |
image: mattermost/inbucket:release-1.2.0 | |
ports: | |
- 10080:10080 | |
- 10110:10110 | |
- 10025:10025 | |
elasticsearch: | |
image: mattermost/mattermost-elasticsearch-docker:7.0.0 | |
env: | |
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" | |
ports: | |
- 9200:9200 | |
mattermost-server: | |
image: mattermost/mattermost-enterprise-edition:master | |
env: | |
DB_HOST: postgres | |
DB_PORT_NUMBER: 5432 | |
MM_DBNAME: mattermost_test | |
MM_USERNAME: mmuser | |
MM_PASSWORD: mostest | |
CI_INBUCKET_HOST: inbucket | |
CI_INBUCKET_PORT: 10080 | |
CI_MINIO_HOST: minio | |
IS_CI: true | |
MM_CLUSTERSETTINGS_READONLYCONFIG: false | |
MM_EMAILSETTINGS_SMTPSERVER: inbucket | |
MM_EMAILSETTINGS_SMTPPORT: 10025 | |
MM_ELASTICSEARCHSETTINGS_CONNECTIONURL: http://elasticsearch:9200 | |
MM_EXPERIMENTALSETTINGS_USENEWSAMLLIBRARY: true | |
MM_SQLSETTINGS_DATASOURCE: "postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10" | |
MM_SQLSETTINGS_DRIVERNAME: postgres | |
MM_PLUGINSETTINGS_ENABLEUPLOADS: true | |
MM_SERVICESETTINGS_SITEURL: http://localhost:8065 | |
MM_PLUGINSETTINGS_AUTOMATICPREPACKAGEDPLUGINS: false | |
MM_ANNOUNCEMENTSETTINGS_ADMINNOTICESENABLED: false | |
MM_FEATUREFLAGS_AppsEnabled: true | |
ports: | |
- 8065:8065 | |
- 4000:4000 | |
env: | |
TYPE: NONE | |
PULL_REQUEST: "" | |
HEADLESS: true | |
DASHBOARD_ENABLE: false | |
FULL_REPORT: false | |
MM_SERVICESETTINGS_SITEURL: http://localhost:8065 | |
MM_ADMIN_EMAIL: [email protected] | |
MM_ADMIN_USERNAME: sysadmin | |
MM_ADMIN_PASSWORD: Sys@dmin-sample1 | |
TEST_DATABASE_URL: postgres://mmuser:mostest@localhost:5432/mattermost_test | |
MM_SERVICESETTINGS_ENABLEDEVELOPER: true | |
steps: | |
- name: ci/checkout-repo | |
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 | |
- name: ci/setup-go | |
uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 | |
with: | |
go-version: "${{ env.GO_VERSION }}" | |
cache: true | |
- name: ci/setup-node | |
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 | |
with: | |
node-version: "${{ env.NODE_VERSION }}" | |
cache: "npm" | |
cache-dependency-path: test/e2e/package-lock.json | |
- name: ci/create-admin-user | |
run: | | |
STATUSCODE=$(curl -X POST -H "Content-Type: application/json" -d '{"email": "'${MM_ADMIN_EMAIL}'", "username": "'${MM_ADMIN_USERNAME}'", "password": "'${MM_ADMIN_PASSWORD}'"}' ${MM_SERVICESETTINGS_SITEURL}/api/v4/users -w "%{http_code}" -o /dev/stderr) | |
if test $STATUSCODE -ne 201; then exit 1; fi | |
- name: ci/install-apps-plugin | |
run: make deploy | |
- name: ci/start-hello-app | |
run: | | |
echo "Mattermost Server Container ID: ${{ job.services.mattermost-server.id }}" | |
cd test/hello-world | |
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build . | |
docker cp hello-world ${{ job.services.mattermost-server.id }}:/hello-world | |
docker exec -d ${{ job.services.mattermost-server.id }} /hello-world | |
- name: ci/install-tests-deps | |
run: | | |
cd test/e2e | |
npm install | |
- name: ci/run-cypress-tests | |
run: | | |
cd test/e2e | |
npm run test |