name: Smoke test release on: release: types: [released, prereleased, published] workflow_dispatch: inputs: tag: description: 'WooCommerce Release Tag' required: true concurrency: group: ${{ github.workflow }}-${{ github.event.release.tag_name || inputs.tag }} cancel-in-progress: true permissions: {} env: E2E_WP_LATEST_ARTIFACT: e2e-wp-latest--run-${{ github.run_number }} E2E_UPDATE_WC_ARTIFACT: e2e-update-wc--run-${{ github.run_number }} FORCE_COLOR: 1 jobs: get-tag: name: Get WooCommerce release tag permissions: contents: read runs-on: ubuntu-20.04 outputs: tag: ${{ steps.get-tag.outputs.tag }} created: ${{ steps.created-at.outputs.created }} steps: - name: Validate tag if: ${{ github.event_name == 'workflow_dispatch' }} env: GH_TOKEN: ${{ secrets.E2E_GH_TOKEN }} run: gh release view "${{ inputs.tag }}" --repo=woocommerce/woocommerce - name: Get tag from triggered event id: get-tag env: RELEASE_TAG: ${{ github.event.release.tag_name || inputs.tag }} run: | echo "Triggered event: ${{ github.event_name }}" echo "Tag from event: $RELEASE_TAG" echo "tag=$RELEASE_TAG" >> $GITHUB_OUTPUT - name: Verify woocommerce.zip asset env: GH_TOKEN: ${{ secrets.E2E_GH_TOKEN }} RELEASE_TAG: ${{ steps.get-tag.outputs.tag }} run: | ASSET_NAMES=$(gh release view $RELEASE_TAG --repo woocommerce/woocommerce --json assets --jq ".assets[].name") if [[ $ASSET_NAMES == *"woocommerce.zip"* ]] then echo "$RELEASE_TAG has a valid woocommerce.zip asset." exit 0 fi echo "$RELEASE_TAG does not have a valid woocommerce.zip asset." exit 1 - name: Get 'created-at' of WooCommerce zip id: created-at env: GH_TOKEN: ${{ secrets.E2E_GH_TOKEN }} run: echo "created=$(gh release view ${{ steps.get-tag.outputs.tag }} --json assets --jq .assets[0].createdAt --repo woocommerce/woocommerce)" >> $GITHUB_OUTPUT e2e-update-wc: name: Test WooCommerce update runs-on: ubuntu-20.04 needs: [get-tag] permissions: contents: read env: ALLURE_REPORT_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/e2e-pw/test-results/allure-report ALLURE_RESULTS_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/e2e-pw/test-results/allure-results steps: - uses: actions/checkout@v3 - name: Setup WooCommerce Monorepo uses: ./.github/actions/setup-woocommerce-monorepo with: install-filters: woocommerce build: false - name: Run E2E tests id: run-e2e-composite-action timeout-minutes: 60 uses: ./.github/actions/tests/run-e2e-tests with: report-name: ${{ env.E2E_UPDATE_WC_ARTIFACT }} tests: update-woocommerce.spec.js env: ADMIN_PASSWORD: ${{ secrets.RELEASE_TEST_ADMIN_PASSWORD }} ADMIN_USER: ${{ secrets.RELEASE_TEST_ADMIN_USER }} BASE_URL: ${{ secrets.RELEASE_TEST_URL }} CUSTOMER_PASSWORD: ${{ secrets.RELEASE_TEST_CUSTOMER_PASSWORD }} CUSTOMER_USER: ${{ secrets.RELEASE_TEST_CUSTOMER_USER }} DEFAULT_TIMEOUT_OVERRIDE: 120000 GITHUB_TOKEN: ${{ secrets.E2E_GH_TOKEN }} UPDATE_WC: ${{ needs.get-tag.outputs.tag }} - name: Upload Allure files to bucket if: success() || ( failure() && steps.run-e2e-composite-action.conclusion == 'failure' ) uses: ./.github/actions/tests/upload-allure-files-to-bucket with: aws-access-key-id: ${{ secrets.REPORTS_AWS_ACCESS_KEY_ID }} aws-region: ${{ secrets.REPORTS_AWS_REGION }} aws-secret-access-key: ${{ secrets.REPORTS_AWS_SECRET_ACCESS_KEY }} destination-dir: ${{ env.E2E_WP_LATEST_ARTIFACT }} s3-bucket: ${{ secrets.REPORTS_BUCKET }} - name: Publish E2E Allure report if: success() || ( failure() && steps.run-e2e-composite-action.conclusion == 'failure' ) env: GITHUB_TOKEN: ${{ secrets.REPORTS_TOKEN }} ENV_DESCRIPTION: wp-latest run: | gh workflow run publish-test-reports-release.yml \ -f created_at="${{ needs.get-tag.outputs.created }}" \ -f run_id=${{ github.run_id }} \ -f run_number=${{ github.run_number }} \ -f release_tag=${{ needs.get-tag.outputs.tag }} \ -f artifact="${{ env.E2E_WP_LATEST_ARTIFACT }}" \ -f env_description="${{ env.ENV_DESCRIPTION }}" \ -f test_type="e2e" \ --repo woocommerce/woocommerce-test-reports api-wp-latest: name: API on WP Latest runs-on: ubuntu-20.04 needs: [get-tag, e2e-update-wc] permissions: contents: read env: ALLURE_REPORT_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/api-core-tests/api-test-report/allure-report ALLURE_RESULTS_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/api-core-tests/api-test-report/allure-results API_WP_LATEST_ARTIFACT: api-wp-latest--run-${{ github.run_number }} steps: - uses: actions/checkout@v3 - name: Setup WooCommerce Monorepo uses: ./.github/actions/setup-woocommerce-monorepo with: install-filters: woocommerce build: false - name: Run API tests id: run-api-composite-action uses: ./.github/actions/tests/run-api-tests with: report-name: ${{ env.API_WP_LATEST_ARTIFACT }} tests: hello env: BASE_URL: ${{ secrets.RELEASE_TEST_URL }} USER_KEY: ${{ secrets.RELEASE_TEST_ADMIN_USER }} USER_SECRET: ${{ secrets.RELEASE_TEST_ADMIN_PASSWORD }} - name: Upload Allure files to bucket if: success() || ( failure() && steps.run-api-composite-action.conclusion == 'failure' ) uses: ./.github/actions/tests/upload-allure-files-to-bucket with: aws-access-key-id: ${{ secrets.REPORTS_AWS_ACCESS_KEY_ID }} aws-region: ${{ secrets.REPORTS_AWS_REGION }} aws-secret-access-key: ${{ secrets.REPORTS_AWS_SECRET_ACCESS_KEY }} destination-dir: ${{ env.API_WP_LATEST_ARTIFACT }} s3-bucket: ${{ secrets.REPORTS_BUCKET }} - name: Publish API Allure report if: success() || ( failure() && steps.run-api-composite-action.conclusion == 'failure' ) env: GITHUB_TOKEN: ${{ secrets.REPORTS_TOKEN }} ENV_DESCRIPTION: wp-latest run: | gh workflow run publish-test-reports-release.yml \ -f created_at="${{ needs.get-tag.outputs.created }}" \ -f run_id=${{ github.run_id }} \ -f run_number=${{ github.run_number }} \ -f release_tag=${{ needs.get-tag.outputs.tag }} \ -f artifact="${{ env.API_WP_LATEST_ARTIFACT }}" \ -f env_description="${{ env.ENV_DESCRIPTION }}" \ -f test_type="api" \ --repo woocommerce/woocommerce-test-reports e2e-wp-latest: name: E2E on WP Latest runs-on: ubuntu-20.04 needs: [get-tag, api-wp-latest] permissions: contents: read env: ALLURE_REPORT_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/e2e-pw/test-results/allure-report ALLURE_RESULTS_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/e2e-pw/test-results/allure-results steps: - uses: actions/checkout@v3 - name: Setup WooCommerce Monorepo uses: ./.github/actions/setup-woocommerce-monorepo with: install-filters: woocommerce build: false - name: Run E2E tests id: run-e2e-composite-action timeout-minutes: 60 uses: ./.github/actions/tests/run-e2e-tests with: report-name: e2e-wp-latest--partial--run-${{ github.run_number }} playwright-config: ignore-plugin-tests.playwright.config.js tests: basic.spec.js # mytodo remove this later env: ADMIN_PASSWORD: ${{ secrets.RELEASE_TEST_ADMIN_PASSWORD }} ADMIN_USER: ${{ secrets.RELEASE_TEST_ADMIN_USER }} ADMIN_USER_EMAIL: ${{ secrets.RELEASE_TEST_ADMIN_USER_EMAIL }} BASE_URL: ${{ secrets.RELEASE_TEST_URL }} CUSTOMER_PASSWORD: ${{ secrets.RELEASE_TEST_CUSTOMER_PASSWORD }} CUSTOMER_USER: ${{ secrets.RELEASE_TEST_CUSTOMER_USER }} DEFAULT_TIMEOUT_OVERRIDE: 120000 E2E_MAX_FAILURES: 25 RESET_SITE: true - name: Download 'e2e-update-wc' artifact if: success() || failure() uses: actions/download-artifact@v3 with: name: ${{ env.E2E_UPDATE_WC_ARTIFACT }} path: plugins/woocommerce/tmp - name: Add allure-results from 'e2e-update-wc' if: success() || failure() working-directory: plugins/woocommerce run: cp -r tmp/allure-results tests/e2e-pw/test-results - name: Generate E2E Test report. if: success() || failure() working-directory: plugins/woocommerce run: pnpm exec allure generate --clean ${{ env.ALLURE_RESULTS_DIR }} --output ${{ env.ALLURE_REPORT_DIR }} - name: Archive E2E test report if: success() || failure() uses: actions/upload-artifact@v3 with: name: ${{ env.E2E_WP_LATEST_ARTIFACT }} path: | ${{ env.ALLURE_RESULTS_DIR }} ${{ env.ALLURE_REPORT_DIR }} if-no-files-found: ignore retention-days: 5 - name: Upload Allure files to bucket if: success() || ( failure() && steps.run-e2e-composite-action.conclusion == 'failure' ) uses: ./.github/actions/tests/upload-allure-files-to-bucket with: aws-access-key-id: ${{ secrets.REPORTS_AWS_ACCESS_KEY_ID }} aws-region: ${{ secrets.REPORTS_AWS_REGION }} aws-secret-access-key: ${{ secrets.REPORTS_AWS_SECRET_ACCESS_KEY }} destination-dir: ${{ env.E2E_WP_LATEST_ARTIFACT }} s3-bucket: ${{ secrets.REPORTS_BUCKET }} - name: Publish E2E Allure report if: success() || failure() env: GITHUB_TOKEN: ${{ secrets.REPORTS_TOKEN }} ENV_DESCRIPTION: wp-latest run: | gh workflow run publish-test-reports-release.yml \ -f created_at="${{ needs.get-tag.outputs.created }}" \ -f run_id=${{ github.run_id }} \ -f run_number=${{ github.run_number }} \ -f release_tag=${{ needs.get-tag.outputs.tag }} \ -f artifact="${{ env.E2E_WP_LATEST_ARTIFACT }}" \ -f env_description="${{ env.ENV_DESCRIPTION }}" \ -f test_type="e2e" \ --repo woocommerce/woocommerce-test-reports get-wp-versions: name: Get WP L-1 & L-2 version numbers needs: [get-tag] runs-on: ubuntu-20.04 permissions: contents: read outputs: matrix: ${{ steps.get-versions.outputs.versions }} tag: ${{ needs.get-tag.outputs.tag }} created: ${{ needs.get-tag.outputs.created }} steps: - name: Create dirs run: | mkdir script mkdir repo - name: Checkout uses: actions/checkout@v3 with: path: repo - name: Copy script to get previous WP versions run: cp repo/plugins/woocommerce/tests/e2e-pw/utils/wordpress.js script - name: Install axios working-directory: script run: npm install axios - name: Get version numbers id: get-versions uses: actions/github-script@v6 with: script: | const { getPreviousTwoVersions } = require('./script/wordpress'); const versions = await getPreviousTwoVersions(); console.log(versions); core.setOutput('versions', versions); test-wp-versions: name: Test against ${{ matrix.version.description }} (${{ matrix.version.number }}) runs-on: ubuntu-20.04 needs: [get-wp-versions] strategy: fail-fast: false matrix: ${{ fromJSON(needs.get-wp-versions.outputs.matrix) }} env: API_ALLURE_REPORT_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/e2e-pw/test-results/api/allure-report API_ALLURE_RESULTS_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/e2e-pw/test-results/api/allure-results API_WP_LATEST_X_ARTIFACT: api-${{ matrix.version.env_description }}--run-${{ github.run_number }} E2E_ALLURE_REPORT_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/e2e-pw/test-results/e2e/allure-report E2E_ALLURE_RESULTS_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/e2e-pw/test-results/e2e/allure-results E2E_WP_LATEST_X_ARTIFACT: e2e-${{ matrix.version.env_description }}--run-${{ github.run_number }} permissions: contents: read steps: - name: Checkout WooCommerce repo uses: actions/checkout@v3 - name: Setup WooCommerce Monorepo uses: ./.github/actions/setup-woocommerce-monorepo - name: Launch WP Env working-directory: plugins/woocommerce run: pnpm run env:test - name: Download release zip env: GH_TOKEN: ${{ secrets.E2E_GH_TOKEN }} run: gh release download ${{ needs.get-wp-versions.outputs.tag }} --dir tmp - name: Replace `plugins/woocommerce` with unzipped woocommerce release build run: unzip -d plugins -o tmp/woocommerce.zip - name: Downgrade WordPress version to ${{ matrix.version.number }} working-directory: plugins/woocommerce run: | pnpm exec wp-env run tests-cli "wp core update --version=${{ matrix.version.number }} --force" pnpm exec wp-env run tests-cli "wp core update-db" - name: Verify environment details working-directory: plugins/woocommerce run: | pnpm exec wp-env run tests-cli "wp core version" pnpm exec wp-env run tests-cli "wp plugin list" pnpm exec wp-env run tests-cli "wp theme list" pnpm exec wp-env run tests-cli "wp user list" - name: Run API tests id: run-api-composite-action uses: ./.github/actions/tests/run-api-tests with: report-name: ${{ env.API_WP_LATEST_X_ARTIFACT }} env: ALLURE_RESULTS_DIR: ${{ env.API_ALLURE_RESULTS_DIR }} ALLURE_REPORT_DIR: ${{ env.API_ALLURE_REPORT_DIR }} - name: Upload Allure files to bucket if: success() || ( failure() && steps.run-api-composite-action.conclusion == 'failure' ) uses: ./.github/actions/tests/upload-allure-files-to-bucket env: ALLURE_RESULTS_DIR: ${{ env.API_ALLURE_RESULTS_DIR }} ALLURE_REPORT_DIR: ${{ env.API_ALLURE_REPORT_DIR }} with: aws-access-key-id: ${{ secrets.REPORTS_AWS_ACCESS_KEY_ID }} aws-region: ${{ secrets.REPORTS_AWS_REGION }} aws-secret-access-key: ${{ secrets.REPORTS_AWS_SECRET_ACCESS_KEY }} destination-dir: ${{ env.API_WP_LATEST_X_ARTIFACT }} s3-bucket: ${{ secrets.REPORTS_BUCKET }} - name: Publish API Allure report if: success() || ( failure() && steps.run-api-composite-action.conclusion == 'failure' ) env: GITHUB_TOKEN: ${{ secrets.REPORTS_TOKEN }} ENV_DESCRIPTION: ${{ matrix.version.env_description }} run: | gh workflow run publish-test-reports-release.yml \ -f created_at="${{ needs.get-wp-versions.outputs.created }}" \ -f run_id=${{ github.run_id }} \ -f run_number=${{ github.run_number }} \ -f release_tag=${{ needs.get-wp-versions.outputs.tag }} \ -f artifact="${{ env.API_WP_LATEST_X_ARTIFACT }}" \ -f env_description="${{ env.ENV_DESCRIPTION }}" \ -f test_type="api" \ --repo woocommerce/woocommerce-test-reports - name: Run E2E tests id: run-e2e-composite-action timeout-minutes: 60 uses: ./.github/actions/tests/run-e2e-tests env: E2E_MAX_FAILURES: 15 ALLURE_RESULTS_DIR: ${{ env.E2E_ALLURE_RESULTS_DIR }} ALLURE_REPORT_DIR: ${{ env.E2E_ALLURE_REPORT_DIR }} DEFAULT_TIMEOUT_OVERRIDE: 120000 with: report-name: ${{ env.E2E_WP_LATEST_X_ARTIFACT }} tests: basic.spec.js # mytodo remove this later - name: Upload Allure files to bucket if: success() || ( failure() && steps.run-e2e-composite-action.conclusion == 'failure' ) uses: ./.github/actions/tests/upload-allure-files-to-bucket env: ALLURE_RESULTS_DIR: ${{ env.E2E_ALLURE_RESULTS_DIR }} ALLURE_REPORT_DIR: ${{ env.E2E_ALLURE_REPORT_DIR }} with: aws-access-key-id: ${{ secrets.REPORTS_AWS_ACCESS_KEY_ID }} aws-region: ${{ secrets.REPORTS_AWS_REGION }} aws-secret-access-key: ${{ secrets.REPORTS_AWS_SECRET_ACCESS_KEY }} destination-dir: ${{ env.E2E_WP_LATEST_X_ARTIFACT }} s3-bucket: ${{ secrets.REPORTS_BUCKET }} - name: Publish E2E Allure report if: success() || ( failure() && steps.run-e2e-composite-action.conclusion == 'failure' ) env: GITHUB_TOKEN: ${{ secrets.REPORTS_TOKEN }} ENV_DESCRIPTION: ${{ matrix.version.env_description }} run: | gh workflow run publish-test-reports-release.yml \ -f created_at="${{ needs.get-wp-versions.outputs.created }}" \ -f run_id=${{ github.run_id }} \ -f run_number=${{ github.run_number }} \ -f release_tag=${{ needs.get-wp-versions.outputs.tag }} \ -f artifact="${{ env.E2E_WP_LATEST_X_ARTIFACT }}" \ -f env_description="${{ env.ENV_DESCRIPTION }}" \ -f test_type="e2e" \ --repo woocommerce/woocommerce-test-reports test-php-versions: name: Test against PHP ${{ matrix.php_version }} runs-on: ubuntu-20.04 needs: [get-tag] strategy: fail-fast: false matrix: php_version: ['7.4', '8.1'] env: API_ALLURE_REPORT_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/api-core-tests/test-results/allure-report API_ALLURE_RESULTS_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/api-core-tests/test-results/allure-results API_ARTIFACT: api-php-${{ matrix.php_version }}--run-${{ github.run_number }} E2E_ALLURE_REPORT_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/e2e-pw/test-results/allure-report E2E_ALLURE_RESULTS_DIR: ${{ github.workspace }}/plugins/woocommerce/tests/e2e-pw/test-results/allure-results E2E_ARTIFACT: e2e-php-${{ matrix.php_version }}--run-${{ github.run_number }} steps: - name: Checkout uses: actions/checkout@v3 - name: Setup WooCommerce Monorepo uses: ./.github/actions/setup-woocommerce-monorepo - name: Launch WP Env working-directory: plugins/woocommerce env: WP_ENV_PHP_VERSION: ${{ matrix.php_version }} run: pnpm run env:test - name: Verify PHP version working-directory: .github/workflows/scripts env: EXPECTED_PHP_VERSION: ${{ matrix.php_version }} run: bash verify-php-version.sh - name: Download release zip env: GH_TOKEN: ${{ secrets.E2E_GH_TOKEN }} run: gh release download ${{ needs.get-tag.outputs.tag }} --dir tmp - name: Replace `plugins/woocommerce` with unzipped woocommerce release build run: unzip -d plugins -o tmp/woocommerce.zip - name: Run API tests id: run-api-composite-action uses: ./.github/actions/tests/run-api-tests with: report-name: ${{ env.API_ARTIFACT }} env: ALLURE_RESULTS_DIR: ${{ env.API_ALLURE_RESULTS_DIR }} ALLURE_REPORT_DIR: ${{ env.API_ALLURE_REPORT_DIR }} - name: Upload Allure files to bucket if: success() || ( failure() && steps.run-api-composite-action.conclusion == 'failure' ) uses: ./.github/actions/tests/upload-allure-files-to-bucket env: ALLURE_RESULTS_DIR: ${{ env.API_ALLURE_RESULTS_DIR }} ALLURE_REPORT_DIR: ${{ env.API_ALLURE_REPORT_DIR }} with: aws-access-key-id: ${{ secrets.REPORTS_AWS_ACCESS_KEY_ID }} aws-region: ${{ secrets.REPORTS_AWS_REGION }} aws-secret-access-key: ${{ secrets.REPORTS_AWS_SECRET_ACCESS_KEY }} destination-dir: ${{ env.API_ARTIFACT }} s3-bucket: ${{ secrets.REPORTS_BUCKET }} - name: Publish API Allure report if: success() || ( failure() && steps.run-api-composite-action.conclusion == 'failure' ) env: GITHUB_TOKEN: ${{ secrets.REPORTS_TOKEN }} ENV_DESCRIPTION: php-${{ matrix.php_version }} run: | gh workflow run publish-test-reports-release.yml \ -f created_at="${{ needs.get-tag.outputs.created }}" \ -f run_id=${{ github.run_id }} \ -f run_number=${{ github.run_number }} \ -f release_tag=${{ needs.get-tag.outputs.tag }} \ -f artifact="${{ env.API_ARTIFACT }}" \ -f env_description="${{ env.ENV_DESCRIPTION }}" \ -f test_type="api" \ --repo woocommerce/woocommerce-test-reports - name: Run E2E tests id: run-e2e-composite-action timeout-minutes: 60 uses: ./.github/actions/tests/run-e2e-tests env: ALLURE_RESULTS_DIR: ${{ env.E2E_ALLURE_RESULTS_DIR }} ALLURE_REPORT_DIR: ${{ env.E2E_ALLURE_REPORT_DIR }} DEFAULT_TIMEOUT_OVERRIDE: 120000 E2E_MAX_FAILURES: 15 with: report-name: ${{ env.E2E_ARTIFACT }} tests: basic.spec.js # mytodo remove this later - name: Upload Allure files to bucket if: success() || ( failure() && steps.run-e2e-composite-action.conclusion == 'failure' ) uses: ./.github/actions/tests/upload-allure-files-to-bucket env: ALLURE_RESULTS_DIR: ${{ env.E2E_ALLURE_RESULTS_DIR }} ALLURE_REPORT_DIR: ${{ env.E2E_ALLURE_REPORT_DIR }} with: aws-access-key-id: ${{ secrets.REPORTS_AWS_ACCESS_KEY_ID }} aws-region: ${{ secrets.REPORTS_AWS_REGION }} aws-secret-access-key: ${{ secrets.REPORTS_AWS_SECRET_ACCESS_KEY }} destination-dir: ${{ env.E2E_ARTIFACT }} s3-bucket: ${{ secrets.REPORTS_BUCKET }} - name: Publish E2E Allure report if: success() || ( failure() && steps.run-e2e-composite-action.conclusion == 'failure' ) env: GITHUB_TOKEN: ${{ secrets.REPORTS_TOKEN }} ENV_DESCRIPTION: php-${{ matrix.php_version }} run: | gh workflow run publish-test-reports-release.yml \ -f created_at="${{ needs.get-tag.outputs.created }}" \ -f run_id=${{ github.run_id }} \ -f run_number=${{ github.run_number }} \ -f release_tag=${{ needs.get-tag.outputs.tag }} \ -f artifact="${{ env.E2E_ARTIFACT }}" \ -f env_description="${{ env.ENV_DESCRIPTION }}" \ -f test_type="e2e" \ --repo woocommerce/woocommerce-test-reports