name: Mattermost Build on: pull_request: push: branches: - master - cloud - release-* - mono-repo* env: go-version: "1.19.5" concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ !contains( github.ref , 'heads/ref/master') }} jobs: check-mocks: name: Check mocks runs-on: ubuntu-22.04 defaults: run: working-directory: server steps: - name: Checkout mattermost-server uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: go-version: ${{ env.go-version }} - 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-server uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: go-version: ${{ env.go-version }} - 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 check-gen-serialized: name: Check serialization methods for hot structs runs-on: ubuntu-22.04 defaults: run: working-directory: server steps: - name: Checkout mattermost-server uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: go-version: ${{ env.go-version }} - 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-latest-8-cores defaults: run: working-directory: server steps: - name: Checkout mattermost-server uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: go-version: ${{ env.go-version }} - 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 MM_VET_OPENSPEC_PATH='${PWD}/../../mattermost-api-reference/v4/html/static/mattermost-openapi-v4.yaml' check-migrations: name: Check migration files runs-on: ubuntu-22.04 defaults: run: working-directory: server steps: - name: Checkout mattermost-server uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - 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 build-api-spec: name: Build API specification runs-on: ubuntu-22.04 steps: - name: Checkout mattermost-server uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: go-version: ${{ env.go-version }} - name: Checkout mattermost-api-reference run: | cd .. git clone --depth=1 --no-single-branch https://github.com/mattermost/mattermost-api-reference.git cd mattermost-api-reference echo "Trying to checkout the same branch on mattermost-api-reference as mattermost-server" git checkout $GITHUB_HEAD_REF || git checkout $GITHUB_BASE_REF || true make build cd ../mattermost-server check-generate-work-templates: name: Generate work templates runs-on: ubuntu-22.04 defaults: run: working-directory: server steps: - name: Checkout mattermost-server uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: go-version: ${{ env.go-version }} - name: Generate work templates run: make generate-worktemplates - name: Check generated work templates run: if [[ -n $(git status --porcelain) ]]; then echo "Please update the worktemplates using make generate-worktemplates"; exit 1; fi check-email-templates: name: Generate email templates runs-on: ubuntu-22.04 defaults: run: working-directory: server steps: - name: Checkout mattermost-server uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - 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-server uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: go-version: ${{ env.go-version }} - 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-app-layers: name: Check app layers runs-on: ubuntu-22.04 defaults: run: working-directory: server steps: - name: Checkout mattermost-server uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: go-version: ${{ env.go-version }} - name: Generate app layers run: make app-layers - name: Check generated code run: if [[ -n $(git status --porcelain) ]]; then echo "Please update the app layers using make app-layers"; exit 1; fi test-postgres-binary: name: Run tests on postgres with binary parameters needs: check-mattermost-vet uses: ./.github/workflows/test.yml with: datasource: postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10&binary_parameters=yes drivername: postgres test-postgres-normal: name: Run tests on postgres needs: check-mattermost-vet uses: ./.github/workflows/test.yml with: datasource: postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10 drivername: postgres test-mysql: name: Run tests on mysql needs: check-mattermost-vet uses: ./.github/workflows/test.yml with: datasource: mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8&multiStatements=true drivername: mysql build-mattermost-server: name: Build mattermost-server runs-on: ubuntu-latest-8-cores defaults: run: working-directory: server needs: check-mattermost-vet steps: - name: Checkout mattermost-server uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: go-version: ${{ env.go-version }} - 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@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 with: name: server-dist-artifact path: server/dist/ retention-days: 14 - name: Persist build artifacts uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 with: name: server-build-artifact path: server/build/ retention-days: 14