helpers/container/helperimage/windows_info.go (52 lines of code) (raw):
package helperimage
import (
"fmt"
"gitlab.com/gitlab-org/gitlab-runner/helpers/container/windows"
)
const (
baseImage1809 = "servercore1809"
baseImage21H2 = "servercore21H2"
windowsSupportedArchitecture = "x86_64"
)
var helperImages = map[string]string{
windows.V1809: baseImage1809,
windows.V21H2: baseImage21H2,
windows.V24H2: baseImage21H2, // Re-use the 21H2 base image, taking advantage of the backwards compatibility of newer windows kernels
}
var prebuiltImages = map[string]string{
baseImage1809: "servercore-ltsc2019",
baseImage21H2: "servercore-ltsc2022",
}
type windowsInfo struct{}
func (w *windowsInfo) Create(revision string, cfg Config) (Info, error) {
baseImage, err := w.baseImage(cfg.KernelVersion)
if err != nil {
return Info{}, fmt.Errorf("detecting base image: %w", err)
}
var prebuilt string
if name, ok := prebuiltImages[baseImage]; ok {
prebuilt = fmt.Sprintf("prebuilt-windows-%s-%s", name, windowsSupportedArchitecture)
}
cmd := getPowerShellCmd(cfg.Shell)
if cfg.ProxyExec {
cmd = append([]string{"gitlab-runner-helper", "proxy-exec", "--bootstrap"}, cmd...)
}
return Info{
Architecture: windowsSupportedArchitecture,
Name: GitLabRegistryName,
Tag: fmt.Sprintf("%s-%s-%s", windowsSupportedArchitecture, revision, baseImage),
Cmd: cmd,
Prebuilt: prebuilt,
}, nil
}
func (w *windowsInfo) baseImage(version string) (string, error) {
version, err := windows.Version(version)
if err != nil {
return "", err
}
baseImage, ok := helperImages[version]
if !ok {
return "", fmt.Errorf("%w: %v", windows.ErrUnsupportedWindowsVersion, version)
}
return baseImage, nil
}