mirror of
https://github.com/gradle/gradle-build-action.git
synced 2024-11-24 09:10:57 -05:00
Make it easy to publish to scans.gradle.com (#1045)
This commit is contained in:
commit
1b6cac1f97
11 changed files with 305 additions and 24 deletions
|
@ -19,14 +19,15 @@ env:
|
||||||
DOWNLOAD_DIST: ${{ inputs.download-dist }}
|
DOWNLOAD_DIST: ${{ inputs.download-dist }}
|
||||||
GRADLE_BUILD_ACTION_CACHE_KEY_PREFIX: provision-gradle-versions-${{ inputs.cache-key-prefix }}
|
GRADLE_BUILD_ACTION_CACHE_KEY_PREFIX: provision-gradle-versions-${{ inputs.cache-key-prefix }}
|
||||||
GRADLE_BUILD_ACTION_CACHE_DEBUG_ENABLED: true
|
GRADLE_BUILD_ACTION_CACHE_DEBUG_ENABLED: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
inject-develocity:
|
||||||
|
env:
|
||||||
DEVELOCITY_INJECTION_ENABLED: true
|
DEVELOCITY_INJECTION_ENABLED: true
|
||||||
DEVELOCITY_URL: https://ge.solutions-team.gradle.com
|
DEVELOCITY_URL: https://ge.solutions-team.gradle.com
|
||||||
DEVELOCITY_PLUGIN_VERSION: 3.16.1
|
DEVELOCITY_PLUGIN_VERSION: 3.16.1
|
||||||
DEVELOCITY_CCUD_PLUGIN_VERSION: 1.12.1
|
DEVELOCITY_CCUD_PLUGIN_VERSION: 1.12.1
|
||||||
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} # This env var has not (yet) been renamed/aliased in GE plugin 3.16.1
|
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} # This env var has not (yet) been renamed/aliased in GE plugin 3.16.1
|
||||||
|
|
||||||
jobs:
|
|
||||||
inject-develocity:
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
gradle: [current, 7.6.2, 6.9.4, 5.6.4]
|
gradle: [current, 7.6.2, 6.9.4, 5.6.4]
|
||||||
|
@ -58,3 +59,39 @@ jobs:
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
core.setFailed('No Build Scan detected')
|
core.setFailed('No Build Scan detected')
|
||||||
|
|
||||||
|
build-scan-publish:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
gradle: [current, 7.6.2, 6.9.4, 5.6.4]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout sources
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: Download distribution if required
|
||||||
|
uses: ./.github/actions/download-dist
|
||||||
|
- name: Setup Java
|
||||||
|
uses: actions/setup-java@v4
|
||||||
|
with:
|
||||||
|
distribution: temurin
|
||||||
|
java-version: 8
|
||||||
|
- name: Setup Gradle
|
||||||
|
id: setup-gradle
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
cache-read-only: false # For testing, allow writing cache entries on non-default branches
|
||||||
|
gradle-version: ${{ matrix.gradle }}
|
||||||
|
build-scan-publish: true
|
||||||
|
build-scan-terms-of-service-url: "https://gradle.com/terms-of-service"
|
||||||
|
build-scan-terms-of-service-agree: "yes"
|
||||||
|
- name: Run Gradle build
|
||||||
|
id: gradle
|
||||||
|
working-directory: .github/workflow-samples/no-ge
|
||||||
|
run: gradle help
|
||||||
|
- name: Check Build Scan url
|
||||||
|
if: ${{ !steps.gradle.outputs.build-scan-url }}
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
core.setFailed('No Build Scan detected')
|
||||||
|
|
||||||
|
|
26
README.md
26
README.md
|
@ -861,10 +861,26 @@ The `init-script` supports a number of additional configuration parameters that
|
||||||
## Publishing to scans.gradle.com
|
## Publishing to scans.gradle.com
|
||||||
|
|
||||||
Develocity injection is designed to enable publishing of build scans to a Develocity instance,
|
Develocity injection is designed to enable publishing of build scans to a Develocity instance,
|
||||||
and is not suitable for publishing to the public Build Scans instance (https://scans.gradle.com).
|
but is also useful for publishing to the public Build Scans instance (https://scans.gradle.com).
|
||||||
|
|
||||||
In order to publish Build Scans to scans.gradle.com, you need to:
|
To publish to https://scans.gradle.com, you must specify in your workflow that you accept the [Gradle Terms of Service](https://gradle.com/terms-of-service).
|
||||||
- Apply the Develocity plugin to your build configuration ([see docs](https://docs.gradle.com/enterprise/get-started/#applying_the_plugin))
|
|
||||||
- Programmatically accept the Terms of Service for scans.gradle.com ([see docs](https://docs.gradle.com/enterprise/gradle-plugin/#connecting_to_scans_gradle_com))
|
```yaml
|
||||||
- Execute the build with `--scan` or configure your build with `publishAlways()` ([see docs](https://docs.gradle.com/enterprise/get-started/#always_publishing_a_build_scan))
|
name: Run build and publish Build Scan
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Setup Gradle to publish build scans
|
||||||
|
uses: gradle/gradle-build-action@v2
|
||||||
|
with:
|
||||||
|
build-scan-publish: true
|
||||||
|
build-scan-terms-of-service-url: "https://gradle.com/terms-of-service"
|
||||||
|
build-scan-terms-of-service-agree: "yes"
|
||||||
|
|
||||||
|
- name: Run a Gradle build - a build scan will be published automatically
|
||||||
|
run: ./gradlew build
|
||||||
|
```
|
||||||
|
|
||||||
|
|
15
action.yml
15
action.yml
|
@ -82,6 +82,21 @@ inputs:
|
||||||
description: Specifies the number of days to retain any artifacts generated by the action. If not set, the default retention settings for the repository will apply.
|
description: Specifies the number of days to retain any artifacts generated by the action. If not set, the default retention settings for the repository will apply.
|
||||||
required: false
|
required: false
|
||||||
|
|
||||||
|
build-scan-publish:
|
||||||
|
description: |
|
||||||
|
Set to 'true' to automatically publish build results as a Build Scan on scans.gradle.com.
|
||||||
|
For publication to succeed without user input, you must also provide values for `build-scan-terms-of-service-url` and 'build-scan-terms-of-service-agree'.
|
||||||
|
required: false
|
||||||
|
default: false
|
||||||
|
|
||||||
|
build-scan-terms-of-service-url:
|
||||||
|
description: The URL to the Build Scan® terms of service. This input must be set to 'https://gradle.com/terms-of-service'.
|
||||||
|
required: false
|
||||||
|
|
||||||
|
build-scan-terms-of-service-agree:
|
||||||
|
description: Indicate that you agree to the Build Scan® terms of service. This input value must be "yes".
|
||||||
|
required: false
|
||||||
|
|
||||||
# DEPRECATED ACTION INPUTS
|
# DEPRECATED ACTION INPUTS
|
||||||
arguments:
|
arguments:
|
||||||
description: Gradle command line arguments (supports multi-line input)
|
description: Gradle command line arguments (supports multi-line input)
|
||||||
|
|
75
dist/main/index.js
vendored
75
dist/main/index.js
vendored
|
@ -138544,6 +138544,65 @@ function loadBuildResults() {
|
||||||
exports.loadBuildResults = loadBuildResults;
|
exports.loadBuildResults = loadBuildResults;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 85772:
|
||||||
|
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||||
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc);
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
|
exports.setup = void 0;
|
||||||
|
const core = __importStar(__nccwpck_require__(42186));
|
||||||
|
const input_params_1 = __nccwpck_require__(23885);
|
||||||
|
function setup() {
|
||||||
|
if ((0, input_params_1.getBuildScanPublishEnabled)() && verifyTermsOfServiceAgreement()) {
|
||||||
|
maybeExportVariable('DEVELOCITY_INJECTION_ENABLED', 'true');
|
||||||
|
maybeExportVariable('DEVELOCITY_PLUGIN_VERSION', '3.16.1');
|
||||||
|
maybeExportVariable('DEVELOCITY_CCUD_PLUGIN_VERSION', '1.12.1');
|
||||||
|
maybeExportVariable('BUILD_SCAN_TERMS_OF_SERVICE_URL', (0, input_params_1.getBuildScanTermsOfServiceUrl)());
|
||||||
|
maybeExportVariable('BUILD_SCAN_TERMS_OF_SERVICE_AGREE', (0, input_params_1.getBuildScanTermsOfServiceAgree)());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.setup = setup;
|
||||||
|
function verifyTermsOfServiceAgreement() {
|
||||||
|
if ((0, input_params_1.getBuildScanTermsOfServiceUrl)() !== 'https://gradle.com/terms-of-service' ||
|
||||||
|
(0, input_params_1.getBuildScanTermsOfServiceAgree)() !== 'yes') {
|
||||||
|
core.warning(`Terms of service must be agreed in order to publish build scans.`);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
function maybeExportVariable(variableName, value) {
|
||||||
|
if (!process.env[variableName]) {
|
||||||
|
core.exportVariable(variableName, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 47591:
|
/***/ 47591:
|
||||||
|
@ -140374,7 +140433,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.JobSummaryOption = exports.DependencyGraphOption = exports.parseNumericInput = exports.getArtifactRetentionDays = exports.getDependencyGraphContinueOnFailure = exports.getDependencyGraphOption = exports.getPRCommentOption = exports.getJobSummaryOption = exports.isJobSummaryEnabled = exports.getGithubToken = exports.getJobMatrix = exports.getArguments = exports.getGradleVersion = exports.getBuildRootDirectory = exports.getCacheExcludes = exports.getCacheIncludes = exports.getCacheEncryptionKey = exports.isCacheCleanupEnabled = exports.isCacheDebuggingEnabled = exports.isCacheStrictMatch = exports.isCacheOverwriteExisting = exports.isCacheWriteOnly = exports.isCacheReadOnly = exports.isCacheDisabled = void 0;
|
exports.JobSummaryOption = exports.DependencyGraphOption = exports.parseNumericInput = exports.getArtifactRetentionDays = exports.getDependencyGraphContinueOnFailure = exports.getDependencyGraphOption = exports.getBuildScanTermsOfServiceAgree = exports.getBuildScanTermsOfServiceUrl = exports.getBuildScanPublishEnabled = exports.getPRCommentOption = exports.getJobSummaryOption = exports.isJobSummaryEnabled = exports.getGithubToken = exports.getJobMatrix = exports.getArguments = exports.getGradleVersion = exports.getBuildRootDirectory = exports.getCacheExcludes = exports.getCacheIncludes = exports.getCacheEncryptionKey = exports.isCacheCleanupEnabled = exports.isCacheDebuggingEnabled = exports.isCacheStrictMatch = exports.isCacheOverwriteExisting = exports.isCacheWriteOnly = exports.isCacheReadOnly = exports.isCacheDisabled = void 0;
|
||||||
const core = __importStar(__nccwpck_require__(42186));
|
const core = __importStar(__nccwpck_require__(42186));
|
||||||
const string_argv_1 = __nccwpck_require__(19663);
|
const string_argv_1 = __nccwpck_require__(19663);
|
||||||
function isCacheDisabled() {
|
function isCacheDisabled() {
|
||||||
|
@ -140450,6 +140509,18 @@ function getPRCommentOption() {
|
||||||
return parseJobSummaryOption('add-job-summary-as-pr-comment');
|
return parseJobSummaryOption('add-job-summary-as-pr-comment');
|
||||||
}
|
}
|
||||||
exports.getPRCommentOption = getPRCommentOption;
|
exports.getPRCommentOption = getPRCommentOption;
|
||||||
|
function getBuildScanPublishEnabled() {
|
||||||
|
return getBooleanInput('build-scan-publish');
|
||||||
|
}
|
||||||
|
exports.getBuildScanPublishEnabled = getBuildScanPublishEnabled;
|
||||||
|
function getBuildScanTermsOfServiceUrl() {
|
||||||
|
return core.getInput('build-scan-terms-of-service-url');
|
||||||
|
}
|
||||||
|
exports.getBuildScanTermsOfServiceUrl = getBuildScanTermsOfServiceUrl;
|
||||||
|
function getBuildScanTermsOfServiceAgree() {
|
||||||
|
return core.getInput('build-scan-terms-of-service-agree');
|
||||||
|
}
|
||||||
|
exports.getBuildScanTermsOfServiceAgree = getBuildScanTermsOfServiceAgree;
|
||||||
function parseJobSummaryOption(paramName) {
|
function parseJobSummaryOption(paramName) {
|
||||||
const val = core.getInput(paramName);
|
const val = core.getInput(paramName);
|
||||||
switch (val.toLowerCase().trim()) {
|
switch (val.toLowerCase().trim()) {
|
||||||
|
@ -141100,6 +141171,7 @@ const layout = __importStar(__nccwpck_require__(28182));
|
||||||
const params = __importStar(__nccwpck_require__(23885));
|
const params = __importStar(__nccwpck_require__(23885));
|
||||||
const dependencyGraph = __importStar(__nccwpck_require__(80));
|
const dependencyGraph = __importStar(__nccwpck_require__(80));
|
||||||
const jobSummary = __importStar(__nccwpck_require__(87345));
|
const jobSummary = __importStar(__nccwpck_require__(87345));
|
||||||
|
const buildScan = __importStar(__nccwpck_require__(85772));
|
||||||
const build_results_1 = __nccwpck_require__(82107);
|
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);
|
||||||
|
@ -141123,6 +141195,7 @@ function setup() {
|
||||||
yield caches.restore(userHome, 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());
|
||||||
|
buildScan.setup();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.setup = setup;
|
exports.setup = setup;
|
||||||
|
|
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
75
dist/post/index.js
vendored
75
dist/post/index.js
vendored
|
@ -135997,6 +135997,65 @@ function loadBuildResults() {
|
||||||
exports.loadBuildResults = loadBuildResults;
|
exports.loadBuildResults = loadBuildResults;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 85772:
|
||||||
|
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||||
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc);
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
|
exports.setup = void 0;
|
||||||
|
const core = __importStar(__nccwpck_require__(42186));
|
||||||
|
const input_params_1 = __nccwpck_require__(23885);
|
||||||
|
function setup() {
|
||||||
|
if ((0, input_params_1.getBuildScanPublishEnabled)() && verifyTermsOfServiceAgreement()) {
|
||||||
|
maybeExportVariable('DEVELOCITY_INJECTION_ENABLED', 'true');
|
||||||
|
maybeExportVariable('DEVELOCITY_PLUGIN_VERSION', '3.16.1');
|
||||||
|
maybeExportVariable('DEVELOCITY_CCUD_PLUGIN_VERSION', '1.12.1');
|
||||||
|
maybeExportVariable('BUILD_SCAN_TERMS_OF_SERVICE_URL', (0, input_params_1.getBuildScanTermsOfServiceUrl)());
|
||||||
|
maybeExportVariable('BUILD_SCAN_TERMS_OF_SERVICE_AGREE', (0, input_params_1.getBuildScanTermsOfServiceAgree)());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.setup = setup;
|
||||||
|
function verifyTermsOfServiceAgreement() {
|
||||||
|
if ((0, input_params_1.getBuildScanTermsOfServiceUrl)() !== 'https://gradle.com/terms-of-service' ||
|
||||||
|
(0, input_params_1.getBuildScanTermsOfServiceAgree)() !== 'yes') {
|
||||||
|
core.warning(`Terms of service must be agreed in order to publish build scans.`);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
function maybeExportVariable(variableName, value) {
|
||||||
|
if (!process.env[variableName]) {
|
||||||
|
core.exportVariable(variableName, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 47591:
|
/***/ 47591:
|
||||||
|
@ -137695,7 +137754,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.JobSummaryOption = exports.DependencyGraphOption = exports.parseNumericInput = exports.getArtifactRetentionDays = exports.getDependencyGraphContinueOnFailure = exports.getDependencyGraphOption = exports.getPRCommentOption = exports.getJobSummaryOption = exports.isJobSummaryEnabled = exports.getGithubToken = exports.getJobMatrix = exports.getArguments = exports.getGradleVersion = exports.getBuildRootDirectory = exports.getCacheExcludes = exports.getCacheIncludes = exports.getCacheEncryptionKey = exports.isCacheCleanupEnabled = exports.isCacheDebuggingEnabled = exports.isCacheStrictMatch = exports.isCacheOverwriteExisting = exports.isCacheWriteOnly = exports.isCacheReadOnly = exports.isCacheDisabled = void 0;
|
exports.JobSummaryOption = exports.DependencyGraphOption = exports.parseNumericInput = exports.getArtifactRetentionDays = exports.getDependencyGraphContinueOnFailure = exports.getDependencyGraphOption = exports.getBuildScanTermsOfServiceAgree = exports.getBuildScanTermsOfServiceUrl = exports.getBuildScanPublishEnabled = exports.getPRCommentOption = exports.getJobSummaryOption = exports.isJobSummaryEnabled = exports.getGithubToken = exports.getJobMatrix = exports.getArguments = exports.getGradleVersion = exports.getBuildRootDirectory = exports.getCacheExcludes = exports.getCacheIncludes = exports.getCacheEncryptionKey = exports.isCacheCleanupEnabled = exports.isCacheDebuggingEnabled = exports.isCacheStrictMatch = exports.isCacheOverwriteExisting = exports.isCacheWriteOnly = exports.isCacheReadOnly = exports.isCacheDisabled = void 0;
|
||||||
const core = __importStar(__nccwpck_require__(42186));
|
const core = __importStar(__nccwpck_require__(42186));
|
||||||
const string_argv_1 = __nccwpck_require__(19663);
|
const string_argv_1 = __nccwpck_require__(19663);
|
||||||
function isCacheDisabled() {
|
function isCacheDisabled() {
|
||||||
|
@ -137771,6 +137830,18 @@ function getPRCommentOption() {
|
||||||
return parseJobSummaryOption('add-job-summary-as-pr-comment');
|
return parseJobSummaryOption('add-job-summary-as-pr-comment');
|
||||||
}
|
}
|
||||||
exports.getPRCommentOption = getPRCommentOption;
|
exports.getPRCommentOption = getPRCommentOption;
|
||||||
|
function getBuildScanPublishEnabled() {
|
||||||
|
return getBooleanInput('build-scan-publish');
|
||||||
|
}
|
||||||
|
exports.getBuildScanPublishEnabled = getBuildScanPublishEnabled;
|
||||||
|
function getBuildScanTermsOfServiceUrl() {
|
||||||
|
return core.getInput('build-scan-terms-of-service-url');
|
||||||
|
}
|
||||||
|
exports.getBuildScanTermsOfServiceUrl = getBuildScanTermsOfServiceUrl;
|
||||||
|
function getBuildScanTermsOfServiceAgree() {
|
||||||
|
return core.getInput('build-scan-terms-of-service-agree');
|
||||||
|
}
|
||||||
|
exports.getBuildScanTermsOfServiceAgree = getBuildScanTermsOfServiceAgree;
|
||||||
function parseJobSummaryOption(paramName) {
|
function parseJobSummaryOption(paramName) {
|
||||||
const val = core.getInput(paramName);
|
const val = core.getInput(paramName);
|
||||||
switch (val.toLowerCase().trim()) {
|
switch (val.toLowerCase().trim()) {
|
||||||
|
@ -138197,6 +138268,7 @@ const layout = __importStar(__nccwpck_require__(28182));
|
||||||
const params = __importStar(__nccwpck_require__(23885));
|
const params = __importStar(__nccwpck_require__(23885));
|
||||||
const dependencyGraph = __importStar(__nccwpck_require__(80));
|
const dependencyGraph = __importStar(__nccwpck_require__(80));
|
||||||
const jobSummary = __importStar(__nccwpck_require__(87345));
|
const jobSummary = __importStar(__nccwpck_require__(87345));
|
||||||
|
const buildScan = __importStar(__nccwpck_require__(85772));
|
||||||
const build_results_1 = __nccwpck_require__(82107);
|
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);
|
||||||
|
@ -138220,6 +138292,7 @@ function setup() {
|
||||||
yield caches.restore(userHome, 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());
|
||||||
|
buildScan.setup();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.setup = setup;
|
exports.setup = setup;
|
||||||
|
|
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
33
src/build-scan.ts
Normal file
33
src/build-scan.ts
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
import * as core from '@actions/core'
|
||||||
|
import {
|
||||||
|
getBuildScanPublishEnabled,
|
||||||
|
getBuildScanTermsOfServiceUrl,
|
||||||
|
getBuildScanTermsOfServiceAgree
|
||||||
|
} from './input-params'
|
||||||
|
|
||||||
|
export function setup(): void {
|
||||||
|
if (getBuildScanPublishEnabled() && verifyTermsOfServiceAgreement()) {
|
||||||
|
maybeExportVariable('DEVELOCITY_INJECTION_ENABLED', 'true')
|
||||||
|
maybeExportVariable('DEVELOCITY_PLUGIN_VERSION', '3.16.1')
|
||||||
|
maybeExportVariable('DEVELOCITY_CCUD_PLUGIN_VERSION', '1.12.1')
|
||||||
|
maybeExportVariable('BUILD_SCAN_TERMS_OF_SERVICE_URL', getBuildScanTermsOfServiceUrl())
|
||||||
|
maybeExportVariable('BUILD_SCAN_TERMS_OF_SERVICE_AGREE', getBuildScanTermsOfServiceAgree())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function verifyTermsOfServiceAgreement(): boolean {
|
||||||
|
if (
|
||||||
|
getBuildScanTermsOfServiceUrl() !== 'https://gradle.com/terms-of-service' ||
|
||||||
|
getBuildScanTermsOfServiceAgree() !== 'yes'
|
||||||
|
) {
|
||||||
|
core.warning(`Terms of service must be agreed in order to publish build scans.`)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
function maybeExportVariable(variableName: string, value: unknown): void {
|
||||||
|
if (!process.env[variableName]) {
|
||||||
|
core.exportVariable(variableName, value)
|
||||||
|
}
|
||||||
|
}
|
|
@ -75,6 +75,18 @@ export function getPRCommentOption(): JobSummaryOption {
|
||||||
return parseJobSummaryOption('add-job-summary-as-pr-comment')
|
return parseJobSummaryOption('add-job-summary-as-pr-comment')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getBuildScanPublishEnabled(): boolean {
|
||||||
|
return getBooleanInput('build-scan-publish')
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getBuildScanTermsOfServiceUrl(): string {
|
||||||
|
return core.getInput('build-scan-terms-of-service-url')
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getBuildScanTermsOfServiceAgree(): string {
|
||||||
|
return core.getInput('build-scan-terms-of-service-agree')
|
||||||
|
}
|
||||||
|
|
||||||
function parseJobSummaryOption(paramName: string): JobSummaryOption {
|
function parseJobSummaryOption(paramName: string): JobSummaryOption {
|
||||||
const val = core.getInput(paramName)
|
const val = core.getInput(paramName)
|
||||||
switch (val.toLowerCase().trim()) {
|
switch (val.toLowerCase().trim()) {
|
||||||
|
|
|
@ -82,6 +82,8 @@ def geEnforceUrl = Boolean.parseBoolean(getInputParam('develocity.enforce-url'))
|
||||||
def buildScanUploadInBackground = Boolean.parseBoolean(getInputParam('develocity.build-scan.upload-in-background'))
|
def buildScanUploadInBackground = Boolean.parseBoolean(getInputParam('develocity.build-scan.upload-in-background'))
|
||||||
def gePluginVersion = getInputParam('develocity.plugin.version')
|
def gePluginVersion = getInputParam('develocity.plugin.version')
|
||||||
def ccudPluginVersion = getInputParam('develocity.ccud-plugin.version')
|
def ccudPluginVersion = getInputParam('develocity.ccud-plugin.version')
|
||||||
|
def buildScanTermsOfServiceUrl = getInputParam('build-scan.terms-of-service.url')
|
||||||
|
def buildScanTermsOfServiceAgree = getInputParam('build-scan.terms-of-service.agree')
|
||||||
|
|
||||||
def atLeastGradle4 = GradleVersion.current() >= GradleVersion.version('4.0')
|
def atLeastGradle4 = GradleVersion.current() >= GradleVersion.version('4.0')
|
||||||
|
|
||||||
|
@ -103,10 +105,12 @@ if (GradleVersion.current() < GradleVersion.version('6.0')) {
|
||||||
}
|
}
|
||||||
if (!scanPluginComponent) {
|
if (!scanPluginComponent) {
|
||||||
logger.quiet("Applying $BUILD_SCAN_PLUGIN_CLASS via init script")
|
logger.quiet("Applying $BUILD_SCAN_PLUGIN_CLASS via init script")
|
||||||
logger.quiet("Connection to Develocity: $geUrl, allowUntrustedServer: $geAllowUntrustedServer")
|
|
||||||
applyPluginExternally(pluginManager, BUILD_SCAN_PLUGIN_CLASS)
|
applyPluginExternally(pluginManager, BUILD_SCAN_PLUGIN_CLASS)
|
||||||
|
if (geUrl) {
|
||||||
|
logger.quiet("Connection to Develocity: $geUrl, allowUntrustedServer: $geAllowUntrustedServer")
|
||||||
buildScan.server = geUrl
|
buildScan.server = geUrl
|
||||||
buildScan.allowUntrustedServer = geAllowUntrustedServer
|
buildScan.allowUntrustedServer = geAllowUntrustedServer
|
||||||
|
}
|
||||||
buildScan.publishAlways()
|
buildScan.publishAlways()
|
||||||
if (buildScan.metaClass.respondsTo(buildScan, 'setUploadInBackground', Boolean)) buildScan.uploadInBackground = buildScanUploadInBackground // uploadInBackground not available for build-scan-plugin 1.16
|
if (buildScan.metaClass.respondsTo(buildScan, 'setUploadInBackground', Boolean)) buildScan.uploadInBackground = buildScanUploadInBackground // uploadInBackground not available for build-scan-plugin 1.16
|
||||||
buildScan.value CI_AUTO_INJECTION_CUSTOM_VALUE_NAME, CI_AUTO_INJECTION_CUSTOM_VALUE_VALUE
|
buildScan.value CI_AUTO_INJECTION_CUSTOM_VALUE_NAME, CI_AUTO_INJECTION_CUSTOM_VALUE_VALUE
|
||||||
|
@ -121,6 +125,11 @@ if (GradleVersion.current() < GradleVersion.version('6.0')) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (buildScanTermsOfServiceUrl && buildScanTermsOfServiceAgree) {
|
||||||
|
buildScan.termsOfServiceUrl = buildScanTermsOfServiceUrl
|
||||||
|
buildScan.termsOfServiceAgree = buildScanTermsOfServiceAgree
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ccudPluginVersion && atLeastGradle4) {
|
if (ccudPluginVersion && atLeastGradle4) {
|
||||||
|
@ -139,11 +148,13 @@ if (GradleVersion.current() < GradleVersion.version('6.0')) {
|
||||||
if (gePluginVersion) {
|
if (gePluginVersion) {
|
||||||
if (!settings.pluginManager.hasPlugin(DEVELOCITY_PLUGIN_ID)) {
|
if (!settings.pluginManager.hasPlugin(DEVELOCITY_PLUGIN_ID)) {
|
||||||
logger.quiet("Applying $DEVELOCITY_PLUGIN_CLASS via init script")
|
logger.quiet("Applying $DEVELOCITY_PLUGIN_CLASS via init script")
|
||||||
logger.quiet("Connection to Develocity: $geUrl, allowUntrustedServer: $geAllowUntrustedServer")
|
|
||||||
applyPluginExternally(settings.pluginManager, DEVELOCITY_PLUGIN_CLASS)
|
applyPluginExternally(settings.pluginManager, DEVELOCITY_PLUGIN_CLASS)
|
||||||
extensionsWithPublicType(settings, DEVELOCITY_EXTENSION_CLASS).collect { settings[it.name] }.each { ext ->
|
eachDevelocityExtension(settings, DEVELOCITY_EXTENSION_CLASS) { ext ->
|
||||||
|
if (geUrl) {
|
||||||
|
logger.quiet("Connection to Develocity: $geUrl, allowUntrustedServer: $geAllowUntrustedServer")
|
||||||
ext.server = geUrl
|
ext.server = geUrl
|
||||||
ext.allowUntrustedServer = geAllowUntrustedServer
|
ext.allowUntrustedServer = geAllowUntrustedServer
|
||||||
|
}
|
||||||
ext.buildScan.publishAlways()
|
ext.buildScan.publishAlways()
|
||||||
ext.buildScan.uploadInBackground = buildScanUploadInBackground
|
ext.buildScan.uploadInBackground = buildScanUploadInBackground
|
||||||
ext.buildScan.value CI_AUTO_INJECTION_CUSTOM_VALUE_NAME, CI_AUTO_INJECTION_CUSTOM_VALUE_VALUE
|
ext.buildScan.value CI_AUTO_INJECTION_CUSTOM_VALUE_NAME, CI_AUTO_INJECTION_CUSTOM_VALUE_VALUE
|
||||||
|
@ -151,12 +162,19 @@ if (GradleVersion.current() < GradleVersion.version('6.0')) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (geUrl && geEnforceUrl) {
|
if (geUrl && geEnforceUrl) {
|
||||||
extensionsWithPublicType(settings, DEVELOCITY_EXTENSION_CLASS).collect { settings[it.name] }.each { ext ->
|
eachDevelocityExtension(settings, DEVELOCITY_EXTENSION_CLASS) { ext ->
|
||||||
logger.quiet("Enforcing Develocity: $geUrl, allowUntrustedServer: $geAllowUntrustedServer")
|
logger.quiet("Enforcing Develocity: $geUrl, allowUntrustedServer: $geAllowUntrustedServer")
|
||||||
ext.server = geUrl
|
ext.server = geUrl
|
||||||
ext.allowUntrustedServer = geAllowUntrustedServer
|
ext.allowUntrustedServer = geAllowUntrustedServer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (buildScanTermsOfServiceUrl && buildScanTermsOfServiceAgree) {
|
||||||
|
eachDevelocityExtension(settings, DEVELOCITY_EXTENSION_CLASS) { ext ->
|
||||||
|
ext.buildScan.termsOfServiceUrl = buildScanTermsOfServiceUrl
|
||||||
|
ext.buildScan.termsOfServiceAgree = buildScanTermsOfServiceAgree
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ccudPluginVersion) {
|
if (ccudPluginVersion) {
|
||||||
|
@ -183,8 +201,9 @@ void applyPluginExternally(def pluginManager, String pluginClassName) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static def extensionsWithPublicType(def container, String publicType) {
|
static def eachDevelocityExtension(def settings, def publicType, def action) {
|
||||||
container.extensions.extensionsSchema.elements.findAll { it.publicType.concreteClass.name == publicType }
|
settings.extensions.extensionsSchema.elements.findAll { it.publicType.concreteClass.name == publicType }
|
||||||
|
.collect { settings[it.name] }.each(action)
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean isNotAtLeast(String versionUnderTest, String referenceVersion) {
|
static boolean isNotAtLeast(String versionUnderTest, String referenceVersion) {
|
||||||
|
|
|
@ -7,6 +7,7 @@ import * as layout from './repository-layout'
|
||||||
import * as params from './input-params'
|
import * as params from './input-params'
|
||||||
import * as dependencyGraph from './dependency-graph'
|
import * as dependencyGraph from './dependency-graph'
|
||||||
import * as jobSummary from './job-summary'
|
import * as jobSummary from './job-summary'
|
||||||
|
import * as buildScan from './build-scan'
|
||||||
|
|
||||||
import {loadBuildResults} from './build-results'
|
import {loadBuildResults} from './build-results'
|
||||||
import {CacheListener} from './cache-reporting'
|
import {CacheListener} from './cache-reporting'
|
||||||
|
@ -41,6 +42,8 @@ export async function setup(): Promise<void> {
|
||||||
core.saveState(CACHE_LISTENER, cacheListener.stringify())
|
core.saveState(CACHE_LISTENER, cacheListener.stringify())
|
||||||
|
|
||||||
await dependencyGraph.setup(params.getDependencyGraphOption())
|
await dependencyGraph.setup(params.getDependencyGraphOption())
|
||||||
|
|
||||||
|
buildScan.setup()
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function complete(): Promise<void> {
|
export async function complete(): Promise<void> {
|
||||||
|
|
Loading…
Reference in a new issue