support for container option: --hostname (#809)

This commit is contained in:
Marcin Falkowski
2021-09-10 07:03:40 +02:00
committed by GitHub
parent f0fd0af5ce
commit 9126f15aa2
6 changed files with 53 additions and 0 deletions

View File

@@ -11,6 +11,9 @@ import (
"runtime"
"strings"
"github.com/google/shlex"
"github.com/spf13/pflag"
"github.com/mitchellh/go-homedir"
log "github.com/sirupsen/logrus"
@@ -96,6 +99,7 @@ func (rc *RunContext) GetBindsAndMounts() ([]string, map[string]string) {
func (rc *RunContext) startJobContainer() common.Executor {
image := rc.platformImage()
hostname := rc.hostname()
return func(ctx context.Context) error {
rawLogger := common.Logger(ctx).WithField("raw_output", true)
@@ -136,6 +140,7 @@ func (rc *RunContext) startJobContainer() common.Executor {
Privileged: rc.Config.Privileged,
UsernsMode: rc.Config.UsernsMode,
Platform: rc.Config.ContainerArchitecture,
Hostname: hostname,
})
var copyWorkspace bool
@@ -304,6 +309,28 @@ func (rc *RunContext) platformImage() string {
return ""
}
func (rc *RunContext) hostname() string {
job := rc.Run.Job()
c := job.Container()
if c == nil {
return ""
}
optionsFlags := pflag.NewFlagSet("container_options", pflag.ContinueOnError)
hostname := optionsFlags.StringP("hostname", "h", "", "")
optionsArgs, err := shlex.Split(c.Options)
if err != nil {
log.Warnf("Cannot parse container options: %s", c.Options)
return ""
}
err = optionsFlags.Parse(optionsArgs)
if err != nil {
log.Warnf("Cannot parse container options: %s", c.Options)
return ""
}
return *hostname
}
func (rc *RunContext) isEnabled(ctx context.Context) bool {
job := rc.Run.Job()
l := common.Logger(ctx)

View File

@@ -103,6 +103,7 @@ func TestRunEvent(t *testing.T) {
{"testdata", "shells/sh", "push", "", platforms, ""},
{"testdata", "job-container", "push", "", platforms, ""},
{"testdata", "job-container-non-root", "push", "", platforms, ""},
{"testdata", "container-hostname", "push", "", platforms, ""},
{"testdata", "uses-docker-url", "push", "", platforms, ""},
{"testdata", "remote-action-docker", "push", "", platforms, ""},
{"testdata", "remote-action-js", "push", "", platforms, ""},

View File

@@ -0,0 +1,20 @@
name: container-hostname
on: push
jobs:
with-hostname:
runs-on: ubuntu-latest
container:
image: node:12-buster-slim
options: "--hostname my.host.local"
steps:
- run: |
[[ $(uname -n) == "my.host.local" ]]
default-hostname:
runs-on: ubuntu-latest
container:
image: node:12-buster-slim
steps:
- run: |
[[ $(uname -n) ]] && [[ $(uname -n) != "my.host.local" ]]