Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/Http/Controllers/BuildController.php
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ public function update(int $build_id): View
$this->setBuildById($build_id);

return $this->vue('build-update', 'Files Updated', [
'build-id' => $this->build->Id,
'repository-type' => $this->project->CvsViewerType,
'repository-url' => $this->project->CvsUrl,
]);
Expand Down
2 changes: 2 additions & 0 deletions app/cdash/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,8 @@ add_browser_test(/Browser/Pages/BuildDynamicAnalysisIdPageTest)

add_browser_test(/Browser/Pages/BuildSummaryPageTest)

add_browser_test(/Browser/Pages/BuildSidebarComponentTest)

add_php_test(image)
set_tests_properties(image PROPERTIES DEPENDS /CDash/XmlHandler/UpdateHandler)

Expand Down
9 changes: 9 additions & 0 deletions phpstan-baseline.neon
Original file line number Diff line number Diff line change
Expand Up @@ -26451,6 +26451,15 @@ parameters:
count: 2
path: tests/Browser/Pages/BuildErrorsPageTest.php

-
rawMessage: '''
Call to deprecated method coverageResults() of class App\Models\Build:
07/27/2025 Use this relation only to edit the underlying coverage table. Use coverage() instead.
'''
identifier: method.deprecated
count: 1
path: tests/Browser/Pages/BuildSidebarComponentTest.php

-
rawMessage: 'Method Tests\Browser\Pages\ProjectMembersPageTest::testFullInvitationWorkflow() throws checked exception OverflowException but it''s missing from the PHPDoc @throws tag.'
identifier: missingType.checkedException
Expand Down
1 change: 1 addition & 0 deletions phpstan.neon
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ parameters:
- 'Illuminate\Http\Client\ConnectionException'
- 'Illuminate\Http\Exceptions\HttpResponseException'
- 'Symfony\Component\Console\Exception\CommandNotFoundException'
- 'Facebook\WebDriver\Exception\TimeoutException'

check:
tooWideThrowType: true
Expand Down
2 changes: 1 addition & 1 deletion resources/css/common.css
Original file line number Diff line number Diff line change
Expand Up @@ -897,7 +897,7 @@ div#index_top {
}

div#main_content {
padding: 1em 2em;
padding: 1em;
}

#settings {
Expand Down
65 changes: 36 additions & 29 deletions resources/js/vue/components/BuildCommandsPage.vue
Original file line number Diff line number Diff line change
@@ -1,43 +1,49 @@
<template>
<div class="tw-flex tw-flex-col tw-w-full tw-gap-4">
<BuildSummaryCard :build-id="buildId" />
<BuildSidebar
:build-id="buildId"
active-tab="commands"
>
<div class="tw-flex tw-flex-col tw-w-full tw-gap-4">
<BuildSummaryCard :build-id="buildId" />

<div class="tw-w-full tw-bg-base-100 tw-flex tw-flex-col tw-rounded-lg tw-border tw-border-gray-200 tw-p-4">
<FilterBuilder
filter-type="BuildCommandsFiltersMultiFilterInput"
primary-record-name="commands"
:initial-filters="initialFilters"
:execute-query-link="executeQueryLink"
@change-filters="filters => changedFilters = filters"
/>
<div class="tw-w-full tw-bg-base-100 tw-flex tw-flex-col tw-rounded-lg tw-border tw-border-gray-200 tw-p-4">
<FilterBuilder
filter-type="BuildCommandsFiltersMultiFilterInput"
primary-record-name="commands"
:initial-filters="initialFilters"
:execute-query-link="executeQueryLink"
@change-filters="filters => changedFilters = filters"
/>

<loading-indicator :is-loading="!allCommands">
<CommandGanttChart :commands="formattedChartCommands" />
</loading-indicator>
</div>
<loading-indicator :is-loading="!allCommands">
<CommandGanttChart :commands="formattedChartCommands" />
</loading-indicator>
</div>

<div class="tw-w-full tw-bg-base-100 tw-flex tw-flex-col tw-rounded-lg tw-border tw-border-gray-200 tw-p-4">
<h3 class="tw-text-xl tw-font-bold tw-mb-2">
Memory
</h3>
<div class="tw-w-full tw-bg-base-100 tw-flex tw-flex-col tw-rounded-lg tw-border tw-border-gray-200 tw-p-4">
<h3 class="tw-text-xl tw-font-bold tw-mb-2">
Memory
</h3>

<loading-indicator :is-loading="!allCommands">
<LineChart
v-if="memoryChartData.length > 0"
y-label="Memory (GB)"
:data="memoryChartData"
/>
<div v-else>
No data available.
</div>
</loading-indicator>
<loading-indicator :is-loading="!allCommands">
<LineChart
v-if="memoryChartData.length > 0"
y-label="Memory (GB)"
:data="memoryChartData"
/>
<div v-else>
No data available.
</div>
</loading-indicator>
</div>
</div>
</div>
</BuildSidebar>
</template>

<script>
import BuildSummaryCard from './shared/BuildSummaryCard.vue';
import LoadingIndicator from './shared/LoadingIndicator.vue';
import BuildSidebar from './shared/BuildSidebar.vue';
import gql from 'graphql-tag';
import FilterBuilder from './shared/FilterBuilder.vue';
import CommandGanttChart from './shared/CommandGanttChart.vue';
Expand All @@ -51,6 +57,7 @@ export default {
FilterBuilder,
LoadingIndicator,
BuildSummaryCard,
BuildSidebar,
},

props: {
Expand Down
96 changes: 51 additions & 45 deletions resources/js/vue/components/BuildConfigure.vue
Original file line number Diff line number Diff line change
@@ -1,65 +1,71 @@
<template>
<div class="tw-flex tw-flex-col tw-w-full tw-gap-4">
<build-summary-card :build-id="buildId" />
<BuildSidebar
:build-id="buildId"
active-tab="configure"
>
<div class="tw-flex tw-flex-col tw-w-full tw-gap-4">
<build-summary-card :build-id="buildId" />

<loading-indicator :is-loading="!configures">
<div v-if="configures.length === 0">
No configure found for this build.
</div>
<configure-card
v-else-if="hasSingleConfigure"
:return-value="configures[0].configure.returnValue"
:log="configures[0].configure.log"
:command="configures[0].configure.command"
/>
<div
v-else
class="tw-join tw-join-vertical tw-w-full"
>
<details
v-for="configure in configures"
class="tw-collapse tw-collapse-plus tw-join-item tw-border"
:data-test="'collapse-' + configure.subProject.id"
<loading-indicator :is-loading="!configures">
<div v-if="configures.length === 0">
No configure found for this build.
</div>
<configure-card
v-else-if="hasSingleConfigure"
:return-value="configures[0].configure.returnValue"
:log="configures[0].configure.log"
:command="configures[0].configure.command"
/>
<div
v-else
class="tw-join tw-join-vertical tw-w-full"
>
<summary class="tw-collapse-title tw-text-xl tw-font-medium">
<span>{{ configure.subProject.name }}</span>
<span
v-if="configure.configureErrorsCount > 0"
class="tw-badge tw-ml-2 tw-bg-red-400"
:data-test="'errors-' + configure.subProject.id"
><font-awesome-icon :icon="FA.faCircleExclamation" /> {{ configure.configureErrorsCount }}</span>
<span
v-if="configure.configureWarningsCount > 0"
class="tw-badge tw-ml-1 tw-bg-orange-400"
:data-test="'warnings-' + configure.subProject.id"
><font-awesome-icon :icon="FA.faTriangleExclamation" /> {{ configure.configureWarningsCount }}</span>
</summary>
<div class="tw-collapse-content">
<configure-card
:return-value="configure.configure.returnValue"
:log="configure.configure.log"
:command="configure.configure.command"
/>
</div>
</details>
</div>
</loading-indicator>
</div>
<details
v-for="configure in configures"
class="tw-collapse tw-collapse-plus tw-join-item tw-border"
:data-test="'collapse-' + configure.subProject.id"
>
<summary class="tw-collapse-title tw-text-xl tw-font-medium">
<span>{{ configure.subProject.name }}</span>
<span
v-if="configure.configureErrorsCount > 0"
class="tw-badge tw-ml-2 tw-bg-red-400"
:data-test="'errors-' + configure.subProject.id"
><font-awesome-icon :icon="FA.faCircleExclamation" /> {{ configure.configureErrorsCount }}</span>
<span
v-if="configure.configureWarningsCount > 0"
class="tw-badge tw-ml-1 tw-bg-orange-400"
:data-test="'warnings-' + configure.subProject.id"
><font-awesome-icon :icon="FA.faTriangleExclamation" /> {{ configure.configureWarningsCount }}</span>
</summary>
<div class="tw-collapse-content">
<configure-card
:return-value="configure.configure.returnValue"
:log="configure.configure.log"
:command="configure.configure.command"
/>
</div>
</details>
</div>
</loading-indicator>
</div>
</BuildSidebar>
</template>

<script>
import gql from 'graphql-tag';
import BuildSummaryCard from './shared/BuildSummaryCard.vue';
import LoadingIndicator from './shared/LoadingIndicator.vue';
import ConfigureCard from './shared/ConfigureCard.vue';
import BuildSidebar from './shared/BuildSidebar.vue';
import {
faCircleExclamation,
faTriangleExclamation,
} from '@fortawesome/free-solid-svg-icons';
import {FontAwesomeIcon} from '@fortawesome/vue-fontawesome';

export default {
components: {FontAwesomeIcon, ConfigureCard, LoadingIndicator, BuildSummaryCard},
components: {FontAwesomeIcon, ConfigureCard, LoadingIndicator, BuildSummaryCard, BuildSidebar},
props: {
buildId: {
type: Number,
Expand Down
Loading
Loading