From 063e65c2bd6bf3e9dd5e849fd2a98b4e067518f3 Mon Sep 17 00:00:00 2001
From: Nick Mitchell <nickm@us.ibm.com>
Date: Sun, 1 Dec 2024 20:54:26 -0500
Subject: [PATCH] try concurrency=2

Signed-off-by: Nick Mitchell <nickm@us.ibm.com>
---
 .github/workflows/tests.yml        | 2 +-
 pkg/runtime/needs/install_linux.go | 7 ++++++-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 030f2840..e3b0a08b 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -33,7 +33,7 @@ jobs:
           - ./tests/bin/ci.sh -i 'test7(b.*|c.*|d.*|e.*|g.*|h.*)' 
           - ./tests/bin/ci.sh -i 'test7f.*'
           - ./tests/bin/ci.sh -i 'test8.*'
-          - /tmp/lunchpail bat demos/data-prep-kit --concurrency 1 --auto-clean --target=$LUNCHPAIL_TARGET # bat=Build and Test
+          - /tmp/lunchpail bat demos/data-prep-kit --concurrency 2 --auto-clean --target=$LUNCHPAIL_TARGET # bat=Build and Test
           - ./tests/bin/go.sh
           - ./tests/bin/pipelines.sh
         os: [ubuntu-latest]
diff --git a/pkg/runtime/needs/install_linux.go b/pkg/runtime/needs/install_linux.go
index fbfb3646..f860b1a1 100644
--- a/pkg/runtime/needs/install_linux.go
+++ b/pkg/runtime/needs/install_linux.go
@@ -63,7 +63,12 @@ func installPython(ctx context.Context, version string, verbose bool) (string, e
 			sudo = ""
 		}
 		if _, err := exec.LookPath("apt"); err == nil {
-			cmdline = fmt.Sprintf("%s add-apt-repository -y ppa:deadsnakes/ppa && %s apt update && %s apt install -y python%s python%s-venv python%s-distutils && curl -sS https://bootstrap.pypa.io/get-pip.py | python%s && which python%s", sudo, sudo, sudo, version, version, version, version, version)
+			// Note: apt install supports waiting for the package lock, but apt update does not; hence the while loop
+			cmdline = fmt.Sprintf(`
+%s add-apt-repository -y ppa:deadsnakes/ppa
+while true; do (%s apt update && break || sleep 2); done
+%s apt -o DPkg::Lock::Timeout=180 install -y python%s python%s-venv python%s-distutils
+curl -sS https://bootstrap.pypa.io/get-pip.py | python%s && which python%s`, sudo, sudo, sudo, version, version, version, version, version)
 		}
 
 		if cmdline != "" {