Skip to content

Commit d1cd784

Browse files
stirbykylecarbsjaaydenh
authored
chore: patch 2.14.2 (#14371)
* chore: sign the windows installer (#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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy