mirror of
https://github.com/gradle/gradle-build-action.git
synced 2025-10-20 15:18:56 +08:00
Compare commits
8 Commits
v3.0.0-bet
...
v3-prerele
Author | SHA1 | Date | |
---|---|---|---|
|
6c7537229b | ||
|
650620f9f9 | ||
|
d4e24dfc10 | ||
|
7c57ba1136 | ||
|
32bab5b15a | ||
|
270f30ba56 | ||
|
c00a847f3f | ||
|
e2aa3f332c |
10
.github/workflows/ci-full-check.yml
vendored
10
.github/workflows/ci-full-check.yml
vendored
@@ -58,10 +58,12 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
cache-key-prefix: ${{github.run_number}}-
|
cache-key-prefix: ${{github.run_number}}-
|
||||||
|
|
||||||
# restore-configuration-cache:
|
restore-configuration-cache:
|
||||||
# uses: ./.github/workflows/integ-test-restore-configuration-cache.yml
|
uses: ./.github/workflows/integ-test-restore-configuration-cache.yml
|
||||||
# with:
|
with:
|
||||||
# cache-key-prefix: ${{github.run_number}}-
|
cache-key-prefix: ${{github.run_number}}-
|
||||||
|
secrets:
|
||||||
|
GRADLE_ENCRYPTION_KEY: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
|
||||||
|
|
||||||
restore-custom-gradle-home:
|
restore-custom-gradle-home:
|
||||||
uses: ./.github/workflows/integ-test-restore-custom-gradle-home.yml
|
uses: ./.github/workflows/integ-test-restore-custom-gradle-home.yml
|
||||||
|
2
.github/workflows/ci-quick-check.yml
vendored
2
.github/workflows/ci-quick-check.yml
vendored
@@ -95,6 +95,8 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
runner-os: '["ubuntu-latest"]'
|
runner-os: '["ubuntu-latest"]'
|
||||||
download-dist: true
|
download-dist: true
|
||||||
|
secrets:
|
||||||
|
GRADLE_ENCRYPTION_KEY: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
|
||||||
|
|
||||||
restore-containerized-gradle-home:
|
restore-containerized-gradle-home:
|
||||||
needs: build-distribution
|
needs: build-distribution
|
||||||
|
@@ -21,6 +21,7 @@ jobs:
|
|||||||
# Test that pre-installed runner JDKs are detected
|
# Test that pre-installed runner JDKs are detected
|
||||||
pre-installed-toolchains:
|
pre-installed-toolchains:
|
||||||
strategy:
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: ${{fromJSON(inputs.runner-os)}}
|
os: ${{fromJSON(inputs.runner-os)}}
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
@@ -35,7 +36,7 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
working-directory: .github/workflow-samples/groovy-dsl
|
working-directory: .github/workflow-samples/groovy-dsl
|
||||||
run: |
|
run: |
|
||||||
gradle -q javaToolchains > output.txt
|
gradle --info javaToolchains > output.txt
|
||||||
cat output.txt
|
cat output.txt
|
||||||
- name: Verify detected toolchains
|
- name: Verify detected toolchains
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -44,10 +45,12 @@ jobs:
|
|||||||
grep -q 'Eclipse Temurin JDK 1.8' output.txt || (echo "::error::Did not detect preinstalled JDK 1.8" && exit 1)
|
grep -q 'Eclipse Temurin JDK 1.8' output.txt || (echo "::error::Did not detect preinstalled JDK 1.8" && exit 1)
|
||||||
grep -q 'Eclipse Temurin JDK 11' output.txt || (echo "::error::Did not detect preinstalled JDK 11" && exit 1)
|
grep -q 'Eclipse Temurin JDK 11' output.txt || (echo "::error::Did not detect preinstalled JDK 11" && exit 1)
|
||||||
grep -q 'Eclipse Temurin JDK 17' output.txt || (echo "::error::Did not detect preinstalled JDK 17" && exit 1)
|
grep -q 'Eclipse Temurin JDK 17' output.txt || (echo "::error::Did not detect preinstalled JDK 17" && exit 1)
|
||||||
|
grep -q 'Eclipse Temurin JDK 21' output.txt || (echo "::error::Did not detect preinstalled JDK 21" && exit 1)
|
||||||
|
|
||||||
# Test that JDKs provisioned by setup-java are detected
|
# Test that JDKs provisioned by setup-java are detected
|
||||||
setup-java-installed-toolchain:
|
setup-java-installed-toolchain:
|
||||||
strategy:
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: ${{fromJSON(inputs.runner-os)}}
|
os: ${{fromJSON(inputs.runner-os)}}
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
@@ -72,42 +75,19 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
working-directory: .github/workflow-samples/groovy-dsl
|
working-directory: .github/workflow-samples/groovy-dsl
|
||||||
run: |
|
run: |
|
||||||
gradle -q javaToolchains > output.txt
|
gradle --info javaToolchains > output.txt
|
||||||
cat output.txt
|
cat output.txt
|
||||||
- name: Verify detected toolchains
|
- name: Verify setup JDKs are detected
|
||||||
shell: bash
|
shell: bash
|
||||||
working-directory: .github/workflow-samples/groovy-dsl
|
working-directory: .github/workflow-samples/groovy-dsl
|
||||||
run: |
|
run: |
|
||||||
grep -q 'Eclipse Temurin JDK 16' output.txt || (echo "::error::Did not detect setup-java installed JDK 16" && exit 1)
|
grep -q 'Eclipse Temurin JDK 16' output.txt || (echo "::error::Did not detect setup-java installed JDK 16" && exit 1)
|
||||||
grep -q 'Eclipse Temurin JDK 20' output.txt || (echo "::error::Did not detect setup-java installed JDK 20" && exit 1)
|
grep -q 'Eclipse Temurin JDK 20' output.txt || (echo "::error::Did not detect setup-java installed JDK 20" && exit 1)
|
||||||
|
- name: Verify pre-installed toolchains are detected
|
||||||
# Test that predefined JDK detection property is not overwritten by action
|
|
||||||
check-no-overwrite:
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
os: ${{fromJSON(inputs.runner-os)}}
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout sources
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
- name: Download distribution if required
|
|
||||||
uses: ./.github/actions/download-dist
|
|
||||||
- name: Configure java installations env var in Gradle User Home
|
|
||||||
shell: bash
|
shell: bash
|
||||||
|
working-directory: .github/workflow-samples/groovy-dsl
|
||||||
run: |
|
run: |
|
||||||
mkdir -p ~/.gradle
|
grep -q 'Eclipse Temurin JDK 1.8' output.txt || (echo "::error::Did not detect preinstalled JDK 1.8" && exit 1)
|
||||||
echo "org.gradle.java.installations.fromEnv=XXXXX" > ~/.gradle/gradle.properties
|
grep -q 'Eclipse Temurin JDK 11' output.txt || (echo "::error::Did not detect preinstalled JDK 11" && exit 1)
|
||||||
- name: Setup Gradle
|
grep -q 'Eclipse Temurin JDK 17' output.txt || (echo "::error::Did not detect preinstalled JDK 17" && exit 1)
|
||||||
uses: ./
|
grep -q 'Eclipse Temurin JDK 21' output.txt || (echo "::error::Did not detect preinstalled JDK 21" && exit 1)
|
||||||
- name: Check gradle.properties
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
cat ~/.gradle/gradle.properties
|
|
||||||
if grep -q 'org.gradle.java.installations.fromEnv=JAVA_HOME' ~/.gradle/gradle.properties ; then
|
|
||||||
echo 'Found overwritten fromEnv'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if ! grep -q 'org.gradle.java.installations.fromEnv=XXXXX' ~/.gradle/gradle.properties ; then
|
|
||||||
echo 'Did NOT find original fromEnv'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
@@ -11,6 +11,9 @@ on:
|
|||||||
download-dist:
|
download-dist:
|
||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
default: false
|
||||||
|
secrets:
|
||||||
|
GRADLE_ENCRYPTION_KEY:
|
||||||
|
required: true
|
||||||
|
|
||||||
env:
|
env:
|
||||||
DOWNLOAD_DIST: ${{ inputs.download-dist }}
|
DOWNLOAD_DIST: ${{ inputs.download-dist }}
|
||||||
@@ -34,8 +37,8 @@ jobs:
|
|||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
cache-read-only: false # For testing, allow writing cache entries on non-default branches
|
cache-read-only: false # For testing, allow writing cache entries on non-default branches
|
||||||
cache-encryption-key: Da25KUVSE5jbGds2zXmfXw==
|
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
|
||||||
gradle-version: release-nightly
|
gradle-version: 8.6-rc-1
|
||||||
- name: Groovy build with configuration-cache enabled
|
- name: Groovy build with configuration-cache enabled
|
||||||
working-directory: .github/workflow-samples/groovy-dsl
|
working-directory: .github/workflow-samples/groovy-dsl
|
||||||
run: gradle test --configuration-cache
|
run: gradle test --configuration-cache
|
||||||
@@ -57,8 +60,8 @@ jobs:
|
|||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
cache-read-only: true
|
cache-read-only: true
|
||||||
cache-encryption-key: Da25KUVSE5jbGds2zXmfXw==
|
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
|
||||||
gradle-version: release-nightly
|
gradle-version: 8.6-rc-1
|
||||||
- name: Groovy build with configuration-cache enabled
|
- name: Groovy build with configuration-cache enabled
|
||||||
id: execute
|
id: execute
|
||||||
working-directory: .github/workflow-samples/groovy-dsl
|
working-directory: .github/workflow-samples/groovy-dsl
|
||||||
@@ -92,8 +95,8 @@ jobs:
|
|||||||
GRADLE_BUILD_ACTION_SKIP_RESTORE: "generated-gradle-jars|wrapper-zips|java-toolchains|instrumented-jars|dependencies|kotlin-dsl"
|
GRADLE_BUILD_ACTION_SKIP_RESTORE: "generated-gradle-jars|wrapper-zips|java-toolchains|instrumented-jars|dependencies|kotlin-dsl"
|
||||||
with:
|
with:
|
||||||
cache-read-only: true
|
cache-read-only: true
|
||||||
cache-encryption-key: Da25KUVSE5jbGds2zXmfXw==
|
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
|
||||||
gradle-version: release-nightly
|
gradle-version: 8.6-rc-1
|
||||||
- name: Check execute Gradle build with configuration cache enabled (but not restored)
|
- name: Check execute Gradle build with configuration cache enabled (but not restored)
|
||||||
working-directory: .github/workflow-samples/groovy-dsl
|
working-directory: .github/workflow-samples/groovy-dsl
|
||||||
run: gradle test --configuration-cache
|
run: gradle test --configuration-cache
|
||||||
@@ -114,8 +117,8 @@ jobs:
|
|||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
cache-read-only: false # For testing, allow writing cache entries on non-default branches
|
cache-read-only: false # For testing, allow writing cache entries on non-default branches
|
||||||
cache-encryption-key: Da25KUVSE5jbGds2zXmfXw==
|
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
|
||||||
gradle-version: release-nightly
|
gradle-version: 8.6-rc-1
|
||||||
- name: Execute 'help' with configuration-cache enabled
|
- name: Execute 'help' with configuration-cache enabled
|
||||||
working-directory: .github/workflow-samples/kotlin-dsl
|
working-directory: .github/workflow-samples/kotlin-dsl
|
||||||
run: gradle help --configuration-cache
|
run: gradle help --configuration-cache
|
||||||
@@ -137,8 +140,8 @@ jobs:
|
|||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
cache-read-only: false # For testing, allow writing cache entries on non-default branches
|
cache-read-only: false # For testing, allow writing cache entries on non-default branches
|
||||||
cache-encryption-key: Da25KUVSE5jbGds2zXmfXw==
|
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
|
||||||
gradle-version: release-nightly
|
gradle-version: 8.6-rc-1
|
||||||
- name: Execute 'test' with configuration-cache enabled
|
- name: Execute 'test' with configuration-cache enabled
|
||||||
working-directory: .github/workflow-samples/kotlin-dsl
|
working-directory: .github/workflow-samples/kotlin-dsl
|
||||||
run: gradle test --configuration-cache
|
run: gradle test --configuration-cache
|
||||||
@@ -161,8 +164,8 @@ jobs:
|
|||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
cache-read-only: true
|
cache-read-only: true
|
||||||
cache-encryption-key: Da25KUVSE5jbGds2zXmfXw==
|
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
|
||||||
gradle-version: release-nightly
|
gradle-version: 8.6-rc-1
|
||||||
- name: Execute 'test' again with configuration-cache enabled
|
- name: Execute 'test' again with configuration-cache enabled
|
||||||
id: execute
|
id: execute
|
||||||
working-directory: .github/workflow-samples/kotlin-dsl
|
working-directory: .github/workflow-samples/kotlin-dsl
|
||||||
|
@@ -259,9 +259,9 @@ This allows the most recent state to always be available in the GitHub actions c
|
|||||||
### Finding a matching cache entry
|
### Finding a matching cache entry
|
||||||
|
|
||||||
In most cases, no exact match will exist for the cache key. Instead, the Gradle User Home will be restored for the closest matching cache entry, using a set of "restore keys". The entries will be matched with the following precedence:
|
In most cases, no exact match will exist for the cache key. Instead, the Gradle User Home will be restored for the closest matching cache entry, using a set of "restore keys". The entries will be matched with the following precedence:
|
||||||
- An exact match on OS, workflow, job, matrix and Git SHA
|
- An exact match on OS, workflow name, job id, matrix and Git SHA
|
||||||
- The most recent entry saved for the same OS, workflow, job and matrix values
|
- The most recent entry saved for the same OS, workflow name, job id and matrix values
|
||||||
- The most recent entry saved for the same OS, workflow and job
|
- The most recent entry saved for the same OS and job id
|
||||||
- The most recent entry saved for the same OS
|
- The most recent entry saved for the same OS
|
||||||
|
|
||||||
Due to branch scoping of cache entries, the above match will be first performed for entries from the same branch, and then for the default ('main') branch.
|
Due to branch scoping of cache entries, the above match will be first performed for entries from the same branch, and then for the default ('main') branch.
|
||||||
|
104
dist/main/index.js
vendored
104
dist/main/index.js
vendored
@@ -138599,17 +138599,18 @@ const cache_extract_entries_1 = __nccwpck_require__(76161);
|
|||||||
const RESTORED_CACHE_KEY_KEY = 'restored-cache-key';
|
const RESTORED_CACHE_KEY_KEY = 'restored-cache-key';
|
||||||
exports.META_FILE_DIR = '.gradle-build-action';
|
exports.META_FILE_DIR = '.gradle-build-action';
|
||||||
class GradleStateCache {
|
class GradleStateCache {
|
||||||
constructor(gradleUserHome) {
|
constructor(userHome, gradleUserHome) {
|
||||||
|
this.userHome = userHome;
|
||||||
this.gradleUserHome = gradleUserHome;
|
this.gradleUserHome = gradleUserHome;
|
||||||
this.cacheName = 'gradle';
|
this.cacheName = 'gradle';
|
||||||
this.cacheDescription = 'Gradle User Home';
|
this.cacheDescription = 'Gradle User Home';
|
||||||
}
|
}
|
||||||
init() {
|
init() {
|
||||||
const actionCacheDir = path_1.default.resolve(this.gradleUserHome, '.gradle-build-action');
|
this.initializeGradleUserHome();
|
||||||
fs_1.default.mkdirSync(actionCacheDir, { recursive: true });
|
const encryptionKey = params.getCacheEncryptionKey();
|
||||||
const initScriptsDir = path_1.default.resolve(this.gradleUserHome, 'init.d');
|
if (encryptionKey) {
|
||||||
fs_1.default.mkdirSync(initScriptsDir, { recursive: true });
|
core.exportVariable('GRADLE_ENCRYPTION_KEY', encryptionKey);
|
||||||
this.initializeGradleUserHome(this.gradleUserHome, initScriptsDir);
|
}
|
||||||
}
|
}
|
||||||
cacheOutputExists() {
|
cacheOutputExists() {
|
||||||
const cachesDir = path_1.default.resolve(this.gradleUserHome, 'caches');
|
const cachesDir = path_1.default.resolve(this.gradleUserHome, 'caches');
|
||||||
@@ -138721,17 +138722,15 @@ class GradleStateCache {
|
|||||||
}
|
}
|
||||||
return path_1.default.resolve(this.gradleUserHome, rawPath);
|
return path_1.default.resolve(this.gradleUserHome, rawPath);
|
||||||
}
|
}
|
||||||
initializeGradleUserHome(gradleUserHome, initScriptsDir) {
|
initializeGradleUserHome() {
|
||||||
const gradleProperties = path_1.default.resolve(gradleUserHome, 'gradle.properties');
|
const actionCacheDir = path_1.default.resolve(this.gradleUserHome, '.gradle-build-action');
|
||||||
const existingGradleProperties = fs_1.default.existsSync(gradleProperties)
|
fs_1.default.mkdirSync(actionCacheDir, { recursive: true });
|
||||||
? fs_1.default.readFileSync(gradleProperties, 'utf8')
|
this.copyInitScripts();
|
||||||
: '';
|
this.registerToolchains();
|
||||||
if (!existingGradleProperties.includes('org.gradle.java.installations.fromEnv=')) {
|
|
||||||
fs_1.default.appendFileSync(gradleProperties, `
|
|
||||||
# Auto-detect pre-installed JDKs
|
|
||||||
org.gradle.java.installations.fromEnv=JAVA_HOME_8_X64,JAVA_HOME_11_X64,JAVA_HOME_17_X64
|
|
||||||
`);
|
|
||||||
}
|
}
|
||||||
|
copyInitScripts() {
|
||||||
|
const initScriptsDir = path_1.default.resolve(this.gradleUserHome, 'init.d');
|
||||||
|
fs_1.default.mkdirSync(initScriptsDir, { recursive: true });
|
||||||
const initScriptFilenames = [
|
const initScriptFilenames = [
|
||||||
'gradle-build-action.build-result-capture.init.gradle',
|
'gradle-build-action.build-result-capture.init.gradle',
|
||||||
'gradle-build-action.build-result-capture-service.plugin.groovy',
|
'gradle-build-action.build-result-capture-service.plugin.groovy',
|
||||||
@@ -138740,13 +138739,30 @@ org.gradle.java.installations.fromEnv=JAVA_HOME_8_X64,JAVA_HOME_11_X64,JAVA_HOME
|
|||||||
'gradle-build-action.inject-gradle-enterprise.init.gradle'
|
'gradle-build-action.inject-gradle-enterprise.init.gradle'
|
||||||
];
|
];
|
||||||
for (const initScriptFilename of initScriptFilenames) {
|
for (const initScriptFilename of initScriptFilenames) {
|
||||||
const initScriptContent = this.readInitScriptAsString(initScriptFilename);
|
const initScriptContent = this.readResourceFileAsString('init-scripts', initScriptFilename);
|
||||||
const initScriptPath = path_1.default.resolve(initScriptsDir, initScriptFilename);
|
const initScriptPath = path_1.default.resolve(initScriptsDir, initScriptFilename);
|
||||||
fs_1.default.writeFileSync(initScriptPath, initScriptContent);
|
fs_1.default.writeFileSync(initScriptPath, initScriptContent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
readInitScriptAsString(resource) {
|
registerToolchains() {
|
||||||
const absolutePath = path_1.default.resolve(__dirname, '..', '..', 'src', 'resources', 'init-scripts', resource);
|
const preInstalledToolchains = this.readResourceFileAsString('toolchains.xml');
|
||||||
|
const m2dir = path_1.default.resolve(this.userHome, '.m2');
|
||||||
|
const toolchainXmlTarget = path_1.default.resolve(m2dir, 'toolchains.xml');
|
||||||
|
if (!fs_1.default.existsSync(toolchainXmlTarget)) {
|
||||||
|
fs_1.default.mkdirSync(m2dir, { recursive: true });
|
||||||
|
fs_1.default.writeFileSync(toolchainXmlTarget, preInstalledToolchains);
|
||||||
|
core.info(`Wrote default JDK locations to ${toolchainXmlTarget}`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const existingToolchainContent = fs_1.default.readFileSync(toolchainXmlTarget, 'utf8');
|
||||||
|
const appendedContent = preInstalledToolchains.split('<toolchains>').pop();
|
||||||
|
const mergedContent = existingToolchainContent.replace('</toolchains>', appendedContent);
|
||||||
|
fs_1.default.writeFileSync(toolchainXmlTarget, mergedContent);
|
||||||
|
core.info(`Merged default JDK locations into ${toolchainXmlTarget}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
readResourceFileAsString(...paths) {
|
||||||
|
const absolutePath = path_1.default.resolve(__dirname, '..', '..', 'src', 'resources', ...paths);
|
||||||
return fs_1.default.readFileSync(absolutePath, 'utf8');
|
return fs_1.default.readFileSync(absolutePath, 'utf8');
|
||||||
}
|
}
|
||||||
debugReportGradleUserHomeSize(label) {
|
debugReportGradleUserHomeSize(label) {
|
||||||
@@ -138946,7 +138962,6 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|||||||
exports.ConfigurationCacheEntryExtractor = exports.GradleHomeEntryExtractor = void 0;
|
exports.ConfigurationCacheEntryExtractor = exports.GradleHomeEntryExtractor = void 0;
|
||||||
const path_1 = __importDefault(__nccwpck_require__(71017));
|
const path_1 = __importDefault(__nccwpck_require__(71017));
|
||||||
const fs_1 = __importDefault(__nccwpck_require__(57147));
|
const fs_1 = __importDefault(__nccwpck_require__(57147));
|
||||||
const crypto_1 = __importDefault(__nccwpck_require__(6113));
|
|
||||||
const core = __importStar(__nccwpck_require__(42186));
|
const core = __importStar(__nccwpck_require__(42186));
|
||||||
const glob = __importStar(__nccwpck_require__(28090));
|
const glob = __importStar(__nccwpck_require__(28090));
|
||||||
const semver = __importStar(__nccwpck_require__(11383));
|
const semver = __importStar(__nccwpck_require__(11383));
|
||||||
@@ -139184,8 +139199,6 @@ class ConfigurationCacheEntryExtractor extends AbstractEntryExtractor {
|
|||||||
this.markNotRestored(listener, 'Encryption Key was not provided');
|
this.markNotRestored(listener, 'Encryption Key was not provided');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const encryptionKey = this.getAESEncryptionKey();
|
|
||||||
core.exportVariable('GRADLE_ENCRYPTION_KEY', encryptionKey);
|
|
||||||
return yield _super.restore.call(this, listener);
|
return yield _super.restore.call(this, listener);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -139217,11 +139230,6 @@ class ConfigurationCacheEntryExtractor extends AbstractEntryExtractor {
|
|||||||
yield _super.extract.call(this, listener);
|
yield _super.extract.call(this, listener);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
getAESEncryptionKey() {
|
|
||||||
const secret = params.getCacheEncryptionKey();
|
|
||||||
const key = crypto_1.default.pbkdf2Sync(secret, '', 1000, 16, 'sha256');
|
|
||||||
return key.toString('base64');
|
|
||||||
}
|
|
||||||
getExtractedCacheEntryDefinitions() {
|
getExtractedCacheEntryDefinitions() {
|
||||||
const groupedResults = this.getConfigCacheDirectoriesWithAssociatedBuildResults();
|
const groupedResults = this.getConfigCacheDirectoriesWithAssociatedBuildResults();
|
||||||
return Object.entries(groupedResults).map(([configCachePath, pathResults]) => {
|
return Object.entries(groupedResults).map(([configCachePath, pathResults]) => {
|
||||||
@@ -139509,7 +139517,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.tryDelete = exports.handleCacheFailure = exports.cacheDebug = exports.saveCache = exports.restoreCache = exports.hashStrings = exports.hashFileNames = exports.getUniqueLabelForJobInstanceValues = exports.getUniqueLabelForJobInstance = exports.getCacheKeyForJob = exports.getCacheKeyPrefix = exports.generateCacheKey = exports.CacheKey = exports.isCacheCleanupEnabled = exports.isCacheDebuggingEnabled = exports.isCacheOverwriteExisting = exports.isCacheWriteOnly = exports.isCacheReadOnly = exports.isCacheDisabled = void 0;
|
exports.tryDelete = exports.handleCacheFailure = exports.cacheDebug = exports.saveCache = exports.restoreCache = exports.hashStrings = exports.hashFileNames = exports.getCacheKeyPrefix = exports.generateCacheKey = exports.CacheKey = exports.isCacheCleanupEnabled = exports.isCacheDebuggingEnabled = exports.isCacheOverwriteExisting = exports.isCacheWriteOnly = exports.isCacheReadOnly = exports.isCacheDisabled = void 0;
|
||||||
const core = __importStar(__nccwpck_require__(42186));
|
const core = __importStar(__nccwpck_require__(42186));
|
||||||
const cache = __importStar(__nccwpck_require__(27799));
|
const cache = __importStar(__nccwpck_require__(27799));
|
||||||
const github = __importStar(__nccwpck_require__(95438));
|
const github = __importStar(__nccwpck_require__(95438));
|
||||||
@@ -139581,34 +139589,16 @@ function getCacheKeyEnvironment() {
|
|||||||
return process.env[CACHE_KEY_OS_VAR] || runnerOs;
|
return process.env[CACHE_KEY_OS_VAR] || runnerOs;
|
||||||
}
|
}
|
||||||
function getCacheKeyJob() {
|
function getCacheKeyJob() {
|
||||||
return process.env[CACHE_KEY_JOB_VAR] || getCacheKeyForJob(github.context.workflow, github.context.job);
|
return process.env[CACHE_KEY_JOB_VAR] || github.context.job;
|
||||||
}
|
}
|
||||||
function getCacheKeyForJob(workflowName, jobId) {
|
|
||||||
const sanitizedWorkflow = workflowName.replace(/,/g, '').toLowerCase();
|
|
||||||
return `${sanitizedWorkflow}-${jobId}`;
|
|
||||||
}
|
|
||||||
exports.getCacheKeyForJob = getCacheKeyForJob;
|
|
||||||
function getCacheKeyJobInstance() {
|
function getCacheKeyJobInstance() {
|
||||||
const override = process.env[CACHE_KEY_JOB_INSTANCE_VAR];
|
const override = process.env[CACHE_KEY_JOB_INSTANCE_VAR];
|
||||||
if (override) {
|
if (override) {
|
||||||
return override;
|
return override;
|
||||||
}
|
}
|
||||||
|
const workflowName = github.context.workflow;
|
||||||
const workflowJobContext = params.getJobMatrix();
|
const workflowJobContext = params.getJobMatrix();
|
||||||
return hashStrings([workflowJobContext]);
|
return hashStrings([workflowName, workflowJobContext]);
|
||||||
}
|
|
||||||
function getUniqueLabelForJobInstance() {
|
|
||||||
return getUniqueLabelForJobInstanceValues(github.context.workflow, github.context.job, params.getJobMatrix());
|
|
||||||
}
|
|
||||||
exports.getUniqueLabelForJobInstance = getUniqueLabelForJobInstance;
|
|
||||||
function getUniqueLabelForJobInstanceValues(workflow, jobId, matrixJson) {
|
|
||||||
const matrix = JSON.parse(matrixJson);
|
|
||||||
const matrixString = Object.values(matrix).join('-');
|
|
||||||
const label = matrixString ? `${workflow}-${jobId}-${matrixString}` : `${workflow}-${jobId}`;
|
|
||||||
return sanitize(label);
|
|
||||||
}
|
|
||||||
exports.getUniqueLabelForJobInstanceValues = getUniqueLabelForJobInstanceValues;
|
|
||||||
function sanitize(value) {
|
|
||||||
return value.replace(/[^a-zA-Z0-9_-]/g, '').toLowerCase();
|
|
||||||
}
|
}
|
||||||
function getCacheKeyJobExecution() {
|
function getCacheKeyJobExecution() {
|
||||||
return process.env[CACHE_KEY_JOB_EXECUTION_VAR] || github.context.sha;
|
return process.env[CACHE_KEY_JOB_EXECUTION_VAR] || github.context.sha;
|
||||||
@@ -139780,14 +139770,14 @@ const cache_utils_1 = __nccwpck_require__(41678);
|
|||||||
const cache_base_1 = __nccwpck_require__(47591);
|
const cache_base_1 = __nccwpck_require__(47591);
|
||||||
const cache_cleaner_1 = __nccwpck_require__(57);
|
const cache_cleaner_1 = __nccwpck_require__(57);
|
||||||
const CACHE_RESTORED_VAR = 'GRADLE_BUILD_ACTION_CACHE_RESTORED';
|
const CACHE_RESTORED_VAR = 'GRADLE_BUILD_ACTION_CACHE_RESTORED';
|
||||||
function restore(gradleUserHome, cacheListener) {
|
function restore(userHome, gradleUserHome, cacheListener) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
if (process.env[CACHE_RESTORED_VAR]) {
|
if (process.env[CACHE_RESTORED_VAR]) {
|
||||||
core.info('Cache only restored on first action step.');
|
core.info('Cache only restored on first action step.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
core.exportVariable(CACHE_RESTORED_VAR, true);
|
core.exportVariable(CACHE_RESTORED_VAR, true);
|
||||||
const gradleStateCache = new cache_base_1.GradleStateCache(gradleUserHome);
|
const gradleStateCache = new cache_base_1.GradleStateCache(userHome, gradleUserHome);
|
||||||
if ((0, cache_utils_1.isCacheDisabled)()) {
|
if ((0, cache_utils_1.isCacheDisabled)()) {
|
||||||
core.info('Cache is disabled: will not restore state from previous builds.');
|
core.info('Cache is disabled: will not restore state from previous builds.');
|
||||||
gradleStateCache.init();
|
gradleStateCache.init();
|
||||||
@@ -139822,7 +139812,7 @@ function restore(gradleUserHome, cacheListener) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.restore = restore;
|
exports.restore = restore;
|
||||||
function save(gradleUserHome, cacheListener, daemonController) {
|
function save(userHome, gradleUserHome, cacheListener, daemonController) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
if ((0, cache_utils_1.isCacheDisabled)()) {
|
if ((0, cache_utils_1.isCacheDisabled)()) {
|
||||||
core.info('Cache is disabled: will not save state for later builds.');
|
core.info('Cache is disabled: will not save state for later builds.');
|
||||||
@@ -139849,7 +139839,7 @@ function save(gradleUserHome, cacheListener, daemonController) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
yield core.group('Caching Gradle state', () => __awaiter(this, void 0, void 0, function* () {
|
yield core.group('Caching Gradle state', () => __awaiter(this, void 0, void 0, function* () {
|
||||||
return new cache_base_1.GradleStateCache(gradleUserHome).save(cacheListener);
|
return new cache_base_1.GradleStateCache(userHome, gradleUserHome).save(cacheListener);
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -141074,10 +141064,12 @@ const build_results_1 = __nccwpck_require__(82107);
|
|||||||
const cache_reporting_1 = __nccwpck_require__(66674);
|
const cache_reporting_1 = __nccwpck_require__(66674);
|
||||||
const daemon_controller_1 = __nccwpck_require__(85146);
|
const daemon_controller_1 = __nccwpck_require__(85146);
|
||||||
const GRADLE_SETUP_VAR = 'GRADLE_BUILD_ACTION_SETUP_COMPLETED';
|
const GRADLE_SETUP_VAR = 'GRADLE_BUILD_ACTION_SETUP_COMPLETED';
|
||||||
|
const USER_HOME = 'USER_HOME';
|
||||||
const GRADLE_USER_HOME = 'GRADLE_USER_HOME';
|
const GRADLE_USER_HOME = 'GRADLE_USER_HOME';
|
||||||
const CACHE_LISTENER = 'CACHE_LISTENER';
|
const CACHE_LISTENER = 'CACHE_LISTENER';
|
||||||
function setup() {
|
function setup() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
const userHome = yield determineUserHome();
|
||||||
const gradleUserHome = yield determineGradleUserHome();
|
const gradleUserHome = yield determineGradleUserHome();
|
||||||
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.');
|
||||||
@@ -141085,9 +141077,10 @@ function setup() {
|
|||||||
}
|
}
|
||||||
core.exportVariable(GRADLE_SETUP_VAR, true);
|
core.exportVariable(GRADLE_SETUP_VAR, true);
|
||||||
core.saveState(GRADLE_SETUP_VAR, true);
|
core.saveState(GRADLE_SETUP_VAR, true);
|
||||||
|
core.saveState(USER_HOME, userHome);
|
||||||
core.saveState(GRADLE_USER_HOME, gradleUserHome);
|
core.saveState(GRADLE_USER_HOME, gradleUserHome);
|
||||||
const cacheListener = new cache_reporting_1.CacheListener();
|
const cacheListener = new cache_reporting_1.CacheListener();
|
||||||
yield caches.restore(gradleUserHome, cacheListener);
|
yield caches.restore(userHome, gradleUserHome, cacheListener);
|
||||||
core.saveState(CACHE_LISTENER, cacheListener.stringify());
|
core.saveState(CACHE_LISTENER, cacheListener.stringify());
|
||||||
yield dependencyGraph.setup(params.getDependencyGraphOption());
|
yield dependencyGraph.setup(params.getDependencyGraphOption());
|
||||||
});
|
});
|
||||||
@@ -141101,10 +141094,11 @@ function complete() {
|
|||||||
}
|
}
|
||||||
core.info('In post-action step');
|
core.info('In post-action step');
|
||||||
const buildResults = (0, build_results_1.loadBuildResults)();
|
const buildResults = (0, build_results_1.loadBuildResults)();
|
||||||
|
const userHome = core.getState(USER_HOME);
|
||||||
const gradleUserHome = core.getState(GRADLE_USER_HOME);
|
const gradleUserHome = core.getState(GRADLE_USER_HOME);
|
||||||
const cacheListener = cache_reporting_1.CacheListener.rehydrate(core.getState(CACHE_LISTENER));
|
const cacheListener = cache_reporting_1.CacheListener.rehydrate(core.getState(CACHE_LISTENER));
|
||||||
const daemonController = new daemon_controller_1.DaemonController(buildResults);
|
const daemonController = new daemon_controller_1.DaemonController(buildResults);
|
||||||
yield caches.save(gradleUserHome, cacheListener, daemonController);
|
yield caches.save(userHome, gradleUserHome, cacheListener, daemonController);
|
||||||
yield jobSummary.generateJobSummary(buildResults, cacheListener);
|
yield jobSummary.generateJobSummary(buildResults, cacheListener);
|
||||||
yield dependencyGraph.complete(params.getDependencyGraphOption());
|
yield dependencyGraph.complete(params.getDependencyGraphOption());
|
||||||
core.info('Completed post-action step');
|
core.info('Completed post-action step');
|
||||||
|
2
dist/main/index.js.map
vendored
2
dist/main/index.js.map
vendored
File diff suppressed because one or more lines are too long
104
dist/post/index.js
vendored
104
dist/post/index.js
vendored
@@ -136052,17 +136052,18 @@ const cache_extract_entries_1 = __nccwpck_require__(76161);
|
|||||||
const RESTORED_CACHE_KEY_KEY = 'restored-cache-key';
|
const RESTORED_CACHE_KEY_KEY = 'restored-cache-key';
|
||||||
exports.META_FILE_DIR = '.gradle-build-action';
|
exports.META_FILE_DIR = '.gradle-build-action';
|
||||||
class GradleStateCache {
|
class GradleStateCache {
|
||||||
constructor(gradleUserHome) {
|
constructor(userHome, gradleUserHome) {
|
||||||
|
this.userHome = userHome;
|
||||||
this.gradleUserHome = gradleUserHome;
|
this.gradleUserHome = gradleUserHome;
|
||||||
this.cacheName = 'gradle';
|
this.cacheName = 'gradle';
|
||||||
this.cacheDescription = 'Gradle User Home';
|
this.cacheDescription = 'Gradle User Home';
|
||||||
}
|
}
|
||||||
init() {
|
init() {
|
||||||
const actionCacheDir = path_1.default.resolve(this.gradleUserHome, '.gradle-build-action');
|
this.initializeGradleUserHome();
|
||||||
fs_1.default.mkdirSync(actionCacheDir, { recursive: true });
|
const encryptionKey = params.getCacheEncryptionKey();
|
||||||
const initScriptsDir = path_1.default.resolve(this.gradleUserHome, 'init.d');
|
if (encryptionKey) {
|
||||||
fs_1.default.mkdirSync(initScriptsDir, { recursive: true });
|
core.exportVariable('GRADLE_ENCRYPTION_KEY', encryptionKey);
|
||||||
this.initializeGradleUserHome(this.gradleUserHome, initScriptsDir);
|
}
|
||||||
}
|
}
|
||||||
cacheOutputExists() {
|
cacheOutputExists() {
|
||||||
const cachesDir = path_1.default.resolve(this.gradleUserHome, 'caches');
|
const cachesDir = path_1.default.resolve(this.gradleUserHome, 'caches');
|
||||||
@@ -136174,17 +136175,15 @@ class GradleStateCache {
|
|||||||
}
|
}
|
||||||
return path_1.default.resolve(this.gradleUserHome, rawPath);
|
return path_1.default.resolve(this.gradleUserHome, rawPath);
|
||||||
}
|
}
|
||||||
initializeGradleUserHome(gradleUserHome, initScriptsDir) {
|
initializeGradleUserHome() {
|
||||||
const gradleProperties = path_1.default.resolve(gradleUserHome, 'gradle.properties');
|
const actionCacheDir = path_1.default.resolve(this.gradleUserHome, '.gradle-build-action');
|
||||||
const existingGradleProperties = fs_1.default.existsSync(gradleProperties)
|
fs_1.default.mkdirSync(actionCacheDir, { recursive: true });
|
||||||
? fs_1.default.readFileSync(gradleProperties, 'utf8')
|
this.copyInitScripts();
|
||||||
: '';
|
this.registerToolchains();
|
||||||
if (!existingGradleProperties.includes('org.gradle.java.installations.fromEnv=')) {
|
|
||||||
fs_1.default.appendFileSync(gradleProperties, `
|
|
||||||
# Auto-detect pre-installed JDKs
|
|
||||||
org.gradle.java.installations.fromEnv=JAVA_HOME_8_X64,JAVA_HOME_11_X64,JAVA_HOME_17_X64
|
|
||||||
`);
|
|
||||||
}
|
}
|
||||||
|
copyInitScripts() {
|
||||||
|
const initScriptsDir = path_1.default.resolve(this.gradleUserHome, 'init.d');
|
||||||
|
fs_1.default.mkdirSync(initScriptsDir, { recursive: true });
|
||||||
const initScriptFilenames = [
|
const initScriptFilenames = [
|
||||||
'gradle-build-action.build-result-capture.init.gradle',
|
'gradle-build-action.build-result-capture.init.gradle',
|
||||||
'gradle-build-action.build-result-capture-service.plugin.groovy',
|
'gradle-build-action.build-result-capture-service.plugin.groovy',
|
||||||
@@ -136193,13 +136192,30 @@ org.gradle.java.installations.fromEnv=JAVA_HOME_8_X64,JAVA_HOME_11_X64,JAVA_HOME
|
|||||||
'gradle-build-action.inject-gradle-enterprise.init.gradle'
|
'gradle-build-action.inject-gradle-enterprise.init.gradle'
|
||||||
];
|
];
|
||||||
for (const initScriptFilename of initScriptFilenames) {
|
for (const initScriptFilename of initScriptFilenames) {
|
||||||
const initScriptContent = this.readInitScriptAsString(initScriptFilename);
|
const initScriptContent = this.readResourceFileAsString('init-scripts', initScriptFilename);
|
||||||
const initScriptPath = path_1.default.resolve(initScriptsDir, initScriptFilename);
|
const initScriptPath = path_1.default.resolve(initScriptsDir, initScriptFilename);
|
||||||
fs_1.default.writeFileSync(initScriptPath, initScriptContent);
|
fs_1.default.writeFileSync(initScriptPath, initScriptContent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
readInitScriptAsString(resource) {
|
registerToolchains() {
|
||||||
const absolutePath = path_1.default.resolve(__dirname, '..', '..', 'src', 'resources', 'init-scripts', resource);
|
const preInstalledToolchains = this.readResourceFileAsString('toolchains.xml');
|
||||||
|
const m2dir = path_1.default.resolve(this.userHome, '.m2');
|
||||||
|
const toolchainXmlTarget = path_1.default.resolve(m2dir, 'toolchains.xml');
|
||||||
|
if (!fs_1.default.existsSync(toolchainXmlTarget)) {
|
||||||
|
fs_1.default.mkdirSync(m2dir, { recursive: true });
|
||||||
|
fs_1.default.writeFileSync(toolchainXmlTarget, preInstalledToolchains);
|
||||||
|
core.info(`Wrote default JDK locations to ${toolchainXmlTarget}`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const existingToolchainContent = fs_1.default.readFileSync(toolchainXmlTarget, 'utf8');
|
||||||
|
const appendedContent = preInstalledToolchains.split('<toolchains>').pop();
|
||||||
|
const mergedContent = existingToolchainContent.replace('</toolchains>', appendedContent);
|
||||||
|
fs_1.default.writeFileSync(toolchainXmlTarget, mergedContent);
|
||||||
|
core.info(`Merged default JDK locations into ${toolchainXmlTarget}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
readResourceFileAsString(...paths) {
|
||||||
|
const absolutePath = path_1.default.resolve(__dirname, '..', '..', 'src', 'resources', ...paths);
|
||||||
return fs_1.default.readFileSync(absolutePath, 'utf8');
|
return fs_1.default.readFileSync(absolutePath, 'utf8');
|
||||||
}
|
}
|
||||||
debugReportGradleUserHomeSize(label) {
|
debugReportGradleUserHomeSize(label) {
|
||||||
@@ -136399,7 +136415,6 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|||||||
exports.ConfigurationCacheEntryExtractor = exports.GradleHomeEntryExtractor = void 0;
|
exports.ConfigurationCacheEntryExtractor = exports.GradleHomeEntryExtractor = void 0;
|
||||||
const path_1 = __importDefault(__nccwpck_require__(71017));
|
const path_1 = __importDefault(__nccwpck_require__(71017));
|
||||||
const fs_1 = __importDefault(__nccwpck_require__(57147));
|
const fs_1 = __importDefault(__nccwpck_require__(57147));
|
||||||
const crypto_1 = __importDefault(__nccwpck_require__(6113));
|
|
||||||
const core = __importStar(__nccwpck_require__(42186));
|
const core = __importStar(__nccwpck_require__(42186));
|
||||||
const glob = __importStar(__nccwpck_require__(28090));
|
const glob = __importStar(__nccwpck_require__(28090));
|
||||||
const semver = __importStar(__nccwpck_require__(11383));
|
const semver = __importStar(__nccwpck_require__(11383));
|
||||||
@@ -136637,8 +136652,6 @@ class ConfigurationCacheEntryExtractor extends AbstractEntryExtractor {
|
|||||||
this.markNotRestored(listener, 'Encryption Key was not provided');
|
this.markNotRestored(listener, 'Encryption Key was not provided');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const encryptionKey = this.getAESEncryptionKey();
|
|
||||||
core.exportVariable('GRADLE_ENCRYPTION_KEY', encryptionKey);
|
|
||||||
return yield _super.restore.call(this, listener);
|
return yield _super.restore.call(this, listener);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -136670,11 +136683,6 @@ class ConfigurationCacheEntryExtractor extends AbstractEntryExtractor {
|
|||||||
yield _super.extract.call(this, listener);
|
yield _super.extract.call(this, listener);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
getAESEncryptionKey() {
|
|
||||||
const secret = params.getCacheEncryptionKey();
|
|
||||||
const key = crypto_1.default.pbkdf2Sync(secret, '', 1000, 16, 'sha256');
|
|
||||||
return key.toString('base64');
|
|
||||||
}
|
|
||||||
getExtractedCacheEntryDefinitions() {
|
getExtractedCacheEntryDefinitions() {
|
||||||
const groupedResults = this.getConfigCacheDirectoriesWithAssociatedBuildResults();
|
const groupedResults = this.getConfigCacheDirectoriesWithAssociatedBuildResults();
|
||||||
return Object.entries(groupedResults).map(([configCachePath, pathResults]) => {
|
return Object.entries(groupedResults).map(([configCachePath, pathResults]) => {
|
||||||
@@ -136962,7 +136970,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.tryDelete = exports.handleCacheFailure = exports.cacheDebug = exports.saveCache = exports.restoreCache = exports.hashStrings = exports.hashFileNames = exports.getUniqueLabelForJobInstanceValues = exports.getUniqueLabelForJobInstance = exports.getCacheKeyForJob = exports.getCacheKeyPrefix = exports.generateCacheKey = exports.CacheKey = exports.isCacheCleanupEnabled = exports.isCacheDebuggingEnabled = exports.isCacheOverwriteExisting = exports.isCacheWriteOnly = exports.isCacheReadOnly = exports.isCacheDisabled = void 0;
|
exports.tryDelete = exports.handleCacheFailure = exports.cacheDebug = exports.saveCache = exports.restoreCache = exports.hashStrings = exports.hashFileNames = exports.getCacheKeyPrefix = exports.generateCacheKey = exports.CacheKey = exports.isCacheCleanupEnabled = exports.isCacheDebuggingEnabled = exports.isCacheOverwriteExisting = exports.isCacheWriteOnly = exports.isCacheReadOnly = exports.isCacheDisabled = void 0;
|
||||||
const core = __importStar(__nccwpck_require__(42186));
|
const core = __importStar(__nccwpck_require__(42186));
|
||||||
const cache = __importStar(__nccwpck_require__(27799));
|
const cache = __importStar(__nccwpck_require__(27799));
|
||||||
const github = __importStar(__nccwpck_require__(95438));
|
const github = __importStar(__nccwpck_require__(95438));
|
||||||
@@ -137034,34 +137042,16 @@ function getCacheKeyEnvironment() {
|
|||||||
return process.env[CACHE_KEY_OS_VAR] || runnerOs;
|
return process.env[CACHE_KEY_OS_VAR] || runnerOs;
|
||||||
}
|
}
|
||||||
function getCacheKeyJob() {
|
function getCacheKeyJob() {
|
||||||
return process.env[CACHE_KEY_JOB_VAR] || getCacheKeyForJob(github.context.workflow, github.context.job);
|
return process.env[CACHE_KEY_JOB_VAR] || github.context.job;
|
||||||
}
|
}
|
||||||
function getCacheKeyForJob(workflowName, jobId) {
|
|
||||||
const sanitizedWorkflow = workflowName.replace(/,/g, '').toLowerCase();
|
|
||||||
return `${sanitizedWorkflow}-${jobId}`;
|
|
||||||
}
|
|
||||||
exports.getCacheKeyForJob = getCacheKeyForJob;
|
|
||||||
function getCacheKeyJobInstance() {
|
function getCacheKeyJobInstance() {
|
||||||
const override = process.env[CACHE_KEY_JOB_INSTANCE_VAR];
|
const override = process.env[CACHE_KEY_JOB_INSTANCE_VAR];
|
||||||
if (override) {
|
if (override) {
|
||||||
return override;
|
return override;
|
||||||
}
|
}
|
||||||
|
const workflowName = github.context.workflow;
|
||||||
const workflowJobContext = params.getJobMatrix();
|
const workflowJobContext = params.getJobMatrix();
|
||||||
return hashStrings([workflowJobContext]);
|
return hashStrings([workflowName, workflowJobContext]);
|
||||||
}
|
|
||||||
function getUniqueLabelForJobInstance() {
|
|
||||||
return getUniqueLabelForJobInstanceValues(github.context.workflow, github.context.job, params.getJobMatrix());
|
|
||||||
}
|
|
||||||
exports.getUniqueLabelForJobInstance = getUniqueLabelForJobInstance;
|
|
||||||
function getUniqueLabelForJobInstanceValues(workflow, jobId, matrixJson) {
|
|
||||||
const matrix = JSON.parse(matrixJson);
|
|
||||||
const matrixString = Object.values(matrix).join('-');
|
|
||||||
const label = matrixString ? `${workflow}-${jobId}-${matrixString}` : `${workflow}-${jobId}`;
|
|
||||||
return sanitize(label);
|
|
||||||
}
|
|
||||||
exports.getUniqueLabelForJobInstanceValues = getUniqueLabelForJobInstanceValues;
|
|
||||||
function sanitize(value) {
|
|
||||||
return value.replace(/[^a-zA-Z0-9_-]/g, '').toLowerCase();
|
|
||||||
}
|
}
|
||||||
function getCacheKeyJobExecution() {
|
function getCacheKeyJobExecution() {
|
||||||
return process.env[CACHE_KEY_JOB_EXECUTION_VAR] || github.context.sha;
|
return process.env[CACHE_KEY_JOB_EXECUTION_VAR] || github.context.sha;
|
||||||
@@ -137233,14 +137223,14 @@ const cache_utils_1 = __nccwpck_require__(41678);
|
|||||||
const cache_base_1 = __nccwpck_require__(47591);
|
const cache_base_1 = __nccwpck_require__(47591);
|
||||||
const cache_cleaner_1 = __nccwpck_require__(57);
|
const cache_cleaner_1 = __nccwpck_require__(57);
|
||||||
const CACHE_RESTORED_VAR = 'GRADLE_BUILD_ACTION_CACHE_RESTORED';
|
const CACHE_RESTORED_VAR = 'GRADLE_BUILD_ACTION_CACHE_RESTORED';
|
||||||
function restore(gradleUserHome, cacheListener) {
|
function restore(userHome, gradleUserHome, cacheListener) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
if (process.env[CACHE_RESTORED_VAR]) {
|
if (process.env[CACHE_RESTORED_VAR]) {
|
||||||
core.info('Cache only restored on first action step.');
|
core.info('Cache only restored on first action step.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
core.exportVariable(CACHE_RESTORED_VAR, true);
|
core.exportVariable(CACHE_RESTORED_VAR, true);
|
||||||
const gradleStateCache = new cache_base_1.GradleStateCache(gradleUserHome);
|
const gradleStateCache = new cache_base_1.GradleStateCache(userHome, gradleUserHome);
|
||||||
if ((0, cache_utils_1.isCacheDisabled)()) {
|
if ((0, cache_utils_1.isCacheDisabled)()) {
|
||||||
core.info('Cache is disabled: will not restore state from previous builds.');
|
core.info('Cache is disabled: will not restore state from previous builds.');
|
||||||
gradleStateCache.init();
|
gradleStateCache.init();
|
||||||
@@ -137275,7 +137265,7 @@ function restore(gradleUserHome, cacheListener) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.restore = restore;
|
exports.restore = restore;
|
||||||
function save(gradleUserHome, cacheListener, daemonController) {
|
function save(userHome, gradleUserHome, cacheListener, daemonController) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
if ((0, cache_utils_1.isCacheDisabled)()) {
|
if ((0, cache_utils_1.isCacheDisabled)()) {
|
||||||
core.info('Cache is disabled: will not save state for later builds.');
|
core.info('Cache is disabled: will not save state for later builds.');
|
||||||
@@ -137302,7 +137292,7 @@ function save(gradleUserHome, cacheListener, daemonController) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
yield core.group('Caching Gradle state', () => __awaiter(this, void 0, void 0, function* () {
|
yield core.group('Caching Gradle state', () => __awaiter(this, void 0, void 0, function* () {
|
||||||
return new cache_base_1.GradleStateCache(gradleUserHome).save(cacheListener);
|
return new cache_base_1.GradleStateCache(userHome, gradleUserHome).save(cacheListener);
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -138159,10 +138149,12 @@ const build_results_1 = __nccwpck_require__(82107);
|
|||||||
const cache_reporting_1 = __nccwpck_require__(66674);
|
const cache_reporting_1 = __nccwpck_require__(66674);
|
||||||
const daemon_controller_1 = __nccwpck_require__(85146);
|
const daemon_controller_1 = __nccwpck_require__(85146);
|
||||||
const GRADLE_SETUP_VAR = 'GRADLE_BUILD_ACTION_SETUP_COMPLETED';
|
const GRADLE_SETUP_VAR = 'GRADLE_BUILD_ACTION_SETUP_COMPLETED';
|
||||||
|
const USER_HOME = 'USER_HOME';
|
||||||
const GRADLE_USER_HOME = 'GRADLE_USER_HOME';
|
const GRADLE_USER_HOME = 'GRADLE_USER_HOME';
|
||||||
const CACHE_LISTENER = 'CACHE_LISTENER';
|
const CACHE_LISTENER = 'CACHE_LISTENER';
|
||||||
function setup() {
|
function setup() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
const userHome = yield determineUserHome();
|
||||||
const gradleUserHome = yield determineGradleUserHome();
|
const gradleUserHome = yield determineGradleUserHome();
|
||||||
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.');
|
||||||
@@ -138170,9 +138162,10 @@ function setup() {
|
|||||||
}
|
}
|
||||||
core.exportVariable(GRADLE_SETUP_VAR, true);
|
core.exportVariable(GRADLE_SETUP_VAR, true);
|
||||||
core.saveState(GRADLE_SETUP_VAR, true);
|
core.saveState(GRADLE_SETUP_VAR, true);
|
||||||
|
core.saveState(USER_HOME, userHome);
|
||||||
core.saveState(GRADLE_USER_HOME, gradleUserHome);
|
core.saveState(GRADLE_USER_HOME, gradleUserHome);
|
||||||
const cacheListener = new cache_reporting_1.CacheListener();
|
const cacheListener = new cache_reporting_1.CacheListener();
|
||||||
yield caches.restore(gradleUserHome, cacheListener);
|
yield caches.restore(userHome, gradleUserHome, cacheListener);
|
||||||
core.saveState(CACHE_LISTENER, cacheListener.stringify());
|
core.saveState(CACHE_LISTENER, cacheListener.stringify());
|
||||||
yield dependencyGraph.setup(params.getDependencyGraphOption());
|
yield dependencyGraph.setup(params.getDependencyGraphOption());
|
||||||
});
|
});
|
||||||
@@ -138186,10 +138179,11 @@ function complete() {
|
|||||||
}
|
}
|
||||||
core.info('In post-action step');
|
core.info('In post-action step');
|
||||||
const buildResults = (0, build_results_1.loadBuildResults)();
|
const buildResults = (0, build_results_1.loadBuildResults)();
|
||||||
|
const userHome = core.getState(USER_HOME);
|
||||||
const gradleUserHome = core.getState(GRADLE_USER_HOME);
|
const gradleUserHome = core.getState(GRADLE_USER_HOME);
|
||||||
const cacheListener = cache_reporting_1.CacheListener.rehydrate(core.getState(CACHE_LISTENER));
|
const cacheListener = cache_reporting_1.CacheListener.rehydrate(core.getState(CACHE_LISTENER));
|
||||||
const daemonController = new daemon_controller_1.DaemonController(buildResults);
|
const daemonController = new daemon_controller_1.DaemonController(buildResults);
|
||||||
yield caches.save(gradleUserHome, cacheListener, daemonController);
|
yield caches.save(userHome, gradleUserHome, cacheListener, daemonController);
|
||||||
yield jobSummary.generateJobSummary(buildResults, cacheListener);
|
yield jobSummary.generateJobSummary(buildResults, cacheListener);
|
||||||
yield dependencyGraph.complete(params.getDependencyGraphOption());
|
yield dependencyGraph.complete(params.getDependencyGraphOption());
|
||||||
core.info('Completed post-action step');
|
core.info('Completed post-action step');
|
||||||
|
2
dist/post/index.js.map
vendored
2
dist/post/index.js.map
vendored
File diff suppressed because one or more lines are too long
@@ -17,22 +17,24 @@ export class GradleStateCache {
|
|||||||
private cacheName: string
|
private cacheName: string
|
||||||
private cacheDescription: string
|
private cacheDescription: string
|
||||||
|
|
||||||
|
protected readonly userHome: string
|
||||||
protected readonly gradleUserHome: string
|
protected readonly gradleUserHome: string
|
||||||
|
|
||||||
constructor(gradleUserHome: string) {
|
constructor(userHome: string, gradleUserHome: string) {
|
||||||
|
this.userHome = userHome
|
||||||
this.gradleUserHome = gradleUserHome
|
this.gradleUserHome = gradleUserHome
|
||||||
this.cacheName = 'gradle'
|
this.cacheName = 'gradle'
|
||||||
this.cacheDescription = 'Gradle User Home'
|
this.cacheDescription = 'Gradle User Home'
|
||||||
}
|
}
|
||||||
|
|
||||||
init(): void {
|
init(): void {
|
||||||
const actionCacheDir = path.resolve(this.gradleUserHome, '.gradle-build-action')
|
this.initializeGradleUserHome()
|
||||||
fs.mkdirSync(actionCacheDir, {recursive: true})
|
|
||||||
|
|
||||||
const initScriptsDir = path.resolve(this.gradleUserHome, 'init.d')
|
// Export the GRADLE_ENCRYPTION_KEY variable if provided
|
||||||
fs.mkdirSync(initScriptsDir, {recursive: true})
|
const encryptionKey = params.getCacheEncryptionKey()
|
||||||
|
if (encryptionKey) {
|
||||||
this.initializeGradleUserHome(this.gradleUserHome, initScriptsDir)
|
core.exportVariable('GRADLE_ENCRYPTION_KEY', encryptionKey)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cacheOutputExists(): boolean {
|
cacheOutputExists(): boolean {
|
||||||
@@ -181,23 +183,21 @@ export class GradleStateCache {
|
|||||||
return path.resolve(this.gradleUserHome, rawPath)
|
return path.resolve(this.gradleUserHome, rawPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
private initializeGradleUserHome(gradleUserHome: string, initScriptsDir: string): void {
|
private initializeGradleUserHome(): void {
|
||||||
// Ensure that pre-installed java versions are detected. Only add property if it isn't already defined.
|
// Create a directory for storing action metadata
|
||||||
const gradleProperties = path.resolve(gradleUserHome, 'gradle.properties')
|
const actionCacheDir = path.resolve(this.gradleUserHome, '.gradle-build-action')
|
||||||
const existingGradleProperties = fs.existsSync(gradleProperties)
|
fs.mkdirSync(actionCacheDir, {recursive: true})
|
||||||
? fs.readFileSync(gradleProperties, 'utf8')
|
|
||||||
: ''
|
this.copyInitScripts()
|
||||||
if (!existingGradleProperties.includes('org.gradle.java.installations.fromEnv=')) {
|
|
||||||
fs.appendFileSync(
|
// Copy the default toolchain definitions to `~/.m2/toolchains.xml`
|
||||||
gradleProperties,
|
this.registerToolchains()
|
||||||
`
|
|
||||||
# Auto-detect pre-installed JDKs
|
|
||||||
org.gradle.java.installations.fromEnv=JAVA_HOME_8_X64,JAVA_HOME_11_X64,JAVA_HOME_17_X64
|
|
||||||
`
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy init scripts from src/resources
|
private copyInitScripts(): void {
|
||||||
|
// Copy init scripts from src/resources to Gradle UserHome
|
||||||
|
const initScriptsDir = path.resolve(this.gradleUserHome, 'init.d')
|
||||||
|
fs.mkdirSync(initScriptsDir, {recursive: true})
|
||||||
const initScriptFilenames = [
|
const initScriptFilenames = [
|
||||||
'gradle-build-action.build-result-capture.init.gradle',
|
'gradle-build-action.build-result-capture.init.gradle',
|
||||||
'gradle-build-action.build-result-capture-service.plugin.groovy',
|
'gradle-build-action.build-result-capture-service.plugin.groovy',
|
||||||
@@ -206,15 +206,36 @@ org.gradle.java.installations.fromEnv=JAVA_HOME_8_X64,JAVA_HOME_11_X64,JAVA_HOME
|
|||||||
'gradle-build-action.inject-gradle-enterprise.init.gradle'
|
'gradle-build-action.inject-gradle-enterprise.init.gradle'
|
||||||
]
|
]
|
||||||
for (const initScriptFilename of initScriptFilenames) {
|
for (const initScriptFilename of initScriptFilenames) {
|
||||||
const initScriptContent = this.readInitScriptAsString(initScriptFilename)
|
const initScriptContent = this.readResourceFileAsString('init-scripts', initScriptFilename)
|
||||||
const initScriptPath = path.resolve(initScriptsDir, initScriptFilename)
|
const initScriptPath = path.resolve(initScriptsDir, initScriptFilename)
|
||||||
fs.writeFileSync(initScriptPath, initScriptContent)
|
fs.writeFileSync(initScriptPath, initScriptContent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private readInitScriptAsString(resource: string): string {
|
private registerToolchains(): void {
|
||||||
|
const preInstalledToolchains = this.readResourceFileAsString('toolchains.xml')
|
||||||
|
const m2dir = path.resolve(this.userHome, '.m2')
|
||||||
|
const toolchainXmlTarget = path.resolve(m2dir, 'toolchains.xml')
|
||||||
|
if (!fs.existsSync(toolchainXmlTarget)) {
|
||||||
|
// Write a new toolchains.xml file if it doesn't exist
|
||||||
|
fs.mkdirSync(m2dir, {recursive: true})
|
||||||
|
fs.writeFileSync(toolchainXmlTarget, preInstalledToolchains)
|
||||||
|
|
||||||
|
core.info(`Wrote default JDK locations to ${toolchainXmlTarget}`)
|
||||||
|
} else {
|
||||||
|
// Merge into an existing toolchains.xml file
|
||||||
|
const existingToolchainContent = fs.readFileSync(toolchainXmlTarget, 'utf8')
|
||||||
|
const appendedContent = preInstalledToolchains.split('<toolchains>').pop()!
|
||||||
|
const mergedContent = existingToolchainContent.replace('</toolchains>', appendedContent)
|
||||||
|
|
||||||
|
fs.writeFileSync(toolchainXmlTarget, mergedContent)
|
||||||
|
core.info(`Merged default JDK locations into ${toolchainXmlTarget}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private readResourceFileAsString(...paths: string[]): string {
|
||||||
// Resolving relative to __dirname will allow node to find the resource at runtime
|
// Resolving relative to __dirname will allow node to find the resource at runtime
|
||||||
const absolutePath = path.resolve(__dirname, '..', '..', 'src', 'resources', 'init-scripts', resource)
|
const absolutePath = path.resolve(__dirname, '..', '..', 'src', 'resources', ...paths)
|
||||||
return fs.readFileSync(absolutePath, 'utf8')
|
return fs.readFileSync(absolutePath, 'utf8')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
import path from 'path'
|
import path from 'path'
|
||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
import crypto from 'crypto'
|
|
||||||
import * as core from '@actions/core'
|
import * as core from '@actions/core'
|
||||||
import * as glob from '@actions/glob'
|
import * as glob from '@actions/glob'
|
||||||
import * as semver from 'semver'
|
import * as semver from 'semver'
|
||||||
@@ -383,8 +382,6 @@ export class ConfigurationCacheEntryExtractor extends AbstractEntryExtractor {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const encryptionKey = this.getAESEncryptionKey()
|
|
||||||
core.exportVariable('GRADLE_ENCRYPTION_KEY', encryptionKey)
|
|
||||||
return await super.restore(listener)
|
return await super.restore(listener)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -416,12 +413,6 @@ export class ConfigurationCacheEntryExtractor extends AbstractEntryExtractor {
|
|||||||
await super.extract(listener)
|
await super.extract(listener)
|
||||||
}
|
}
|
||||||
|
|
||||||
private getAESEncryptionKey(): string | undefined {
|
|
||||||
const secret = params.getCacheEncryptionKey()
|
|
||||||
const key = crypto.pbkdf2Sync(secret, '', 1000, 16, 'sha256')
|
|
||||||
return key.toString('base64')
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extract cache entries for the configuration cache in each project.
|
* Extract cache entries for the configuration cache in each project.
|
||||||
*/
|
*/
|
||||||
|
@@ -86,10 +86,10 @@ export function generateCacheKey(cacheName: string): CacheKey {
|
|||||||
// At the most general level, share caches for all executions on the same OS
|
// At the most general level, share caches for all executions on the same OS
|
||||||
const cacheKeyForEnvironment = `${cacheKeyBase}|${getCacheKeyEnvironment()}`
|
const cacheKeyForEnvironment = `${cacheKeyBase}|${getCacheKeyEnvironment()}`
|
||||||
|
|
||||||
// Prefer caches that run this job
|
// Then prefer caches that run job with the same ID
|
||||||
const cacheKeyForJob = `${cacheKeyForEnvironment}|${getCacheKeyJob()}`
|
const cacheKeyForJob = `${cacheKeyForEnvironment}|${getCacheKeyJob()}`
|
||||||
|
|
||||||
// Prefer (even more) jobs that run this job with the same context (matrix)
|
// Prefer (even more) jobs that run this job in the same workflow with the same context (matrix)
|
||||||
const cacheKeyForJobContext = `${cacheKeyForJob}[${getCacheKeyJobInstance()}]`
|
const cacheKeyForJobContext = `${cacheKeyForJob}[${getCacheKeyJobInstance()}]`
|
||||||
|
|
||||||
// Exact match on Git SHA
|
// Exact match on Git SHA
|
||||||
@@ -113,12 +113,7 @@ function getCacheKeyEnvironment(): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getCacheKeyJob(): string {
|
function getCacheKeyJob(): string {
|
||||||
return process.env[CACHE_KEY_JOB_VAR] || getCacheKeyForJob(github.context.workflow, github.context.job)
|
return process.env[CACHE_KEY_JOB_VAR] || github.context.job
|
||||||
}
|
|
||||||
|
|
||||||
export function getCacheKeyForJob(workflowName: string, jobId: string): string {
|
|
||||||
const sanitizedWorkflow = workflowName.replace(/,/g, '').toLowerCase()
|
|
||||||
return `${sanitizedWorkflow}-${jobId}`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getCacheKeyJobInstance(): string {
|
function getCacheKeyJobInstance(): string {
|
||||||
@@ -127,25 +122,11 @@ function getCacheKeyJobInstance(): string {
|
|||||||
return override
|
return override
|
||||||
}
|
}
|
||||||
|
|
||||||
// By default, we hash the full `matrix` data for the run, to uniquely identify this job invocation
|
// By default, we hash the workflow name and the full `matrix` data for the run, to uniquely identify this job invocation
|
||||||
// The only way we can obtain the `matrix` data is via the `workflow-job-context` parameter in action.yml.
|
// The only way we can obtain the `matrix` data is via the `workflow-job-context` parameter in action.yml.
|
||||||
|
const workflowName = github.context.workflow
|
||||||
const workflowJobContext = params.getJobMatrix()
|
const workflowJobContext = params.getJobMatrix()
|
||||||
return hashStrings([workflowJobContext])
|
return hashStrings([workflowName, workflowJobContext])
|
||||||
}
|
|
||||||
|
|
||||||
export function getUniqueLabelForJobInstance(): string {
|
|
||||||
return getUniqueLabelForJobInstanceValues(github.context.workflow, github.context.job, params.getJobMatrix())
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getUniqueLabelForJobInstanceValues(workflow: string, jobId: string, matrixJson: string): string {
|
|
||||||
const matrix = JSON.parse(matrixJson)
|
|
||||||
const matrixString = Object.values(matrix).join('-')
|
|
||||||
const label = matrixString ? `${workflow}-${jobId}-${matrixString}` : `${workflow}-${jobId}`
|
|
||||||
return sanitize(label)
|
|
||||||
}
|
|
||||||
|
|
||||||
function sanitize(value: string): string {
|
|
||||||
return value.replace(/[^a-zA-Z0-9_-]/g, '').toLowerCase()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getCacheKeyJobExecution(): string {
|
function getCacheKeyJobExecution(): string {
|
||||||
|
@@ -13,7 +13,7 @@ import {CacheCleaner} from './cache-cleaner'
|
|||||||
|
|
||||||
const CACHE_RESTORED_VAR = 'GRADLE_BUILD_ACTION_CACHE_RESTORED'
|
const CACHE_RESTORED_VAR = 'GRADLE_BUILD_ACTION_CACHE_RESTORED'
|
||||||
|
|
||||||
export async function restore(gradleUserHome: string, cacheListener: CacheListener): Promise<void> {
|
export async function restore(userHome: string, gradleUserHome: string, cacheListener: CacheListener): Promise<void> {
|
||||||
// Bypass restore cache on all but first action step in workflow.
|
// Bypass restore cache on all but first action step in workflow.
|
||||||
if (process.env[CACHE_RESTORED_VAR]) {
|
if (process.env[CACHE_RESTORED_VAR]) {
|
||||||
core.info('Cache only restored on first action step.')
|
core.info('Cache only restored on first action step.')
|
||||||
@@ -21,7 +21,7 @@ export async function restore(gradleUserHome: string, cacheListener: CacheListen
|
|||||||
}
|
}
|
||||||
core.exportVariable(CACHE_RESTORED_VAR, true)
|
core.exportVariable(CACHE_RESTORED_VAR, true)
|
||||||
|
|
||||||
const gradleStateCache = new GradleStateCache(gradleUserHome)
|
const gradleStateCache = new GradleStateCache(userHome, gradleUserHome)
|
||||||
|
|
||||||
if (isCacheDisabled()) {
|
if (isCacheDisabled()) {
|
||||||
core.info('Cache is disabled: will not restore state from previous builds.')
|
core.info('Cache is disabled: will not restore state from previous builds.')
|
||||||
@@ -65,6 +65,7 @@ export async function restore(gradleUserHome: string, cacheListener: CacheListen
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function save(
|
export async function save(
|
||||||
|
userHome: string,
|
||||||
gradleUserHome: string,
|
gradleUserHome: string,
|
||||||
cacheListener: CacheListener,
|
cacheListener: CacheListener,
|
||||||
daemonController: DaemonController
|
daemonController: DaemonController
|
||||||
@@ -98,6 +99,6 @@ export async function save(
|
|||||||
}
|
}
|
||||||
|
|
||||||
await core.group('Caching Gradle state', async () => {
|
await core.group('Caching Gradle state', async () => {
|
||||||
return new GradleStateCache(gradleUserHome).save(cacheListener)
|
return new GradleStateCache(userHome, gradleUserHome).save(cacheListener)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
44
src/resources/toolchains.xml
Normal file
44
src/resources/toolchains.xml
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<toolchains>
|
||||||
|
<!-- JDK Toolchains installed by default on GitHub-hosted runners -->
|
||||||
|
<toolchain>
|
||||||
|
<type>jdk</type>
|
||||||
|
<provides>
|
||||||
|
<version>8</version>
|
||||||
|
<vendor>Eclipse Temurin</vendor>
|
||||||
|
</provides>
|
||||||
|
<configuration>
|
||||||
|
<jdkHome>${env.JAVA_HOME_8_X64}</jdkHome>
|
||||||
|
</configuration>
|
||||||
|
</toolchain>
|
||||||
|
<toolchain>
|
||||||
|
<type>jdk</type>
|
||||||
|
<provides>
|
||||||
|
<version>11</version>
|
||||||
|
<vendor>Eclipse Temurin</vendor>
|
||||||
|
</provides>
|
||||||
|
<configuration>
|
||||||
|
<jdkHome>${env.JAVA_HOME_11_X64}</jdkHome>
|
||||||
|
</configuration>
|
||||||
|
</toolchain>
|
||||||
|
<toolchain>
|
||||||
|
<type>jdk</type>
|
||||||
|
<provides>
|
||||||
|
<version>17</version>
|
||||||
|
<vendor>Eclipse Temurin</vendor>
|
||||||
|
</provides>
|
||||||
|
<configuration>
|
||||||
|
<jdkHome>${env.JAVA_HOME_17_X64}</jdkHome>
|
||||||
|
</configuration>
|
||||||
|
</toolchain>
|
||||||
|
<toolchain>
|
||||||
|
<type>jdk</type>
|
||||||
|
<provides>
|
||||||
|
<version>21</version>
|
||||||
|
<vendor>Eclipse Temurin</vendor>
|
||||||
|
</provides>
|
||||||
|
<configuration>
|
||||||
|
<jdkHome>${env.JAVA_HOME_21_X64}</jdkHome>
|
||||||
|
</configuration>
|
||||||
|
</toolchain>
|
||||||
|
</toolchains>
|
@@ -13,10 +13,12 @@ import {CacheListener} from './cache-reporting'
|
|||||||
import {DaemonController} from './daemon-controller'
|
import {DaemonController} from './daemon-controller'
|
||||||
|
|
||||||
const GRADLE_SETUP_VAR = 'GRADLE_BUILD_ACTION_SETUP_COMPLETED'
|
const GRADLE_SETUP_VAR = 'GRADLE_BUILD_ACTION_SETUP_COMPLETED'
|
||||||
|
const USER_HOME = 'USER_HOME'
|
||||||
const GRADLE_USER_HOME = 'GRADLE_USER_HOME'
|
const GRADLE_USER_HOME = 'GRADLE_USER_HOME'
|
||||||
const CACHE_LISTENER = 'CACHE_LISTENER'
|
const CACHE_LISTENER = 'CACHE_LISTENER'
|
||||||
|
|
||||||
export async function setup(): Promise<void> {
|
export async function setup(): Promise<void> {
|
||||||
|
const userHome = await determineUserHome()
|
||||||
const gradleUserHome = await determineGradleUserHome()
|
const gradleUserHome = await determineGradleUserHome()
|
||||||
|
|
||||||
// Bypass setup on all but first action step in workflow.
|
// Bypass setup on all but first action step in workflow.
|
||||||
@@ -29,11 +31,12 @@ export async function setup(): Promise<void> {
|
|||||||
// Record setup complete: visible in post-action, to control action completion
|
// Record setup complete: visible in post-action, to control action completion
|
||||||
core.saveState(GRADLE_SETUP_VAR, true)
|
core.saveState(GRADLE_SETUP_VAR, true)
|
||||||
|
|
||||||
// Save the Gradle User Home for use in the post-action step.
|
// Save the User Home and Gradle User Home for use in the post-action step.
|
||||||
|
core.saveState(USER_HOME, userHome)
|
||||||
core.saveState(GRADLE_USER_HOME, gradleUserHome)
|
core.saveState(GRADLE_USER_HOME, gradleUserHome)
|
||||||
|
|
||||||
const cacheListener = new CacheListener()
|
const cacheListener = new CacheListener()
|
||||||
await caches.restore(gradleUserHome, cacheListener)
|
await caches.restore(userHome, gradleUserHome, cacheListener)
|
||||||
|
|
||||||
core.saveState(CACHE_LISTENER, cacheListener.stringify())
|
core.saveState(CACHE_LISTENER, cacheListener.stringify())
|
||||||
|
|
||||||
@@ -49,11 +52,12 @@ export async function complete(): Promise<void> {
|
|||||||
|
|
||||||
const buildResults = loadBuildResults()
|
const buildResults = loadBuildResults()
|
||||||
|
|
||||||
|
const userHome = core.getState(USER_HOME)
|
||||||
const gradleUserHome = core.getState(GRADLE_USER_HOME)
|
const gradleUserHome = core.getState(GRADLE_USER_HOME)
|
||||||
const cacheListener: CacheListener = CacheListener.rehydrate(core.getState(CACHE_LISTENER))
|
const cacheListener: CacheListener = CacheListener.rehydrate(core.getState(CACHE_LISTENER))
|
||||||
const daemonController = new DaemonController(buildResults)
|
const daemonController = new DaemonController(buildResults)
|
||||||
|
|
||||||
await caches.save(gradleUserHome, cacheListener, daemonController)
|
await caches.save(userHome, gradleUserHome, cacheListener, daemonController)
|
||||||
|
|
||||||
await jobSummary.generateJobSummary(buildResults, cacheListener)
|
await jobSummary.generateJobSummary(buildResults, cacheListener)
|
||||||
|
|
||||||
|
@@ -17,10 +17,4 @@ describe('cacheUtils-utils', () => {
|
|||||||
expect(posixHash).toBe(windowsHash)
|
expect(posixHash).toBe(windowsHash)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
describe('sanitizes workflow name in cache key', () => {
|
|
||||||
it('with comma', () => {
|
|
||||||
const cacheKey = cacheUtils.getCacheKeyForJob("Workflow, with,commas", "JOB_ID")
|
|
||||||
expect(cacheKey).toBe('workflow withcommas-JOB_ID')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user