Skip to content

Commit 794b11b

Browse files
committed
Merge branch 'main' into userauthdoc
2 parents b45ee79 + e821b98 commit 794b11b

File tree

90 files changed

+4512
-1886
lines changed

Some content is hidden

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

90 files changed

+4512
-1886
lines changed

.gitattributes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# Generated files
2+
coderd/apidoc/docs.go linguist-generated=true
3+
coderd/apidoc/swagger.json linguist-generated=true
24
coderd/database/dump.sql linguist-generated=true
35
peerbroker/proto/*.go linguist-generated=true
46
provisionerd/proto/*.go linguist-generated=true

.github/workflows/coder.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -617,7 +617,7 @@ jobs:
617617
name: "test/e2e/${{ matrix.os }}"
618618
needs:
619619
- changes
620-
if: needs.changes.outputs.docs-only == 'false'
620+
if: false #needs.changes.outputs.docs-only == 'false'
621621
runs-on: ${{ matrix.os }}
622622
timeout-minutes: 20
623623
strategy:

.github/workflows/release.yaml

Lines changed: 12 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,16 @@
11
# GitHub release workflow.
22
name: Release
3-
run-name: Release ${{ github.ref_name }}${{ inputs.dry_run && ' (DRYRUN)' || '' }}
43
on:
4+
push:
5+
tags:
6+
- "v*"
57
workflow_dispatch:
68
inputs:
7-
increment:
8-
description: Preferred version increment (release script may promote e.g. patch to minor depending on changes).
9-
type: choice
10-
required: true
11-
default: patch
12-
options:
13-
- patch
14-
- minor
15-
- major
16-
draft:
17-
description: Create a draft release (for manually editing release notes before publishing).
18-
type: boolean
19-
required: true
20-
default: false
219
dry_run:
22-
description: Perform a dry-run release.
10+
description: Perform a dry-run release (devel). Note that ref must be an annotated tag when run without dry-run.
2311
type: boolean
2412
required: true
2513
default: false
26-
ignore_missing_commit_metadata:
27-
description: WARNING! This option disables the requirement that all commits have a PR. Not needed for dry_run.
28-
type: boolean
29-
default: false
3014

3115
permissions:
3216
# Required to publish a release
@@ -43,29 +27,19 @@ env:
4327
# booleans, not strings.
4428
# https://github.blog/changelog/2022-06-10-github-actions-inputs-unified-across-manual-and-reusable-workflows/
4529
CODER_RELEASE: ${{ !inputs.dry_run }}
46-
CODER_RELEASE_INCREMENT: ${{ inputs.increment }}
47-
CODER_RELEASE_DRAFT: ${{ inputs.draft }}
4830
CODER_DRY_RUN: ${{ inputs.dry_run }}
4931

5032
jobs:
5133
release:
52-
name: Create and publish
34+
name: Build and publish
5335
runs-on: ${{ github.repository_owner == 'coder' && 'ubuntu-latest-16-cores' || 'ubuntu-latest' }}
5436
env:
5537
# Necessary for Docker manifest
5638
DOCKER_CLI_EXPERIMENTAL: "enabled"
5739
steps:
58-
- name: Check release on main (or dry-run)
59-
if: ${{ github.ref_name != 'main' && !inputs.dry_run }}
60-
run: |
61-
echo "Release not allowed on ${{ github.ref_name }}, use dry-run."
62-
exit 1
63-
6440
- uses: actions/checkout@v3
6541
with:
6642
fetch-depth: 0
67-
# Set token for pushing protected tag (vX.X.X).
68-
token: ${{ secrets.RELEASE_GITHUB_PAT }}
6943

7044
# If the event that triggered the build was an annotated tag (which our
7145
# tags are supposed to be), actions/checkout has a bug where the tag in
@@ -75,55 +49,23 @@ jobs:
7549
- name: Fetch git tags
7650
run: git fetch --tags --force
7751

78-
# Configure git user name/email for creating annotated version tag.
79-
- name: Setup git config
80-
run: |
81-
git config user.name "Coder CI"
82-
git config user.email "dean+cdrci@coder.com"
83-
84-
- name: Create release tag and release notes
52+
- name: Create release notes
53+
env:
54+
# We always have to set this since there might be commits on
55+
# main that didn't have a PR.
56+
CODER_IGNORE_MISSING_COMMIT_METADATA: "1"
8557
run: |
8658
set -euo pipefail
8759
ref=HEAD
8860
old_version="$(git describe --abbrev=0 "$ref^1")"
89-
90-
if [[ "${{ inputs.ignore_missing_commit_metadata }}" == *t* ]]; then
91-
export CODER_IGNORE_MISSING_COMMIT_METADATA=1
92-
fi
93-
94-
# Warn if CODER_IGNORE_MISSING_COMMIT_METADATA is set any other way
95-
# than via dry-run.
96-
if [[ ${CODER_IGNORE_MISSING_COMMIT_METADATA:-0} != 0 ]]; then
97-
echo "WARNING: CODER_IGNORE_MISSING_COMMIT_METADATA is enabled and we will ignore missing commit metadata." 1>&2
98-
fi
99-
100-
version_args=()
101-
if [[ $CODER_DRY_RUN == *t* ]]; then
102-
# Allow dry-run of branches to pass.
103-
export CODER_IGNORE_MISSING_COMMIT_METADATA=1
104-
version_args+=(--dry-run)
105-
fi
106-
107-
# Cache commit metadata.
108-
. ./scripts/release/check_commit_metadata.sh "$old_version" "$ref"
109-
110-
declare -p version_args
111-
112-
# Create new release tag (note that this tag is not pushed before
113-
# release.sh is run).
114-
version="$(
115-
./scripts/release/tag_version.sh \
116-
"${version_args[@]}" \
117-
--ref "$ref" \
118-
--"$CODER_RELEASE_INCREMENT"
119-
)"
61+
version="$(./scripts/version.sh)"
12062
12163
# Generate notes.
12264
release_notes_file="$(mktemp -t release_notes.XXXXXX)"
12365
./scripts/release/generate_release_notes.sh --old-version "$old_version" --new-version "$version" --ref "$ref" >> "$release_notes_file"
12466
echo CODER_RELEASE_NOTES_FILE="$release_notes_file" >> $GITHUB_ENV
12567
126-
- name: Echo release notes
68+
- name: Show release notes
12769
run: |
12870
set -euo pipefail
12971
cat "$CODER_RELEASE_NOTES_FILE"
@@ -243,9 +185,6 @@ jobs:
243185
set -euo pipefail
244186
245187
publish_args=()
246-
if [[ $CODER_RELEASE_DRAFT == *t* ]]; then
247-
publish_args+=(--draft)
248-
fi
249188
if [[ $CODER_DRY_RUN == *t* ]]; then
250189
publish_args+=(--dry-run)
251190
fi

cli/deployment/config.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,26 @@ func newConfig() *codersdk.DeploymentConfig {
471471
Default: false,
472472
},
473473
},
474+
Logging: &codersdk.LoggingConfig{
475+
Human: &codersdk.DeploymentConfigField[string]{
476+
Name: "Human Log Location",
477+
Usage: "Output human-readable logs to a given file.",
478+
Flag: "log-human",
479+
Default: "/dev/stderr",
480+
},
481+
JSON: &codersdk.DeploymentConfigField[string]{
482+
Name: "JSON Log Location",
483+
Usage: "Output JSON logs to a given file.",
484+
Flag: "log-json",
485+
Default: "",
486+
},
487+
Stackdriver: &codersdk.DeploymentConfigField[string]{
488+
Name: "Stackdriver Log Location",
489+
Usage: "Output Stackdriver compatible logs to a given file.",
490+
Flag: "log-stackdriver",
491+
Default: "",
492+
},
493+
},
474494
}
475495
}
476496

cli/server.go

Lines changed: 72 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ import (
4646

4747
"cdr.dev/slog"
4848
"cdr.dev/slog/sloggers/sloghuman"
49+
"cdr.dev/slog/sloggers/slogjson"
50+
"cdr.dev/slog/sloggers/slogstackdriver"
4951
"github.com/coder/coder/buildinfo"
5052
"github.com/coder/coder/cli/cliui"
5153
"github.com/coder/coder/cli/config"
@@ -122,13 +124,11 @@ func Server(vip *viper.Viper, newAPI func(context.Context, *coderd.Options) (*co
122124
}
123125

124126
printLogo(cmd)
125-
logger := slog.Make(sloghuman.Sink(cmd.ErrOrStderr()))
126-
if ok, _ := cmd.Flags().GetBool(varVerbose); ok {
127-
logger = logger.Leveled(slog.LevelDebug)
128-
}
129-
if cfg.Trace.CaptureLogs.Value {
130-
logger = logger.AppendSinks(tracing.SlogSink{})
127+
logger, logCloser, err := buildLogger(cmd, cfg)
128+
if err != nil {
129+
return xerrors.Errorf("make logger: %w", err)
131130
}
131+
defer logCloser()
132132

133133
// Register signals early on so that graceful shutdown can't
134134
// be interrupted by additional signals. Note that we avoid
@@ -1145,6 +1145,11 @@ func newProvisionerDaemon(
11451145

11461146
// nolint: revive
11471147
func printLogo(cmd *cobra.Command) {
1148+
// Only print the logo in TTYs.
1149+
if !isTTYOut(cmd) {
1150+
return
1151+
}
1152+
11481153
_, _ = fmt.Fprintf(cmd.OutOrStdout(), "%s - Software development on your infrastucture\n", cliui.Styles.Bold.Render("Coder "+buildinfo.Version()))
11491154
}
11501155

@@ -1512,3 +1517,64 @@ func redirectHTTPToAccessURL(handler http.Handler, accessURL *url.URL) http.Hand
15121517
func isLocalhost(host string) bool {
15131518
return host == "localhost" || host == "127.0.0.1" || host == "::1"
15141519
}
1520+
1521+
func buildLogger(cmd *cobra.Command, cfg *codersdk.DeploymentConfig) (slog.Logger, func(), error) {
1522+
var (
1523+
sinks = []slog.Sink{}
1524+
closers = []func() error{}
1525+
)
1526+
1527+
addSinkIfProvided := func(sinkFn func(io.Writer) slog.Sink, loc string) error {
1528+
switch loc {
1529+
case "":
1530+
1531+
case "/dev/stdout":
1532+
sinks = append(sinks, sinkFn(cmd.OutOrStdout()))
1533+
1534+
case "/dev/stderr":
1535+
sinks = append(sinks, sinkFn(cmd.ErrOrStderr()))
1536+
1537+
default:
1538+
fi, err := os.OpenFile(loc, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
1539+
if err != nil {
1540+
return xerrors.Errorf("open log file %q: %w", loc, err)
1541+
}
1542+
1543+
closers = append(closers, fi.Close)
1544+
sinks = append(sinks, sinkFn(fi))
1545+
}
1546+
return nil
1547+
}
1548+
1549+
err := addSinkIfProvided(sloghuman.Sink, cfg.Logging.Human.Value)
1550+
if err != nil {
1551+
return slog.Logger{}, nil, xerrors.Errorf("add human sink: %w", err)
1552+
}
1553+
err = addSinkIfProvided(slogjson.Sink, cfg.Logging.JSON.Value)
1554+
if err != nil {
1555+
return slog.Logger{}, nil, xerrors.Errorf("add json sink: %w", err)
1556+
}
1557+
err = addSinkIfProvided(slogstackdriver.Sink, cfg.Logging.Stackdriver.Value)
1558+
if err != nil {
1559+
return slog.Logger{}, nil, xerrors.Errorf("add stackdriver sink: %w", err)
1560+
}
1561+
1562+
if cfg.Trace.CaptureLogs.Value {
1563+
sinks = append(sinks, tracing.SlogSink{})
1564+
}
1565+
1566+
level := slog.LevelInfo
1567+
if ok, _ := cmd.Flags().GetBool(varVerbose); ok {
1568+
level = slog.LevelDebug
1569+
}
1570+
1571+
if len(sinks) == 0 {
1572+
return slog.Logger{}, nil, xerrors.New("no loggers provided")
1573+
}
1574+
1575+
return slog.Make(sinks...).Leveled(level), func() {
1576+
for _, closer := range closers {
1577+
_ = closer()
1578+
}
1579+
}, nil
1580+
}

0 commit comments

Comments
 (0)