# Base CI template which is called from server-ci-pr.yml # and server-ci-master.yml name: Server CI Template on: workflow_call: jobs: check-mocks: name: Check mocks runs-on: ubuntu-22.04 defaults: run: working-directory: server steps: - name: Checkout mattermost project uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Calculate Golang Version id: go run: echo GO_VERSION=$(cat .go-version) >> "${GITHUB_OUTPUT}" - name: Setup Go uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 with: go-version: ${{ steps.go.outputs.GO_VERSION }} cache-dependency-path: | server/go.sum server/public/go.sum - name: Run setup-go-work run: make setup-go-work - name: Generate mocks run: make mocks - name: Check mocks run: if [[ -n $(git status --porcelain) ]]; then echo "Please update the mocks using `make mocks`"; exit 1; fi check-go-mod-tidy: name: Check go mod tidy runs-on: ubuntu-22.04 defaults: run: working-directory: server steps: - name: Checkout mattermost project uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Calculate Golang Version id: go run: echo GO_VERSION=$(cat .go-version) >> "${GITHUB_OUTPUT}" - name: Setup Go uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 with: go-version: ${{ steps.go.outputs.GO_VERSION }} cache-dependency-path: | server/go.sum server/public/go.sum - name: Run setup-go-work run: make setup-go-work - name: Run go mod tidy run: make modules-tidy - name: Check modules run: if [[ -n $(git status --porcelain) ]]; then echo "Please tidy up the Go modules using make modules-tidy"; git diff; exit 1; fi golangci: name: golangci-lint runs-on: ubuntu-22.04 defaults: run: working-directory: server steps: - name: Checkout mattermost project uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Calculate Golang Version id: go run: echo GO_VERSION=$(cat .go-version) >> "${GITHUB_OUTPUT}" - name: Setup Go uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 with: go-version: ${{ steps.go.outputs.GO_VERSION }} cache-dependency-path: | server/go.sum server/public/go.sum - name: Run setup-go-work run: make setup-go-work - name: Run golangci run: make golangci-lint check-gen-serialized: name: Check serialization methods for hot structs runs-on: ubuntu-22.04 defaults: run: working-directory: server steps: - name: Checkout mattermost project uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Calculate Golang Version id: go run: echo GO_VERSION=$(cat .go-version) >> "${GITHUB_OUTPUT}" - name: Setup Go uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 with: go-version: ${{ steps.go.outputs.GO_VERSION }} cache-dependency-path: | server/go.sum server/public/go.sum - name: Run setup-go-work run: make setup-go-work - name: Run make-gen-serialized run: make gen-serialized - name: Check serialized run: if [[ -n $(git status --porcelain) ]]; then echo "Please update the serialized files using 'make gen-serialized'"; exit 1; fi check-mattermost-vet: name: Check style runs-on: ubuntu-22.04 defaults: run: working-directory: server steps: - name: Checkout mattermost project uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Calculate Golang Version id: go run: echo GO_VERSION=$(cat .go-version) >> "${GITHUB_OUTPUT}" - name: Setup Go uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 with: go-version: ${{ steps.go.outputs.GO_VERSION }} cache-dependency-path: | server/go.sum server/public/go.sum - name: Run setup-go-work run: make setup-go-work - name: Reset config run: make config-reset - name: Run plugin-checker run: make plugin-checker - name: Run mattermost-vet run: make vet BUILD_NUMBER='${GITHUB_HEAD_REF}' MM_NO_ENTERPRISE_LINT=true check-mattermost-vet-api: name: Vet API runs-on: ubuntu-22.04 defaults: run: working-directory: server steps: - name: Checkout mattermost project uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Calculate Golang Version id: go run: echo GO_VERSION=$(cat .go-version) >> "${GITHUB_OUTPUT}" - name: Setup Go uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 with: go-version: ${{ steps.go.outputs.GO_VERSION }} cache-dependency-path: | server/go.sum server/public/go.sum - name: Run setup-go-work run: make setup-go-work - name: Run mattermost-vet-api run: make vet-api check-migrations: name: Check migration files runs-on: ubuntu-22.04 defaults: run: working-directory: server steps: - name: Checkout mattermost project uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Extract migrations files run: make migrations-extract - name: Check migration files run: if [[ -n $(git status --porcelain) ]]; then echo "Please update the migrations using make migrations-extract"; exit 1; fi check-email-templates: name: Generate email templates runs-on: ubuntu-22.04 defaults: run: working-directory: server steps: - name: Checkout mattermost project uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Generate email templates run: | sudo npm install -g mjml@4.9.0 make build-templates - name: Check generated email templates run: if [[ -n $(git status --porcelain) ]]; then echo "Please update the email templates using `make build-templates`"; exit 1; fi check-store-layers: name: Check store layers runs-on: ubuntu-22.04 defaults: run: working-directory: server steps: - name: Checkout mattermost project uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Calculate Golang Version id: go run: echo GO_VERSION=$(cat .go-version) >> "${GITHUB_OUTPUT}" - name: Setup Go uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 with: go-version: ${{ steps.go.outputs.GO_VERSION }} cache-dependency-path: | server/go.sum server/public/go.sum - name: Run setup-go-work run: make setup-go-work - name: Generate store layers run: make store-layers - name: Check generated code run: if [[ -n $(git status --porcelain) ]]; then echo "Please update the store layers using make store-layers"; exit 1; fi check-mmctl-docs: name: Check mmctl docs runs-on: ubuntu-22.04 defaults: run: working-directory: server steps: - name: Checkout mattermost-server uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Calculate Golang Version id: go run: echo GO_VERSION=$(cat .go-version) >> "${GITHUB_OUTPUT}" - name: Setup Go uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 with: go-version: ${{ steps.go.outputs.GO_VERSION }} cache-dependency-path: | server/go.sum server/public/go.sum - name: Run setup-go-work run: make setup-go-work - name: Check docs run: | echo "Making sure docs are updated" make mmctl-docs if [[ -n $(git status --porcelain) ]]; then echo "Please update the mmctl docs using make mmctl-docs"; exit 1; fi test-postgres-binary: if: github.ref_name != 'master' # Do not run postgres binary tests on master name: Postgres with binary parameters needs: check-mattermost-vet uses: ./.github/workflows/server-test-template.yml secrets: inherit with: name: Postgres with binary parameters datasource: postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10&binary_parameters=yes drivername: postgres logsartifact: postgres-binary-server-test-logs test-postgres-normal: name: Postgres needs: check-mattermost-vet uses: ./.github/workflows/server-test-template.yml secrets: inherit with: name: Postgres datasource: postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10 drivername: postgres logsartifact: postgres-server-test-logs test-mysql: name: MySQL needs: check-mattermost-vet uses: ./.github/workflows/server-test-template.yml secrets: inherit with: name: MySQL datasource: mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4&multiStatements=true&maxAllowedPacket=4194304 drivername: mysql logsartifact: mysql-server-test-logs test-mmctl: name: Run mmctl tests needs: check-mattermost-vet uses: ./.github/workflows/mmctl-test-template.yml secrets: inherit with: name: mmctl datasource: postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10 drivername: postgres logsartifact: mmctl-test-logs build-mattermost-server: name: Build mattermost server app runs-on: ubuntu-22.04 defaults: run: working-directory: server needs: check-mattermost-vet steps: - name: Checkout mattermost project uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Calculate Golang Version id: go run: echo GO_VERSION=$(cat .go-version) >> "${GITHUB_OUTPUT}" - name: Setup Go uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 with: go-version: ${{ steps.go.outputs.GO_VERSION }} cache-dependency-path: | server/go.sum server/public/go.sum - name: ci/setup-node uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 id: setup_node with: node-version-file: ".nvmrc" cache: npm cache-dependency-path: "webapp/package-lock.json" - name: Run setup-go-work run: make setup-go-work - name: Build run: | make config-reset make build-cmd BUILD_NUMBER='${GITHUB_HEAD_REF}-${GITHUB_RUN_ID}' make package BUILD_NUMBER='${GITHUB_HEAD_REF}-${GITHUB_RUN_ID}' - name: Persist dist artifacts uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: server-dist-artifact path: server/dist/ if-no-files-found: error compression-level: 0 retention-days: 2 - name: Persist build artifacts uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: server-build-artifact path: server/build/ retention-days: 2 test-migration: name: MySQL to PostgreSQL Migration uses: ./.github/workflows/migration.yml secrets: inherit