copilot-swe-agent[bot] dboa9 commited on
Commit
6392599
·
1 Parent(s): 439ff1f

Add CI workflow and test script as evidence the Ollama .tar.zst fix works

Browse files
.github/workflows/test-ollama-download.yml ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Test Ollama Download Fix
2
+
3
+ on:
4
+ push:
5
+ branches: ["main", "copilot/**"]
6
+ paths:
7
+ - "Dockerfile"
8
+ - "scripts/test_ollama_download.sh"
9
+ - ".github/workflows/test-ollama-download.yml"
10
+ pull_request:
11
+ branches: ["main"]
12
+ paths:
13
+ - "Dockerfile"
14
+ - "scripts/test_ollama_download.sh"
15
+ workflow_dispatch:
16
+
17
+ jobs:
18
+ verify-ollama-url:
19
+ name: Verify Ollama v0.17.5 download URL and extraction
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - name: Checkout
23
+ uses: actions/checkout@v4
24
+
25
+ - name: Install zstd
26
+ run: sudo apt-get install -y zstd
27
+
28
+ - name: Confirm broken URL returns 404
29
+ run: |
30
+ STATUS=$(curl -o /dev/null -s -w "%{http_code}" \
31
+ "https://github.com/ollama/ollama/releases/download/v0.17.5/ollama-linux-amd64")
32
+ echo "Old bare-binary URL returned: HTTP $STATUS"
33
+ if [ "$STATUS" = "404" ]; then
34
+ echo "PASS: old URL is confirmed broken (HTTP 404) — this was the root cause"
35
+ else
36
+ echo "WARNING: old URL returned HTTP $STATUS (expected 404)"
37
+ fi
38
+
39
+ - name: Confirm fixed URL resolves
40
+ run: |
41
+ STATUS=$(curl -o /dev/null -s -w "%{http_code}" --location \
42
+ "https://github.com/ollama/ollama/releases/download/v0.17.5/ollama-linux-amd64.tar.zst")
43
+ echo "New .tar.zst URL returned: HTTP $STATUS"
44
+ if [ "$STATUS" != "200" ]; then
45
+ echo "FAIL: new URL returned HTTP $STATUS (expected 200)"
46
+ exit 1
47
+ fi
48
+ echo "PASS: new URL resolves (HTTP $STATUS)"
49
+
50
+ - name: Dockerfile uses .tar.zst URL (not bare binary)
51
+ run: |
52
+ if grep -q "ollama-linux-amd64.tar.zst" Dockerfile; then
53
+ echo "PASS: Dockerfile uses .tar.zst URL"
54
+ grep "ollama-linux-amd64" Dockerfile
55
+ else
56
+ echo "FAIL: Dockerfile does NOT use .tar.zst URL"
57
+ grep "ollama-linux-amd64" Dockerfile || true
58
+ exit 1
59
+ fi
60
+
61
+ - name: Dockerfile does NOT use the broken bare-binary URL
62
+ run: |
63
+ # The bare binary URL ends exactly with "ollama-linux-amd64" (no extension)
64
+ if grep -P "ollama-linux-amd64\"" Dockerfile; then
65
+ echo "FAIL: Dockerfile still references the broken bare-binary URL"
66
+ exit 1
67
+ fi
68
+ echo "PASS: Dockerfile does not contain broken bare-binary URL"
69
+
70
+ - name: Dockerfile has zstd in apt packages
71
+ run: |
72
+ if grep -q "zstd" Dockerfile; then
73
+ echo "PASS: zstd is installed in Dockerfile"
74
+ else
75
+ echo "FAIL: zstd is missing from Dockerfile apt packages"
76
+ exit 1
77
+ fi
78
+
79
+ - name: Dockerfile uses tar extraction
80
+ run: |
81
+ if grep -q "tar -I zstd -xf" Dockerfile; then
82
+ echo "PASS: Dockerfile extracts archive with 'tar -I zstd -xf'"
83
+ else
84
+ echo "FAIL: Dockerfile is missing tar extraction step"
85
+ exit 1
86
+ fi
87
+
88
+ - name: Run full download and extraction test
89
+ run: |
90
+ chmod +x scripts/test_ollama_download.sh
91
+ scripts/test_ollama_download.sh
scripts/test_ollama_download.sh ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ # test_ollama_download.sh
3
+ # Evidence script: proves the Ollama v0.17.5 .tar.zst download and extraction works.
4
+ # Run this script to verify the fix before/after any Dockerfile change.
5
+ # Exit 0 = PASS, Exit 1 = FAIL.
6
+
7
+ set -euo pipefail
8
+
9
+ OLLAMA_VERSION="v0.17.5"
10
+ OLLAMA_URL="https://github.com/ollama/ollama/releases/download/${OLLAMA_VERSION}/ollama-linux-amd64.tar.zst"
11
+ OLD_URL="https://github.com/ollama/ollama/releases/download/${OLLAMA_VERSION}/ollama-linux-amd64"
12
+ WORK_DIR="$(mktemp -d)"
13
+ ARCHIVE="${WORK_DIR}/ollama-linux-amd64.tar.zst"
14
+ EXTRACT_DIR="${WORK_DIR}/extracted"
15
+
16
+ cleanup() { rm -rf "${WORK_DIR}"; }
17
+ trap cleanup EXIT
18
+
19
+ echo "========================================================"
20
+ echo " Ollama ${OLLAMA_VERSION} download/extraction evidence"
21
+ echo "========================================================"
22
+
23
+ # --- Test 1: old bare-binary URL must return 404 ---
24
+ echo ""
25
+ echo "TEST 1: Old bare-binary URL returns 404 (root cause confirmed)"
26
+ HTTP_STATUS=$(curl -o /dev/null -s -w "%{http_code}" \
27
+ --max-time 15 \
28
+ "${OLD_URL}")
29
+ if [ "${HTTP_STATUS}" = "404" ]; then
30
+ echo " PASS: ${OLD_URL}"
31
+ echo " → HTTP ${HTTP_STATUS} (confirms old URL is broken)"
32
+ else
33
+ echo " UNEXPECTED: old URL returned HTTP ${HTTP_STATUS} (expected 404)"
34
+ fi
35
+
36
+ # --- Test 2: new .tar.zst URL must resolve (not 404) ---
37
+ echo ""
38
+ echo "TEST 2: New .tar.zst URL resolves"
39
+ HTTP_STATUS=$(curl -o /dev/null -s -w "%{http_code}" \
40
+ --max-time 15 --location \
41
+ "${OLLAMA_URL}")
42
+ if [ "${HTTP_STATUS}" = "200" ]; then
43
+ echo " PASS: ${OLLAMA_URL}"
44
+ echo " → HTTP ${HTTP_STATUS}"
45
+ else
46
+ echo " FAIL: ${OLLAMA_URL}"
47
+ echo " → HTTP ${HTTP_STATUS} (expected 200)"
48
+ exit 1
49
+ fi
50
+
51
+ # --- Test 3: download the archive ---
52
+ echo ""
53
+ echo "TEST 3: Downloading archive (this may take a while)..."
54
+ curl -fSL --retry 3 --retry-delay 5 --max-time 600 \
55
+ "${OLLAMA_URL}" -o "${ARCHIVE}"
56
+ ARCHIVE_SIZE=$(stat -c%s "${ARCHIVE}")
57
+ echo " PASS: Downloaded ${ARCHIVE_SIZE} bytes"
58
+ if [ "${ARCHIVE_SIZE}" -lt 1000000 ]; then
59
+ echo " FAIL: Archive too small — expected >1MB"
60
+ exit 1
61
+ fi
62
+
63
+ # --- Test 4: extract with zstd ---
64
+ echo ""
65
+ echo "TEST 4: Extracting .tar.zst with zstd..."
66
+ mkdir -p "${EXTRACT_DIR}"
67
+ tar -I zstd -xf "${ARCHIVE}" -C "${EXTRACT_DIR}"
68
+ echo " PASS: Extraction succeeded"
69
+
70
+ # --- Test 5: binary exists at expected path ---
71
+ echo ""
72
+ echo "TEST 5: Binary exists at bin/ollama after extraction"
73
+ BINARY="${EXTRACT_DIR}/bin/ollama"
74
+ if [ ! -f "${BINARY}" ]; then
75
+ echo " FAIL: ${BINARY} not found after extraction"
76
+ echo " Files extracted:"
77
+ find "${EXTRACT_DIR}" -type f | head -20
78
+ exit 1
79
+ fi
80
+ echo " PASS: ${BINARY} exists"
81
+
82
+ # --- Test 6: binary is ELF ---
83
+ echo ""
84
+ echo "TEST 6: Binary is an ELF executable"
85
+ FILE_OUTPUT=$(file "${BINARY}")
86
+ echo " file output: ${FILE_OUTPUT}"
87
+ if echo "${FILE_OUTPUT}" | grep -q "ELF"; then
88
+ echo " PASS: ELF confirmed"
89
+ else
90
+ echo " FAIL: Not an ELF binary"
91
+ exit 1
92
+ fi
93
+
94
+ # --- Test 7: binary size sanity check ---
95
+ echo ""
96
+ echo "TEST 7: Binary size > 1MB"
97
+ BINARY_SIZE=$(stat -c%s "${BINARY}")
98
+ echo " Size: ${BINARY_SIZE} bytes"
99
+ if [ "${BINARY_SIZE}" -gt 1000000 ]; then
100
+ echo " PASS: ${BINARY_SIZE} bytes (> 1MB)"
101
+ else
102
+ echo " FAIL: Binary too small (${BINARY_SIZE} bytes)"
103
+ exit 1
104
+ fi
105
+
106
+ echo ""
107
+ echo "========================================================"
108
+ echo " ALL TESTS PASSED - fix is verified"
109
+ echo "========================================================"