From ff311e8a7da8e66cf49afc07cdb5766b501215b9 Mon Sep 17 00:00:00 2001 From: Yang Chen Date: Sat, 15 Feb 2020 18:22:17 +1100 Subject: [PATCH] Add support for setting a custom working-directory. --- .github/workflows/workflow.yml | 4 +--- README.md | 1 + lib/main.js | 10 ++++++++++ lib/sdk-installer.js | 8 ++++---- src/main.ts | 11 +++++++++++ 5 files changed, 27 insertions(+), 7 deletions(-) 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/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}"`); }