diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 9e8532a39..04241dffc 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -72,13 +72,10 @@ jobs: container: image: fedora:latest steps: + - uses: actions/checkout@v4 - run: | # Preparing and running unit tests # dnf -y install git-core golang glibc-static git-core wget gcc make - git clone https://github.com/${GITHUB_REPOSITORY}.git - cd podman-tui - PR_HEAD=$(echo ${GITHUB_REF} | sed 's/merge/head/g') - git pull origin ${PR_HEAD} bash ./hack/install_dep.sh export GOBIN=$(pwd)/bin/ make .install.ginkgo diff --git a/pdcs/containers/create.go b/pdcs/containers/create.go index 992698556..8e559d576 100644 --- a/pdcs/containers/create.go +++ b/pdcs/containers/create.go @@ -3,13 +3,13 @@ package containers import ( "net" "strconv" + "strings" "github.com/containers/common/libnetwork/types" "github.com/containers/podman-tui/pdcs/registry" "github.com/containers/podman-tui/pdcs/utils" "github.com/containers/podman/v4/libpod/define" "github.com/containers/podman/v4/pkg/bindings/containers" - "github.com/containers/podman/v4/pkg/bindings/volumes" "github.com/containers/podman/v4/pkg/domain/entities" "github.com/containers/podman/v4/pkg/specgen" "github.com/containers/podman/v4/pkg/specgenutil" @@ -98,18 +98,7 @@ func Create(opts CreateOptions) ([]string, error) { //nolint:cyclop } if opts.Volume != "" { - // get volume path - volFilter := make(map[string][]string) - volFilter["name"] = []string{opts.Volume} - - volResponse, err := volumes.List(conn, new(volumes.ListOptions).WithFilters(volFilter)) - if err != nil { - return warningResponse, err - } - - if len(volResponse) > 0 { - createOptions.Volume = []string{volResponse[0].Mountpoint} - } + createOptions.Volume = strings.Split(opts.Volume, ",") } createOptions.ImageVolume = opts.ImageVolume diff --git a/test/005-container.bats b/test/005-container.bats index 30be60e69..ebdddc32d 100644 --- a/test/005-container.bats +++ b/test/005-container.bats @@ -27,7 +27,6 @@ load helpers_tui pod_index=$(podman pod ls --sort name --format "{{ .Name }}" | nl -v 1 | grep "$TEST_CONTAINER_POD_NAME" | awk '{print $1}') image_index=$(podman image ls --sort repository --noheading | nl -v 1 | grep 'httpd ' | awk '{print $1}') net_index=$(podman network ls -q | nl -v 1 | grep "$TEST_CONTAINER_NETWORK_NAME" | awk '{print $1}') - vol_index=$(podman volume ls -q | nl -v 1 | grep "$TEST_CONTAINER_VOLUME_NAME" | awk '{print $1}') # switch to containers view @@ -73,9 +72,8 @@ load helpers_tui # switch to "volumes settings" create view # select volume from dropdown widget - podman_tui_send_inputs "Down" "Tab" "Down" - podman_tui_select_item $vol_index - podman_tui_send_inputs "Enter" + podman_tui_send_inputs "Down" "Tab" + podman_tui_send_inputs "${TEST_CONTAINER_VOLUME_NAME}:${TEST_CONTAINER_VOLUME_MOUNT_POINT}:rw" sleep 1 # go to "Create" button and press Enter @@ -107,7 +105,7 @@ load helpers_tui assert "$cnt_pod_name" =~ "$TEST_CONTAINER_POD_NAME" "expected container pod: $TEST_CONTAINER_POD_NAME" - assert "$cnt_mounts" =~ "$TEST_CONTAINER_VOLUME_NAME" "expected container volume: $TEST_CONTAINER_VOLUME_NAME" + assert "$cnt_mounts" =~ "$TEST_CONTAINER_VOLUME_MOUNT_POINT" "expected container volume mount point: $TEST_CONTAINER_VOLUME_MOUNT_POINT" assert "$cnt_image_name" =~ "$httpd_image" "expected container image name: $httpd_image" assert "$cnt_ports" =~ "$cnt_port_str" "expected container port: $cnt_port_str" assert "$cnt_security_opt" =~ "no-new-privileges" "expected no-new-privileges in container security options" diff --git a/test/helpers_tui.bash b/test/helpers_tui.bash index d91a4851a..3c7b0fb8d 100644 --- a/test/helpers_tui.bash +++ b/test/helpers_tui.bash @@ -18,6 +18,7 @@ TEST_CONTAINER_HEALTH_ONFAILURE="restart" TEST_CONTAINER_POD_NAME="${TEST_NAME}_cnt01_pod" TEST_CONTAINER_NETWORK_NAME="${TEST_NAME}_cnt01_net" TEST_CONTAINER_VOLUME_NAME="${TEST_NAME}_cnt01_vol" +TEST_CONTAINER_VOLUME_MOUNT_POINT="/data" TEST_CONTAINER_COMMIT_IMAGE_NAME="${TEST_NAME}_commited_image" TEST_CONTAINER_PORT="8888:80" diff --git a/ui/containers/cntdialogs/create.go b/ui/containers/cntdialogs/create.go index c3b58d1bb..02e513608 100644 --- a/ui/containers/cntdialogs/create.go +++ b/ui/containers/cntdialogs/create.go @@ -125,7 +125,7 @@ type ContainerCreateDialog struct { containerHealthStartupRetriesField *tview.InputField containerHealthStartupSuccessField *tview.InputField containerHealthStartupTimeoutField *tview.InputField - containerVolumeField *tview.DropDown + containerVolumeField *tview.InputField containerImageVolumeField *tview.DropDown cancelHandler func() createHandler func() @@ -177,7 +177,7 @@ func NewContainerCreateDialog() *ContainerCreateDialog { containerDNSServersField: tview.NewInputField(), containerDNSOptionsField: tview.NewInputField(), containerDNSSearchField: tview.NewInputField(), - containerVolumeField: tview.NewDropDown(), + containerVolumeField: tview.NewInputField(), containerImageVolumeField: tview.NewDropDown(), containerHealthCmdField: tview.NewInputField(), containerHealthIntervalField: tview.NewInputField(), @@ -647,7 +647,6 @@ func (d *ContainerCreateDialog) setupVolumePageUI() { d.containerVolumeField.SetLabelWidth(volumePageLabelWidth) d.containerVolumeField.SetBackgroundColor(bgColor) d.containerVolumeField.SetLabelColor(style.DialogFgColor) - d.containerVolumeField.SetListStyles(ddUnselectedStyle, ddselectedStyle) d.containerVolumeField.SetFieldBackgroundColor(inputFieldBgColor) // image volume @@ -698,13 +697,12 @@ func (d *ContainerCreateDialog) dropdownHasFocus() bool { if d.containerImageField.HasFocus() || d.containerPodField.HasFocus() { return true } - if d.containerVolumeField.HasFocus() || d.containerImageVolumeField.HasFocus() { - return true - } - if d.containerNetworkField.HasFocus() || d.containerHealthOnFailureField.HasFocus() { + + if d.containerNetworkField.HasFocus() || d.containerImageVolumeField.HasFocus() { return true } - return false + + return d.containerHealthOnFailureField.HasFocus() } // Focus is called when this primitive receives focus. @@ -844,11 +842,6 @@ func (d *ContainerCreateDialog) initCustomInputHanlers() { event = utils.ParseKeyEventKey(event) return event }) - // container volume dropdown - d.containerVolumeField.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey { - event = utils.ParseKeyEventKey(event) - return event - }) // container image volume dropdown d.containerImageVolumeField.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey { event = utils.ParseKeyEventKey(event) @@ -1101,8 +1094,7 @@ func (d *ContainerCreateDialog) initData() { d.containerDNSServersField.SetText("") d.containerDNSSearchField.SetText("") d.containerDNSOptionsField.SetText("") - d.containerVolumeField.SetOptions(volumeOptions, nil) - d.containerVolumeField.SetCurrentOption(0) + d.containerVolumeField.SetText("") d.containerImageVolumeField.SetOptions(imageVolumeOptions, nil) d.containerImageVolumeField.SetCurrentOption(0) @@ -1227,7 +1219,6 @@ func (d *ContainerCreateDialog) ContainerCreateOptions() containers.CreateOption dnsSearchDomains []string publish []string expose []string - volume string imageVolume string selinuxOpts []string ) @@ -1274,7 +1265,6 @@ func (d *ContainerCreateDialog) ContainerCreateOptions() containers.CreateOption dnsSearchDomains = append(dnsSearchDomains, ds) } } - _, volume = d.containerVolumeField.GetCurrentOption() _, imageVolume = d.containerImageVolumeField.GetCurrentOption() // security options @@ -1304,7 +1294,7 @@ func (d *ContainerCreateDialog) ContainerCreateOptions() containers.CreateOption DNSServer: dnsServers, DNSOptions: dnsOptions, DNSSearchDomain: dnsSearchDomains, - Volume: volume, + Volume: d.containerVolumeField.GetText(), ImageVolume: imageVolume, SelinuxOpts: selinuxOpts, ApparmorProfile: d.containerApparmorField.GetText(),