fix flaky notifications tests and migrated to playwright (#34449) #3234
This file contains hidden or 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
| # NOTE: This workflow name is referenced by other workflows: | |
| # - server-ci-artifacts.yml | |
| # - server-ci-report.yml | |
| # - sentry.yaml | |
| # If you rename this workflow, be sure to update those workflows as well. | |
| name: Server CI | |
| on: | |
| push: | |
| branches: | |
| - master | |
| - release-* | |
| pull_request: | |
| paths: | |
| - "server/**" | |
| - "e2e-tests/**" | |
| - ".github/workflows/server-ci.yml" | |
| - ".github/workflows/server-test-template.yml" | |
| - ".github/workflows/mmctl-test-template.yml" | |
| - "!server/build/Dockerfile.buildenv" | |
| - "!server/build/Dockerfile.buildenv-fips" | |
| concurrency: | |
| group: ${{ github.event_name == 'pull_request' && format('{0}-{1}', github.workflow, github.ref) || github.run_id }} | |
| cancel-in-progress: ${{ github.event_name == 'pull_request' }} | |
| jobs: | |
| go: | |
| name: Compute Go Version | |
| runs-on: ubuntu-22.04 | |
| outputs: | |
| version: ${{ steps.calculate.outputs.GO_VERSION }} | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| - name: Calculate version | |
| id: calculate | |
| working-directory: server/ | |
| run: echo GO_VERSION=$(cat .go-version) >> "${GITHUB_OUTPUT}" | |
| check-mocks: | |
| name: Check mocks | |
| needs: go | |
| runs-on: ubuntu-22.04 | |
| container: mattermostdevelopment/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| - 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 | |
| needs: go | |
| runs-on: ubuntu-22.04 | |
| container: mattermostdevelopment/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| - 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 | |
| check-style: | |
| name: check-style | |
| needs: go | |
| runs-on: ubuntu-22.04 | |
| container: mattermostdevelopment/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| env: | |
| GOFLAGS: -buildvcs=false # TODO: work around "error obtaining VCS status: exit status 128" in a container | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| - name: Run setup-go-work | |
| run: make setup-go-work | |
| - name: Run golangci | |
| run: make check-style | |
| check-gen-serialized: | |
| name: Check serialization methods for hot structs | |
| needs: go | |
| runs-on: ubuntu-22.04 | |
| container: mattermostdevelopment/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| - 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-api: | |
| name: Vet API | |
| needs: go | |
| runs-on: ubuntu-22.04 | |
| container: mattermostdevelopment/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| - 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 | |
| needs: go | |
| runs-on: ubuntu-22.04 | |
| container: mattermostdevelopment/mattermost-build-server:${{ needs.go.outputs.version }} | |
| 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 | |
| needs: go | |
| runs-on: ubuntu-22.04 | |
| container: mattermostdevelopment/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| - name: Generate email templates | |
| run: | | |
| 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 | |
| needs: go | |
| runs-on: ubuntu-22.04 | |
| container: mattermostdevelopment/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| - 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 | |
| needs: go | |
| runs-on: ubuntu-22.04 | |
| container: mattermostdevelopment/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| steps: | |
| - name: Checkout mattermost-server | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| - 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.event_name == 'push' # Only run postgres binary tests on master/release pushes: odds are low this regresses, so save the cycles for pull requests. | |
| name: Postgres with binary parameters | |
| needs: go | |
| 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 | |
| go-version: ${{ needs.go.outputs.version }} | |
| fips-enabled: false | |
| test-postgres-normal: | |
| name: Postgres | |
| needs: go | |
| 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 | |
| go-version: ${{ needs.go.outputs.version }} | |
| fips-enabled: false | |
| test-postgres-normal-fips: | |
| # Skip FIPS testing for forks, which won't have docker login credentials. | |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository | |
| name: Postgres (FIPS) | |
| needs: go | |
| 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 | |
| go-version: ${{ needs.go.outputs.version }} | |
| fips-enabled: true | |
| test-coverage: | |
| name: Generate Test Coverage | |
| # Disabled: Running out of memory and causing spurious failures. | |
| # Old condition: ${{ github.event_name != 'pull_request' || !startsWith(github.event.pull_request.base.ref, 'release-') }} | |
| if: false | |
| needs: go | |
| uses: ./.github/workflows/server-test-template.yml | |
| secrets: inherit | |
| with: | |
| name: Generate Test Coverage | |
| datasource: postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10 | |
| drivername: postgres | |
| logsartifact: coverage-server-test-logs | |
| fullyparallel: true | |
| enablecoverage: true | |
| go-version: ${{ needs.go.outputs.version }} | |
| test-mmctl: | |
| name: Run mmctl tests | |
| needs: go | |
| 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 | |
| go-version: ${{ needs.go.outputs.version }} | |
| fips-enabled: false | |
| test-mmctl-fips: | |
| name: Run mmctl tests (FIPS) | |
| # Skip FIPS testing for forks, which won't have docker login credentials. | |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository | |
| needs: go | |
| 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 | |
| go-version: ${{ needs.go.outputs.version }} | |
| fips-enabled: true | |
| build-mattermost-server: | |
| name: Build mattermost server app | |
| needs: go | |
| runs-on: ubuntu-22.04 | |
| container: mattermostdevelopment/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| env: | |
| GOFLAGS: -buildvcs=false # TODO: work around "error obtaining VCS status: exit status 128" in a container | |
| BUILD_NUMBER: "${GITHUB_HEAD_REF}-${GITHUB_RUN_ID}" | |
| FIPS_ENABLED: false | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| - name: Run setup-go-work | |
| run: make setup-go-work | |
| - name: Build | |
| run: | | |
| make config-reset | |
| make build-cmd | |
| make package | |
| - name: Persist dist artifacts | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
| 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@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
| with: | |
| name: server-build-artifact | |
| path: server/build/ | |
| retention-days: 2 |