[pull] master from mattermost:master #954
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/**" | |
| - ".github/workflows/server-ci.yml" | |
| - ".github/workflows/server-test-template.yml" | |
| - ".github/workflows/server-test-merge-template.yml" | |
| - ".github/workflows/mmctl-test-template.yml" | |
| - "!server/build/Dockerfile.buildenv" | |
| - "!server/build/Dockerfile.buildenv-fips" | |
| - "tools/mattermost-govet/**" | |
| - "!server/**/*.md" | |
| - "!server/NOTICE.txt" | |
| - "!server/CHANGELOG.md" | |
| 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 }} | |
| gomod-changed: ${{ steps.changed-files.outputs.any_changed }} | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| - name: Calculate version | |
| id: calculate | |
| working-directory: server/ | |
| run: echo GO_VERSION=$(cat .go-version) >> "${GITHUB_OUTPUT}" | |
| - name: Check for go.mod changes | |
| id: changed-files | |
| uses: tj-actions/changed-files@22103cc46bda19c2b464ffe86db46df6922fd323 # v47.0.5 | |
| with: | |
| files: | | |
| **/go.mod | |
| check-mocks: | |
| name: Check mocks | |
| needs: go | |
| runs-on: ubuntu-22.04 | |
| container: mattermost/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.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: mattermost/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.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: mattermost/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.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: mattermost/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.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: mattermost/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.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: mattermost/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.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: mattermost/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.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: mattermost/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.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: mattermost/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| steps: | |
| - name: Checkout mattermost-server | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.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 | |
| fullyparallel: false | |
| # -- Sharded into 4 parallel runners for ~88% wall-time improvement -- | |
| test-postgres-normal: | |
| name: Postgres (shard ${{ matrix.shard }}) | |
| needs: go | |
| strategy: | |
| fail-fast: false # Let all shards complete so we get full test results | |
| matrix: | |
| shard: [0, 1, 2, 3] | |
| uses: ./.github/workflows/server-test-template.yml | |
| secrets: inherit | |
| with: | |
| name: "Postgres (shard ${{ matrix.shard }})" | |
| datasource: postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10 | |
| drivername: postgres | |
| # Each shard gets a unique artifact name so they don't collide | |
| logsartifact: "postgres-server-test-logs-shard-${{ matrix.shard }}" | |
| go-version: ${{ needs.go.outputs.version }} | |
| fips-enabled: false | |
| shard-index: ${{ matrix.shard }} | |
| shard-total: 4 | |
| # -- Merge test results (handles both single-run and future sharded runs) -- | |
| merge-postgres-test-results: | |
| name: Merge Postgres Test Results | |
| needs: test-postgres-normal | |
| if: always() | |
| uses: ./.github/workflows/server-test-merge-template.yml | |
| with: | |
| artifact-pattern: postgres-server-test-logs-shard-* | |
| artifact-name: postgres-server-test-logs | |
| save-timing-cache: true | |
| test-elasticsearch-v8: | |
| name: Elasticsearch v8 Compatibility | |
| needs: go | |
| uses: ./.github/workflows/server-test-template.yml | |
| secrets: inherit | |
| with: | |
| name: Elasticsearch v8 Compatibility | |
| datasource: postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10 | |
| drivername: postgres | |
| logsartifact: elasticsearch-v8-server-test-logs | |
| go-version: ${{ needs.go.outputs.version }} | |
| fips-enabled: false | |
| elasticsearch-version: "8.9.0" | |
| test-target: "test-server-elasticsearch" | |
| test-postgres-normal-fips: | |
| # Always run on pushes to master/release branches. | |
| # For PRs, run when the branch name contains "fips" or any go.mod was changed. | |
| if: github.event_name == 'push' || contains(github.head_ref, 'fips') || needs.go.outputs.gomod-changed == 'true' | |
| name: Postgres FIPS (shard ${{ matrix.shard }}) | |
| needs: go | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| shard: [0, 1, 2, 3] | |
| uses: ./.github/workflows/server-test-template.yml | |
| secrets: inherit | |
| with: | |
| name: "Postgres FIPS (shard ${{ matrix.shard }})" | |
| datasource: postgres://mmuser:mostest-fips-test@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10 | |
| drivername: postgres | |
| logsartifact: "postgres-server-fips-test-logs-shard-${{ matrix.shard }}" | |
| go-version: ${{ needs.go.outputs.version }} | |
| fips-enabled: true | |
| shard-index: ${{ matrix.shard }} | |
| shard-total: 4 | |
| merge-postgres-fips-test-results: | |
| name: Merge Postgres FIPS Test Results | |
| needs: test-postgres-normal-fips | |
| if: needs.test-postgres-normal-fips.result != 'skipped' | |
| uses: ./.github/workflows/server-test-merge-template.yml | |
| with: | |
| artifact-pattern: postgres-server-fips-test-logs-shard-* | |
| artifact-name: postgres-server-fips-test-logs | |
| test-coverage: | |
| name: "Coverage (shard ${{ matrix.shard }})" | |
| if: ${{ github.event_name != 'pull_request' || !startsWith(github.event.pull_request.base.ref, 'release-') }} | |
| needs: go | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| shard: [0, 1, 2, 3] | |
| uses: ./.github/workflows/server-test-template.yml | |
| secrets: inherit | |
| with: | |
| name: "Coverage (shard ${{ matrix.shard }})" | |
| datasource: postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10 | |
| drivername: postgres | |
| logsartifact: "coverage-server-test-logs-shard-${{ matrix.shard }}" | |
| fullyparallel: true | |
| allow-failure: true | |
| enablecoverage: true | |
| go-version: ${{ needs.go.outputs.version }} | |
| fips-enabled: false | |
| shard-index: ${{ matrix.shard }} | |
| shard-total: 4 | |
| 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-fips-test@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: mattermost/mattermost-build-server:${{ needs.go.outputs.version }} | |
| defaults: | |
| run: | |
| working-directory: server | |
| env: | |
| BUILD_NUMBER: "${GITHUB_HEAD_REF}-${GITHUB_RUN_ID}" | |
| FIPS_ENABLED: false | |
| steps: | |
| - name: Checkout mattermost project | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| - name: ci/setup-node | |
| uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 | |
| 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 | |
| make package | |
| - name: Persist dist artifacts | |
| uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 | |
| with: | |
| name: server-dist-artifact | |
| path: server/dist/ | |
| if-no-files-found: error | |
| compression-level: 0 | |
| retention-days: 2 | |
| - name: Persist build artifacts | |
| if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository | |
| uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 | |
| with: | |
| name: server-build-artifact | |
| path: server/build/ | |
| retention-days: 2 |