import {z} from 'zod' export type GetApiApiBuildsOptions = {baseUrl?: string | undefined, DevelocityAccessKeyOrToken?: string | undefined, fetch?: typeof fetch | undefined}; export const apiProblem = z.object({status: z.number().int(), type: z.string(), title: z.string(), detail: z.string().nullable().optional()}); export const buildAttributesValue = z.object({name: z.string(), value: z.string().optional()}); export const buildAttributesLink = z.object({label: z.string(), url: z.string()}); export const gradleDevelocitySettings = z.object({backgroundPublicationEnabled: z.boolean().nullable().optional(), buildOutputCapturingEnabled: z.boolean().nullable().optional(), fileFingerprintCapturingEnabled: z.boolean().nullable().optional(), testOutputCapturingEnabled: z.boolean().nullable().optional(), resourceUsageCapturingEnabled: z.boolean().nullable().optional(), taskInputsFileCapturingEnabled: z.boolean().nullable().optional()}); export const gradleBuildOptions = z.object({buildCacheEnabled: z.boolean().nullable().optional(), configurationCacheEnabled: z.boolean().nullable().optional(), configurationOnDemandEnabled: z.boolean(), continuousBuildEnabled: z.boolean(), continueOnFailureEnabled: z.boolean(), daemonEnabled: z.boolean(), dryRunEnabled: z.boolean(), excludedTasks: z.array(z.string()), fileSystemWatchingEnabled: z.boolean().nullable().optional(), isolatedProjectsEnabled: z.boolean().nullable().optional(), maxNumberOfGradleWorkers: z.number().int(), offlineModeEnabled: z.boolean(), parallelProjectExecutionEnabled: z.boolean(), refreshDependenciesEnabled: z.boolean(), rerunTasksEnabled: z.boolean()}); export const buildAttributesEnvironment = z.object({username: z.string().nullable().optional(), operatingSystem: z.string(), numberOfCpuCores: z.number().int(), jreVersion: z.string(), jvmVersion: z.string(), jvmMaxMemoryHeapSize: z.number().int(), jvmCharset: z.string().nullable().optional(), jvmLocale: z.string(), publicHostname: z.string().nullable().optional(), localHostname: z.string().nullable().optional(), localIpAddresses: z.array(z.string()).nullable().optional()}); export const gradleGradleEnterpriseSettings = z.object({backgroundPublicationEnabled: z.boolean().nullable().optional(), buildOutputCapturingEnabled: z.boolean().nullable().optional(), taskInputsFileCapturingEnabled: z.boolean().nullable().optional(), testOutputCapturingEnabled: z.boolean().nullable().optional(), resourceUsageCapturingEnabled: z.boolean().nullable().optional()}); export const gradleAttributes = z.object({id: z.string(), buildStartTime: z.number().int(), buildDuration: z.number().int(), gradleVersion: z.string(), pluginVersion: z.string(), rootProjectName: z.string().nullable().optional(), requestedTasks: z.array(z.string()), hasFailed: z.boolean(), hasVerificationFailure: z.boolean().optional(), hasNonVerificationFailure: z.boolean().optional(), tags: z.array(z.string()), values: z.array(buildAttributesValue), links: z.array(buildAttributesLink), develocitySettings: gradleDevelocitySettings, buildOptions: gradleBuildOptions, environment: buildAttributesEnvironment, gradleEnterpriseSettings: gradleGradleEnterpriseSettings}); export const buildTestPerformanceTests = z.object({testClassesCount: z.number().int()}); export const testAccelerationFeatureUsageStatus = z.enum(["unavailable", "disabled", "enabled"]); export const predictiveTestSelectionMode = z.enum(["relevant", "remaining"]); export const testPerformanceBuildPredictiveTestSelectionUsage = z.object({status: testAccelerationFeatureUsageStatus, selectionMode: predictiveTestSelectionMode, wallClockSavings: z.number().int().nullable(), serialTimeSavings: z.number().int().nullable()}); export const testPerformanceBuildPredictiveTestSelectionSimulationData = z.object({wallClockSavingsPotential: z.number().int(), serialTimeSavingsPotential: z.number().int(), workUnitFailuresPredictedCount: z.number().int(), workUnitFailuresMissedCount: z.number().int(), avoidableTestClassesCount: z.number().int(), unavoidableTestClassesCount: z.number().int(), testClassesCountSelectedDueToInsufficientData: z.number().int()}); export const testPerformanceBuildPredictiveTestSelectionSimulation = z.object({conservative: testPerformanceBuildPredictiveTestSelectionSimulationData, standard: testPerformanceBuildPredictiveTestSelectionSimulationData, fast: testPerformanceBuildPredictiveTestSelectionSimulationData}); export const testPerformanceBuildPredictiveTestSelection = z.object({usage: testPerformanceBuildPredictiveTestSelectionUsage, simulation: testPerformanceBuildPredictiveTestSelectionSimulation.optional()}); export const testPerformanceBuildTestDistribution = z.object({usageStatus: testAccelerationFeatureUsageStatus, wallClockSavings: z.number().int().nullable()}); export const testPerformanceBuildTestAcceleration = z.object({predictiveTestSelection: testPerformanceBuildPredictiveTestSelection, testDistribution: testPerformanceBuildTestDistribution, wallClockSavings: z.number().int().nullable()}); export const workUnitTestPerformanceTests = z.object({failedTestClassesCount: z.number().int(), testClassesCount: z.number().int()}); export const testPerformanceWorkUnitPredictiveTestSelectionUsage = z.object({status: testAccelerationFeatureUsageStatus, selectionMode: predictiveTestSelectionMode, wallClockSavings: z.number().int().nullable(), serialTimeSavings: z.number().int().nullable(), nonSelectedTestClassesCount: z.number().int().nullable()}); export const testPerformanceWorkUnitPredictiveTestSelectionSimulationData = z.object({wallClockSavingsPotential: z.number().int(), serialTimeSavingsPotential: z.number().int(), avoidableTestClassesCount: z.number().int(), unavoidableTestClassesCount: z.number().int(), testClassesCountSelectedDueToInsufficientData: z.number().int(), failedTestClassesPredictedCount: z.number().int()}); export const testPerformanceWorkUnitPredictiveTestSelectionSimulation = z.object({conservative: testPerformanceWorkUnitPredictiveTestSelectionSimulationData, standard: testPerformanceWorkUnitPredictiveTestSelectionSimulationData, fast: testPerformanceWorkUnitPredictiveTestSelectionSimulationData}); export const testPerformanceWorkUnitPredictiveTestSelection = z.object({usage: testPerformanceWorkUnitPredictiveTestSelectionUsage, simulation: testPerformanceWorkUnitPredictiveTestSelectionSimulation.optional()}); export const testPerformanceWorkUnitTestDistribution = z.object({usageStatus: testAccelerationFeatureUsageStatus, wallClockSavings: z.number().int().nullable(), remoteTestClassesCount: z.number().int().nullable().optional()}); export const testPerformanceWorkUnitTestAcceleration = z.object({predictiveTestSelection: testPerformanceWorkUnitPredictiveTestSelection, testDistribution: testPerformanceWorkUnitTestDistribution, wallClockSavings: z.number().int().nullable()}); export const testPerformanceTask = z.object({taskPath: z.string(), taskType: z.string(), wallClockExecutionTime: z.number().int(), serialExecutionTime: z.number().int(), tests: workUnitTestPerformanceTests, testAcceleration: testPerformanceWorkUnitTestAcceleration}); export const gradleTestPerformance = z.object({tests: buildTestPerformanceTests, serialTestTasksExecutionTime: z.number().int(), testAcceleration: testPerformanceBuildTestAcceleration, testTasks: z.array(testPerformanceTask)}); export const gradleBuildCachePerformanceTaskExecutionEntry = z.object({taskPath: z.string(), taskType: z.string(), avoidanceOutcome: z.enum(["avoided_up_to_date", "avoided_from_local_cache", "avoided_from_remote_cache", "executed_cacheable", "executed_not_cacheable", "executed_unknown_cacheability", "avoided_unknown_reason", "lifecycle", "no-source", "skipped"]), duration: z.number().int(), fingerprintingDuration: z.number().int().nullable().optional(), avoidanceSavings: z.number().int().nullable().optional(), nonCacheabilityCategory: z.enum(["build_cache_not_enabled", "cache-if_condition_not_matched", "disabled_to_ensure_correctness", "do-not-cache-if_condition_matched", "multiple_outputs_declared", "no_outputs_declared", "non_cacheable_inputs", "non_cacheable_task_action", "non_cacheable_task_implementation", "non_cacheable_tree_output", "overlapping_outputs", "task_has_no_actions", "task_output_caching_not_enabled", "unknown"]).nullable().optional(), nonCacheabilityReason: z.string().nullable().optional(), skipReasonMessage: z.string().nullable().optional(), cacheArtifactSize: z.number().int().nullable().optional(), cacheArtifactRejectedReason: z.literal("artifact_size_too_large").nullable().optional(), cacheKey: z.string().nullable().optional(), hasFailed: z.boolean()}); export const gradleBuildCachePerformanceTaskExecution = z.array(gradleBuildCachePerformanceTaskExecutionEntry); export const gradleBuildCachePerformanceTaskFingerprintingSummary = z.object({count: z.number().int(), serialDuration: z.number().int()}).nullable(); export const gradleBuildCachePerformanceWorkUnitFingerprintingSummary = z.object({count: z.number().int(), serialDuration: z.number().int()}).nullable(); export const gradleBuildCachePerformanceAvoidanceSavingsSummary = z.object({total: z.number().int(), ratio: z.number(), upToDate: z.number().int(), localBuildCache: z.number().int(), remoteBuildCache: z.number().int()}); export const gradleBuildCachePerformanceTaskAvoidanceSavingsSummary = z.object({total: z.number().int(), ratio: z.number(), upToDate: z.number().int(), localBuildCache: z.number().int(), remoteBuildCache: z.number().int()}); export const gradleBuildCachePerformanceWorkUnitAvoidanceSavingsSummary = z.object({total: z.number().int(), ratio: z.number(), upToDate: z.number().int(), localBuildCache: z.number().int(), remoteBuildCache: z.number().int()}); export const gradleBuildCachePerformanceBuildCacheLocalInfo = z.object({isEnabled: z.boolean(), isPushEnabled: z.boolean().nullable().optional(), isDisabledDueToError: z.boolean().optional(), directory: z.string().nullable().optional()}); export const gradleBuildCachePerformanceBuildCacheRemoteInfo = z.object({type: z.string().nullable().optional(), className: z.string().nullable().optional(), isEnabled: z.boolean(), isPushEnabled: z.boolean().nullable().optional(), isDisabledDueToError: z.boolean().optional(), url: z.string().nullable().optional()}); export const gradleBuildCachePerformanceBuildCacheOverhead = z.object({uploading: z.number().int(), downloading: z.number().int(), packing: z.number().int(), unpacking: z.number().int()}); export const gradleBuildCachePerformanceBuildCaches = z.object({local: gradleBuildCachePerformanceBuildCacheLocalInfo, remote: gradleBuildCachePerformanceBuildCacheRemoteInfo, overhead: gradleBuildCachePerformanceBuildCacheOverhead}).nullable(); export const gradleBuildCachePerformance = z.object({id: z.string(), buildTime: z.number().int(), effectiveTaskExecutionTime: z.number().int(), effectiveWorkUnitExecutionTime: z.number().int(), serialTaskExecutionTime: z.number().int(), serialWorkUnitExecutionTime: z.number().int(), serializationFactor: z.number(), taskExecution: gradleBuildCachePerformanceTaskExecution, taskFingerprintingSummary: gradleBuildCachePerformanceTaskFingerprintingSummary.optional(), workUnitFingerprintingSummary: gradleBuildCachePerformanceWorkUnitFingerprintingSummary.optional(), avoidanceSavingsSummary: gradleBuildCachePerformanceAvoidanceSavingsSummary, taskAvoidanceSavingsSummary: gradleBuildCachePerformanceTaskAvoidanceSavingsSummary, workUnitAvoidanceSavingsSummary: gradleBuildCachePerformanceWorkUnitAvoidanceSavingsSummary, buildCaches: gradleBuildCachePerformanceBuildCaches.optional()}); export const gradleProject = z.object({name: z.string(), path: z.string(), parent: z.number().int().nullable().optional()}); export const gradleProjects = z.array(gradleProject); export const gradleNetworkActivitySubset = z.object({networkRequestCount: z.number().int().gte(0).optional(), serialNetworkRequestTime: z.number().int().gte(0).optional(), fileDownloadSize: z.number().int().gte(0).optional(), fileDownloadCount: z.number().int().gte(0).optional(), wallClockNetworkRequestTime: z.number().int().gte(0).optional()}); export const gradleNetworkActivity = z.object({networkRequestCount: z.number().int().gte(0), serialNetworkRequestTime: z.number().int().gte(0), wallClockNetworkRequestTime: z.number().int().gte(0).optional(), fileDownloadSize: z.number().int().gte(0), fileDownloadCount: z.number().int().gte(0), methods: z.record(z.string(), gradleNetworkActivitySubset).optional(), repositories: z.record(z.string(), gradleNetworkActivitySubset).optional(), repositoryMethods: z.record(z.string(), gradleNetworkActivitySubset).optional()}); export const gradleArtifactTransformAttribute = z.object({name: z.string(), from: z.string(), to: z.string()}); export const gradleArtifactTransformExecutionEntry = z.object({artifactTransformExecutionName: z.string(), transformActionType: z.string(), inputArtifactName: z.string(), changedAttributes: z.array(gradleArtifactTransformAttribute), outcome: z.enum(["failed", "success", "from_cache", "up_to_date", "unknown", "skipped"]), avoidanceOutcome: z.enum(["avoided_up_to_date", "avoided_from_local_cache", "avoided_from_remote_cache", "executed_cacheable", "executed_not_cacheable", "executed_unknown_cacheability", "avoided_unknown_cachebility", "avoided_unknown_reason", "skipped"]), duration: z.number().int(), fingerprintingDuration: z.number().int().optional(), avoidanceSavings: z.number().int().optional(), nonCacheabilityCategory: z.enum(["build_cache_not_enabled", "disabled_to_ensure_correctness", "not_cacheable", "unknown"]).nullable().optional(), nonCacheabilityReason: z.string().nullable().optional(), cacheArtifactSize: z.number().int().nullable().optional(), cacheArtifactRejectedReason: z.literal("artifact_size_too_large").nullable().optional(), skipReasonMessage: z.string().nullable().optional(), cacheKey: z.string().nullable().optional()}); export const gradleArtifactTransformExecutions = z.object({artifactTransformExecutions: z.array(gradleArtifactTransformExecutionEntry).nullable().optional()}); export const gradleDeprecationOwner = z.object({location: z.string().nullable().optional(), type: z.enum(["plugin", "script", "task", "unknown"])}); export const gradleDeprecationUsage = z.object({contextualAdvice: z.string().nullable().optional(), owner: gradleDeprecationOwner}); export const gradleDeprecationEntry = z.object({summary: z.string(), removalDetails: z.string(), advice: z.string().nullable().optional(), documentationUrl: z.string().nullable().optional(), usages: z.array(gradleDeprecationUsage)}); export const gradleDeprecations = z.object({deprecations: z.array(gradleDeprecationEntry).nullable().optional()}); export const gradlePlugin = z.object({id: z.string().optional(), className: z.string(), version: z.string().nullable().optional(), projects: z.array(z.string())}); export const gradlePlugins = z.object({plugins: z.array(gradlePlugin).optional()}); export const resourceUsageMetric = z.object({max: z.number().int(), average: z.number().int(), median: z.number().int(), p5: z.number().int(), p25: z.number().int(), p75: z.number().int(), p95: z.number().int()}); export const resourceUsageBreakdown = z.object({allProcessesCpu: resourceUsageMetric.optional(), buildProcessCpu: resourceUsageMetric.optional(), buildChildProcessesCpu: resourceUsageMetric.optional(), allProcessesMemory: resourceUsageMetric.optional(), buildProcessMemory: resourceUsageMetric.optional(), buildChildProcessesMemory: resourceUsageMetric.optional(), diskReadThroughput: resourceUsageMetric.optional(), diskWriteThroughput: resourceUsageMetric.optional(), networkUploadThroughput: resourceUsageMetric.optional(), networkDownloadThroughput: resourceUsageMetric.optional()}); export const gradleResourceUsage = z.object({totalMemory: z.number().int().nullable().optional(), total: resourceUsageBreakdown.optional(), nonExecution: resourceUsageBreakdown.optional(), execution: resourceUsageBreakdown.optional()}); export const gradleBuildTimeBreakdown = z.object({total: z.number().int(), initialization: z.number().int(), configuration: z.number().int().nullable().optional(), execution: z.number().int().optional(), endOfBuild: z.number().int().nullable().optional()}); export const memoryPoolUsage = z.object({name: z.string(), peakMemory: z.number().int(), maxMemory: z.number().int()}); export const gradleBuildDaemonJvmMemoryUsage = z.object({totalGarbageCollectionTime: z.number().int(), memoryPools: z.array(memoryPoolUsage).optional()}); export const gradleBuildProfileOverview = z.object({breakdown: gradleBuildTimeBreakdown, memoryUsage: gradleBuildDaemonJvmMemoryUsage.optional()}); export const gradleConfigurationCacheStoreResult = z.object({duration: z.number().int(), hasFailed: z.boolean()}); export const gradleConfigurationCacheLoadResult = z.object({duration: z.number().int(), hasFailed: z.boolean()}); export const gradleConfigurationCacheResult = z.object({outcome: z.enum(["HIT", "MISS", "FAILED"]), entrySize: z.number().int().nullable().optional(), checkFingerprintDuration: z.number().int().nullable().optional(), dependencyResolutionDuration: z.number().int(), store: gradleConfigurationCacheStoreResult.optional(), load: gradleConfigurationCacheLoadResult.optional(), missReasons: z.array(z.string()).nullable().optional()}); export const gradleConfigurationCache = z.object({result: gradleConfigurationCacheResult.optional()}); export const gradleDependency = z.object({scheme: z.string(), type: z.string(), namespace: z.string().nullable().optional(), name: z.string(), version: z.string().nullable().optional(), qualifiers: z.record(z.string(), z.string()).nullable().optional(), subpath: z.string().nullable().optional(), purl: z.string().nullable().optional(), repository: z.object({url: z.string().nullable().optional(), type: z.enum(["maven", "ivy", "flatDir", "npm"]).nullable().optional(), resolutionSource: z.enum(["remote", "local", "unknown"]).nullable().optional()}).nullable().optional()}); export const gradleDependencies = z.object({dependencies: z.array(gradleDependency).optional()}); export const gradleDependencyCaching = z.object({downloadedFileCount: z.number().int().gte(0), downloadedFileSize: z.number().int().gte(0), cachedFileCount: z.number().int().gte(0), cachedFileSize: z.number().int().gte(0)}); export const mavenDevelocitySettings = z.object({backgroundPublicationEnabled: z.boolean().nullable().optional(), buildOutputCapturingEnabled: z.boolean().nullable().optional(), fileFingerprintCapturingEnabled: z.boolean().nullable().optional(), goalInputsFileCapturingEnabled: z.boolean().nullable().optional(), testOutputCapturingEnabled: z.boolean().nullable().optional(), resourceUsageCapturingEnabled: z.boolean().nullable().optional()}); export const mavenBuildOptions = z.object({batchModeEnabled: z.boolean().nullable().optional(), daemonEnabled: z.boolean().nullable().optional(), debugEnabled: z.boolean().nullable().optional(), errorsEnabled: z.boolean(), failAtEndEnabled: z.boolean().nullable().optional(), failFastEnabled: z.boolean().nullable().optional(), failNeverEnabled: z.boolean().nullable().optional(), laxChecksumsEnabled: z.boolean().nullable().optional(), maxNumberOfThreads: z.number().int(), nonRecursiveEnabled: z.boolean(), rerunGoalsEnabled: z.boolean().nullable().optional(), noSnapshotsUpdatesEnabled: z.boolean(), offlineModeEnabled: z.boolean(), quietEnabled: z.boolean().nullable().optional(), strictChecksumsEnabled: z.boolean().nullable().optional(), updateSnapshotsEnabled: z.boolean(), rerunGoals: z.boolean().nullable().optional(), resumeEnabled: z.boolean().nullable().optional()}); export const mavenGradleEnterpriseSettings = z.object({backgroundPublicationEnabled: z.boolean().nullable().optional(), buildOutputCapturingEnabled: z.boolean().nullable().optional(), goalInputsFileCapturingEnabled: z.boolean().nullable().optional(), testOutputCapturingEnabled: z.boolean().nullable().optional(), resourceUsageCapturingEnabled: z.boolean().nullable().optional()}); export const mavenAttributes = z.object({id: z.string(), buildStartTime: z.number().int(), buildDuration: z.number().int(), mavenVersion: z.string(), extensionVersion: z.string(), topLevelProjectName: z.string().nullable().optional(), requestedGoals: z.array(z.string()), hasFailed: z.boolean(), hasVerificationFailure: z.boolean().optional(), hasNonVerificationFailure: z.boolean().optional(), tags: z.array(z.string()), values: z.array(buildAttributesValue), links: z.array(buildAttributesLink), develocitySettings: mavenDevelocitySettings, buildOptions: mavenBuildOptions, environment: buildAttributesEnvironment, gradleEnterpriseSettings: mavenGradleEnterpriseSettings}); export const testPerformanceGoal = z.object({goalPath: z.string(), goalType: z.string(), wallClockExecutionTime: z.number().int(), serialExecutionTime: z.number().int(), tests: workUnitTestPerformanceTests, testAcceleration: testPerformanceWorkUnitTestAcceleration}); export const mavenTestPerformance = z.object({tests: buildTestPerformanceTests, serialTestGoalsExecutionTime: z.number().int(), testAcceleration: testPerformanceBuildTestAcceleration, testGoals: z.array(testPerformanceGoal)}); export const mavenBuildCachePerformanceGoalExecutionEntry = z.object({goalName: z.string(), mojoType: z.string(), goalExecutionId: z.string(), goalProjectName: z.string(), avoidanceOutcome: z.enum(["avoided_from_local_cache", "avoided_from_remote_cache", "executed_cacheable", "executed_not_cacheable", "executed_unknown_cacheability", "skipped"]), duration: z.number().int(), fingerprintingDuration: z.number().int().nullable().optional(), avoidanceSavings: z.number().int().nullable().optional(), nonCacheabilityCategory: z.enum(["build_cache_disabled_by_user", "goal_execution_marked_non_cacheable", "goal_not_supported", "no_gradle_enterprise_server_configured", "no_develocity_server_configured", "non_clean_build", "not_entitled", "offline_build", "unknown", "unknown_entitlements"]).nullable().optional(), nonCacheabilityReason: z.string().nullable().optional(), cacheArtifactSize: z.number().int().nullable().optional(), cacheArtifactRejectedReason: z.literal("artifact_size_too_large").nullable().optional(), cacheKey: z.string().nullable().optional(), hasFailed: z.boolean()}); export const mavenBuildCachePerformanceGoalExecution = z.array(mavenBuildCachePerformanceGoalExecutionEntry); export const mavenBuildCachePerformanceGoalFingerprintingSummary = z.object({count: z.number().int(), serialDuration: z.number().int()}); export const mavenBuildCachePerformanceAvoidanceSavingsSummary = z.object({total: z.number().int(), ratio: z.number(), localBuildCache: z.number().int(), remoteBuildCache: z.number().int()}); export const mavenBuildCachePerformanceBuildCacheLocalInfo = z.object({isEnabled: z.boolean(), isPushEnabled: z.boolean().nullable().optional(), isDisabledDueToError: z.boolean().optional(), directory: z.string().nullable().optional()}).nullable(); export const mavenBuildCachePerformanceBuildCacheRemoteInfo = z.object({isEnabled: z.boolean(), isPushEnabled: z.boolean().nullable().optional(), isDisabledDueToError: z.boolean().optional(), url: z.string().nullable().optional()}).nullable(); export const mavenBuildCachePerformanceBuildCacheOverhead = z.object({uploading: z.number().int(), downloading: z.number().int(), packing: z.number().int(), unpacking: z.number().int()}); export const mavenBuildCachePerformanceBuildCaches = z.object({local: mavenBuildCachePerformanceBuildCacheLocalInfo.optional(), remote: mavenBuildCachePerformanceBuildCacheRemoteInfo.optional(), overhead: mavenBuildCachePerformanceBuildCacheOverhead}).nullable(); export const mavenBuildCachePerformance = z.object({id: z.string(), buildTime: z.number().int(), effectiveProjectExecutionTime: z.number().int(), serialProjectExecutionTime: z.number().int(), serializationFactor: z.number(), goalExecution: mavenBuildCachePerformanceGoalExecution, goalFingerprintingSummary: mavenBuildCachePerformanceGoalFingerprintingSummary, avoidanceSavingsSummary: mavenBuildCachePerformanceAvoidanceSavingsSummary, buildCaches: mavenBuildCachePerformanceBuildCaches.optional()}); export const mavenModule = z.object({name: z.string(), groupId: z.string(), artifactId: z.string(), version: z.string(), parent: z.number().int().nullable().optional()}); export const mavenModules = z.array(mavenModule); export const mavenDependencyResolutionSubset = z.object({networkRequestCount: z.number().int().gte(0).optional(), serialNetworkRequestTime: z.number().int().gte(0).optional(), fileDownloadSize: z.number().int().gte(0).optional(), fileDownloadCount: z.number().int().gte(0).optional(), wallClockNetworkRequestTime: z.number().int().gte(0).optional()}); export const mavenDependencyResolution = z.object({serialDependencyResolutionTime: z.number().int().gte(0), networkRequestCount: z.number().int(), serialNetworkRequestTime: z.number().int().gte(0), wallClockNetworkRequestTime: z.number().int().gte(0), fileDownloadSize: z.number().int().gte(0), fileDownloadCount: z.number().int().gte(0), methods: z.record(z.string(), mavenDependencyResolutionSubset).optional(), repositories: z.record(z.string(), mavenDependencyResolutionSubset).optional(), repositoryMethods: z.record(z.string(), mavenDependencyResolutionSubset).optional()}); export const mavenPlugin = z.object({groupId: z.string(), artifactId: z.string(), name: z.string().nullable().optional(), version: z.string(), executedGoals: z.array(z.string()), modules: z.array(z.string()), goalPrefix: z.string().nullable().optional(), requiredMavenVersion: z.string().nullable().optional()}); export const mavenPlugins = z.object({plugins: z.array(mavenPlugin).optional()}); export const mavenExtension = z.object({groupId: z.string().nullable().optional(), artifactId: z.string().nullable().optional(), version: z.string().nullable().optional(), type: z.enum(["CORE", "MAVEN_EXT_CLASSPATH", "LIB_EXT", "PROJECT", "POM", "UNKNOWN"])}); export const mavenExtensions = z.object({extensions: z.array(mavenExtension).optional()}); export const mavenResourceUsage = z.object({totalMemory: z.number().int().nullable().optional(), total: resourceUsageBreakdown.optional(), nonExecution: resourceUsageBreakdown.optional(), execution: resourceUsageBreakdown.optional()}); export const mavenBuildInitializationAndDiscoveryTimeBreakdown = z.object({total: z.number().int(), settings: z.number().int(), toolchains: z.number().int(), projectDiscovery: z.number().int().nullable().optional(), other: z.number().int()}); export const mavenBuildExecutionTimeBreakdown = z.object({total: z.number().int(), goalExecution: z.number().int().nullable().optional(), endOfBuild: z.number().int().nullable().optional()}); export const mavenBuildTimeBreakdown = z.object({total: z.number().int(), initializationAndDiscovery: mavenBuildInitializationAndDiscoveryTimeBreakdown, execution: mavenBuildExecutionTimeBreakdown.optional()}); export const mavenBuildJvmMemoryUsage = z.object({totalGarbageCollectionTime: z.number().int(), memoryPools: z.array(memoryPoolUsage).optional()}); export const mavenBuildProfileOverview = z.object({breakdown: mavenBuildTimeBreakdown, memoryUsage: mavenBuildJvmMemoryUsage.optional()}); export const mavenDependency = z.object({scheme: z.string(), type: z.string(), namespace: z.string().nullable().optional(), name: z.string(), version: z.string().nullable().optional(), qualifiers: z.record(z.string(), z.string()).nullable().optional(), subpath: z.string().nullable().optional(), purl: z.string().nullable().optional(), repository: z.object({url: z.string().nullable().optional(), type: z.enum(["maven", "ivy", "flatDir", "npm"]).nullable().optional(), resolutionSource: z.enum(["remote", "local", "unknown"]).nullable().optional()}).nullable().optional()}); export const mavenDependencies = z.object({dependencies: z.array(mavenDependency).optional()}); export const mavenDependencyCaching = z.object({downloadedFileCount: z.number().int().gte(0), downloadedFileSize: z.number().int().gte(0), cachedFileCount: z.number().int().gte(0), cachedFileSize: z.number().int().gte(0)}); export const bazelAttributes = z.object({id: z.string(), invocationId: z.string().nullable().optional(), buildStartTime: z.number().int(), buildDuration: z.number().int(), bazelVersion: z.string(), command: z.string(), targetPatterns: z.array(z.string()).optional(), exitCode: z.number().int().nullable().optional(), user: z.string().nullable().optional(), host: z.string().nullable().optional(), tags: z.array(z.string()), values: z.array(buildAttributesValue), links: z.array(buildAttributesLink), moduleName: z.string().nullable().optional(), hasFailed: z.boolean()}); export const bazelCriticalPath = z.object({actions: z.array(z.object({name: z.string(), category: z.string(), duration: z.number().int()})).optional()}); export const npmCommand = z.object({command: z.string(), arguments: z.array(z.string()).optional()}); export const npmAttributes = z.object({id: z.string(), buildStartTime: z.number().int(), buildDuration: z.number().int(), exitCode: z.number().int().nullable().optional(), nodejsVersion: z.string().optional(), npmVersion: z.string(), npmAgentVersion: z.string(), command: npmCommand, links: z.array(buildAttributesLink), tags: z.array(z.string()), values: z.array(buildAttributesValue), user: z.string().nullable().optional(), host: z.string().nullable().optional(), packageName: z.string().nullable().optional(), hasFailed: z.boolean(), hasVerificationFailure: z.boolean().optional(), hasNonVerificationFailure: z.boolean().optional()}); export const npmDependency = z.object({scheme: z.string(), type: z.string(), namespace: z.string().nullable().optional(), name: z.string(), version: z.string().nullable().optional(), qualifiers: z.record(z.string(), z.string()).nullable().optional(), subpath: z.string().nullable().optional(), purl: z.string().nullable().optional(), repository: z.object({url: z.string().nullable().optional(), type: z.enum(["maven", "ivy", "flatDir", "npm"]).nullable().optional(), resolutionSource: z.enum(["remote", "local", "unknown"]).nullable().optional()}).nullable().optional()}); export const npmDependencies = z.object({dependencies: z.array(npmDependency).optional()}); export const npmNetworkActivitySubset = z.object({networkRequestCount: z.number().int().gte(0).optional(), serialNetworkRequestTime: z.number().int().gte(0).optional(), fileDownloadSize: z.number().int().gte(0).optional(), fileDownloadCount: z.number().int().gte(0).optional(), wallClockNetworkRequestTime: z.number().int().gte(0).optional()}); export const npmNetworkActivity = z.object({networkRequestCount: z.number().int(), serialNetworkRequestTime: z.number().int().gte(0), wallClockNetworkRequestTime: z.number().int().gte(0), fileDownloadSize: z.number().int().gte(0), fileDownloadCount: z.number().int().gte(0), methods: z.record(z.string(), npmNetworkActivitySubset).optional(), registries: z.record(z.string(), npmNetworkActivitySubset).optional(), registryMethods: z.record(z.string(), npmNetworkActivitySubset).optional()}); export const pythonAttributes = z.object({id: z.string(), buildStartTime: z.number().int(), buildDuration: z.number().int(), exitCode: z.number().int().optional(), exception: z.string().nullable().optional(), pythonVersion: z.string(), pythonAgentVersion: z.string(), command: z.array(z.string()), links: z.array(buildAttributesLink), tags: z.array(z.string()), values: z.array(buildAttributesValue), user: z.string().nullable().optional(), host: z.string().nullable().optional(), hasFailed: z.boolean(), projectName: z.string().nullable().optional()}); export const sbtDevelocitySettings = z.object({backgroundPublicationEnabled: z.boolean(), buildOutputCapturingEnabled: z.boolean().nullable().optional(), resourceUsageCapturingEnabled: z.boolean().nullable().optional()}); export const sbtBuildOptions = z.object({useCoursierEnabled: z.boolean(), offlineModeEnabled: z.boolean(), turboEnabled: z.boolean(), parallelExecutionEnabled: z.boolean(), semanticDbScalacPluginEnabled: z.boolean(), interactiveModeEnabled: z.boolean()}); export const sbtAttributes = z.object({id: z.string(), buildStartTime: z.number().int(), buildDuration: z.number().int(), sbtVersion: z.string(), pluginVersion: z.string(), rootProjectName: z.string(), requestedCommands: z.array(z.string()), hasFailed: z.boolean(), hasVerificationFailure: z.boolean().optional(), hasNonVerificationFailure: z.boolean().optional(), tags: z.array(z.string()), values: z.array(buildAttributesValue), links: z.array(buildAttributesLink), develocitySettings: sbtDevelocitySettings, buildOptions: sbtBuildOptions, environment: buildAttributesEnvironment}); export const buildModels = z.object({gradleAttributes: z.object({problem: apiProblem.optional(), model: gradleAttributes.optional()}).optional(), gradleTestPerformance: z.object({problem: apiProblem.optional(), model: gradleTestPerformance.optional()}).optional(), gradleBuildCachePerformance: z.object({problem: apiProblem.optional(), model: gradleBuildCachePerformance.optional()}).optional(), gradleProjects: z.object({problem: apiProblem.optional(), model: gradleProjects.optional()}).optional(), gradleNetworkActivity: z.object({problem: apiProblem.optional(), model: gradleNetworkActivity.optional()}).optional(), gradleArtifactTransformExecutions: z.object({problem: apiProblem.optional(), model: gradleArtifactTransformExecutions.optional()}).optional(), gradleDeprecations: z.object({problem: apiProblem.optional(), model: gradleDeprecations.optional()}).optional(), gradlePlugins: z.object({problem: apiProblem.optional(), model: gradlePlugins.optional()}).optional(), gradleResourceUsage: z.object({problem: apiProblem.optional(), model: gradleResourceUsage.optional()}).optional(), gradleBuildProfileOverview: z.object({problem: apiProblem.optional(), model: gradleBuildProfileOverview.optional()}).optional(), gradleConfigurationCache: z.object({problem: apiProblem.optional(), model: gradleConfigurationCache.optional()}).optional(), gradleDependencies: z.object({problem: apiProblem.optional(), model: gradleDependencies.optional()}).optional(), gradleDependencyCaching: z.object({problem: apiProblem.optional(), model: gradleDependencyCaching.optional()}).optional(), mavenAttributes: z.object({problem: apiProblem.optional(), model: mavenAttributes.optional()}).optional(), mavenTestPerformance: z.object({problem: apiProblem.optional(), model: mavenTestPerformance.optional()}).optional(), mavenBuildCachePerformance: z.object({problem: apiProblem.optional(), model: mavenBuildCachePerformance.optional()}).optional(), mavenModules: z.object({problem: apiProblem.optional(), model: mavenModules.optional()}).optional(), mavenDependencyResolution: z.object({problem: apiProblem.optional(), model: mavenDependencyResolution.optional()}).optional(), mavenPlugins: z.object({problem: apiProblem.optional(), model: mavenPlugins.optional()}).optional(), mavenExtensions: z.object({problem: apiProblem.optional(), model: mavenExtensions.optional()}).optional(), mavenResourceUsage: z.object({problem: apiProblem.optional(), model: mavenResourceUsage.optional()}).optional(), mavenBuildProfileOverview: z.object({problem: apiProblem.optional(), model: mavenBuildProfileOverview.optional()}).optional(), mavenDependencies: z.object({problem: apiProblem.optional(), model: mavenDependencies.optional()}).optional(), mavenDependencyCaching: z.object({problem: apiProblem.optional(), model: mavenDependencyCaching.optional()}).optional(), bazelAttributes: z.object({problem: apiProblem.optional(), model: bazelAttributes.optional()}).optional(), bazelCriticalPath: z.object({problem: apiProblem.optional(), model: bazelCriticalPath.optional()}).optional(), npmAttributes: z.object({problem: apiProblem.optional(), model: npmAttributes.optional()}).optional(), npmDependencies: z.object({problem: apiProblem.optional(), model: npmDependencies.optional()}).optional(), npmNetworkActivity: z.object({problem: apiProblem.optional(), model: npmNetworkActivity.optional()}).optional(), pythonAttributes: z.object({problem: apiProblem.optional(), model: pythonAttributes.optional()}).optional(), sbtAttributes: z.object({problem: apiProblem.optional(), model: sbtAttributes.optional()}).optional()}); export const build = z.object({id: z.string(), availableAt: z.number().int(), buildToolType: z.string(), buildToolVersion: z.string(), buildAgentVersion: z.string(), models: buildModels.optional()}); export const builds = z.array(build); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Get a list of builds with common attributes. * * GET /api/builds */ export const getApiApiBuilds = async (options?: GetApiApiBuildsOptions) => { const {baseUrl = "https://develocity.example.com", fetch: fetchFn = fetch, DevelocityAccessKeyOrToken} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (DevelocityAccessKeyOrToken !== undefined) headers.set('authorization', `Bearer ${DevelocityAccessKeyOrToken}`) const url = `${baseUrl.replace(/\/+$/, '')}/api/builds${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(builds, await res.json()) };