diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 5eb2b8226..338710661 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -28,9 +28,6 @@ jobs: npm run lint npm test - - name: Prepare test fixture - run: cp -a ./test-fixture/* ./ - - name: Java 13 uses: actions/setup-java@v1 with: @@ -45,6 +42,7 @@ jobs: profile: Nexus 6 emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -camera-back none disable-animations: true + working-directory: ./test-fixture/ script: | echo $GITHUB_REPOSITORY ./gradlew help diff --git a/CHANGELOG.md b/CHANGELOG.md index fec4d9d0d..20bd80afd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +## v2.4.0 + +* Added support for setting custom `working-directory` - e.g. `./android` if your root Gradle project is under the `./android` sub-directory within your repository. + ## v2.3.2 * Fixed an issue where environment variables are escaped in script. diff --git a/README.md b/README.md index 17c75b778..019dc7682 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,7 @@ jobs: | `emulator-options` | Optional | See below | Command-line options used when launching the emulator (replacing all default options) - e.g. `-no-window -no-snapshot -camera-back emulated`. | | `disable-animations` | Optional | `true` | Whether to disable animations - `true` or `false`. | | `emulator-build` | Optional | N/A | Build number of a specific version of the emulator binary to use e.g. `6061023` for emulator v29.3.0.0. | +| `working-directory` | Optional | `./` | A custom working directory - e.g. `./android` if your root Gradle project is under the `./android` sub-directory within your repository. | | `script` | Required | N/A | Custom script to run - e.g. to run Android instrumented tests on the emulator: `./gradlew connectedCheck` | Default `emulator-options`: `-no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim`. diff --git a/lib/main.js b/lib/main.js index 78d800669..ff851be1e 100644 --- a/lib/main.js +++ b/lib/main.js @@ -60,6 +60,12 @@ function run() { console.log(`using emulator build: ${emulatorBuildInput}`); } const emulatorBuild = !emulatorBuildInput ? undefined : emulatorBuildInput; + // custom working directory + const workingDirectoryInput = core.getInput('working-directory'); + if (workingDirectoryInput) { + console.log(`custom working directory: ${workingDirectoryInput}`); + } + const workingDirectory = !workingDirectoryInput ? undefined : workingDirectoryInput; // custom script to run const scriptInput = core.getInput('script', { required: true }); const scripts = script_parser_1.parseScript(scriptInput); @@ -83,6 +89,10 @@ function run() { java_version_manager_1.setJavaHome(defaultJavaHome); // execute the custom script try { + // move to custom working directory if set + if (workingDirectory) { + process.chdir(workingDirectory); + } for (const script of scripts) { yield exec.exec(`sh -c \\"${script}"`); } diff --git a/lib/sdk-installer.js b/lib/sdk-installer.js index ea6859256..ab03a0c76 100644 --- a/lib/sdk-installer.js +++ b/lib/sdk-installer.js @@ -23,9 +23,9 @@ const BUILD_TOOLS_VERSION = '29.0.3'; */ function installAndroidSdk(apiLevel, target, arch, emulatorBuild) { return __awaiter(this, void 0, void 0, function* () { - const sdkmangerPath = `${process.env.ANDROID_HOME}/tools/bin/sdkmanager`; + const sdkmanagerPath = `${process.env.ANDROID_HOME}/tools/bin/sdkmanager`; console.log('Installing latest build tools, platform tools, and platform.'); - yield exec.exec(`sh -c \\"${sdkmangerPath} --install 'build-tools;${BUILD_TOOLS_VERSION}' platform-tools 'platforms;android-${apiLevel}' > /dev/null"`); + yield exec.exec(`sh -c \\"${sdkmanagerPath} --install 'build-tools;${BUILD_TOOLS_VERSION}' platform-tools 'platforms;android-${apiLevel}' > /dev/null"`); if (emulatorBuild) { console.log(`Installing emulator build ${emulatorBuild}.`); yield exec.exec(`curl -fo emulator.zip https://dl.google.com/android/repository/emulator-darwin-${emulatorBuild}.zip`); @@ -35,10 +35,10 @@ function installAndroidSdk(apiLevel, target, arch, emulatorBuild) { } else { console.log('Installing latest emulator.'); - yield exec.exec(`sh -c \\"${sdkmangerPath} --install emulator > /dev/null"`); + yield exec.exec(`sh -c \\"${sdkmanagerPath} --install emulator > /dev/null"`); } console.log('Installing system images.'); - yield exec.exec(`sh -c \\"${sdkmangerPath} --install 'system-images;android-${apiLevel};${target};${arch}' > /dev/null"`); + yield exec.exec(`sh -c \\"${sdkmanagerPath} --install 'system-images;android-${apiLevel};${target};${arch}' > /dev/null"`); }); } exports.installAndroidSdk = installAndroidSdk; diff --git a/src/main.ts b/src/main.ts index 074616aad..d20255c09 100644 --- a/src/main.ts +++ b/src/main.ts @@ -51,6 +51,13 @@ async function run() { } const emulatorBuild = !emulatorBuildInput ? undefined : emulatorBuildInput; + // custom working directory + const workingDirectoryInput = core.getInput('working-directory'); + if (workingDirectoryInput) { + console.log(`custom working directory: ${workingDirectoryInput}`); + } + const workingDirectory = !workingDirectoryInput ? undefined : workingDirectoryInput; + // custom script to run const scriptInput = core.getInput('script', { required: true }); const scripts = parseScript(scriptInput); @@ -78,6 +85,10 @@ async function run() { // execute the custom script try { + // move to custom working directory if set + if (workingDirectory) { + process.chdir(workingDirectory); + } for (const script of scripts) { await exec.exec(`sh -c \\"${script}"`); } diff --git a/src/sdk-installer.ts b/src/sdk-installer.ts index 8a22589e6..f182ea24c 100644 --- a/src/sdk-installer.ts +++ b/src/sdk-installer.ts @@ -7,9 +7,9 @@ const BUILD_TOOLS_VERSION = '29.0.3'; * and the system image for the chosen API level, CPU arch, and target. */ export async function installAndroidSdk(apiLevel: number, target: string, arch: string, emulatorBuild?: string): Promise { - const sdkmangerPath = `${process.env.ANDROID_HOME}/tools/bin/sdkmanager`; + const sdkmanagerPath = `${process.env.ANDROID_HOME}/tools/bin/sdkmanager`; console.log('Installing latest build tools, platform tools, and platform.'); - await exec.exec(`sh -c \\"${sdkmangerPath} --install 'build-tools;${BUILD_TOOLS_VERSION}' platform-tools 'platforms;android-${apiLevel}' > /dev/null"`); + await exec.exec(`sh -c \\"${sdkmanagerPath} --install 'build-tools;${BUILD_TOOLS_VERSION}' platform-tools 'platforms;android-${apiLevel}' > /dev/null"`); if (emulatorBuild) { console.log(`Installing emulator build ${emulatorBuild}.`); await exec.exec(`curl -fo emulator.zip https://dl.google.com/android/repository/emulator-darwin-${emulatorBuild}.zip`); @@ -18,8 +18,8 @@ export async function installAndroidSdk(apiLevel: number, target: string, arch: await exec.exec(`rm -f emulator.zip`); } else { console.log('Installing latest emulator.'); - await exec.exec(`sh -c \\"${sdkmangerPath} --install emulator > /dev/null"`); + await exec.exec(`sh -c \\"${sdkmanagerPath} --install emulator > /dev/null"`); } console.log('Installing system images.'); - await exec.exec(`sh -c \\"${sdkmangerPath} --install 'system-images;android-${apiLevel};${target};${arch}' > /dev/null"`); + await exec.exec(`sh -c \\"${sdkmanagerPath} --install 'system-images;android-${apiLevel};${target};${arch}' > /dev/null"`); }