diff --git a/.github/workflows/e2e-tests-ci.yml b/.github/workflows/e2e-tests-ci.yml index f169995a94..34c605a841 100644 --- a/.github/workflows/e2e-tests-ci.yml +++ b/.github/workflows/e2e-tests-ci.yml @@ -8,10 +8,6 @@ on: type: string required: false -defaults: - run: - shell: bash - jobs: update-initial-status: runs-on: ubuntu-22.04 @@ -84,25 +80,46 @@ jobs: npm run check smoketests: - runs-on: ubuntu-latest-8-cores + strategy: + matrix: + # + # Note that smoketests should be run only on ubuntu, for QA purposes. + # But it's useful to be able to run and debug the smoketests for different OSes. + # Notes: + # - For MacOS: works on developer machines, but uses too many resources to be able to run on Github Actions + # - for Windows: cannot currently run on Github Actions, since the runners do not support running linux containers, at the moment + # + #os: [ubuntu-latest-8-cores, windows-2022, macos-12-xl] + os: [ubuntu-latest-8-cores] + runs-on: "${{ matrix.os }}" needs: - cypress-check - playwright-check defaults: run: + shell: bash working-directory: e2e-tests steps: - name: ci/checkout-repo uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 with: ref: ${{ inputs.commit_sha || github.sha }} + - name: ci/setup-macos-docker + if: runner.os == 'macos' + # https://github.com/actions/runner-images/issues/17#issuecomment-1537238473 + run: | + brew install docker docker-compose + colima start + mkdir -p ~/.docker/cli-plugins + ln -sfn /usr/local/opt/docker-compose/bin/docker-compose ~/.docker/cli-plugins/docker-compose + sudo ln -sf $HOME/.colima/default/docker.sock /var/run/docker.sock - name: ci/e2e-smoketests run: | make - name: ci/e2e-smoketests-store-results uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 with: - name: e2e-smoketests-results + name: e2e-smoketests-results-${{ matrix.os }} path: | e2e-tests/cypress/logs/ e2e-tests/cypress/results/ diff --git a/e2e-tests/.ci/.e2erc b/e2e-tests/.ci/.e2erc index f9ae6fed4e..e08232620b 100644 --- a/e2e-tests/.ci/.e2erc +++ b/e2e-tests/.ci/.e2erc @@ -3,12 +3,24 @@ export MME2E_DC_SERVER="docker compose -p mmserver -f $(readlink -f ../../server/build/gitlab-dc.postgres.yml) -f $(readlink -f ./server.override.yml)" export MME2E_DC_DASHBOARD="docker compose -p mmdashboard -f $(readlink -f ./dashboard/docker/docker-compose.yml) -f $(readlink -f ./dashboard.override.yml)" export MME2E_UID=$(id -u) - -# Default the optional variables that are used in the docker-compose file -export SERVER_IMAGE_DEFAULT="mattermostdevelopment/mm-ee-test:$(git rev-parse --short=7 HEAD)" -export SERVER_IMAGE=${SERVER_IMAGE:-$SERVER_IMAGE_DEFAULT} +export MME2E_OSTYPE=$(docker version -f '{{ .Client.Os }}') +export MME2E_ARCHTYPE=$(docker version -f '{{ .Client.Arch }}') export NODE_VERSION_REQUIRED=$(cat ../../.nvmrc) +# Default values for optional variables +export SERVER_IMAGE_DEFAULT="mattermostdevelopment/mm-ee-test:$(git rev-parse --short=7 HEAD)" +export BROWSER_DEFAULT="chrome" +case $MME2E_OSTYPE in + # OS specific defaults overrides + darwin ) + BROWSER_DEFAULT="electron" ;; + * ) +esac + +# Populate the optional variables that are used in the docker-compose file +export SERVER_IMAGE=${SERVER_IMAGE:-$SERVER_IMAGE_DEFAULT} +export BROWSER=${BROWSER:-$BROWSER_DEFAULT} + # Function definitions mme2e_log () { echo "[$(date +%Y-%m-%dT%H:%M:%S%Z)]" "$@"; } mme2e_get_current_shopt_arg () { @@ -70,7 +82,14 @@ mme2e_legacy_setup () { # These functions are needed until every pipeline depending on the `server/build/gitlab-dc.*.yml` files is adapted to not use external docker networking anymore # After that is fixed, this function and the external network in the docker-compose files may be removed export COMPOSE_PROJECT_NAME=mmserver_legacy - docker network inspect ${COMPOSE_PROJECT_NAME} >/dev/null 2>&1 || docker network create ${COMPOSE_PROJECT_NAME} + case $MME2E_OSTYPE in + windows ) + # https://learn.microsoft.com/en-us/virtualization/windowscontainers/container-networking/network-drivers-topologies + DOCKER_NETWORK_DRIVER="nat" ;; + * ) + DOCKER_NETWORK_DRIVER="bridge" ;; + esac + docker network inspect ${COMPOSE_PROJECT_NAME} >/dev/null 2>&1 || docker network create --driver=${DOCKER_NETWORK_DRIVER} ${COMPOSE_PROJECT_NAME} } # Utility alias, for interactive shell usage. Can be reversed with 'unalias docker-compose' in your shell diff --git a/e2e-tests/.ci/dashboard.override.yml b/e2e-tests/.ci/dashboard.override.yml index 7e20368f63..6ebd3526fa 100644 --- a/e2e-tests/.ci/dashboard.override.yml +++ b/e2e-tests/.ci/dashboard.override.yml @@ -1,24 +1,23 @@ --- -version: '3.1' +version: "3.1" services: - dashboard: - image: mattermostdevelopment/mirrored-node:16.17.0 - environment: - PG_URI: postgres://mmuser:mostest@db:5432/automation_dashboard_db - JWT_SECRET: s8gGBA3ujKRohSw1L8HLOY7Jjnu2ZYv8 # Generated with e.g. `dd if=/dev/urandom count=24 bs=1 2>/dev/null | base64 -w0` - JWT_USER: cypress-test - JWT_ROLE: integration - JWT_ALG: HS256 - JWT_EXPIRES_IN: 365d - ALLOWED_USER: cypress-test - ALLOWED_ROLE: integration - user: "${MME2E_UID}" - volumes: - - "../:/app" - - "../../dashboard.entrypoint.sh:/usr/local/bin/dashboard.entrypoint.sh:ro" - - "../../.env.dashboard:/var/local/.env.dashboard:rw" - working_dir: /app - entrypoint: /usr/local/bin/dashboard.entrypoint.sh - ports: - - 4000:4000 + dashboard: + image: mattermostdevelopment/mirrored-node:18.17 + environment: + PG_URI: postgres://mmuser:mostest@db:5432/automation_dashboard_db + JWT_SECRET: s8gGBA3ujKRohSw1L8HLOY7Jjnu2ZYv8 # Generated with e.g. `dd if=/dev/urandom count=24 bs=1 2>/dev/null | base64 -w0` + JWT_USER: cypress-test + JWT_ROLE: integration + JWT_ALG: HS256 + JWT_EXPIRES_IN: 365d + ALLOWED_USER: cypress-test + ALLOWED_ROLE: integration + volumes: + - "../:/app" + - "../../dashboard.entrypoint.sh:/usr/local/bin/dashboard.entrypoint.sh:ro" + - "../../.env.dashboard:/var/local/.env.dashboard:rw" + working_dir: /app + entrypoint: /usr/local/bin/dashboard.entrypoint.sh + ports: + - 4000:4000 diff --git a/e2e-tests/.ci/dashboard.start.sh b/e2e-tests/.ci/dashboard.start.sh index b17f927280..d21092dc99 100755 --- a/e2e-tests/.ci/dashboard.start.sh +++ b/e2e-tests/.ci/dashboard.start.sh @@ -18,13 +18,18 @@ mme2e_log "Starting the dashboard" ${MME2E_DC_DASHBOARD} up -d db dashboard mme2e_log "Generating the dashboard's local URL" -MME2E_DC_DASHBOARD_NETWORK=$(${MME2E_DC_DASHBOARD} ps -q dashboard | xargs -l docker inspect | jq -r '.[0].NetworkSettings.Networks | (keys|.[0])') -MME2E_DC_DASHBOARD_GATEWAY=$(docker network inspect $MME2E_DC_DASHBOARD_NETWORK | jq -r '.[0].IPAM.Config[0].Gateway') -AUTOMATION_DASHBOARD_URL="http://${MME2E_DC_DASHBOARD_GATEWAY}:4000/api" +case $MME2E_OSTYPE in + darwin ) + AUTOMATION_DASHBOARD_IP=$(ifconfig $(route get 1.1.1.1 | grep interface | awk '{print $2}') | grep -w inet | awk '{print $2}') ;; + * ) + MME2E_DC_DASHBOARD_NETWORK=$(docker inspect $(${MME2E_DC_DASHBOARD} ps -q dashboard) | jq -r '.[0].NetworkSettings.Networks | (keys|.[0])') + AUTOMATION_DASHBOARD_IP=$(docker network inspect $MME2E_DC_DASHBOARD_NETWORK | jq -r '.[0].IPAM.Config[0].Gateway') +esac +AUTOMATION_DASHBOARD_URL="http://${AUTOMATION_DASHBOARD_IP}:4000/api" mme2e_log "Generating a signed JWT token for accessing the dashboard" -${MME2E_DC_DASHBOARD} exec -T -u $MME2E_UID dashboard npm i -AUTOMATION_DASHBOARD_TOKEN=$(${MME2E_DC_DASHBOARD} exec -T -u $MME2E_UID dashboard node script/sign.js | awk '{ print $2; }') # The token secret is specified in the dashboard.override.yml file +${MME2E_DC_DASHBOARD} exec -T dashboard npm i +AUTOMATION_DASHBOARD_TOKEN=$(${MME2E_DC_DASHBOARD} exec -T dashboard node script/sign.js | awk '{ print $2; }') # The token secret is specified in the dashboard.override.yml file mme2e_log "Generating the .env.dashboard file, to point Cypress to the dashboard URL" mme2e_generate_envfile_from_var_names >.env.dashboard <.env.cypress <