Skip to content

Commit 68412c8

Browse files
committed
Merge branch 'main' of https://github.com/coder/coder into dk/pubsub-latency
2 parents 49d2002 + d956af0 commit 68412c8

File tree

94 files changed

+2908
-1062
lines changed

Some content is hidden

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

94 files changed

+2908
-1062
lines changed

.github/actions/setup-go/action.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ runs:
99
using: "composite"
1010
steps:
1111
- name: Setup Go
12-
uses: buildjet/setup-go@v4
12+
uses: buildjet/setup-go@v5
1313
with:
1414
go-version: ${{ inputs.version }}
1515

.github/actions/setup-node/action.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ runs:
1111
using: "composite"
1212
steps:
1313
- name: Install pnpm
14-
uses: pnpm/action-setup@v2
14+
uses: pnpm/action-setup@v3
1515
with:
1616
version: 8
1717
- name: Setup Node
18-
uses: buildjet/setup-node@v3
18+
uses: buildjet/setup-node@v4.0.1
1919
with:
2020
node-version: 18.19.0
2121
# See https://github.com/actions/setup-node#caching-global-packages-data

.github/codecov.yml

Lines changed: 0 additions & 43 deletions
This file was deleted.

.github/workflows/ci.yaml

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -269,16 +269,6 @@ jobs:
269269
id: test
270270
shell: bash
271271
run: |
272-
# Code coverage is more computationally expensive and also
273-
# prevents test caching, so we disable it on alternate operating
274-
# systems.
275-
if [ "${{ matrix.os }}" == "ubuntu-latest" ]; then
276-
echo "cover=true" >> $GITHUB_OUTPUT
277-
export COVERAGE_FLAGS='-covermode=atomic -coverprofile="gotests.coverage" -coverpkg=./...'
278-
else
279-
echo "cover=false" >> $GITHUB_OUTPUT
280-
fi
281-
282272
# if macOS, install google-chrome for scaletests. As another concern,
283273
# should we really have this kind of external dependency requirement
284274
# on standard CI?
@@ -297,7 +287,7 @@ jobs:
297287
fi
298288
export TS_DEBUG_DISCO=true
299289
gotestsum --junitfile="gotests.xml" --jsonfile="gotests.json" \
300-
--packages="./..." -- $PARALLEL_FLAG -short -failfast $COVERAGE_FLAGS
290+
--packages="./..." -- $PARALLEL_FLAG -short -failfast
301291
302292
- name: Upload test stats to Datadog
303293
timeout-minutes: 1
@@ -307,19 +297,6 @@ jobs:
307297
with:
308298
api-key: ${{ secrets.DATADOG_API_KEY }}
309299

310-
- name: Check code coverage
311-
uses: codecov/codecov-action@v4
312-
# This action has a tendency to error out unexpectedly, it has
313-
# the `fail_ci_if_error` option that defaults to `false`, but
314-
# that is no guarantee, see:
315-
# https://github.com/codecov/codecov-action/issues/788
316-
continue-on-error: true
317-
if: steps.test.outputs.cover && github.actor != 'dependabot[bot]' && !github.event.pull_request.head.repo.fork
318-
with:
319-
token: ${{ secrets.CODECOV_TOKEN }}
320-
files: ./gotests.coverage
321-
flags: unittest-go-${{ matrix.os }}
322-
323300
test-go-pg:
324301
runs-on: ${{ github.repository_owner == 'coder' && 'buildjet-8vcpu-ubuntu-2204' || 'ubuntu-latest' }}
325302
needs:
@@ -355,19 +332,6 @@ jobs:
355332
with:
356333
api-key: ${{ secrets.DATADOG_API_KEY }}
357334

358-
- name: Check code coverage
359-
uses: codecov/codecov-action@v4
360-
# This action has a tendency to error out unexpectedly, it has
361-
# the `fail_ci_if_error` option that defaults to `false`, but
362-
# that is no guarantee, see:
363-
# https://github.com/codecov/codecov-action/issues/788
364-
continue-on-error: true
365-
if: github.actor != 'dependabot[bot]' && !github.event.pull_request.head.repo.fork
366-
with:
367-
token: ${{ secrets.CODECOV_TOKEN }}
368-
files: ./gotests.coverage
369-
flags: unittest-go-postgres-linux
370-
371335
test-go-race:
372336
runs-on: ${{ github.repository_owner == 'coder' && 'buildjet-8vcpu-ubuntu-2204' || 'ubuntu-latest' }}
373337
needs: changes
@@ -414,19 +378,6 @@ jobs:
414378
- run: pnpm test:ci --max-workers $(nproc)
415379
working-directory: site
416380

417-
- name: Check code coverage
418-
uses: codecov/codecov-action@v4
419-
# This action has a tendency to error out unexpectedly, it has
420-
# the `fail_ci_if_error` option that defaults to `false`, but
421-
# that is no guarantee, see:
422-
# https://github.com/codecov/codecov-action/issues/788
423-
continue-on-error: true
424-
if: github.actor != 'dependabot[bot]' && !github.event.pull_request.head.repo.fork
425-
with:
426-
token: ${{ secrets.CODECOV_TOKEN }}
427-
files: ./site/coverage/lcov.info
428-
flags: unittest-js
429-
430381
test-e2e:
431382
runs-on: ${{ github.repository_owner == 'coder' && 'buildjet-16vcpu-ubuntu-2204' || 'ubuntu-latest' }}
432383
needs: changes

cli/login.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,8 @@ func (r *RootCmd) login() *serpent.Command {
287287
}
288288

289289
sessionToken, err = cliui.Prompt(inv, cliui.PromptOptions{
290-
Text: "Paste your token here:",
290+
Text: "Paste your token here:",
291+
Secret: true,
291292
Validate: func(token string) error {
292293
client.SetSessionToken(token)
293294
_, err := client.User(ctx, codersdk.Me)

cli/server.go

Lines changed: 79 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -944,6 +944,13 @@ func (r *RootCmd) Server(newAPI func(context.Context, *coderd.Options) (*coderd.
944944
var provisionerdWaitGroup sync.WaitGroup
945945
defer provisionerdWaitGroup.Wait()
946946
provisionerdMetrics := provisionerd.NewMetrics(options.PrometheusRegistry)
947+
948+
// Built in provisioner daemons will support the same types.
949+
// By default, this is the slice {"terraform"}
950+
provisionerTypes := make([]codersdk.ProvisionerType, 0)
951+
for _, pt := range vals.Provisioner.DaemonTypes {
952+
provisionerTypes = append(provisionerTypes, codersdk.ProvisionerType(pt))
953+
}
947954
for i := int64(0); i < vals.Provisioner.Daemons.Value(); i++ {
948955
suffix := fmt.Sprintf("%d", i)
949956
// The suffix is added to the hostname, so we may need to trim to fit into
@@ -952,7 +959,7 @@ func (r *RootCmd) Server(newAPI func(context.Context, *coderd.Options) (*coderd.
952959
name := fmt.Sprintf("%s-%s", hostname, suffix)
953960
daemonCacheDir := filepath.Join(cacheDir, fmt.Sprintf("provisioner-%d", i))
954961
daemon, err := newProvisionerDaemon(
955-
ctx, coderAPI, provisionerdMetrics, logger, vals, daemonCacheDir, errCh, &provisionerdWaitGroup, name,
962+
ctx, coderAPI, provisionerdMetrics, logger, vals, daemonCacheDir, errCh, &provisionerdWaitGroup, name, provisionerTypes,
956963
)
957964
if err != nil {
958965
return xerrors.Errorf("create provisioner daemon: %w", err)
@@ -1340,6 +1347,7 @@ func newProvisionerDaemon(
13401347
errCh chan error,
13411348
wg *sync.WaitGroup,
13421349
name string,
1350+
provisionerTypes []codersdk.ProvisionerType,
13431351
) (srv *provisionerd.Server, err error) {
13441352
ctx, cancel := context.WithCancel(ctx)
13451353
defer func() {
@@ -1359,79 +1367,88 @@ func newProvisionerDaemon(
13591367
return nil, xerrors.Errorf("mkdir work dir: %w", err)
13601368
}
13611369

1370+
// Omit any duplicates
1371+
provisionerTypes = slice.Unique(provisionerTypes)
1372+
1373+
// Populate the connector with the supported types.
13621374
connector := provisionerd.LocalProvisioners{}
1363-
if cfg.Provisioner.DaemonsEcho {
1364-
echoClient, echoServer := drpc.MemTransportPipe()
1365-
wg.Add(1)
1366-
go func() {
1367-
defer wg.Done()
1368-
<-ctx.Done()
1369-
_ = echoClient.Close()
1370-
_ = echoServer.Close()
1371-
}()
1372-
wg.Add(1)
1373-
go func() {
1374-
defer wg.Done()
1375-
defer cancel()
1375+
for _, provisionerType := range provisionerTypes {
1376+
switch provisionerType {
1377+
case codersdk.ProvisionerTypeEcho:
1378+
echoClient, echoServer := drpc.MemTransportPipe()
1379+
wg.Add(1)
1380+
go func() {
1381+
defer wg.Done()
1382+
<-ctx.Done()
1383+
_ = echoClient.Close()
1384+
_ = echoServer.Close()
1385+
}()
1386+
wg.Add(1)
1387+
go func() {
1388+
defer wg.Done()
1389+
defer cancel()
13761390

1377-
err := echo.Serve(ctx, &provisionersdk.ServeOptions{
1378-
Listener: echoServer,
1379-
WorkDirectory: workDir,
1380-
Logger: logger.Named("echo"),
1381-
})
1382-
if err != nil {
1383-
select {
1384-
case errCh <- err:
1385-
default:
1391+
err := echo.Serve(ctx, &provisionersdk.ServeOptions{
1392+
Listener: echoServer,
1393+
WorkDirectory: workDir,
1394+
Logger: logger.Named("echo"),
1395+
})
1396+
if err != nil {
1397+
select {
1398+
case errCh <- err:
1399+
default:
1400+
}
13861401
}
1402+
}()
1403+
connector[string(database.ProvisionerTypeEcho)] = sdkproto.NewDRPCProvisionerClient(echoClient)
1404+
case codersdk.ProvisionerTypeTerraform:
1405+
tfDir := filepath.Join(cacheDir, "tf")
1406+
err = os.MkdirAll(tfDir, 0o700)
1407+
if err != nil {
1408+
return nil, xerrors.Errorf("mkdir terraform dir: %w", err)
13871409
}
1388-
}()
1389-
connector[string(database.ProvisionerTypeEcho)] = sdkproto.NewDRPCProvisionerClient(echoClient)
1390-
} else {
1391-
tfDir := filepath.Join(cacheDir, "tf")
1392-
err = os.MkdirAll(tfDir, 0o700)
1393-
if err != nil {
1394-
return nil, xerrors.Errorf("mkdir terraform dir: %w", err)
1395-
}
13961410

1397-
tracer := coderAPI.TracerProvider.Tracer(tracing.TracerName)
1398-
terraformClient, terraformServer := drpc.MemTransportPipe()
1399-
wg.Add(1)
1400-
go func() {
1401-
defer wg.Done()
1402-
<-ctx.Done()
1403-
_ = terraformClient.Close()
1404-
_ = terraformServer.Close()
1405-
}()
1406-
wg.Add(1)
1407-
go func() {
1408-
defer wg.Done()
1409-
defer cancel()
1410-
1411-
err := terraform.Serve(ctx, &terraform.ServeOptions{
1412-
ServeOptions: &provisionersdk.ServeOptions{
1413-
Listener: terraformServer,
1414-
Logger: logger.Named("terraform"),
1415-
WorkDirectory: workDir,
1416-
},
1417-
CachePath: tfDir,
1418-
Tracer: tracer,
1419-
})
1420-
if err != nil && !xerrors.Is(err, context.Canceled) {
1421-
select {
1422-
case errCh <- err:
1423-
default:
1411+
tracer := coderAPI.TracerProvider.Tracer(tracing.TracerName)
1412+
terraformClient, terraformServer := drpc.MemTransportPipe()
1413+
wg.Add(1)
1414+
go func() {
1415+
defer wg.Done()
1416+
<-ctx.Done()
1417+
_ = terraformClient.Close()
1418+
_ = terraformServer.Close()
1419+
}()
1420+
wg.Add(1)
1421+
go func() {
1422+
defer wg.Done()
1423+
defer cancel()
1424+
1425+
err := terraform.Serve(ctx, &terraform.ServeOptions{
1426+
ServeOptions: &provisionersdk.ServeOptions{
1427+
Listener: terraformServer,
1428+
Logger: logger.Named("terraform"),
1429+
WorkDirectory: workDir,
1430+
},
1431+
CachePath: tfDir,
1432+
Tracer: tracer,
1433+
})
1434+
if err != nil && !xerrors.Is(err, context.Canceled) {
1435+
select {
1436+
case errCh <- err:
1437+
default:
1438+
}
14241439
}
1425-
}
1426-
}()
1440+
}()
14271441

1428-
connector[string(database.ProvisionerTypeTerraform)] = sdkproto.NewDRPCProvisionerClient(terraformClient)
1442+
connector[string(database.ProvisionerTypeTerraform)] = sdkproto.NewDRPCProvisionerClient(terraformClient)
1443+
default:
1444+
return nil, xerrors.Errorf("unknown provisioner type %q", provisionerType)
1445+
}
14291446
}
14301447

14311448
return provisionerd.New(func(dialCtx context.Context) (proto.DRPCProvisionerDaemonClient, error) {
14321449
// This debounces calls to listen every second. Read the comment
14331450
// in provisionerdserver.go to learn more!
1434-
return coderAPI.CreateInMemoryProvisionerDaemon(dialCtx, name)
1451+
return coderAPI.CreateInMemoryProvisionerDaemon(dialCtx, name, provisionerTypes)
14351452
}, &provisionerd.Options{
14361453
Logger: logger.Named(fmt.Sprintf("provisionerd-%s", name)),
14371454
UpdateInterval: time.Second,

cli/server_test.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1367,7 +1367,8 @@ func TestServer(t *testing.T) {
13671367
"--in-memory",
13681368
"--http-address", ":0",
13691369
"--access-url", "http://example.com",
1370-
"--provisioner-daemons-echo",
1370+
"--provisioner-daemons=3",
1371+
"--provisioner-types=echo",
13711372
"--log-human", fiName,
13721373
)
13731374
clitest.Start(t, root)
@@ -1385,7 +1386,8 @@ func TestServer(t *testing.T) {
13851386
"--in-memory",
13861387
"--http-address", ":0",
13871388
"--access-url", "http://example.com",
1388-
"--provisioner-daemons-echo",
1389+
"--provisioner-daemons=3",
1390+
"--provisioner-types=echo",
13891391
"--log-human", fi,
13901392
)
13911393
clitest.Start(t, root)
@@ -1403,7 +1405,8 @@ func TestServer(t *testing.T) {
14031405
"--in-memory",
14041406
"--http-address", ":0",
14051407
"--access-url", "http://example.com",
1406-
"--provisioner-daemons-echo",
1408+
"--provisioner-daemons=3",
1409+
"--provisioner-types=echo",
14071410
"--log-json", fi,
14081411
)
14091412
clitest.Start(t, root)
@@ -1424,7 +1427,8 @@ func TestServer(t *testing.T) {
14241427
"--in-memory",
14251428
"--http-address", ":0",
14261429
"--access-url", "http://example.com",
1427-
"--provisioner-daemons-echo",
1430+
"--provisioner-daemons=3",
1431+
"--provisioner-types=echo",
14281432
"--log-stackdriver", fi,
14291433
)
14301434
// Attach pty so we get debug output from the command if this test
@@ -1459,7 +1463,8 @@ func TestServer(t *testing.T) {
14591463
"--in-memory",
14601464
"--http-address", ":0",
14611465
"--access-url", "http://example.com",
1462-
"--provisioner-daemons-echo",
1466+
"--provisioner-daemons=3",
1467+
"--provisioner-types=echo",
14631468
"--log-human", fi1,
14641469
"--log-json", fi2,
14651470
"--log-stackdriver", fi3,

0 commit comments

Comments
 (0)