Compare commits

...

8 Commits

Author SHA1 Message Date
Colin Adler c4a01a42ce chore(docs): add v2.8.2 changelog 2024-02-12 05:33:05 +00:00
Dean Sheather c0aeb2fc2e fix: copy app ID in healthcheck (#12087)
(cherry picked from commit 429144da22)
2024-02-12 05:30:34 +00:00
Bruno Quaresma 908d236a19 fix(site): enable submit when auto start and stop are both disabled (#12055) 2024-02-07 18:28:33 +00:00
Spike Curtis f519db88fb fix: allow startup scripts larger than 32k (#12060)
Fixes #12057 and adds a regression test.
2024-02-07 18:28:14 +00:00
Ben e996e8b7e8 fix typo 2024-02-07 00:10:37 +00:00
Ben da60671b33 formatting + add TF version 2024-02-07 00:08:19 +00:00
Ben 963a1404c0 fmt 2024-02-06 23:41:58 +00:00
Ben 002110228c docs: add v2.8.0 changelog 2024-02-06 23:39:03 +00:00
11 changed files with 239 additions and 8 deletions
+50
View File
@@ -0,0 +1,50 @@
package coderd_test
import (
"testing"
"github.com/stretchr/testify/require"
agentproto "github.com/coder/coder/v2/agent/proto"
"github.com/coder/coder/v2/coderd/coderdtest"
"github.com/coder/coder/v2/coderd/database"
"github.com/coder/coder/v2/coderd/database/dbfake"
"github.com/coder/coder/v2/codersdk/agentsdk"
"github.com/coder/coder/v2/provisionersdk/proto"
"github.com/coder/coder/v2/testutil"
)
func TestAgentAPI_LargeManifest(t *testing.T) {
t.Parallel()
ctx := testutil.Context(t, testutil.WaitLong)
client, store := coderdtest.NewWithDatabase(t, nil)
adminUser := coderdtest.CreateFirstUser(t, client)
n := 512000
longScript := make([]byte, n)
for i := range longScript {
longScript[i] = 'q'
}
r := dbfake.WorkspaceBuild(t, store, database.Workspace{
OrganizationID: adminUser.OrganizationID,
OwnerID: adminUser.UserID,
}).WithAgent(func(agents []*proto.Agent) []*proto.Agent {
agents[0].Scripts = []*proto.Script{
{
Script: string(longScript),
},
}
return agents
}).Do()
ac := agentsdk.New(client.URL)
ac.SetSessionToken(r.AgentToken)
conn, err := ac.ConnectRPC(ctx)
defer func() {
_ = conn.Close()
}()
require.NoError(t, err)
agentAPI := agentproto.NewDRPCAgentClient(conn)
manifest, err := agentAPI.GetManifest(ctx, &agentproto.GetManifestRequest{})
require.NoError(t, err)
require.Len(t, manifest.Scripts, 1)
require.Len(t, manifest.Scripts[0].Script, n)
}
+3
View File
@@ -688,6 +688,9 @@ func (c *wsNetConn) Close() error {
// during read or write will cancel the context, but not close the
// conn. Close should be called to release context resources.
func websocketNetConn(ctx context.Context, conn *websocket.Conn, msgType websocket.MessageType) (context.Context, net.Conn) {
// Set the read limit to 4 MiB -- about the limit for protobufs. This needs to be larger than
// the default because some of our protocols can include large messages like startup scripts.
conn.SetReadLimit(1 << 22)
ctx, cancel := context.WithCancel(ctx)
nc := websocket.NetConn(ctx, conn, msgType)
return ctx, &wsNetConn{
+4 -1
View File
@@ -286,8 +286,11 @@ func ProtoFromAppHealthsRequest(req PostAppHealthsRequest) (*proto.BatchUpdateAp
if !ok {
return nil, xerrors.Errorf("unknown app health: %s", h)
}
var idCopy uuid.UUID
copy(idCopy[:], id[:])
pReq.Updates = append(pReq.Updates, &proto.BatchUpdateAppHealthRequest_HealthUpdate{
Id: id[:],
Id: idCopy[:],
Health: proto.AppHealth(hp),
})
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

+107
View File
@@ -0,0 +1,107 @@
## Changelog
### Features
- Coder will now autofill parameters in the "create workspace" page based on the previous value (#11731) (@ammario)
![Parameter autofill](./images/parameter-autofill.png)
- Change default Terraform version to v1.6 and relax max version constraint (#12027) (@johnstcn)
- Show workspace name suggestions below the name field (#12001) (@aslilac)
- Add favorite/unfavorite commands (@johnstcn)
- Add .zip support for Coder templates (#11839) (#12032) (@mtojek)
- Add support for `--wait` and scripts that block login (#10473) (@mafredri)
- Users can mark workspaces as favorite to show up at the top of their list (#11875) (#11793) (#11878) (#11791) (@johnstcn)
![Favorite workspaces](./images/favorite_workspace.png)
- Add Prometheus metrics to servertailnet (#11988) (@coadler)
- Add support for concurrent scenarios (#11753) (@mafredri)
- Display user avatar on workspace page (#11893) (@BrunoQuaresma)
- Do not show popover on update deadline (#11921) (@BrunoQuaresma)
- Simplify "Create Template" form by removing advanced settings (#11918) (@BrunoQuaresma)
- Show deprecation message on template page (#11996) (@BrunoQuaresma)
- Check agent API version on connection (#11696)
- Add "updated" search param to workspaces (#11714)
- Add option to speedtest to dump a pcap of network traffic (#11848) (@coadler)
- Add logging to client tailnet yamux (#11908) (@spikecurtis)
- Add customizable upgrade message on client/server version mismatch (#11587) (@sreya)
- Add logging to pgcoord subscribe/unsubscribe (#11952) (@spikecurtis)
- Add logging to pgPubsub (#11953) (@spikecurtis)
- Add logging to agent yamux session (#11912) (@spikecurtis)
- Move agent v2 API connection monitoring to yamux layer (#11910) (@spikecurtis)
- Add statsReporter for reporting stats on agent v2 API (#11920) (@spikecurtis)
- Add metrics to PGPubsub (#11971) (@spikecurtis)
- Add custom error message on signups disabled page (#11959) (@mtojek)
### Bug fixes
- Make ServerTailnet set peers lost when it reconnects to the coordinator (#11682)
- Properly auto-update workspace on SSH if template policy is set (#11773)
- Allow template name length of 32 in template push and create (#11915) (@mafredri)
- Alter return signature of convertWorkspace, add check for requesterID (#11796) (@johnstcn)
- Fix limit in `GetUserWorkspaceBuildParameters` (#11954) (@mafredri)
- Fix test flake in TestHeartbeat (#11808) (@johnstcn)
- Do not cache context cancellation errors (#11840) (@johnstcn)
- Fix startup script on workspace creation (#11958) (@matifali)
- Fix startup script looping (#11972) (@code-asher)
- Add ID to default columns in licenses list output (#11823) (@johnstcn)
- Handle query canceled error in sendBeat() (#11794) (@johnstcn)
- Fix proxy settings link (#11817) (@BrunoQuaresma)
- Disable autostart and autostop according to template settings (#11809) (@Kira-Pilot)
- Fix capitalized username (#11891) (@BrunoQuaresma)
- Fix parameters' request upon template variables update (#11898) (@BrunoQuaresma)
- Fix text overflow on batch ws deletion (#11981) (@BrunoQuaresma)
- Fix parameter input icon shrink (#11995) (@BrunoQuaresma)
- Use TSMP ping for reachability, not latency (#11749)
- Display error when fetching OAuth2 provider apps (#11713)
- Fix code-server path based forwarding, defer to code-server (#11759)
- Use correct logger for lifecycle_executor (#11763)
- Disable keepalives in workspaceapps transport (#11789) (@coadler)
- Accept agent RPC connection without version query parameter (#11790) (@spikecurtis)
- Stop spamming DERP map updates for equivalent maps (#11792) (@spikecurtis)
- Check update permission to start workspace (#11798) (@mtojek)
- Always attempt external auth refresh when fetching (#11762) (@Emyrk)
- Stop running tests that exec sh scripts in parallel (#11834) (@spikecurtis)
- Fix type error from theme update (#11844) (@aslilac)
- Use new context after t.Parallel in TestOAuthAppSecrets (@spikecurtis)
- Always attempt external auth refresh when fetching (#11762) (#11830) (@Emyrk)
- Wait for new template version before promoting (#11874) (@spikecurtis)
- Respect wait flag on ping (#11896) (@f0ssel)
- Fix cliui prompt styling (#11899) (@aslilac)
- Fix prevent agent_test.go from failing on error logs (#11909) (@spikecurtis)
- Add timeout to listening ports request (#11935) (@coadler)
- Only delete expired agents on success (#11940) (@coadler)
- Close MultiAgentConn when coordinator closes (#11941) (@spikecurtis)
- Strip timezone information from a date in dau response (#11962) (@Emyrk)
- Improve click UX and styling for Auth Token page (#11863) (@Parkreiner)
- Rewrite url to agent ip in single tailnet (#11810) (@coadler)
- Avoid race in TestPGPubsub_Metrics by using Eventually (#11973) (@spikecurtis)
- Always return a clean http client for promoauth (#11963) (@Emyrk)
- Change build status colors (#11985) (@aslilac)
- Only display xray results if vulns > 0 (#11989) (@sreya)
- Use dark background in terminal, even when a light theme is selected (#12004) (@aslilac)
- Fix graceful disconnect in DialWorkspaceAgent (#11993) (@spikecurtis)
- Stop logging error on query canceled (#12017) (@spikecurtis)
- Only display quota if it is higher than 0 (#11979) (@BrunoQuaresma)
### Documentation
- Using coder modules in offline deployments (#11788) (@matifali)
- Simplify JFrog integration docs (#11787) (@matifali)
- Add guide for azure federation (#11864) (@ericpaulsen)
- Fix example template README 404s and semantics (#11903) (@ericpaulsen)
- Update remote docker host docs (#11919) (@matifali)
- Add FAQ for gateway reconnects (#12007) (@ericpaulsen)
### Code refactoring
- Apply cosmetic changes and remove ExternalAuth from settings page (#11756)
- Minor improvements create workspace form (#11771)
- Verify external auth before displaying workspace form (#11777) (@BrunoQuaresma)
Compare: [`v2.7.2...v2.7.3`](https://github.com/coder/coder/compare/v2.7.2...v2.7.3)
## Container image
- `docker pull ghcr.io/coder/coder:v2.7.3`
## Install/upgrade
Refer to our docs to [install](https://coder.com/docs/v2/latest/install) or [upgrade](https://coder.com/docs/v2/latest/admin/upgrade) Coder, or use a release asset below.
+15
View File
@@ -0,0 +1,15 @@
## Changelog
### Bug fixes
- Fixed an issue where workspace apps may never be marked as healthy.
Compare: [`v2.8.1...v2.8.2`](https://github.com/coder/coder/compare/v2.8.1...v2.8.2)
## Container image
- `docker pull ghcr.io/coder/coder:v2.8.2`
## Install/upgrade
Refer to our docs to [install](https://coder.com/docs/v2/latest/install) or [upgrade](https://coder.com/docs/v2/latest/admin/upgrade) Coder, or use a release asset below.
+13 -3
View File
@@ -1,4 +1,9 @@
import type { PropsWithChildren, FC } from "react";
import {
type PropsWithChildren,
type FC,
forwardRef,
HTMLAttributes,
} from "react";
import Tooltip from "@mui/material/Tooltip";
import { type Interpolation, type Theme } from "@emotion/react";
import { Stack } from "components/Stack/Stack";
@@ -74,9 +79,14 @@ export const NotReachableBadge: FC = () => {
);
};
export const DisabledBadge: FC = () => {
export const DisabledBadge: FC = forwardRef<
HTMLSpanElement,
HTMLAttributes<HTMLSpanElement>
>((props, ref) => {
return (
<span
{...props}
ref={ref}
css={[
styles.badge,
(theme) => ({
@@ -89,7 +99,7 @@ export const DisabledBadge: FC = () => {
Disabled
</span>
);
};
});
export const EnterpriseBadge: FC = () => {
return (
@@ -105,3 +105,13 @@ export const Loading: Story = {
isLoading: true,
},
};
export const AutoStopAndStartOff: Story = {
args: {
initialValues: {
...defaultInitialValues,
autostartEnabled: false,
autostopEnabled: false,
},
},
};
@@ -379,3 +379,37 @@ describe("templateInheritance", () => {
expect(ttlInput).toBeDisabled();
});
});
test("form should be enabled when both auto stop and auto start features are disabled, given that the template permits these actions", async () => {
jest.spyOn(API, "getTemplateByName").mockResolvedValue(MockTemplate);
render(
<WorkspaceScheduleForm
{...defaultFormProps}
initialValues={{
...defaultFormProps.initialValues,
autostopEnabled: false,
autostartEnabled: false,
}}
/>,
);
const submitButton = await screen.findByRole("button", { name: "Submit" });
expect(submitButton).toBeEnabled();
});
test("form should be disabled when both auto stop and auto start features are disabled at template level", async () => {
jest.spyOn(API, "getTemplateByName").mockResolvedValue(MockTemplate);
render(
<WorkspaceScheduleForm
{...defaultFormProps}
allowTemplateAutoStart={false}
allowTemplateAutoStop={false}
initialValues={{
...defaultFormProps.initialValues,
}}
/>,
);
const submitButton = await screen.findByRole("button", { name: "Submit" });
expect(submitButton).toBeDisabled();
});
@@ -441,10 +441,9 @@ export const WorkspaceScheduleForm: FC<WorkspaceScheduleFormProps> = ({
<FormFooter
onCancel={onCancel}
isLoading={isLoading}
submitDisabled={
(!allowTemplateAutoStart && !allowTemplateAutoStop) ||
(!form.values.autostartEnabled && !form.values.autostopEnabled)
}
// If both options, autostart and autostop, are disabled at the template
// level, the form is disabled.
submitDisabled={!allowTemplateAutoStart && !allowTemplateAutoStop}
/>
</HorizontalForm>
);