Merge pull request #306 from gradle/dd/user-home

Use java to determine user.home dir
This commit is contained in:
Daz DeBoer 2022-06-05 22:18:36 -06:00 committed by GitHub
commit 306a7e4bb2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 140 additions and 33 deletions

View File

@ -48,6 +48,11 @@ jobs:
with: with:
cache-key-prefix: ${{github.run_number}}- 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: restore-gradle-home:
uses: ./.github/workflows/integ-test-restore-gradle-home.yml uses: ./.github/workflows/integ-test-restore-gradle-home.yml
with: with:

View File

@ -55,11 +55,16 @@ jobs:
runner-os: '["ubuntu-latest"]' runner-os: '["ubuntu-latest"]'
download-dist: true 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: restore-custom-gradle-home:
needs: build-distribution needs: build-distribution
uses: ./.github/workflows/integ-test-restore-custom-gradle-home.yml uses: ./.github/workflows/integ-test-restore-custom-gradle-home.yml
with: with:
runner-os: '["ubuntu-latest"]'
download-dist: true download-dist: true
restore-gradle-home: restore-gradle-home:

View File

@ -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

View File

@ -5,9 +5,6 @@ on:
inputs: inputs:
cache-key-prefix: cache-key-prefix:
type: string type: string
runner-os:
type: string
default: '["ubuntu-latest", "windows-latest", "macos-latest"]'
download-dist: download-dist:
type: boolean type: boolean
default: false default: false
@ -19,10 +16,7 @@ env:
jobs: jobs:
seed-build: seed-build:
strategy: runs-on: ubuntu-latest
matrix:
os: ${{fromJSON(inputs.runner-os)}}
runs-on: ${{ matrix.os }}
steps: steps:
- name: Set Gradle User Home - name: Set Gradle User Home
run: | run: |
@ -43,10 +37,7 @@ jobs:
# Test that the gradle-user-home cache will cache dependencies, by running build with --offline # Test that the gradle-user-home cache will cache dependencies, by running build with --offline
dependencies-cache: dependencies-cache:
needs: seed-build needs: seed-build
strategy: runs-on: ubuntu-latest
matrix:
os: ${{fromJSON(inputs.runner-os)}}
runs-on: ${{ matrix.os }}
steps: steps:
- name: Set Gradle User Home - name: Set Gradle User Home
run: | run: |
@ -67,10 +58,7 @@ jobs:
# Test that the gradle-user-home cache will cache and restore local build-cache # Test that the gradle-user-home cache will cache and restore local build-cache
build-cache: build-cache:
needs: seed-build needs: seed-build
strategy: runs-on: ubuntu-latest
matrix:
os: ${{fromJSON(inputs.runner-os)}}
runs-on: ${{ matrix.os }}
steps: steps:
- name: Set Gradle User Home - name: Set Gradle User Home
run: | run: |

28
dist/main/index.js vendored
View File

@ -66383,7 +66383,7 @@ const GRADLE_USER_HOME = 'GRADLE_USER_HOME';
const CACHE_LISTENER = 'CACHE_LISTENER'; const CACHE_LISTENER = 'CACHE_LISTENER';
function setup(buildRootDirectory) { function setup(buildRootDirectory) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
const gradleUserHome = determineGradleUserHome(buildRootDirectory); const gradleUserHome = yield determineGradleUserHome(buildRootDirectory);
if (process.env[GRADLE_SETUP_VAR]) { if (process.env[GRADLE_SETUP_VAR]) {
core.info('Gradle setup only performed on first gradle-build-action step in workflow.'); core.info('Gradle setup only performed on first gradle-build-action step in workflow.');
return; return;
@ -66416,11 +66416,27 @@ function complete() {
} }
exports.complete = complete; exports.complete = complete;
function determineGradleUserHome(rootDir) { function determineGradleUserHome(rootDir) {
const customGradleUserHome = process.env['GRADLE_USER_HOME']; return __awaiter(this, void 0, void 0, function* () {
if (customGradleUserHome) { const customGradleUserHome = process.env['GRADLE_USER_HOME'];
return path.resolve(rootDir, customGradleUserHome); if (customGradleUserHome) {
} return path.resolve(rootDir, customGradleUserHome);
return path.resolve(os.homedir(), '.gradle'); }
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) { function getUniqueGradleHomes(buildResults) {
const gradleHomes = buildResults.map(buildResult => buildResult.gradleHomeDir); const gradleHomes = buildResults.map(buildResult => buildResult.gradleHomeDir);

File diff suppressed because one or more lines are too long

28
dist/post/index.js vendored
View File

@ -65067,7 +65067,7 @@ const GRADLE_USER_HOME = 'GRADLE_USER_HOME';
const CACHE_LISTENER = 'CACHE_LISTENER'; const CACHE_LISTENER = 'CACHE_LISTENER';
function setup(buildRootDirectory) { function setup(buildRootDirectory) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
const gradleUserHome = determineGradleUserHome(buildRootDirectory); const gradleUserHome = yield determineGradleUserHome(buildRootDirectory);
if (process.env[GRADLE_SETUP_VAR]) { if (process.env[GRADLE_SETUP_VAR]) {
core.info('Gradle setup only performed on first gradle-build-action step in workflow.'); core.info('Gradle setup only performed on first gradle-build-action step in workflow.');
return; return;
@ -65100,11 +65100,27 @@ function complete() {
} }
exports.complete = complete; exports.complete = complete;
function determineGradleUserHome(rootDir) { function determineGradleUserHome(rootDir) {
const customGradleUserHome = process.env['GRADLE_USER_HOME']; return __awaiter(this, void 0, void 0, function* () {
if (customGradleUserHome) { const customGradleUserHome = process.env['GRADLE_USER_HOME'];
return path.resolve(rootDir, customGradleUserHome); if (customGradleUserHome) {
} return path.resolve(rootDir, customGradleUserHome);
return path.resolve(os.homedir(), '.gradle'); }
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) { function getUniqueGradleHomes(buildResults) {
const gradleHomes = buildResults.map(buildResult => buildResult.gradleHomeDir); const gradleHomes = buildResults.map(buildResult => buildResult.gradleHomeDir);

File diff suppressed because one or more lines are too long

View File

@ -13,7 +13,7 @@ const GRADLE_USER_HOME = 'GRADLE_USER_HOME'
const CACHE_LISTENER = 'CACHE_LISTENER' const CACHE_LISTENER = 'CACHE_LISTENER'
export async function setup(buildRootDirectory: string): Promise<void> { 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. // Bypass setup on all but first action step in workflow.
if (process.env[GRADLE_SETUP_VAR]) { if (process.env[GRADLE_SETUP_VAR]) {
@ -55,13 +55,30 @@ export async function complete(): Promise<void> {
writeJobSummary(buildResults, cacheListener) writeJobSummary(buildResults, cacheListener)
} }
function determineGradleUserHome(rootDir: string): string { async function determineGradleUserHome(rootDir: string): Promise<string> {
const customGradleUserHome = process.env['GRADLE_USER_HOME'] const customGradleUserHome = process.env['GRADLE_USER_HOME']
if (customGradleUserHome) { if (customGradleUserHome) {
return path.resolve(rootDir, 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[] { function getUniqueGradleHomes(buildResults: BuildResult[]): string[] {