Compare commits

...

9 Commits

Author SHA1 Message Date
MicahKimel 4e094e8eba
Merge dd8059925e into a5fb752ecf 2024-09-18 15:34:59 +01:00
Sebastiaan van Stijn a5fb752ecf
Merge pull request #5445 from jsternberg/lowercase-windows-drive
command: change drive to lowercase for wsl path
2024-09-18 12:15:45 +02:00
Laura Brehm 4e64c59d64
Merge pull request #5446 from thaJeztah/codeql_updates
gha: update codeql workflow to go1.22.7
2024-09-18 11:04:32 +01:00
Jonathan A. Sternberg 3472bbc28a
command: change drive to lowercase for wsl path
On Windows, the drive casing doesn't matter outside of WSL. For WSL, the
drives are lowercase. When we're producing a WSL path, lowercase the
drive letter.

Co-authored-by: Jonathan A. Sternberg <jonathan.sternberg@docker.com>
Co-authored-by: Laura Brehm <laurabrehm@hey.com>

Signed-off-by: Jonathan A. Sternberg <jonathan.sternberg@docker.com>
Signed-off-by: Laura Brehm <laurabrehm@hey.com>
2024-09-18 10:59:08 +01:00
Laura Brehm 649e564ee0
Merge pull request #5444 from jsternberg/handle-otel-errors
telemetry: pass otel errors to the otel handler for shutdown and force flush
2024-09-18 10:39:55 +01:00
Sebastiaan van Stijn e1213edcc6
gha: update codeql workflow to go1.22.7
commit d7d56599ca updated this
repository to go1.22, but the codeql action didn't specify a
patch version, and was missed.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2024-09-17 21:39:56 +02:00
Jonathan A. Sternberg b1956f5073
telemetry: pass otel errors to the otel handler for shutdown and force flush
Signed-off-by: Jonathan A. Sternberg <jonathan.sternberg@docker.com>
2024-09-17 10:47:04 -05:00
MicahKimel dd8059925e
Merge remote-tracking branch 'upstream/master' 2024-06-19 12:47:28 -04:00
MicahKimel 7098aaf6fc
Add test parse env formatted badly with spaces
fix container_run.md spacing

Signed-off-by: MicahKimel <micah.kimel@my.wheaton.edu>
2024-06-19 12:44:43 -04:00
7 changed files with 72 additions and 20 deletions

View File

@ -67,7 +67,7 @@ jobs:
name: Update Go name: Update Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
go-version: '1.21' go-version: 1.22.7
- -
name: Initialize CodeQL name: Initialize CodeQL
uses: github/codeql-action/init@v3 uses: github/codeql-action/init@v3

View File

@ -180,7 +180,7 @@ func toWslPath(s string) string {
if !ok { if !ok {
return "" return ""
} }
return fmt.Sprintf("mnt/%s%s", drive, p) return fmt.Sprintf("mnt/%s%s", strings.ToLower(drive), p)
} }
func parseUNCPath(s string) (drive, p string, ok bool) { func parseUNCPath(s string) (drive, p string, ok bool) {

View File

@ -1,6 +1,7 @@
package command package command
import ( import (
"io/fs"
"net/url" "net/url"
"testing" "testing"
"testing/fstest" "testing/fstest"
@ -9,21 +10,48 @@ import (
) )
func TestWslSocketPath(t *testing.T) { func TestWslSocketPath(t *testing.T) {
u, err := url.Parse("unix:////./c:/my/file/path") testCases := []struct {
assert.NilError(t, err) doc string
fs fs.FS
// Ensure host is empty. url string
assert.Equal(t, u.Host, "") expected string
}{
// Use a filesystem where the WSL path exists. {
fs := fstest.MapFS{ doc: "filesystem where WSL path does not exist",
"mnt/c/my/file/path": {}, fs: fstest.MapFS{
"my/file/path": {},
},
url: "unix:////./c:/my/file/path",
expected: "",
},
{
doc: "filesystem where WSL path exists",
fs: fstest.MapFS{
"mnt/c/my/file/path": {},
},
url: "unix:////./c:/my/file/path",
expected: "/mnt/c/my/file/path",
},
{
doc: "filesystem where WSL path exists uppercase URL",
fs: fstest.MapFS{
"mnt/c/my/file/path": {},
},
url: "unix:////./C:/my/file/path",
expected: "/mnt/c/my/file/path",
},
} }
assert.Equal(t, wslSocketPath(u.Path, fs), "/mnt/c/my/file/path")
// Use a filesystem where the WSL path doesn't exist. for _, tc := range testCases {
fs = fstest.MapFS{ t.Run(tc.doc, func(t *testing.T) {
"my/file/path": {}, u, err := url.Parse(tc.url)
assert.NilError(t, err)
// Ensure host is empty.
assert.Equal(t, u.Host, "")
result := wslSocketPath(u.Path, tc.fs)
assert.Equal(t, result, tc.expected)
})
} }
assert.Equal(t, wslSocketPath(u.Path, fs), "")
} }

View File

@ -9,6 +9,7 @@ import (
"github.com/docker/cli/cli/version" "github.com/docker/cli/cli/version"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/metric"
) )
@ -94,7 +95,9 @@ func startCobraCommandTimer(mp metric.MeterProvider, attrs []attribute.KeyValue)
metric.WithAttributes(cmdStatusAttrs...), metric.WithAttributes(cmdStatusAttrs...),
) )
if mp, ok := mp.(MeterProvider); ok { if mp, ok := mp.(MeterProvider); ok {
mp.ForceFlush(ctx) if err := mp.ForceFlush(ctx); err != nil {
otel.Handle(err)
}
} }
} }
} }

View File

@ -358,7 +358,9 @@ func runDocker(ctx context.Context, dockerCli *command.DockerCli) error {
mp := dockerCli.MeterProvider() mp := dockerCli.MeterProvider()
if mp, ok := mp.(command.MeterProvider); ok { if mp, ok := mp.(command.MeterProvider); ok {
defer mp.Shutdown(ctx) if err := mp.Shutdown(ctx); err != nil {
otel.Handle(err)
}
} else { } else {
fmt.Fprint(dockerCli.Err(), "Warning: Unexpected OTEL error, metrics may not be flushed") fmt.Fprint(dockerCli.Err(), "Warning: Unexpected OTEL error, metrics may not be flushed")
} }

View File

@ -963,7 +963,7 @@ This starts an `ubuntu` container with access to the specified CDI device,
- A valid CDI specification (JSON or YAML file) for the requested device is - A valid CDI specification (JSON or YAML file) for the requested device is
available on the system running the daemon, in one of the configured CDI available on the system running the daemon, in one of the configured CDI
specification directories. specification directories.
- The CDI feature has been enabled in the daemon; see [Enable CDI - The CDI feature has been enabled in the daemon. See [Enable CDI
devices](https://docs.docker.com/reference/cli/dockerd/#enable-cdi-devices). devices](https://docs.docker.com/reference/cli/dockerd/#enable-cdi-devices).
### <a name="attach"></a> Attach to STDIN/STDOUT/STDERR (-a, --attach) ### <a name="attach"></a> Attach to STDIN/STDOUT/STDERR (-a, --attach)
@ -1572,4 +1572,4 @@ The `docker run` command is equivalent to the following API calls:
- If that call returns a 404 (image not found), and depending on the `--pull` option ("always", "missing", "never") the call can trigger a `docker pull <image>`. - If that call returns a 404 (image not found), and depending on the `--pull` option ("always", "missing", "never") the call can trigger a `docker pull <image>`.
- `/containers/create` again after pulling the image. - `/containers/create` again after pulling the image.
- `/containers/(id)/start` to start the container. - `/containers/(id)/start` to start the container.
- `/containers/(id)/attach` to attach to the container when starting with the `-it` flags for interactive containers. - `/containers/(id)/attach` to attach to the container when starting with the `-it` flags for interactive containers.

View File

@ -87,6 +87,25 @@ func TestParseEnvFileNonExistentFile(t *testing.T) {
} }
} }
// Test TestParseEnvFile for a badly formatted header
func TestParseEnvFileFormattedWithSpace(t *testing.T) {
content := `
[config 1]
foo=bar
f=quux
`
tmpFile := tmpFileWithContent(t, content)
_, err := ParseEnvFile(tmpFile)
if _, ok := err.(ErrBadKey); !ok {
t.Fatalf("Expected an ErrBadKey, got [%v]", err)
}
expectedMessage := "poorly formatted environment: variable '[config 1]' contains whitespaces"
if err.Error() != expectedMessage {
t.Fatalf("Expected [%v], got [%v]", expectedMessage, err.Error())
}
}
// Test ParseEnvFile for a badly formatted file // Test ParseEnvFile for a badly formatted file
func TestParseEnvFileBadlyFormattedFile(t *testing.T) { func TestParseEnvFileBadlyFormattedFile(t *testing.T) {
content := `foo=bar content := `foo=bar