Skip to content

Commit

Permalink
Merge pull request #306 from gradle/dd/user-home
Browse files Browse the repository at this point in the history
Use java to determine user.home dir
  • Loading branch information
bigdaz committed Jun 6, 2022
2 parents fd18826 + c34d4a9 commit 306a7e4
Show file tree
Hide file tree
Showing 9 changed files with 140 additions and 33 deletions.
5 changes: 5 additions & 0 deletions .github/workflows/ci-full-check.yml
Expand Up @@ -48,6 +48,11 @@ jobs:
with:
cache-key-prefix: ${{github.run_number}}-

restore-containerized-gradle-home:
uses: ./.github/workflows/integ-test-restore-containerized-gradle-home.yml
with:
cache-key-prefix: ${{github.run_number}}-

restore-gradle-home:
uses: ./.github/workflows/integ-test-restore-gradle-home.yml
with:
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/ci-quick-check.yml
Expand Up @@ -55,11 +55,16 @@ jobs:
runner-os: '["ubuntu-latest"]'
download-dist: true

restore-containerized-gradle-home:
needs: build-distribution
uses: ./.github/workflows/integ-test-restore-containerized-gradle-home.yml
with:
download-dist: true

restore-custom-gradle-home:
needs: build-distribution
uses: ./.github/workflows/integ-test-restore-custom-gradle-home.yml
with:
runner-os: '["ubuntu-latest"]'
download-dist: true

restore-gradle-home:
Expand Down
60 changes: 60 additions & 0 deletions .github/workflows/integ-test-restore-containerized-gradle-home.yml
@@ -0,0 +1,60 @@
name: Test restore custom Gradle Home

on:
workflow_call:
inputs:
cache-key-prefix:
type: string
download-dist:
type: boolean
default: false

env:
DOWNLOAD_DIST: ${{ inputs.download-dist }}
GRADLE_BUILD_ACTION_CACHE_KEY_PREFIX: restore-custom-gradle-home-${{ inputs.cache-key-prefix }}
GRADLE_BUILD_ACTION_CACHE_DEBUG_ENABLED: true

jobs:
seed-build:
runs-on: ubuntu-latest
container: fedora:latest
steps:
- name: Checkout sources
uses: actions/checkout@v3
- name: Download distribution if required
uses: ./.github/actions/download-dist
- name: Setup Java
uses: actions/setup-java@v3
with:
java-version: 11
distribution: temurin
- name: Setup Gradle
uses: ./
with:
cache-read-only: false # For testing, allow writing cache entries on non-default branches
- name: Build using Gradle wrapper
working-directory: .github/workflow-samples/groovy-dsl
run: ./gradlew test

# Test that the gradle-user-home cache will cache dependencies, by running build with --offline
dependencies-cache:
needs: seed-build
runs-on: ubuntu-latest
container: fedora:latest
steps:
- name: Checkout sources
uses: actions/checkout@v3
- name: Download distribution if required
uses: ./.github/actions/download-dist
- name: Setup Java
uses: actions/setup-java@v3
with:
java-version: 11
distribution: temurin
- name: Setup Gradle
uses: ./
with:
cache-read-only: true
- name: Execute Gradle build with --offline
working-directory: .github/workflow-samples/groovy-dsl
run: ./gradlew test --offline
18 changes: 3 additions & 15 deletions .github/workflows/integ-test-restore-custom-gradle-home.yml
Expand Up @@ -5,9 +5,6 @@ on:
inputs:
cache-key-prefix:
type: string
runner-os:
type: string
default: '["ubuntu-latest", "windows-latest", "macos-latest"]'
download-dist:
type: boolean
default: false
Expand All @@ -19,10 +16,7 @@ env:

jobs:
seed-build:
strategy:
matrix:
os: ${{fromJSON(inputs.runner-os)}}
runs-on: ${{ matrix.os }}
runs-on: ubuntu-latest
steps:
- name: Set Gradle User Home
run: |
Expand All @@ -43,10 +37,7 @@ jobs:
# Test that the gradle-user-home cache will cache dependencies, by running build with --offline
dependencies-cache:
needs: seed-build
strategy:
matrix:
os: ${{fromJSON(inputs.runner-os)}}
runs-on: ${{ matrix.os }}
runs-on: ubuntu-latest
steps:
- name: Set Gradle User Home
run: |
Expand All @@ -67,10 +58,7 @@ jobs:
# Test that the gradle-user-home cache will cache and restore local build-cache
build-cache:
needs: seed-build
strategy:
matrix:
os: ${{fromJSON(inputs.runner-os)}}
runs-on: ${{ matrix.os }}
runs-on: ubuntu-latest
steps:
- name: Set Gradle User Home
run: |
Expand Down
28 changes: 22 additions & 6 deletions dist/main/index.js
Expand Up @@ -66383,7 +66383,7 @@ const GRADLE_USER_HOME = 'GRADLE_USER_HOME';
const CACHE_LISTENER = 'CACHE_LISTENER';
function setup(buildRootDirectory) {
return __awaiter(this, void 0, void 0, function* () {
const gradleUserHome = determineGradleUserHome(buildRootDirectory);
const gradleUserHome = yield determineGradleUserHome(buildRootDirectory);
if (process.env[GRADLE_SETUP_VAR]) {
core.info('Gradle setup only performed on first gradle-build-action step in workflow.');
return;
Expand Down Expand Up @@ -66416,11 +66416,27 @@ function complete() {
}
exports.complete = complete;
function determineGradleUserHome(rootDir) {
const customGradleUserHome = process.env['GRADLE_USER_HOME'];
if (customGradleUserHome) {
return path.resolve(rootDir, customGradleUserHome);
}
return path.resolve(os.homedir(), '.gradle');
return __awaiter(this, void 0, void 0, function* () {
const customGradleUserHome = process.env['GRADLE_USER_HOME'];
if (customGradleUserHome) {
return path.resolve(rootDir, customGradleUserHome);
}
return path.resolve(yield determineUserHome(), '.gradle');
});
}
function determineUserHome() {
return __awaiter(this, void 0, void 0, function* () {
const output = yield exec.getExecOutput('java', ['-XshowSettings:properties', '-version'], { silent: true });
const regex = /user\.home = (\S*)/i;
const found = output.stderr.match(regex);
if (found == null || found.length <= 1) {
core.info('Could not determine user.home from java -version output. Using os.homedir().');
return os.homedir();
}
const userHome = found[1];
core.debug(`Determined user.home from java -version output: '${userHome}'`);
return userHome;
});
}
function getUniqueGradleHomes(buildResults) {
const gradleHomes = buildResults.map(buildResult => buildResult.gradleHomeDir);
Expand Down
2 changes: 1 addition & 1 deletion dist/main/index.js.map

Large diffs are not rendered by default.

28 changes: 22 additions & 6 deletions dist/post/index.js
Expand Up @@ -65067,7 +65067,7 @@ const GRADLE_USER_HOME = 'GRADLE_USER_HOME';
const CACHE_LISTENER = 'CACHE_LISTENER';
function setup(buildRootDirectory) {
return __awaiter(this, void 0, void 0, function* () {
const gradleUserHome = determineGradleUserHome(buildRootDirectory);
const gradleUserHome = yield determineGradleUserHome(buildRootDirectory);
if (process.env[GRADLE_SETUP_VAR]) {
core.info('Gradle setup only performed on first gradle-build-action step in workflow.');
return;
Expand Down Expand Up @@ -65100,11 +65100,27 @@ function complete() {
}
exports.complete = complete;
function determineGradleUserHome(rootDir) {
const customGradleUserHome = process.env['GRADLE_USER_HOME'];
if (customGradleUserHome) {
return path.resolve(rootDir, customGradleUserHome);
}
return path.resolve(os.homedir(), '.gradle');
return __awaiter(this, void 0, void 0, function* () {
const customGradleUserHome = process.env['GRADLE_USER_HOME'];
if (customGradleUserHome) {
return path.resolve(rootDir, customGradleUserHome);
}
return path.resolve(yield determineUserHome(), '.gradle');
});
}
function determineUserHome() {
return __awaiter(this, void 0, void 0, function* () {
const output = yield exec.getExecOutput('java', ['-XshowSettings:properties', '-version'], { silent: true });
const regex = /user\.home = (\S*)/i;
const found = output.stderr.match(regex);
if (found == null || found.length <= 1) {
core.info('Could not determine user.home from java -version output. Using os.homedir().');
return os.homedir();
}
const userHome = found[1];
core.debug(`Determined user.home from java -version output: '${userHome}'`);
return userHome;
});
}
function getUniqueGradleHomes(buildResults) {
const gradleHomes = buildResults.map(buildResult => buildResult.gradleHomeDir);
Expand Down
2 changes: 1 addition & 1 deletion dist/post/index.js.map

Large diffs are not rendered by default.

23 changes: 20 additions & 3 deletions src/setup-gradle.ts
Expand Up @@ -13,7 +13,7 @@ const GRADLE_USER_HOME = 'GRADLE_USER_HOME'
const CACHE_LISTENER = 'CACHE_LISTENER'

export async function setup(buildRootDirectory: string): Promise<void> {
const gradleUserHome = determineGradleUserHome(buildRootDirectory)
const gradleUserHome = await determineGradleUserHome(buildRootDirectory)

// Bypass setup on all but first action step in workflow.
if (process.env[GRADLE_SETUP_VAR]) {
Expand Down Expand Up @@ -55,13 +55,30 @@ export async function complete(): Promise<void> {
writeJobSummary(buildResults, cacheListener)
}

function determineGradleUserHome(rootDir: string): string {
async function determineGradleUserHome(rootDir: string): Promise<string> {
const customGradleUserHome = process.env['GRADLE_USER_HOME']
if (customGradleUserHome) {
return path.resolve(rootDir, customGradleUserHome)
}

return path.resolve(os.homedir(), '.gradle')
return path.resolve(await determineUserHome(), '.gradle')
}

/**
* Different values can be returned by os.homedir() in Javascript and System.getProperty('user.home') in Java.
* In order to determine the correct Gradle User Home, we ask Java for the user home instead of using os.homedir().
*/
async function determineUserHome(): Promise<string> {
const output = await exec.getExecOutput('java', ['-XshowSettings:properties', '-version'], {silent: true})
const regex = /user\.home = (\S*)/i
const found = output.stderr.match(regex)
if (found == null || found.length <= 1) {
core.info('Could not determine user.home from java -version output. Using os.homedir().')
return os.homedir()
}
const userHome = found[1]
core.debug(`Determined user.home from java -version output: '${userHome}'`)
return userHome
}

function getUniqueGradleHomes(buildResults: BuildResult[]): string[] {
Expand Down

0 comments on commit 306a7e4

Please sign in to comment.