Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
6470a3b
Add Maestro smoke test tooling foundation
JorgeMucientes Jul 4, 2026
70d4c0b
Fix recovery-count false positives and forward referenced STRING_ var…
JorgeMucientes Jul 4, 2026
edfcc3f
Seed processing-order fixtures for the mark-complete flow
JorgeMucientes Jul 4, 2026
015e778
Remove duplicate Maestro JN env block
JorgeMucientes Jul 7, 2026
fcfd466
Clarify Maestro credential env names
JorgeMucientes Jul 8, 2026
8476a88
Require seeding for fixture-backed Maestro flows
JorgeMucientes Jul 8, 2026
ccd204f
Revert "Require seeding for fixture-backed Maestro flows"
JorgeMucientes Jul 8, 2026
5bcd8c1
Collapse system UI before Maestro attempts
JorgeMucientes Jul 8, 2026
3c19487
Add Maestro runner profiles and rerun support
JorgeMucientes Jul 8, 2026
47992ba
Add Maestro env file linter
JorgeMucientes Jul 8, 2026
c709510
Add Maestro smoke doctor command
JorgeMucientes Jul 8, 2026
06187af
Add copy commands to Maestro report
JorgeMucientes Jul 8, 2026
467e47f
Ignore local environment files
JorgeMucientes Jul 10, 2026
9a075fd
Add core Maestro smoke flows
JorgeMucientes Jul 4, 2026
8a679ae
Use explicit Maestro login env names
JorgeMucientes Jul 8, 2026
2b7b83a
Paste login values in Maestro flows
JorgeMucientes Jul 8, 2026
a286a7d
Stabilize no-Jetpack login assertion
JorgeMucientes Jul 8, 2026
ed74225
Require the non-Woo login error
JorgeMucientes Jul 13, 2026
c7c87e4
Require dashboard range switching
JorgeMucientes Jul 13, 2026
c2c728c
Stop claiming scroll-only order pagination
JorgeMucientes Jul 13, 2026
36a4e7e
Verify opposing product sort orders
JorgeMucientes Jul 13, 2026
413393c
Remove pagination probes from Maestro flows
JorgeMucientes Jul 13, 2026
53cfe21
Use direct text input in Maestro login flows
JorgeMucientes Jul 14, 2026
3e6c18e
Use dedicated credentials for non-Woo login
JorgeMucientes Jul 14, 2026
e3ec132
Support site credentials for non-Woo login
JorgeMucientes Jul 14, 2026
acd8370
Make non-Woo WP.com credentials optional
JorgeMucientes Jul 14, 2026
4dade5c
Validate Google OAuth setup for Maestro login
JorgeMucientes Jul 14, 2026
7f608c7
Add extended store Maestro smoke flows
JorgeMucientes Jul 4, 2026
188422f
Target seeded variable product in Maestro flow
JorgeMucientes Jul 8, 2026
f2ec306
Scroll before asserting settings experiment row
JorgeMucientes Jul 8, 2026
e4260a9
Update payments hub card-reader assertion
JorgeMucientes Jul 8, 2026
776ebcc
Handle Blaze menu entry absence in smoke flow
JorgeMucientes Jul 8, 2026
391b07c
Handle empty variation products in Maestro flow
JorgeMucientes Jul 8, 2026
ce0fd78
Require a real variable-product fixture
JorgeMucientes Jul 13, 2026
b04adc6
Stop claiming unverified product details
JorgeMucientes Jul 13, 2026
52c01b1
Require the store picker smoke check
JorgeMucientes Jul 13, 2026
b741a87
Mark feature-gated marketing checks as probes
JorgeMucientes Jul 13, 2026
7b9ea3b
Stop claiming dashboard reorder coverage
JorgeMucientes Jul 13, 2026
63c8186
Discover variable products from the product list
JorgeMucientes Jul 13, 2026
5a982d3
Fix the Maestro store switcher tap target
JorgeMucientes Jul 13, 2026
7e5ac84
Expose stable selectors for store smoke flows
JorgeMucientes Jul 15, 2026
6fe279f
Verify all dashboard card customization
JorgeMucientes Jul 15, 2026
0481f63
Verify switching to another Woo store
JorgeMucientes Jul 15, 2026
7024f6f
Add destructive order and product smoke flows
JorgeMucientes Jul 4, 2026
fb4ef81
Target seeded fixtures by run-id query instead of first-row taps in d…
JorgeMucientes Jul 4, 2026
fb69fbf
Scroll directly to order product row
JorgeMucientes Jul 8, 2026
bc11176
Wait for refund target before fallback
JorgeMucientes Jul 8, 2026
162a8ff
Target seeded product for media upload
JorgeMucientes Jul 8, 2026
8c3a381
Create cash-payment order in Maestro flow
JorgeMucientes Jul 8, 2026
bf4b63f
Create mark-complete order in Maestro flow
JorgeMucientes Jul 8, 2026
38a113f
Use run-created product for media upload flow
JorgeMucientes Jul 8, 2026
ed2d6b4
Exercise the full variable-order flow
JorgeMucientes Jul 13, 2026
c147a60
Open the order receipt in smoke coverage
JorgeMucientes Jul 13, 2026
30bb19d
Create a coupon in the smoke flow
JorgeMucientes Jul 13, 2026
34c20e3
Discover variable products during order creation
JorgeMucientes Jul 13, 2026
4e7f6a5
Discover existing customers during order creation
JorgeMucientes Jul 13, 2026
1361bd0
Prove existing-customer edits stay order-local
JorgeMucientes Jul 13, 2026
50a698a
Use an available product in customer smoke coverage
JorgeMucientes Jul 13, 2026
c3ac697
Keep order actions above the totals panel
JorgeMucientes Jul 13, 2026
fa57044
Use direct text input in destructive Maestro flows
JorgeMucientes Jul 14, 2026
5801b05
Test variable product selection in order creation
JorgeMucientes Jul 14, 2026
842f481
Extend physical product smoke coverage
JorgeMucientes Jul 14, 2026
739faaf
Reduce product selector complexity
JorgeMucientes Jul 15, 2026
32ca4b5
Select multiple products in order smoke flow
JorgeMucientes Jul 15, 2026
8399258
Verify run-owned product details persist
JorgeMucientes Jul 15, 2026
61c0b2c
Add POS smoke flow selectors
JorgeMucientes Jul 4, 2026
e848065
Set coupon add-to-cart testTag inside clearAndSetSemantics so it surv…
JorgeMucientes Jul 4, 2026
51343b7
Make POS smoke checks deterministic
JorgeMucientes Jul 13, 2026
cdea592
Reject unsupported smoke coverage claims
JorgeMucientes Jul 13, 2026
194bf1e
Discover variable products in POS flows
JorgeMucientes Jul 13, 2026
d77a200
Mark unsupported Maestro checks as manual
JorgeMucientes Jul 13, 2026
22ae40e
Use direct text input in POS Maestro search
JorgeMucientes Jul 14, 2026
bcf5671
Promote dashboard customization smoke coverage
JorgeMucientes Jul 15, 2026
30cdb9f
Promote run-owned product smoke coverage
JorgeMucientes Jul 15, 2026
8201fde
Merge pull request #16196 from woocommerce/feature/maestro-smoke-foun…
JorgeMucientes Aug 6, 2026
62f5325
Merge pull request #16197 from woocommerce/feature/maestro-smoke-core…
JorgeMucientes Aug 6, 2026
210fb34
Merge pull request #16198 from woocommerce/feature/maestro-smoke-stor…
JorgeMucientes Aug 6, 2026
9b5251b
Merge pull request #16199 from woocommerce/feature/maestro-smoke-dest…
JorgeMucientes Aug 6, 2026
324484d
Verify POS coupon cart semantics
JorgeMucientes Aug 6, 2026
782ba37
Add scanner and payment system smoke flows
JorgeMucientes Jul 14, 2026
eaa2ee9
Add Android system-surface smoke profile
JorgeMucientes Jul 14, 2026
88cd7c5
Update smoke coverage for added flows
JorgeMucientes Jul 14, 2026
28f62c6
Wire Maestro smoke tests into Buildkite
JorgeMucientes Jul 4, 2026
7d93d13
Update Maestro Buildkite env names
JorgeMucientes Jul 8, 2026
5e314a4
Allow Buildkite Maestro exclude tags
JorgeMucientes Jul 8, 2026
5a7bcd3
Refresh Maestro coverage contract
JorgeMucientes Aug 5, 2026
3f1c8bb
Pin and verify the Maestro CI toolchain
JorgeMucientes Aug 5, 2026
a040717
Harden Maestro smoke execution and cleanup
JorgeMucientes Aug 5, 2026
7c64bc8
Publish trustworthy Maestro CI results
JorgeMucientes Aug 5, 2026
b3876ca
Refresh Maestro string environment
JorgeMucientes Aug 6, 2026
5655632
Exclude Maestro Python tests from Android test checker
JorgeMucientes Aug 6, 2026
5ac1fb0
Merge pull request #16200 from woocommerce/feature/maestro-smoke-pos-…
JorgeMucientes Aug 6, 2026
62f539c
Merge pull request #16256 from woocommerce/feature/maestro-smoke-syst…
JorgeMucientes Aug 6, 2026
2a3c599
Run scheduled Maestro jobs unconditionally
JorgeMucientes Aug 6, 2026
e78cd96
Merge pull request #16201 from woocommerce/feature/maestro-smoke-buil…
JorgeMucientes Aug 6, 2026
63e09e6
Document the Maestro system-surface tag
JorgeMucientes Aug 6, 2026
10143f4
Merge pull request #16372 from woocommerce/codex/maestro-plan-android…
JorgeMucientes Aug 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions .agents/skills/maestro-flow-doctor/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
name: maestro-flow-doctor
description: Repair a failing WooCommerce Android Maestro flow by reproducing it against the lab store, inspecting Maestro selectors, patching the smallest selector/wait/setup issue, and rerunning with repeat evidence. Human-triggered only.
allowed-tools: Bash, Read, Edit, Grep, Glob
user-invocable: true
---

# Maestro Flow Doctor

Use this skill only for repairing existing Maestro smoke flows under `.maestro/flows/`.

## Ground Rules

- Always run against the lab store: pass `--store lab`.
- Never run destructive repair loops against the shared store.
- Never ask the user to paste credentials. Validate that `.maestro/.env.local` has the required variable names without echoing values.
- Use Maestro MCP as the selector source of truth: `run` executes the YAML we ship, and `inspect_screen` shows the hierarchy Maestro selectors see.
- Keep fixes minimal: selector, wait, setup, or fixture query changes only. Do not broaden coverage while repairing a flake.
- Promotion still requires burst evidence; a local `--repeat` pass is repair evidence, not promotion.

## Workflow

1. Confirm the target flow path exists under `.maestro/flows/`.
2. Run syntax and coverage checks:
- `.maestro/scripts/check-smoke-coverage.py`
- `maestro test --dry-run <flow>` if supported by the installed Maestro version; otherwise continue with a real lab run.
3. Reproduce on a lab-store device:
- `.maestro/scripts/run-smoke-tests.sh --store lab --include-tags flaky_quarantine <flow>`
4. At the failure point, use Maestro MCP `inspect_screen`.
5. Compare the failing selector with the hierarchy:
- Prefer `id:` selectors exposed through `testTag`.
- Use generated `strings.env` values for text assertions.
- Do not add `point:` selectors unless the flow comment explains why no semantic selector exists.
6. Patch the smallest file set.
7. Rerun the single flow with repeat evidence:
- `.maestro/scripts/run-smoke-tests.sh --store lab --repeat 3 <flow>`
8. Summarize:
- root cause,
- files changed,
- repeat result,
- whether the flow remains quarantined.
113 changes: 113 additions & 0 deletions .agents/skills/smoke-tests/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
---
name: smoke-tests
description: Prepare the local environment for the Maestro smoke-test suite — verify tooling, select a device, collect the APK if needed, validate the .env file by variable name only, then hand the user the exact lab-store CLI command to run or run it on request.
allowed-tools: Bash, Read, Edit, Write, Grep, Glob, AskUserQuestion
user-invocable: true
---

# Prepare & launch the Maestro smoke-test suite

This skill is a **setup + handoff** flow. Its job is to get everything ready so `.maestro/scripts/run-smoke-tests.sh` will work on the first try, then give the user the CLI command.

It does NOT own the test-runner mechanics. Ordering, per-flow recording, report generation, and the "recordings are kept only for failures, outside the repo" contract all live in the script itself.

## Scope (what this skill is responsible for)

1. **Tooling** — confirm `maestro` and `adb` are on PATH. If not, tell the user how to install them and stop.
2. **Device** — confirm at least one Android device/emulator is attached (`adb devices`). If several are attached, choose the runner `--device` value with the user.
3. **APK** — ask whether to use the currently installed app or install an APK; install only if requested.
4. **`.env.local`** — confirm `.maestro/.env.local` exists and contains every variable the selected command references. List missing variable names only.
5. **Handoff** — print the exact CLI command. If the user explicitly asks ("run it", "go ahead", etc.), invoke the script for them and stream its output.

Everything below the handoff — P2 ordering, store selection, seed/cleanup, animation restore, lock handling, retry accounting, artifact policy, HTML + JUnit reports — is handled by `.maestro/scripts/run-smoke-tests.sh`.

## Steps

### 1. Check tooling

Run `command -v maestro` and `command -v adb`. If either is missing:

- maestro → `curl -fsSL "https://get.maestro.mobile.dev" | bash` (requires Java 17+).
- adb → install Android SDK platform-tools and add to PATH.

Tell the user which is missing and how to install it, then stop.

### 2. Ensure an emulator is running

Run `adb devices`. Count the lines whose second column is `device`.

- **0 devices:** list AVDs with `emulator -list-avds`.
- If none → tell the user to create one in Android Studio (AVD Manager) and stop.
- If exactly one → ask the user if they want to boot it, then `emulator -avd <name> -no-snapshot-save &` (backgrounded), `adb wait-for-device`, and poll `adb shell getprop sys.boot_completed` until `1` (up to ~90s).
- If multiple → ask which one to boot.
- **1+ devices:** proceed.

### 3. Ask whether to install an APK

Default to the currently installed app. Ask for an APK only when the user wants to test a specific build.

Prompt the user for one of:

- An absolute or repo-relative path to an `.apk` on disk.
- A drag-and-drop attachment (Claude Code exposes it as a temp path like `/tmp/.../file.apk`).
- The word `build` — in which case run `./gradlew :WooCommerce:assembleWasabiDebug` in the foreground and use `WooCommerce/build/outputs/apk/wasabi/debug/WooCommerce-wasabi-debug.apk`.

Validate the chosen APK:

- File exists on disk.
- Extension is `.apk`.
- `aapt dump badging <path> | head -1` reports `package: name='com.woocommerce.android.dev'` (the wasabi build). If it reports a different package, stop and ask the user whether to continue — a non-wasabi APK will fail the `appId` check on the first flow.

Install it: `adb install -r -g <apk-path>`. If the install fails with `INSTALL_FAILED_UPDATE_INCOMPATIBLE`, tell the user a previous build with a different signature is already installed and ask whether to uninstall first (`adb uninstall com.woocommerce.android.dev`). Do not uninstall without confirmation.

### 4. Validate `.maestro/.env.local`

For default lab-store runs, the core required vars are:

- `MAESTRO_WOO_LAB_STORE_URL`
- `MAESTRO_WOO_LAB_EMAIL`
- `MAESTRO_WOO_LAB_PASSWORD`
- `MAESTRO_WOO_LAB_CONSUMER_KEY`
- `MAESTRO_WOO_LAB_CONSUMER_SECRET`

Shared-store runs require the matching `MAESTRO_WOO_SHARED_*` variables and must be explicit with `--store shared`. Additional `MAESTRO_WOO_*` vars are required per-flow (for example `MAESTRO_WOO_NOT_A_WOO_STORE_URL` for `login_not_woo_store.yaml`, `MAESTRO_WOO_JN_*` for `login_no_jetpack.yaml`). The canonical list lives in `.maestro/env.example`.

To build the list of actually-referenced vars, grep flow YAMLs for `\${WOO_[A-Z_]+}` under `.maestro/flows/` and check each one resolves to a non-empty value in `.maestro/.env.local`.

If the file is missing or any required var is empty:

1. List the missing variable names and their purpose (mirror `.maestro/env.example`).
2. Ask the user to edit `.maestro/.env.local` directly.
3. Do NOT proceed until every referenced var resolves. Re-read the file after the user updates it.

Never commit `.env.local`. Never ask the user to paste secret values into chat. Never echo secret values back to the user.

### 5. Hand off the CLI command

Once steps 1–4 all pass, print the command the user should run:

```
.maestro/scripts/run-smoke-tests.sh --store lab
```

Tell the user:

- The default command runs `smoke_core` only and excludes `flaky_quarantine`.
- Use `--include-tags smoke_extended` or a single flow path for provisional repair work.
- Use `--store shared` only for non-destructive ad-hoc runs; destructive shared-store runs are CI-only under the store lock.
- The runner seeds fixtures, writes a manifest, and cleans exactly those IDs on exit.
- It captures and restores device animation settings.
- Screen recordings are kept only for failed lab-store flows; shared-store credential paths use screenshots only.
- Artifacts (recordings, logs, HTML + JUnit report) are written OUTSIDE the repo, under `$HOME/woocommerce-maestro-output/<timestamp>/` by default. Override with `--output-dir <path>` or the `WOO_MAESTRO_OUTPUT_DIR` env var.
- The HTML report auto-opens at the end on macOS, or can be opened manually from the path the script prints.

If the user asks to run it ("go ahead", "run it", "yes please", etc.), invoke the script yourself via `Bash` and stream its output. Pass `--apk` only if you installed an APK in step 3.

When the script exits, read the last line of its output (it prints `Report:` and `Result:` summary lines) and relay a one-line summary to the user plus the clickable `file://` path to the HTML report. If any flows failed, call out the first failing flow by name — it's usually the most actionable one.

## Notes

- The skill's job ends at handoff. Don't reinvent the test-runner behaviour here — if something about per-flow recording, ordering, or artifact location needs to change, change it in `.maestro/scripts/run-smoke-tests.sh`.
- `.env.local` is git-ignored. Never stage or commit it, even if the user asks you to save their credentials.
- Artifacts default to `$HOME/woocommerce-maestro-output/` (outside the repo) — the repo's `.gitignore` still excludes the legacy `.maestro/output/` path for safety.
- Do NOT parallelize. `adb shell screenrecord` only supports one invocation per device, and Maestro runs one flow at a time against a single emulator. The script runs sequentially by design.
93 changes: 93 additions & 0 deletions .buildkite/commands/run-maestro-tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
#!/bin/bash
set -euo pipefail

# Run the Maestro smoke suite through the repository runner.
#
# Expected CI secrets:
# MAESTRO_WOO_SHARED_JETPACK_STORE_URL
# MAESTRO_WOO_SHARED_WPCOM_EMAIL
# MAESTRO_WOO_SHARED_WPCOM_PASSWORD
# MAESTRO_WOO_SHARED_CONSUMER_KEY (when MAESTRO_SEED=true)
# MAESTRO_WOO_SHARED_CONSUMER_SECRET (when MAESTRO_SEED=true)
#
# Optional controls:
# MAESTRO_STORE=shared|lab
# MAESTRO_INCLUDE_TAGS=smoke_core,smoke_extended,destructive
# MAESTRO_EXCLUDE_TAGS=flaky_quarantine,pos_tablet
# MAESTRO_REPEAT=3
# MAESTRO_APK_PATH=/path/to/beta.apk
# MAESTRO_SEED=true

if [[ "${BUILDKITE_PULL_REQUEST:-false}" != "false" ]] &&
.buildkite/commands/should-skip-job.sh --job-type validation; then
echo "Skipping Maestro tests - no relevant changes"
exit 0
fi

source .maestro/scripts/configure-toolchain.sh

STORE="${MAESTRO_STORE:-shared}"
INCLUDE_TAGS="${MAESTRO_INCLUDE_TAGS:-smoke_core}"
REPEAT="${MAESTRO_REPEAT:-1}"
OUTPUT_DIR="${MAESTRO_OUTPUT_DIR:-WooCommerce/build/outputs/maestro-smoke}"
SEED_ARGS=()
EXCLUDE_TAGS_ARGS=()
if [[ "${MAESTRO_SEED:-false}" == "true" ]]; then
SEED_ARGS+=(--seed)
fi
if [[ -n "${MAESTRO_EXCLUDE_TAGS:-}" ]]; then
EXCLUDE_TAGS_ARGS+=(--exclude-tags "$MAESTRO_EXCLUDE_TAGS")
fi

if [[ -n "${MAESTRO_APK_PATH:-}" ]]; then
APK_PATH="$MAESTRO_APK_PATH"
else
echo "--- Building and installing wasabi debug APK"
"$(dirname "${BASH_SOURCE[0]}")/restore-cache.sh"
./gradlew :WooCommerce:installWasabiDebug
APK_PATH=""
fi

echo "--- Running Maestro smoke tests"
set +e
if [[ -n "$APK_PATH" ]]; then
.maestro/scripts/run-smoke-tests.sh \
--store "$STORE" \
--include-tags "$INCLUDE_TAGS" \
--repeat "$REPEAT" \
--output-dir "$OUTPUT_DIR" \
"${SEED_ARGS[@]}" \
"${EXCLUDE_TAGS_ARGS[@]}" \
--no-open \
--apk "$APK_PATH"
else
.maestro/scripts/run-smoke-tests.sh \
--store "$STORE" \
--include-tags "$INCLUDE_TAGS" \
--repeat "$REPEAT" \
--output-dir "$OUTPUT_DIR" \
"${SEED_ARGS[@]}" \
"${EXCLUDE_TAGS_ARGS[@]}" \
--no-open
fi
MAESTRO_EXIT_STATUS=$?
set -e

echo "--- Collecting Maestro results"
mkdir -p WooCommerce/build/buildkite-test-analytics
LATEST_REPORT_DIR="$(find "$OUTPUT_DIR" -mindepth 1 -maxdepth 1 -type d | sort | tail -n 1)"
if [[ -n "$LATEST_REPORT_DIR" && -f "$LATEST_REPORT_DIR/report.xml" ]]; then
cp "$LATEST_REPORT_DIR/report.xml" WooCommerce/build/buildkite-test-analytics/maestro-report.xml
fi
if [[ "${BUILDKITE:-false}" == "true" && -n "$LATEST_REPORT_DIR" && -f "$LATEST_REPORT_DIR/report.xml" ]]; then
python3 .maestro/scripts/annotate-run.py --junit "$LATEST_REPORT_DIR/report.xml" |
buildkite-agent annotate --context maestro-smoke --style info ||
echo "Warning: could not publish the Maestro Buildkite annotation." >&2
fi

if [[ "$MAESTRO_EXIT_STATUS" -ne 0 ]]; then
echo "^^^ +++"
echo "Maestro smoke tests were not clean. Check flaky/failure details in artifacts."
fi

exit "$MAESTRO_EXIT_STATUS"
18 changes: 18 additions & 0 deletions .buildkite/pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,24 @@ steps:
artifact_paths:
- "**/build/instrumented-tests/**/*"

- input: Run Maestro smoke tests?
prompt: "Run on-demand Maestro smoke tests. Requires MAESTRO_WOO_* secrets and an Android device/emulator."
key: maestro_smoke_tests_triggered

- label: ":maestro: Maestro smoke tests"
depends_on: maestro_smoke_tests_triggered
command: .buildkite/commands/run-maestro-tests.sh
concurrency: 1
concurrency_group: "woocommerce-android/maestro/shared-store"
plugins:
- $CI_TOOLKIT
- $TEST_COLLECTOR :
<<: *test_collector_common_params
api-token-env-name: "BUILDKITE_ANALYTICS_TOKEN_MAESTRO_TESTS"
artifact_paths:
- "WooCommerce/build/outputs/maestro-smoke/**/*"
- "WooCommerce/build/buildkite-test-analytics/maestro-report.xml"


- label: "🐘 Populate Gradle build cache"
command: .buildkite/commands/gradle-cache-build.sh
Expand Down
27 changes: 27 additions & 0 deletions .buildkite/release-pipelines/maestro-smoke.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/buildkite/pipeline-schema/main/schema.json
---

agents:
queue: "android"

env:
MAESTRO_STORE: "shared"
MAESTRO_INCLUDE_TAGS: "smoke_core,smoke_extended,destructive"
MAESTRO_EXCLUDE_TAGS: "flaky_quarantine,pos_tablet"
MAESTRO_REPEAT: "1"
MAESTRO_SEED: "true"

steps:
- label: ":maestro: Release Maestro smoke tests"
command: .buildkite/commands/run-maestro-tests.sh
concurrency: 1
concurrency_group: "woocommerce-android/maestro/shared-store"
plugins:
- $CI_TOOLKIT
- $TEST_COLLECTOR :
files: "WooCommerce/build/buildkite-test-analytics/*.xml"
format: "junit"
api-token-env-name: "BUILDKITE_ANALYTICS_TOKEN_MAESTRO_TESTS"
artifact_paths:
- "WooCommerce/build/outputs/maestro-smoke/**/*"
- "WooCommerce/build/buildkite-test-analytics/maestro-report.xml"
39 changes: 39 additions & 0 deletions .buildkite/schedules/maestro-smoke-burst.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/buildkite/pipeline-schema/main/schema.json
---

# Intended Buildkite schedule:
# Bi-weekly Thursday night before the Monday production rollout.
# Branch: active release branch.
#
# This is deliberately not a nightly pipeline.

agents:
queue: "android"

env:
MAESTRO_STORE: "shared"
MAESTRO_INCLUDE_TAGS: "smoke_core,smoke_extended,destructive"
MAESTRO_EXCLUDE_TAGS: "flaky_quarantine,pos_tablet"
MAESTRO_REPEAT: "3"
MAESTRO_SEED: "true"

steps:
- label: ":maestro: Thursday Maestro smoke burst"
command: .buildkite/commands/run-maestro-tests.sh
concurrency: 1
concurrency_group: "woocommerce-android/maestro/shared-store"
plugins:
- $CI_TOOLKIT
- $TEST_COLLECTOR :
files: "WooCommerce/build/buildkite-test-analytics/*.xml"
format: "junit"
api-token-env-name: "BUILDKITE_ANALYTICS_TOKEN_MAESTRO_TESTS"
artifact_paths:
- "WooCommerce/build/outputs/maestro-smoke/**/*"
- "WooCommerce/build/buildkite-test-analytics/maestro-report.xml"

notify:
- slack:
channels:
- "#woo-android-notifs"
if: "build.state != 'passed'"
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ local.properties

# Backup Files
*.bak
__pycache__/

# Android Studio Navigation editor temp files
.navigation/
Expand Down Expand Up @@ -129,3 +130,12 @@ google-upload-credentials.json

.grepai/
docs/superpowers

# Maestro smoke-test local files and artifacts.
.env.local
.maestro/output/
.maestro/tmp/
.maestro/report.xml
.maestro/*.maestro-screenshots/
*.maestro-screenshots/
report.xml
Loading
Loading