| // Copyright 2017 The Bazel Authors. All rights reserved. | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| package com.google.devtools.build.lib.buildeventservice; | |
| import com.google.devtools.common.options.Converters; | |
| import com.google.devtools.common.options.EnumConverter; | |
| import com.google.devtools.common.options.Option; | |
| import com.google.devtools.common.options.OptionDocumentationCategory; | |
| import com.google.devtools.common.options.OptionEffectTag; | |
| import com.google.devtools.common.options.OptionsBase; | |
| import java.time.Duration; | |
| import java.util.List; | |
| /** Options used by {@link BuildEventServiceModule}. */ | |
| public class BuildEventServiceOptions extends OptionsBase { | |
| @Option( | |
| name = "bes_backend", | |
| defaultValue = "", | |
| documentationCategory = OptionDocumentationCategory.LOGGING, | |
| effectTags = {OptionEffectTag.AFFECTS_OUTPUTS}, | |
| help = | |
| "Specifies the build event service (BES) backend endpoint as HOST or HOST:PORT. " | |
| + "Disabled by default." | |
| ) | |
| public String besBackend; | |
| @Option( | |
| name = "bes_timeout", | |
| defaultValue = "0s", | |
| documentationCategory = OptionDocumentationCategory.LOGGING, | |
| effectTags = {OptionEffectTag.AFFECTS_OUTPUTS}, | |
| help = | |
| "Specifies how long bazel should wait for the BES/BEP upload to complete after the " | |
| + "build and tests have finished. A valid timeout is a natural number followed by a " | |
| + "unit: Days (d), hours (h), minutes (m), seconds (s), and milliseconds (ms). The " | |
| + "default value is '0' which means that there is no timeout." | |
| ) | |
| public Duration besTimeout; | |
| @Option( | |
| name = "bes_best_effort", | |
| defaultValue = "false", | |
| deprecationWarning = | |
| "BES best effort upload has been removed. The flag has no more " | |
| + "functionality attached to it and will be removed in a future release.", | |
| documentationCategory = OptionDocumentationCategory.LOGGING, | |
| effectTags = {OptionEffectTag.AFFECTS_OUTPUTS}, | |
| help = | |
| "BES best effort upload has been removed. The flag has no more " | |
| + "functionality attached to it and will be removed in a future release.") | |
| public boolean besBestEffort; | |
| @Option( | |
| name = "bes_lifecycle_events", | |
| defaultValue = "true", | |
| documentationCategory = OptionDocumentationCategory.LOGGING, | |
| effectTags = {OptionEffectTag.AFFECTS_OUTPUTS}, | |
| help = "Specifies whether to publish BES lifecycle events. (defaults to 'true')." | |
| ) | |
| public boolean besLifecycleEvents; | |
| @Option( | |
| name = "project_id", | |
| defaultValue = "null", | |
| documentationCategory = OptionDocumentationCategory.LOGGING, | |
| effectTags = {OptionEffectTag.AFFECTS_OUTPUTS}, | |
| help = "Specifies the BES project identifier. Defaults to null." | |
| ) | |
| public String projectId; | |
| @Option( | |
| name = "bes_keywords", | |
| defaultValue = "", | |
| converter = Converters.CommaSeparatedOptionListConverter.class, | |
| documentationCategory = OptionDocumentationCategory.LOGGING, | |
| effectTags = {OptionEffectTag.AFFECTS_OUTPUTS}, | |
| allowMultiple = true, | |
| help = | |
| "Specifies a list of notification keywords to be added the default set of keywords " | |
| + "published to BES (\"command_name=<command_name> \", \"protocol_name=BEP\"). " | |
| + "Defaults to none." | |
| ) | |
| public List<String> besKeywords; | |
| @Option( | |
| name = "bes_outerr_buffer_size", | |
| defaultValue = "10240", | |
| documentationCategory = OptionDocumentationCategory.LOGGING, | |
| effectTags = {OptionEffectTag.AFFECTS_OUTPUTS}, | |
| help = | |
| "Specifies the maximal size of stdout or stderr to be buffered in BEP, before it is " | |
| + "reported as a progress event. Individual writes are still reported in a single " | |
| + "event, even if larger than the specified value up to --bes_outerr_chunk_size.") | |
| public int besOuterrBufferSize; | |
| @Option( | |
| name = "bes_outerr_chunk_size", | |
| defaultValue = "1048576", // 2^20 = 1MB | |
| documentationCategory = OptionDocumentationCategory.LOGGING, | |
| effectTags = {OptionEffectTag.AFFECTS_OUTPUTS}, | |
| help = | |
| "Specifies the maximal size of stdout or stderr to be sent to BEP in a single message.") | |
| public int besOuterrChunkSize; | |
| @Option( | |
| name = "bes_results_url", | |
| defaultValue = "", | |
| documentationCategory = OptionDocumentationCategory.LOGGING, | |
| effectTags = {OptionEffectTag.TERMINAL_OUTPUT}, | |
| help = | |
| "Specifies the base URL where a user can view the information streamed to the BES" | |
| + " backend. Bazel will output the URL appended by the invocation id to the" | |
| + " terminal.") | |
| public String besResultsUrl; | |
| @Option( | |
| name = "bes_upload_mode", | |
| defaultValue = "wait_for_upload_complete", | |
| converter = BesUploadModeConverter.class, | |
| documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, | |
| effectTags = {OptionEffectTag.EAGERNESS_TO_EXIT}, | |
| help = | |
| "Specifies whether the Build Event Service upload should block the build completion " | |
| + "or should end the invocation immediately and finish the upload in the background.") | |
| public BesUploadMode besUploadMode; | |
| /** Determines the mode that will be used to upload data to the Build Event Service. */ | |
| public enum BesUploadMode { | |
| /** Block at the end of the build waiting for the upload to complete */ | |
| WAIT_FOR_UPLOAD_COMPLETE, | |
| /** Block at the beginning of the next build waiting for upload completion */ | |
| NOWAIT_FOR_UPLOAD_COMPLETE, | |
| /** | |
| * Block at the beginning of the next build waiting for the client to finish uploading the data, | |
| * but possibly not blocking on the server acknowledgement. | |
| */ | |
| FULLY_ASYNC, | |
| } | |
| /** Converter for {@link BesUploadMode} */ | |
| public static class BesUploadModeConverter extends EnumConverter<BesUploadMode> { | |
| public BesUploadModeConverter() { | |
| super(BesUploadMode.class, "Mode for uploading to the Build Event Service"); | |
| } | |
| } | |
| } |