mirror of
https://github.com/appium/appium.git
synced 2026-01-01 07:40:24 -06:00
200 lines
5.9 KiB
YAML
200 lines
5.9 KiB
YAML
name: Appium Build
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
# this list of paths could potentially impact the build
|
|
paths:
|
|
- '**/tsconfig*.json'
|
|
- 'packages/base-driver/static/**/*'
|
|
- 'packages/*/test/**'
|
|
- 'packages/*/bin'
|
|
- 'packages/**/*.ts'
|
|
- 'packages/**/*.json'
|
|
- 'packages/**/*.js'
|
|
- 'package*.json'
|
|
- 'lerna.json'
|
|
- '.npmrc'
|
|
- '.mocharc.js'
|
|
- '.github/workflows/build.yml' # this file
|
|
- '.eslintrc'
|
|
- '.eslintignore'
|
|
- '!**/sample-code/**'
|
|
- '!packages/*/docs/**'
|
|
pull_request:
|
|
branches:
|
|
- master
|
|
paths:
|
|
- '**/tsconfig*.json'
|
|
- 'packages/base-driver/static/**/*'
|
|
- 'packages/*/test/**'
|
|
- 'packages/*/bin'
|
|
- 'packages/**/*.ts'
|
|
- 'packages/**/*.json'
|
|
- 'packages/**/*.js'
|
|
- 'package*.json'
|
|
- 'lerna.json'
|
|
- '.npmrc'
|
|
- '.mocharc.js'
|
|
- '.github/workflows/build.yml' # this file
|
|
- '.eslintrc'
|
|
- '.eslintignore'
|
|
- '!**/sample-code/**'
|
|
- '!packages/*/docs/**'
|
|
|
|
env:
|
|
CI: true
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
|
|
jobs:
|
|
prepare_matrix:
|
|
uses: appium/appium-workflows/.github/workflows/node-lts-matrix.yml@main
|
|
|
|
prepare_e2e_packages:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
packages: ${{ steps.discover-packages.outputs.packages }}
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Discover packages with e2e tests
|
|
id: discover-packages
|
|
run: |
|
|
packages=()
|
|
for package_dir in packages/*/; do
|
|
package_json="${package_dir}package.json"
|
|
if [[ -f "$package_json" ]]; then
|
|
# Check if package.json has test:e2e script and it's not a no-op
|
|
has_e2e=$(node -e "
|
|
try {
|
|
const pkg = require('./$package_json');
|
|
const script = pkg.scripts && pkg.scripts['test:e2e'];
|
|
if (script && !script.includes('echo') && !script.includes('No e2e tests')) {
|
|
console.log('true');
|
|
}
|
|
} catch(e) {
|
|
// Ignore errors
|
|
}
|
|
")
|
|
if [[ "$has_e2e" == "true" ]]; then
|
|
# Use the directory path without packages/ prefix (remove trailing slash)
|
|
package_name="${package_dir%/}"
|
|
package_name="${package_name#packages/}"
|
|
packages+=("$package_name")
|
|
fi
|
|
fi
|
|
done
|
|
# Convert array to JSON array for GitHub Actions matrix
|
|
if [[ ${#packages[@]} -eq 0 ]]; then
|
|
echo "No packages with e2e tests found"
|
|
packages_json="[]"
|
|
else
|
|
# Use jq to create a compact single-line JSON array
|
|
packages_json=$(printf '%s\n' "${packages[@]}" | jq -R '.' | jq -s '.' | jq -c '.')
|
|
fi
|
|
echo "packages=$packages_json" >> $GITHUB_OUTPUT
|
|
echo "Found packages with e2e tests:"
|
|
echo "$packages_json" | jq -r '.[]' | sed 's/^/ - /'
|
|
|
|
test-smoke:
|
|
needs:
|
|
- prepare_matrix
|
|
name: Smoke Tests
|
|
strategy:
|
|
matrix:
|
|
node-version: ${{ fromJSON(needs.prepare_matrix.outputs.versions) }}
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Setup, install and build
|
|
uses: ./.github/actions/setup-build
|
|
with:
|
|
node-version: ${{ matrix.node-version }}
|
|
install-command: npm ci --foreground-scripts
|
|
run-build: 'true'
|
|
- name: Run smoke tests
|
|
run: npm run test:smoke
|
|
|
|
test-unit:
|
|
needs:
|
|
- prepare_matrix
|
|
name: Unit Tests
|
|
strategy:
|
|
matrix:
|
|
node-version: ${{ fromJSON(needs.prepare_matrix.outputs.versions) }}
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Setup, install and build
|
|
uses: ./.github/actions/setup-build
|
|
with:
|
|
node-version: ${{ matrix.node-version }}
|
|
install-command: npm ci --foreground-scripts
|
|
run-build: 'true'
|
|
- name: Run unit tests
|
|
run: npm run test:unit
|
|
|
|
test-types:
|
|
needs:
|
|
- prepare_matrix
|
|
name: Type Tests
|
|
strategy:
|
|
matrix:
|
|
node-version: ${{ fromJSON(needs.prepare_matrix.outputs.versions) }}
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Setup, install and build
|
|
uses: ./.github/actions/setup-build
|
|
with:
|
|
node-version: ${{ matrix.node-version }}
|
|
install-command: npm ci --foreground-scripts
|
|
run-build: 'true'
|
|
- name: Run type tests
|
|
run: npm run test:types
|
|
|
|
test-e2e:
|
|
needs:
|
|
- prepare_matrix
|
|
- prepare_e2e_packages
|
|
name: E2E Tests - ${{ matrix.package_dir }} (Node ${{ matrix.node-version }})
|
|
if: ${{ github.event_name == 'pull_request' }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
node-version: ${{ fromJSON(needs.prepare_matrix.outputs.versions) }}
|
|
package_dir: ${{ fromJSON(needs.prepare_e2e_packages.outputs.packages) }}
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Setup, install and build
|
|
uses: ./.github/actions/setup-build
|
|
with:
|
|
node-version: ${{ matrix.node-version }}
|
|
install-command: npm ci --foreground-scripts
|
|
run-build: 'true'
|
|
- name: Run E2E tests for ${{ matrix.package_dir }}
|
|
run: |
|
|
set -o pipefail
|
|
cd "packages/${{ matrix.package_dir }}"
|
|
npm run test:e2e
|
|
|
|
lint:
|
|
name: Lint
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Setup and install (no build)
|
|
uses: ./.github/actions/setup-build
|
|
with:
|
|
node-version: lts/*
|
|
install-command: npm ci
|
|
run-build: 'false'
|
|
- name: ESLint
|
|
run: npm run lint:ci
|