Skip to content

Commit d1cd784

Browse files
stirbykylecarbsjaaydenh
authored
chore: patch 2.14.2 (coder#14371)
* chore: sign the windows installer (coder#14353) (cherry picked from commit 6f9b3c1) * chore: handle merge conflicts * make fmt patch --------- Co-authored-by: Kyle Carberry <kyle@coder.com> Co-authored-by: Jaayden Halko <jaayden.halko@gmail.com>
1 parent db94b30 commit d1cd784

File tree

5 files changed

+118
-23
lines changed

5 files changed

+118
-23
lines changed

scripts/build_windows_installer.sh

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ source "$(dirname "${BASH_SOURCE[0]}")/lib.sh"
1919
agpl="${CODER_BUILD_AGPL:-0}"
2020
output_path=""
2121
version=""
22+
sign_windows="${CODER_SIGN_WINDOWS:-0}"
2223

2324
args="$(getopt -o "" -l agpl,output:,version: -- "$@")"
2425
eval set -- "$args"
@@ -51,6 +52,11 @@ if [[ "$output_path" == "" ]]; then
5152
error "--output is a required parameter"
5253
fi
5354

55+
if [[ "$sign_windows" == 1 ]]; then
56+
dependencies java
57+
requiredenvs JSIGN_PATH EV_KEYSTORE EV_KEY EV_CERTIFICATE_PATH EV_TSA_URL GCLOUD_ACCESS_TOKEN
58+
fi
59+
5460
if [[ "$#" != 1 ]]; then
5561
error "Exactly one argument must be provided to this script, $# were supplied"
5662
fi
@@ -125,3 +131,7 @@ popd
125131
cp "$temp_dir/installer.exe" "$output_path"
126132

127133
rm -rf "$temp_dir"
134+
135+
if [[ "$sign_windows" == 1 ]]; then
136+
execrelative ./sign_windows.sh "$output_path" 1>&2
137+
fi
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import type { Meta, StoryObj } from "@storybook/react";
2+
import { screen, userEvent } from "@storybook/test";
3+
import { CreateTemplateButton } from "./CreateTemplateButton";
4+
5+
const meta: Meta<typeof CreateTemplateButton> = {
6+
title: "pages/TemplatesPage/CreateTemplateButton",
7+
component: CreateTemplateButton,
8+
};
9+
10+
export default meta;
11+
type Story = StoryObj<typeof CreateTemplateButton>;
12+
13+
export const Close: Story = {};
14+
15+
export const Open: Story = {
16+
play: async ({ step }) => {
17+
const user = userEvent.setup();
18+
await step("click on trigger", async () => {
19+
await user.click(screen.getByRole("button"));
20+
});
21+
},
22+
};
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import AddIcon from "@mui/icons-material/AddOutlined";
2+
import Inventory2 from "@mui/icons-material/Inventory2";
3+
import NoteAddOutlined from "@mui/icons-material/NoteAddOutlined";
4+
import UploadOutlined from "@mui/icons-material/UploadOutlined";
5+
import Button from "@mui/material/Button";
6+
import type { FC } from "react";
7+
import {
8+
MoreMenu,
9+
MoreMenuContent,
10+
MoreMenuItem,
11+
MoreMenuTrigger,
12+
} from "components/MoreMenu/MoreMenu";
13+
14+
type CreateTemplateButtonProps = {
15+
onNavigate: (path: string) => void;
16+
};
17+
18+
export const CreateTemplateButton: FC<CreateTemplateButtonProps> = ({
19+
onNavigate,
20+
}) => {
21+
return (
22+
<MoreMenu>
23+
<MoreMenuTrigger>
24+
<Button startIcon={<AddIcon />} variant="contained">
25+
Create Template
26+
</Button>
27+
</MoreMenuTrigger>
28+
<MoreMenuContent>
29+
<MoreMenuItem
30+
onClick={() => {
31+
onNavigate("/templates/new?exampleId=scratch");
32+
}}
33+
>
34+
<NoteAddOutlined />
35+
From scratch
36+
</MoreMenuItem>
37+
<MoreMenuItem
38+
onClick={() => {
39+
onNavigate("/templates/new");
40+
}}
41+
>
42+
<UploadOutlined />
43+
Upload template
44+
</MoreMenuItem>
45+
<MoreMenuItem
46+
onClick={() => {
47+
onNavigate("/starter-templates");
48+
}}
49+
>
50+
<Inventory2 />
51+
Choose a starter template
52+
</MoreMenuItem>
53+
</MoreMenuContent>
54+
</MoreMenu>
55+
);
56+
};

site/src/pages/TemplatesPage/TemplatesPage.test.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ test("create template from scratch", async () => {
1717
element: <TemplatesPage />,
1818
},
1919
{
20-
path: "/starter-templates",
20+
path: "/templates/new",
2121
element: <div data-testid="new-template-page" />,
2222
},
2323
],
@@ -34,6 +34,9 @@ test("create template from scratch", async () => {
3434
name: "Create Template",
3535
});
3636
await user.click(createTemplateButton);
37+
const fromScratchMenuItem = await screen.findByText("From scratch");
38+
await user.click(fromScratchMenuItem);
3739
await screen.findByTestId("new-template-page");
38-
expect(router.state.location.pathname).toBe("/starter-templates");
40+
expect(router.state.location.pathname).toBe("/templates/new");
41+
expect(router.state.location.search).toBe("?exampleId=scratch");
3942
});

site/src/pages/TemplatesPage/TemplatesPageView.tsx

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,15 @@ import {
3838
TableRowSkeleton,
3939
} from "components/TableLoader/TableLoader";
4040
import { useClickableTableRow } from "hooks/useClickableTableRow";
41+
import { useDashboard } from "modules/dashboard/useDashboard";
4142
import { linkToTemplate, useLinks } from "modules/navigation";
4243
import { createDayString } from "utils/createDayString";
4344
import { docs } from "utils/docs";
4445
import {
4546
formatTemplateBuildTime,
4647
formatTemplateActiveDevelopers,
4748
} from "utils/templates";
49+
import { CreateTemplateButton } from "./CreateTemplateButton";
4850
import { EmptyTemplates } from "./EmptyTemplates";
4951

5052
export const Language = {
@@ -167,38 +169,40 @@ export const TemplatesPageView: FC<TemplatesPageViewProps> = ({
167169
examples,
168170
canCreateTemplates,
169171
}) => {
172+
const { experiments } = useDashboard();
170173
const isLoading = !templates;
171174
const isEmpty = templates && templates.length === 0;
172175
const navigate = useNavigate();
176+
const multiOrgExperimentEnabled = experiments.includes("multi-organization");
177+
178+
const createTemplateAction = () => {
179+
return multiOrgExperimentEnabled ? (
180+
<Button
181+
startIcon={<AddIcon />}
182+
variant="contained"
183+
onClick={() => {
184+
navigate("/starter-templates");
185+
}}
186+
>
187+
Create Template
188+
</Button>
189+
) : (
190+
<CreateTemplateButton onNavigate={navigate} />
191+
);
192+
};
173193

174194
return (
175195
<Margins>
176-
<PageHeader
177-
actions={
178-
canCreateTemplates && (
179-
<Button
180-
startIcon={<AddIcon />}
181-
variant="contained"
182-
onClick={() => {
183-
navigate("/starter-templates");
184-
}}
185-
>
186-
Create Template
187-
</Button>
188-
)
189-
}
190-
>
196+
<PageHeader actions={canCreateTemplates && createTemplateAction()}>
191197
<PageHeaderTitle>
192198
<Stack spacing={1} direction="row" alignItems="center">
193199
Templates
194200
<TemplateHelpTooltip />
195201
</Stack>
196202
</PageHeaderTitle>
197-
{templates && templates.length > 0 && (
198-
<PageHeaderSubtitle>
199-
Select a template to create a workspace.
200-
</PageHeaderSubtitle>
201-
)}
203+
<PageHeaderSubtitle>
204+
Select a template to create a workspace.
205+
</PageHeaderSubtitle>
202206
</PageHeader>
203207

204208
{error ? (
@@ -212,7 +216,7 @@ export const TemplatesPageView: FC<TemplatesPageViewProps> = ({
212216
<TableCell width="15%">{Language.usedByLabel}</TableCell>
213217
<TableCell width="10%">{Language.buildTimeLabel}</TableCell>
214218
<TableCell width="15%">{Language.lastUpdatedLabel}</TableCell>
215-
<TableCell width="1%"></TableCell>
219+
<TableCell width="1%" />
216220
</TableRow>
217221
</TableHead>
218222
<TableBody>

0 commit comments

Comments
 (0)