diff --git a/components/dashboard/src/icons/Spinner.svg b/components/dashboard/src/icons/Spinner.svg
index 5ed476c64d224a..989c65996ab86b 100644
--- a/components/dashboard/src/icons/Spinner.svg
+++ b/components/dashboard/src/icons/Spinner.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/components/dashboard/src/icons/SpinnerDark.svg b/components/dashboard/src/icons/SpinnerDark.svg
deleted file mode 100644
index 3698f94217afc4..00000000000000
--- a/components/dashboard/src/icons/SpinnerDark.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/components/dashboard/src/projects/ConfigureProject.tsx b/components/dashboard/src/projects/ConfigureProject.tsx
index f173ad1b22f621..20a717e6853efa 100644
--- a/components/dashboard/src/projects/ConfigureProject.tsx
+++ b/components/dashboard/src/projects/ConfigureProject.tsx
@@ -13,7 +13,6 @@ import { getGitpodService } from "../service/service";
import { getCurrentTeam, TeamsContext } from "../teams/teams-context";
import Header from "../components/Header";
import Spinner from "../icons/Spinner.svg";
-import SpinnerDark from "../icons/SpinnerDark.svg";
import PrebuildLogsEmpty from "../images/prebuild-logs-empty.svg";
import PrebuildLogsEmptyDark from "../images/prebuild-logs-empty-dark.svg";
import { ThemeContext } from "../theme-context";
@@ -163,7 +162,7 @@ export default function () {
}
{isDetecting &&
-

+
Detecting project configuration ...
}
@@ -177,7 +176,7 @@ export default function () {
)
}
- {prebuildWasTriggered &&
}
+ {prebuildWasTriggered &&
}
{(prebuildInstance?.status.phase === "stopped" && !prebuildInstance?.status.conditions.failed)
?
diff --git a/components/dashboard/src/projects/Prebuild.tsx b/components/dashboard/src/projects/Prebuild.tsx
index 3c9e46e788c3ef..c02318c061e4c4 100644
--- a/components/dashboard/src/projects/Prebuild.tsx
+++ b/components/dashboard/src/projects/Prebuild.tsx
@@ -12,7 +12,6 @@ import Header from "../components/Header";
import PrebuildLogs from "../components/PrebuildLogs";
import { getGitpodService, gitpodHostUrl } from "../service/service";
import { TeamsContext, getCurrentTeam } from "../teams/teams-context";
-import { ThemeContext } from "../theme-context";
import { PrebuildInstanceStatus } from "./Prebuilds";
import { shortCommitMessage } from "./render-utils";
@@ -28,7 +27,6 @@ export default function () {
const [ prebuild, setPrebuild ] = useState
();
const [ prebuildInstance, setPrebuildInstance ] = useState();
- const { isDark } = useContext(ThemeContext);
useEffect(() => {
if (!teams || !projectName || !prebuildId) {
@@ -88,7 +86,7 @@ export default function () {
- {prebuildInstance &&
}
+ {prebuildInstance &&
}
{prebuildInstance?.status.phase === "stopped"
?
diff --git a/components/dashboard/src/projects/Prebuilds.tsx b/components/dashboard/src/projects/Prebuilds.tsx
index cf106f9b0d011d..8867632149132c 100644
--- a/components/dashboard/src/projects/Prebuilds.tsx
+++ b/components/dashboard/src/projects/Prebuilds.tsx
@@ -5,14 +5,13 @@
*/
import moment from "moment";
-import { PrebuildInfo, PrebuildWithStatus, PrebuiltWorkspaceState, Project, WorkspaceInstance } from "@gitpod/gitpod-protocol";
+import { PrebuildInfo, PrebuildWithStatus, PrebuiltWorkspaceState, Project, StartPrebuildResult, WorkspaceInstance } from "@gitpod/gitpod-protocol";
import { useContext, useEffect, useState } from "react";
import { useHistory, useLocation, useRouteMatch } from "react-router";
import Header from "../components/Header";
import DropDown, { DropDownEntry } from "../components/DropDown";
import { ItemsList, Item, ItemField, ItemFieldContextMenu } from "../components/ItemsList";
import Spinner from "../icons/Spinner.svg";
-import SpinnerDark from "../icons/SpinnerDark.svg";
import StatusDone from "../icons/StatusDone.svg";
import StatusFailed from "../icons/StatusFailed.svg";
import StatusPaused from "../icons/StatusPaused.svg";
@@ -38,6 +37,7 @@ export default function () {
const [statusFilter, setStatusFilter] = useState
();
const [prebuilds, setPrebuilds] = useState([]);
+ const [isPrebuildPending, setIsPrebuildPending] = useState(false);
useEffect(() => {
if (!project) {
@@ -46,7 +46,8 @@ export default function () {
const registration = getGitpodService().registerClient({
onPrebuildUpdate: (update: PrebuildWithStatus) => {
if (update.info.projectId === project.id) {
- setPrebuilds(prev => [update, ...prev.filter(p => p.info.id !== update.info.id)])
+ setPrebuilds(prev => [update, ...prev.filter(p => p.info.id !== update.info.id)]);
+ setIsPrebuildPending(false);
}
}
});
@@ -126,9 +127,23 @@ export default function () {
history.push(`/${!!team ? 't/'+team.slug : 'projects'}/${projectName}/${pb.id}`);
}
- const triggerPrebuild = (branchName: string | null) => {
+ const triggerPrebuild = async (branchName: string | null) => {
if (project) {
- getGitpodService().server.triggerPrebuild(project.id, branchName);
+ setIsPrebuildPending(true);
+ try {
+ const result = await Promise.race([
+ getGitpodService().server.triggerPrebuild(project.id, branchName),
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Timed out while waiting for new prebuild')), 30000)),
+ ]) as StartPrebuildResult;
+ console.log('Successfully triggerred!', result);
+ if (result.done) {
+ // TODO(janx): Visually highlight the prebuild with `p.info.buildWorkspaceId === result.wsid`
+ setIsPrebuildPending(false);
+ }
+ } catch (error) {
+ console.error('Running prebuild failed!', error);
+ setIsPrebuildPending(false);
+ }
}
}
@@ -150,7 +165,7 @@ export default function () {
-
+
-
@@ -233,7 +248,7 @@ export function prebuildStatusIcon(status: PrebuiltWorkspaceState | undefined) {
}
}
-export function PrebuildInstanceStatus(props: { prebuildInstance?: WorkspaceInstance, isDark?: boolean }) {
+export function PrebuildInstanceStatus(props: { prebuildInstance?: WorkspaceInstance }) {
let status = <>>;
let details = <>>;
switch (props.prebuildInstance?.status.phase) {
@@ -244,7 +259,7 @@ export function PrebuildInstanceStatus(props: { prebuildInstance?: WorkspaceInst
PENDING
;
details =
-

+
Prebuild in progress ...
;
break;
@@ -259,7 +274,7 @@ export function PrebuildInstanceStatus(props: { prebuildInstance?: WorkspaceInst
RUNNING
;
details =
-

+
Prebuild in progress ...
;
break;