name: Cordova HTTP Plugin CI on: push: workflow_dispatch: inputs: ci_reason: description: "Optional note for manual runs" required: false env: node_version: "22.x" java_distribution: "zulu" java_version: "17" gradle_version: "7.6.1" BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }} BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }} jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Install node.js uses: actions/setup-node@v4 with: node-version: ${{ env.node_version }} cache: npm cache-dependency-path: package-lock.json - name: Install node modules run: npm ci - name: Run ESLint run: npm run lint test-www-interface: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Install node.js uses: actions/setup-node@v4 with: node-version: ${{ env.node_version }} cache: npm cache-dependency-path: package-lock.json - name: Install node modules run: npm ci - name: Run WWW interface tests run: npm run test:js build-ios: runs-on: macOS-latest outputs: run-tests: ${{ steps.should-run-tests.outputs.run_tests }} steps: - uses: actions/checkout@v1 - name: Install node.js uses: actions/setup-node@v4 with: node-version: ${{ env.node_version }} cache: npm cache-dependency-path: package-lock.json - id: should-run-tests # need to find a solution for signing iOS App so we can build for device target instead simulator # for now we skip iOS tests on BrowserStack run: echo "run_tests=false" >> "$GITHUB_OUTPUT" - name: Install node modules run: npm ci - name: Update test cert for httpbin.org run: npm run update:cert - name: Build test app run: scripts/build-test-app.sh --ios --emulator - name: Upload artifact to BrowserStack if: steps.should-run-tests.outputs.run_tests == 'true' run: scripts/upload-browserstack.sh --ios test-ios: needs: build-ios if: needs.build-ios.outputs.run-tests == 'true' runs-on: macOS-latest steps: - uses: actions/checkout@v1 - name: Install node.js uses: actions/setup-node@v4 with: node-version: ${{ env.node_version }} cache: npm cache-dependency-path: package-lock.json - name: Install node modules run: npm ci - name: Run e2e tests (iOS) run: scripts/test-app.sh --ios --device build-android: runs-on: ubuntu-latest outputs: run-tests: ${{ steps.should-run-tests.outputs.run_tests }} steps: - uses: actions/checkout@v1 - name: Install node.js uses: actions/setup-node@v4 with: node-version: ${{ env.node_version }} cache: npm cache-dependency-path: package-lock.json - id: should-run-tests run: | if [ -n "${BROWSERSTACK_USERNAME}" ]; then echo "run_tests=true" >> "$GITHUB_OUTPUT" else echo "run_tests=false" >> "$GITHUB_OUTPUT" fi - name: Install node modules run: npm ci - name: Install JDK uses: actions/setup-java@v2 with: distribution: ${{ env.java_distribution }} java-version: ${{ env.java_version }} java-package: jdk - name: Ensure Android build-tools 33.0.2 run: yes | "${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager" "build-tools;33.0.2" - name: Install Gradle run: | set -euo pipefail curl -sSL "https://services.gradle.org/distributions/gradle-${{ env.gradle_version }}-bin.zip" -o gradle.zip unzip -q gradle.zip -d "$HOME/gradle" echo "$HOME/gradle/gradle-${{ env.gradle_version }}/bin" >> "$GITHUB_PATH" rm gradle.zip - name: Update test cert for httpbin.org run: npm run update:cert - name: Shim missing DX binaries (https://stackoverflow.com/a/68430992) run: | set -euo pipefail BUILD_TOOLS_PATH="$(ls -d $ANDROID_HOME/build-tools/*/ | sort -V | tail -n 1)" D8_BIN="${BUILD_TOOLS_PATH}d8" DX_BIN="${BUILD_TOOLS_PATH}dx" D8_JAR="${BUILD_TOOLS_PATH}lib/d8.jar" DX_JAR="${BUILD_TOOLS_PATH}lib/dx.jar" if [ -f "$D8_BIN" ] && [ ! -e "$DX_BIN" ]; then ln -s "$D8_BIN" "$DX_BIN" fi if [ -f "$D8_JAR" ] && [ ! -e "$DX_JAR" ]; then ln -s "$D8_JAR" "$DX_JAR" fi - name: Build test app run: scripts/build-test-app.sh --android --device - name: Upload artifact to BrowserStack if: steps.should-run-tests.outputs.run_tests == 'true' run: scripts/upload-browserstack.sh --android test-android: needs: build-android if: needs.build-android.outputs.run-tests == 'true' runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Install node.js uses: actions/setup-node@v4 with: node-version: ${{ env.node_version }} cache: npm cache-dependency-path: package-lock.json - name: Install node modules run: npm ci - name: Run e2e tests (Android) run: scripts/test-app.sh --android --device