Skip to content

Commit a02d022

Browse files
committed
Add dockerfile patch fixes to upload script
1 parent a47889c commit a02d022

File tree

2 files changed

+157
-5
lines changed

2 files changed

+157
-5
lines changed

scripts/upload_instance_images_to_ghcr.sh

Lines changed: 156 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ check_prerequisites() {
209209
# Check if image exists in registry
210210
image_exists_in_registry() {
211211
local instance_id="$1"
212-
local image_name="${GHCR_REGISTRY}.${instance_id}:${VERSION}"
212+
local image_name="${GHCR_REGISTRY}.${instance_id,,}:${VERSION}"
213213

214214
if [[ "$DRY_RUN" == "true" ]]; then
215215
return 1 # In dry run, assume images don't exist
@@ -223,6 +223,138 @@ image_exists_in_registry() {
223223
fi
224224
}
225225

226+
# Fix poetry version in langchain instances
227+
fix_poetry_version() {
228+
local dockerfile="$1"
229+
local instance_id="$2"
230+
231+
local langchain_instances=(
232+
"langchain-ai__langchain-6456"
233+
"langchain-ai__langchain-6483"
234+
"langchain-ai__langchain-6765"
235+
)
236+
237+
if [[ " ${langchain_instances[@]} " =~ " ${instance_id} " ]]; then
238+
log_info "Applying poetry version fix for $instance_id" >&2
239+
# Update the dockerfile to replace "https://install.python-poetry.org |" with "https://install.python-poetry.org | POETRY_VERSION=1.8.3"
240+
dockerfile=$(echo "$dockerfile" | sed 's|https://install.python-poetry.org \||https://install.python-poetry.org \| POETRY_VERSION=1.8.3|')
241+
fi
242+
243+
echo "$dockerfile"
244+
}
245+
246+
# Fix poetry version in langchain instances
247+
fix_huggingface_model_downloads() {
248+
local dockerfile="$1"
249+
local instance_id="$2"
250+
251+
local hf_instances=(
252+
"huggingface__transformers-16661"
253+
"huggingface__transformers-17082"
254+
)
255+
256+
if [[ " ${hf_instances[@]} " =~ " ${instance_id} " ]]; then
257+
log_info "Applying Hugging Face model download fix for $instance_id" >&2
258+
# Update the dockerfile to add URL fix
259+
dockerfile=$(echo "$dockerfile" | sed '/COPY . ./a\RUN sed -i '\''s|http_get(url_to_download|http_get("https://huggingface.co" + url_to_download|'\'' src/transformers/utils/hub.py')
260+
fi
261+
262+
echo "$dockerfile"
263+
}
264+
265+
# Fix pkg-config missing issue for PyAV build in transformers instances
266+
fix_pkg_config_dockerfile() {
267+
local dockerfile="$1"
268+
local instance_id="$2"
269+
270+
# List of instance IDs that need pkg-config fix (from failed_instances.txt)
271+
local pkg_config_instances=(
272+
"huggingface__transformers-25358"
273+
"huggingface__transformers-25765"
274+
"huggingface__transformers-25884"
275+
"huggingface__transformers-26164"
276+
"huggingface__transformers-27463"
277+
"huggingface__transformers-27561"
278+
"huggingface__transformers-27717"
279+
"huggingface__transformers-28010"
280+
"huggingface__transformers-28517"
281+
"huggingface__transformers-28522"
282+
"huggingface__transformers-28535"
283+
"huggingface__transformers-28563"
284+
"huggingface__transformers-28940"
285+
)
286+
287+
# Check if this instance needs the fix
288+
local needs_fix=false
289+
for pkg_config_instance in "${pkg_config_instances[@]}"; do
290+
if [[ "$instance_id" == "$pkg_config_instance" ]]; then
291+
needs_fix=true
292+
break
293+
fi
294+
done
295+
296+
if [[ "$needs_fix" == "true" ]]; then
297+
log_info "Applying av version fix for $instance_id" >&2
298+
# Add pkg-config and pyav dependencies
299+
dockerfile=$(echo "$dockerfile" | sed 's/build-essential/build-essential pkg-config libavformat-dev libavcodec-dev libavdevice-dev libavutil-dev libswscale-dev libswresample-dev libavfilter-dev/')
300+
# Pre-install av==10.0.0 and modify setup.py to use compatible version
301+
dockerfile=$(echo "$dockerfile" | sed '/# Install PyTorch and other dependencies/i\
302+
# Temporarily modify setup.py to replace the problematic av==9.2.0 requirement with av==10.0.0\
303+
RUN sed -i '\''s/\"av==9.2.0\",/\"av==10.0.0\",/g'\'' setup.py\
304+
')
305+
fi
306+
307+
echo "$dockerfile"
308+
}
309+
310+
# Fix Debian Buster EOL issues for specific instances
311+
fix_debian_buster_dockerfile() {
312+
local dockerfile="$1"
313+
local instance_id="$2"
314+
315+
# List of instance IDs that need Debian Buster archive fix
316+
local buster_instances=(
317+
"angular__angular-37561"
318+
"coder__code-server-4597"
319+
"coder__code-server-4678"
320+
"coder__code-server-4923"
321+
"coder__code-server-5633"
322+
"coder__code-server-6115"
323+
"coder__code-server-6225"
324+
"coder__code-server-6423"
325+
"huggingface__transformers-6744"
326+
"huggingface__transformers-7075"
327+
"huggingface__transformers-7272"
328+
"huggingface__transformers-7562"
329+
"huggingface__transformers-8435"
330+
"microsoft__vscode-118226"
331+
"microsoft__vscode-122796"
332+
"microsoft__vscode-123112"
333+
"microsoft__vscode-124621"
334+
"microsoft__vscode-127257"
335+
"microsoft__vscode-128931"
336+
"microsoft__vscode-130088"
337+
"microsoft__vscode-132041"
338+
"microsoft__vscode-178291"
339+
)
340+
341+
# Check if this instance needs the fix
342+
local needs_fix=false
343+
for buster_instance in "${buster_instances[@]}"; do
344+
if [[ "$instance_id" == "$buster_instance" ]]; then
345+
needs_fix=true
346+
break
347+
fi
348+
done
349+
350+
if [[ "$needs_fix" == "true" ]]; then
351+
log_info "Applying Debian Buster archive fix for $instance_id" >&2
352+
# Replace debian repositories with archive repositories before apt-get commands
353+
echo "$dockerfile" | sed 's|RUN apt-get update|RUN sed -i "s/deb.debian.org/archive.debian.org/g" /etc/apt/sources.list \&\& sed -i "s/security.debian.org/archive.debian.org/g" /etc/apt/sources.list \&\& apt-get update|g'
354+
else
355+
echo "$dockerfile"
356+
fi
357+
}
226358

227359
# Build and upload a single instance image
228360
process_instance() {
@@ -235,6 +367,18 @@ process_instance() {
235367
local base_commit=$(echo "$instance_data" | jq -r '.base_commit')
236368
local dockerfile=$(echo "$instance_data" | jq -r '.Dockerfile')
237369

370+
# Apply pkg-config fix if needed
371+
dockerfile=$(fix_pkg_config_dockerfile "$dockerfile" "$instance_id")
372+
373+
# Apply Debian Buster fix if needed
374+
dockerfile=$(fix_debian_buster_dockerfile "$dockerfile" "$instance_id")
375+
376+
# Apply poetry lock file fix if needed
377+
dockerfile=$(fix_poetry_version "$dockerfile" "$instance_id")
378+
379+
# Apply HF URL fix
380+
dockerfile=$(fix_huggingface_model_downloads "$dockerfile" "$instance_id")
381+
238382
log_info "Processing instance: $instance_id ($language)"
239383

240384
# Check if image already exists and skip if requested
@@ -244,7 +388,7 @@ process_instance() {
244388
fi
245389

246390
local local_image_name="polybench_${language,,}_${instance_id,,}"
247-
local remote_image_name="${GHCR_REGISTRY}.${instance_id}"
391+
local remote_image_name="${GHCR_REGISTRY}.${instance_id,,}"
248392

249393
# Create temporary directory for this instance
250394
local temp_dir=$(mktemp -d)
@@ -298,12 +442,12 @@ process_instance() {
298442
log_success "Pushed $instance_id to registry"
299443

300444
# Add URL to package settings file for batch processing
301-
local settings_url="https://github.com/users/${GH_USERNAME}/packages/container/swe-polybench.eval.x86_64.${instance_id}/settings"
445+
local settings_url="https://github.com/users/${GH_USERNAME}/packages/container/swe-polybench.eval.x86_64.${instance_id,,}/settings"
302446
echo "$settings_url" >> package_settings_urls.txt
303447

304448
# Note about manual visibility setting
305449
log_warning "Package uploaded as private. To make it public, visit:"
306-
log_warning "https://github.com/users/${GH_USERNAME}/packages/container/swe-polybench.eval.x86_64.${instance_id}/settings"
450+
log_warning "https://github.com/users/${GH_USERNAME}/packages/container/swe-polybench.eval.x86_64.${instance_id,,}/settings"
307451
else
308452
log_info "DRY RUN: Would tag and push $instance_id"
309453
fi
@@ -332,6 +476,10 @@ export -f log_success
332476
export -f log_warning
333477
export -f log_error
334478
export -f image_exists_in_registry
479+
export -f fix_pkg_config_dockerfile
480+
export -f fix_debian_buster_dockerfile
481+
export -f fix_poetry_version
482+
export -f fix_huggingface_model_downloads
335483
export GHCR_REGISTRY VERSION DRY_RUN REPO_PATH SKIP_EXISTING GH_PAT
336484
export RED GREEN YELLOW BLUE NC
337485
export SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -430,6 +578,10 @@ $(declare -f log_success)
430578
$(declare -f log_warning)
431579
$(declare -f log_error)
432580
$(declare -f image_exists_in_registry)
581+
$(declare -f fix_pkg_config_dockerfile)
582+
$(declare -f fix_debian_buster_dockerfile)
583+
$(declare -f fix_poetry_version)
584+
$(declare -f fix_huggingface_model_downloads)
433585
export GHCR_REGISTRY="$GHCR_REGISTRY"
434586
export VERSION="$VERSION"
435587
export DRY_RUN="$DRY_RUN"

src/poly_bench_evaluation/docker_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def try_pull_prebuilt_image(self, instance_id: str, version: str = "latest") ->
4747
Returns:
4848
bool: True if image was successfully pulled, False otherwise
4949
"""
50-
ghcr_image_name = f"ghcr.io/timesler/swe-polybench.eval.x86_64.{instance_id}:{version}"
50+
ghcr_image_name = f"ghcr.io/timesler/swe-polybench.eval.x86_64.{instance_id.lower()}:{version}"
5151

5252
try:
5353
logger.info(f"Attempting to pull pre-built image: {ghcr_image_name}")

0 commit comments

Comments
 (0)