mattermost-build #2
Workflow file for this run
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: mattermost-build | |
on: | |
pull_request: | |
push: | |
branches: | |
- master | |
- cloud | |
- release-* | |
- mono-repo* | |
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: 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: 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: 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: 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: 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: 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 [email protected] | |
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: 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: 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: build webapp | |
run: | | |
cd ../webapp | |
make dist | |
- 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: dist/ | |
retention-days: 14 | |
- name: Persist build artifacts | |
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 | |
with: | |
name: server-build-artifact | |
path: build/ | |
retention-days: 14 | |
upload-s3: | |
name: Upload to S3 bucket | |
runs-on: ubuntu-22.04 | |
defaults: | |
run: | |
working-directory: server | |
needs: | |
- build-mattermost-server | |
- test-mysql | |
- test-postgres-binary | |
- test-postgres-normal | |
env: | |
REPO_NAME: ${{ github.event.repository.name }} | |
steps: | |
- name: Download dist artifacts | |
uses: actions/download-artifact@e9ef242655d12993efdcda9058dee2db83a2cb9b # v3.0.2 | |
with: | |
name: server-dist-artifact | |
path: dist/ | |
- name: Configure AWS | |
uses: aws-actions/configure-aws-credentials@07c2f971bac433df982ccc261983ae443861db49 # v1-node16 | |
with: | |
aws-region: us-east-1 | |
aws-access-key-id: ${{ secrets.MM_SERVER_AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.MM_SERVER_AWS_SECRET_ACCESS_KEY }} | |
# We need to sanitize the branch name before using it | |
- name: ci/sanitize-branch-name | |
id: branch | |
uses: transferwise/sanitize-branch-name@b10b4d524ac5a7b645b43a3527db3a6cca017b9d # v1 | |
# Search for the string "pull" and replace it with "PR" in branch-name | |
- name: ci/sanitize-branch-name-replace-pull-with-PR- | |
run: echo "BRANCH_NAME=$(echo ${{ steps.branch.outputs.sanitized-branch-name }} | sed 's/^pull\//PR-/g')" >> $GITHUB_ENV | |
- name: ci/artifact-upload | |
run: | | |
aws s3 cp dist/ s3://pr-builds.mattermost.com/$REPO_NAME/$BRANCH_NAME/ --acl public-read --cache-control "no-cache" --recursive | |
aws s3 cp dist/ s3://pr-builds.mattermost.com/$REPO_NAME/commit/${{ github.sha }}/ --acl public-read --cache-control "no-cache" --recursive | |
build-docker: | |
name: Build docker image | |
runs-on: ubuntu-22.04 | |
needs: upload-s3 | |
steps: | |
- name: Download build artifacts | |
uses: actions/download-artifact@e9ef242655d12993efdcda9058dee2db83a2cb9b # v3.0.2 | |
with: | |
name: server-build-artifact | |
path: server/build/ | |
- name: Login to Docker Hub | |
uses: docker/login-action@3da7dc6e2b31f99ef2cb9fb4c50fb0971e0d0139 # v2.1.0 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Setup Docker Buildx | |
uses: docker/setup-buildx-action@11e8a2e2910826a92412015c515187a2d6750279 # v2.4 | |
- name: Docker build and push | |
env: | |
DOCKER_CLI_EXPERIMENTAL: enabled | |
run: | | |
export TAG=$(echo "${{ github.event.pull_request.head.sha || github.sha }}" | cut -c1-7) | |
cd server/build | |
export DOCKER_CLI_EXPERIMENTAL=enabled | |
export MM_PACKAGE=https://pr-builds.mattermost.com/mattermost-server/commit/${GITHUB_SHA}/mattermost-team-linux-amd64.tar.gz | |
docker buildx build --push --build-arg MM_PACKAGE=$MM_PACKAGE -t mattermost/mm-te-test:${TAG} . | |
sentry: | |
name: Send build info to sentry | |
runs-on: ubuntu-22.04 | |
needs: | |
- test-postgres-binary | |
- test-postgres-normal | |
- test-mysql | |
- build-mattermost-server | |
if: ${{ github.event_name == 'push' }} | |
env: | |
SENTRY_AUTH_TOKEN: ${{ secrets.MM_SERVER_SENTRY_AUTH_TOKEN }} | |
SENTRY_ORG: ${{ secrets.MM_SERVER_SENTRY_ORG }} | |
SENTRY_PROJECT: ${{ secrets.MM_SERVER_SENTRY_PROJECT }} | |
steps: | |
- name: Checkout mattermost-server | |
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 | |
- name: Create Sentry release | |
uses: getsentry/action-release@85e0095193a153d57c458995f99d0afd81b9e5ea # v1.3.0 |