Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4a7c230

Browse files
committed
chore: enable SBOM and containerd support in Docker builds
Added SBOM (Software Bill of Materials) generation during Docker build to enhance traceability. Refer to Docker documentation on SBOM: docs.docker.com/build/metadata/attestations/sbomUpdated Docker build scripts to use BuildKit for provenance and SBOM support: docs.docker.com/build/metadata/attestationsConfigured Docker daemon to support the Containerd snapshotter feature to improve performance: docs.docker.com/engine/storage/containerd
1 parent26832cb commit4a7c230

File tree

70 files changed

+361
-310
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+361
-310
lines changed

‎.github/workflows/release.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,7 @@ jobs:
361361
file:scripts/Dockerfile.base
362362
platforms:linux/amd64,linux/arm64,linux/arm/v7
363363
provenance:true
364+
sbom:true
364365
pull:true
365366
no-cache:true
366367
push:true
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
{
2-
"registry-mirrors": ["https://mirror.gcr.io"]
2+
"registry-mirrors": ["https://mirror.gcr.io"],
3+
"features": {
4+
"containerd-snapshotter":true
5+
}
36
}

‎dogfood/contents/zed/main.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ data "coder_workspace" "me" {}
2020

2121
resource"coder_app""zed" {
2222
agent_id=var.agent_id
23-
display_name="Zed Editor"
23+
display_name="Zed"
2424
slug="zed"
2525
icon="/icon/zed.svg"
2626
external=true
27-
url="zed://ssh/coder.${lower(data.coder_workspace.me.name)}/${var.folder}"
27+
url="zed://ssh/${lower(data.coder_workspace.me.name)}.coder/${var.folder}"
2828
}

‎enterprise/coderd/groups.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,6 @@ func (api *API) patchGroup(rw http.ResponseWriter, r *http.Request) {
167167
})
168168
return
169169
}
170-
// TODO: It would be nice to enforce this at the schema level
171-
// but unfortunately our org_members table does not have an ID.
172170
_,err:=database.ExpectOne(api.Database.OrganizationMembers(ctx, database.OrganizationMembersParams{
173171
OrganizationID:group.OrganizationID,
174172
UserID:uuid.MustParse(id),

‎scripts/build_docker.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,11 @@ export DOCKER_BUILDKIT=1
122122
base_image="$DEFAULT_BASE"
123123
if [["$build_base"!="" ]];then
124124
log"--- Building base Docker image for$arch ($build_base)"
125-
docker build \
125+
dockerbuildxbuild \
126126
--platform"$arch" \
127127
--tag"$build_base" \
128+
--provenancetrue \
129+
--sbomtrue \
128130
--no-cache \
129131
-f Dockerfile.base \
130132
.1>&2

‎site/e2e/constants.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ export const defaultPassword = "SomeSecurePassword!";
2020

2121
// Credentials for users
2222
exportconstusers={
23-
admin:{
24-
username:"admin",
23+
owner:{
24+
username:"owner",
2525
password:defaultPassword,
26-
email:"admin@coder.com",
26+
email:"owner@coder.com",
2727
},
2828
templateAdmin:{
2929
username:"template-admin",
@@ -41,7 +41,7 @@ export const users = {
4141
username:"auditor",
4242
password:defaultPassword,
4343
email:"auditor@coder.com",
44-
roles:["Template Admin","Auditor"],
44+
roles:["Auditor"],
4545
},
4646
member:{
4747
username:"member",

‎site/e2e/helpers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export type LoginOptions = {
6767
password:string;
6868
};
6969

70-
exportasyncfunctionlogin(page:Page,options:LoginOptions=users.admin){
70+
exportasyncfunctionlogin(page:Page,options:LoginOptions=users.owner){
7171
constctx=page.context();
7272
// biome-ignore lint/suspicious/noExplicitAny: reset the current user
7373
(ctxasany)[Symbol.for("currentUser")]=undefined;

‎site/e2e/setup/addUsersAndLicense.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@ test("setup deployment", async ({ page }) => {
1616
}
1717

1818
// Setup first user
19-
awaitpage.getByLabel(Language.emailLabel).fill(users.admin.email);
20-
awaitpage.getByLabel(Language.passwordLabel).fill(users.admin.password);
19+
awaitpage.getByLabel(Language.emailLabel).fill(users.owner.email);
20+
awaitpage.getByLabel(Language.passwordLabel).fill(users.owner.password);
2121
awaitpage.getByTestId("create").click();
2222

2323
awaitexpectUrl(page).toHavePathName("/workspaces");
2424
awaitpage.getByTestId("button-select-template").isVisible();
2525

2626
for(constuserofObject.values(users)){
2727
// Already created as first user
28-
if(user.username==="admin"){
28+
if(user.username==="owner"){
2929
continue;
3030
}
3131

‎site/e2e/tests/auditLogs.spec.ts

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,62 +13,62 @@ test.describe.configure({ mode: "parallel" });
1313

1414
test.beforeEach(async({ page})=>{
1515
beforeCoderTest(page);
16-
awaitlogin(page,users.auditor);
1716
});
1817

19-
asyncfunctionresetSearch(page:Page){
18+
asyncfunctionresetSearch(page:Page,username:string){
2019
constclearButton=page.getByLabel("Clear search");
2120
if(awaitclearButton.isVisible()){
2221
awaitclearButton.click();
2322
}
2423

2524
// Filter by the auditor test user to prevent race conditions
26-
constuser=currentUser(page);
2725
awaitexpect(page.getByText("All users")).toBeVisible();
28-
awaitpage.getByPlaceholder("Search...").fill(`username:${user.username}`);
26+
awaitpage.getByPlaceholder("Search...").fill(`username:${username}`);
2927
awaitexpect(page.getByText("All users")).not.toBeVisible();
3028
}
3129

3230
test("logins are logged",async({ page})=>{
3331
requiresLicense();
3432

3533
// Go to the audit history
34+
awaitlogin(page,users.auditor);
3635
awaitpage.goto("/audit");
36+
constusername=users.auditor.username;
3737

38-
constuser=currentUser(page);
39-
constloginMessage=`${user.username} logged in`;
38+
constloginMessage=`${username} logged in`;
4039
// Make sure those things we did all actually show up
41-
awaitresetSearch(page);
40+
awaitresetSearch(page,username);
4241
awaitexpect(page.getByText(loginMessage).first()).toBeVisible();
4342
});
4443

4544
test("creating templates and workspaces is logged",async({ page})=>{
4645
requiresLicense();
4746

4847
// Do some stuff that should show up in the audit logs
48+
awaitlogin(page,users.templateAdmin);
49+
constusername=users.templateAdmin.username;
4950
consttemplateName=awaitcreateTemplate(page);
5051
constworkspaceName=awaitcreateWorkspace(page,templateName);
5152

5253
// Go to the audit history
54+
awaitlogin(page,users.auditor);
5355
awaitpage.goto("/audit");
5456

55-
constuser=currentUser(page);
56-
5757
// Make sure those things we did all actually show up
58-
awaitresetSearch(page);
58+
awaitresetSearch(page,username);
5959
awaitexpect(
60-
page.getByText(`${user.username} created template${templateName}`),
60+
page.getByText(`${username} created template${templateName}`),
6161
).toBeVisible();
6262
awaitexpect(
63-
page.getByText(`${user.username} created workspace${workspaceName}`),
63+
page.getByText(`${username} created workspace${workspaceName}`),
6464
).toBeVisible();
6565
awaitexpect(
66-
page.getByText(`${user.username} started workspace${workspaceName}`),
66+
page.getByText(`${username} started workspace${workspaceName}`),
6767
).toBeVisible();
6868

6969
// Make sure we can inspect the details of the log item
7070
constcreatedWorkspace=page.locator(".MuiTableRow-root",{
71-
hasText:`${user.username} created workspace${workspaceName}`,
71+
hasText:`${username} created workspace${workspaceName}`,
7272
});
7373
awaitcreatedWorkspace.getByLabel("open-dropdown").click();
7474
awaitexpect(
@@ -83,18 +83,19 @@ test("inspecting and filtering audit logs", async ({ page }) => {
8383
requiresLicense();
8484

8585
// Do some stuff that should show up in the audit logs
86+
awaitlogin(page,users.templateAdmin);
87+
constusername=users.templateAdmin.username;
8688
consttemplateName=awaitcreateTemplate(page);
8789
constworkspaceName=awaitcreateWorkspace(page,templateName);
8890

8991
// Go to the audit history
92+
awaitlogin(page,users.auditor);
9093
awaitpage.goto("/audit");
91-
92-
constuser=currentUser(page);
93-
constloginMessage=`${user.username} logged in`;
94-
conststartedWorkspaceMessage=`${user.username} started workspace${workspaceName}`;
94+
constloginMessage=`${username} logged in`;
95+
conststartedWorkspaceMessage=`${username} started workspace${workspaceName}`;
9596

9697
// Filter by resource type
97-
awaitresetSearch(page);
98+
awaitresetSearch(page,username);
9899
awaitpage.getByText("All resource types").click();
99100
constworkspaceBuildsOption=page.getByText("Workspace Build");
100101
awaitworkspaceBuildsOption.scrollIntoViewIfNeeded({timeout:5000});
@@ -107,7 +108,7 @@ test("inspecting and filtering audit logs", async ({ page }) => {
107108
awaitexpect(page.getByText("All resource types")).toBeVisible();
108109

109110
// Filter by action type
110-
awaitresetSearch(page);
111+
awaitresetSearch(page,username);
111112
awaitpage.getByText("All actions").click();
112113
awaitpage.getByText("Login",{exact:true}).click();
113114
// Logins should be visible

‎site/e2e/tests/deployment/general.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ test("experiments", async ({ page }) => {
1616
constavailableExperiments=awaitAPI.getAvailableExperiments();
1717

1818
// Verify if the site lists the same experiments
19-
awaitpage.goto("/deployment/general",{waitUntil:"networkidle"});
19+
awaitpage.goto("/deployment/overview",{waitUntil:"domcontentloaded"});
2020

2121
constexperimentsLocator=page.locator(
2222
"div.options-table tr.option-experiments ul.option-array",

‎site/e2e/tests/roles.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ test.describe("roles admin settings access", () => {
8282
]);
8383
});
8484

85-
test("admin can see admin settings",async({ page})=>{
86-
awaitlogin(page,users.admin);
85+
test("owner can see admin settings",async({ page})=>{
86+
awaitlogin(page,users.owner);
8787
awaitpage.goto("/",{waitUntil:"domcontentloaded"});
8888

8989
awaithasAccessToAdminSettings(page,[

‎site/src/@types/storybook.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import type {
66
SerpentOption,
77
User,
88
}from"api/typesGenerated";
9-
importtype{Permissions}from"contexts/auth/permissions";
9+
importtype{Permissions}from"modules/permissions";
1010
importtype{QueryKey}from"react-query";
1111

1212
declare module"@storybook/react"{

‎site/src/api/queries/organizations.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
typeOrganizationPermissionName,
1010
typeOrganizationPermissions,
1111
organizationPermissionChecks,
12-
}from"modules/management/organizationPermissions";
12+
}from"modules/permissions/organizations";
1313
importtype{QueryClient}from"react-query";
1414
import{meKey}from"./users";
1515

‎site/src/contexts/auth/AuthProvider.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
importtype{UpdateUserProfileRequest,User}from"api/typesGenerated";
1111
import{displaySuccess}from"components/GlobalSnackbar/utils";
1212
import{useEmbeddedMetadata}from"hooks/useEmbeddedMetadata";
13+
import{typePermissions,permissionChecks}from"modules/permissions";
1314
import{
1415
typeFC,
1516
typePropsWithChildren,
@@ -18,7 +19,6 @@ import {
1819
useContext,
1920
}from"react";
2021
import{useMutation,useQuery,useQueryClient}from"react-query";
21-
import{typePermissions,permissionChecks}from"./permissions";
2222

2323
exporttypeAuthContextValue={
2424
isLoading:boolean;

‎site/src/modules/dashboard/DashboardLayout.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import { useUpdateCheck } from "./useUpdateCheck";
1616

1717
exportconstDashboardLayout:FC=()=>{
1818
const{ permissions}=useAuthenticated();
19-
constupdateCheck=useUpdateCheck(permissions.viewUpdateCheck);
20-
constcanViewDeployment=Boolean(permissions.viewDeploymentValues);
19+
constupdateCheck=useUpdateCheck(permissions.viewDeploymentConfig);
20+
constcanViewDeployment=Boolean(permissions.viewDeploymentConfig);
2121

2222
return(
2323
<>

‎site/src/modules/dashboard/DashboardProvider.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import type {
1111
import{ErrorAlert}from"components/Alert/ErrorAlert";
1212
import{Loader}from"components/Loader/Loader";
1313
import{useAuthenticated}from"contexts/auth/RequireAuth";
14-
import{canViewAnyOrganization}from"contexts/auth/permissions";
1514
import{useEmbeddedMetadata}from"hooks/useEmbeddedMetadata";
15+
import{canViewAnyOrganization}from"modules/permissions";
1616
import{typeFC,typePropsWithChildren,createContext}from"react";
1717
import{useQuery}from"react-query";
1818
import{selectFeatureVisibility}from"./entitlements";

‎site/src/modules/dashboard/DeploymentBanner/DeploymentBanner.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ export const DeploymentBanner: FC = () => {
1010
constdeploymentStatsQuery=useQuery(deploymentStats());
1111
consthealthQuery=useQuery({
1212
...health(),
13-
enabled:permissions.viewDeploymentValues,
13+
enabled:permissions.viewDeploymentConfig,
1414
});
1515

16-
if(!permissions.viewDeploymentValues||!deploymentStatsQuery.data){
16+
if(!permissions.viewDeploymentConfig||!deploymentStatsQuery.data){
1717
returnnull;
1818
}
1919

‎site/src/modules/dashboard/Navbar/Navbar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import{buildInfo}from"api/queries/buildInfo";
22
import{useProxy}from"contexts/ProxyContext";
33
import{useAuthenticated}from"contexts/auth/RequireAuth";
4-
import{canViewDeploymentSettings}from"contexts/auth/permissions";
54
import{useEmbeddedMetadata}from"hooks/useEmbeddedMetadata";
65
import{useDashboard}from"modules/dashboard/useDashboard";
6+
import{canViewDeploymentSettings}from"modules/permissions";
77
importtype{FC}from"react";
88
import{useQuery}from"react-query";
99
import{useFeatureVisibility}from"../useFeatureVisibility";

‎site/src/modules/dashboard/Navbar/ProxyMenu.stories.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { fn, userEvent, within } from "@storybook/test";
33
import{getAuthorizationKey}from"api/queries/authCheck";
44
import{getPreferredProxy}from"contexts/ProxyContext";
55
import{AuthProvider}from"contexts/auth/AuthProvider";
6-
import{permissionChecks}from"contexts/auth/permissions";
6+
import{permissionChecks}from"modules/permissions";
77
import{
88
MockAuthMethodsAll,
99
MockPermissions,

‎site/src/modules/management/DeploymentSettingsProvider.tsxrenamed to‎site/src/modules/management/DeploymentConfigProvider.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,26 @@ import { type FC, createContext, useContext } from "react";
66
import{useQuery}from"react-query";
77
import{Outlet}from"react-router-dom";
88

9-
exportconstDeploymentSettingsContext=createContext<
10-
DeploymentSettingsValue|undefined
9+
exportconstDeploymentConfigContext=createContext<
10+
DeploymentConfigValue|undefined
1111
>(undefined);
1212

13-
typeDeploymentSettingsValue=Readonly<{
13+
typeDeploymentConfigValue=Readonly<{
1414
deploymentConfig:DeploymentConfig;
1515
}>;
1616

17-
exportconstuseDeploymentSettings=():DeploymentSettingsValue=>{
18-
constcontext=useContext(DeploymentSettingsContext);
17+
exportconstuseDeploymentConfig=():DeploymentConfigValue=>{
18+
constcontext=useContext(DeploymentConfigContext);
1919
if(!context){
2020
thrownewError(
21-
`${useDeploymentSettings.name} should be used inside of${DeploymentSettingsProvider.name}`,
21+
`${useDeploymentConfig.name} should be used inside of${DeploymentConfigProvider.name}`,
2222
);
2323
}
2424

2525
returncontext;
2626
};
2727

28-
constDeploymentSettingsProvider:FC=()=>{
28+
constDeploymentConfigProvider:FC=()=>{
2929
constdeploymentConfigQuery=useQuery(deploymentConfig());
3030

3131
if(deploymentConfigQuery.error){
@@ -37,12 +37,12 @@ const DeploymentSettingsProvider: FC = () => {
3737
}
3838

3939
return(
40-
<DeploymentSettingsContext.Provider
40+
<DeploymentConfigContext.Provider
4141
value={{deploymentConfig:deploymentConfigQuery.data}}
4242
>
4343
<Outlet/>
44-
</DeploymentSettingsContext.Provider>
44+
</DeploymentConfigContext.Provider>
4545
);
4646
};
4747

48-
exportdefaultDeploymentSettingsProvider;
48+
exportdefaultDeploymentConfigProvider;

‎site/src/modules/management/DeploymentSettingsLayout.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import {
77
}from"components/Breadcrumb/Breadcrumb";
88
import{Loader}from"components/Loader/Loader";
99
import{useAuthenticated}from"contexts/auth/RequireAuth";
10-
import{RequirePermission}from"contexts/auth/RequirePermission";
11-
import{canViewDeploymentSettings}from"contexts/auth/permissions";
10+
import{canViewDeploymentSettings}from"modules/permissions";
11+
import{RequirePermission}from"modules/permissions/RequirePermission";
1212
import{typeFC,Suspense}from"react";
1313
import{Navigate,Outlet,useLocation}from"react-router-dom";
1414
import{DeploymentSidebar}from"./DeploymentSidebar";
@@ -21,8 +21,8 @@ const DeploymentSettingsLayout: FC = () => {
2121
return(
2222
<Navigate
2323
to={
24-
permissions.viewDeploymentValues
25-
?"/deployment/general"
24+
permissions.viewDeploymentConfig
25+
?"/deployment/overview"
2626
:"/deployment/users"
2727
}
2828
replace

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp