-
-
Notifications
You must be signed in to change notification settings - Fork 1
168 lines (146 loc) · 6.98 KB
/
Copy pathtest_uv_install.yml
File metadata and controls
168 lines (146 loc) · 6.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# .github/workflows/test_uv_install.yml
name: Simple UV Multi-Version Test
on:
workflow_dispatch: # Allows manual trigger from GitHub UI
push:
branches: [ 'main', 'test-workflows-feature' ] # Trigger on pushes to main or a specific feature branch
jobs:
install-uv-versions:
runs-on: ubuntu-latest
permissions:
contents: write # Needed if you want to commit a report back to the repo
steps:
- name: 🏁 Checkout code
uses: actions/checkout@v4
- name: 🐍 Set up Python 3.11 (or latest supported by omnipkg)
uses: actions/setup-python@v4
with:
python-version: '3.11' # Use 3.11 as that's what omnipkg targets for best compatibility
- name: 🔧 Install Redis for omnipkg
run: |
sudo apt-get update
sudo apt-get install -y redis-server
sudo systemctl start redis-server
redis-cli ping # Test Redis connection
- name: 📦 Install omnipkg
run: |
python -m pip install --upgrade pip
pip install -e . # Install omnipkg in editable mode from your repo
- name: ⚙️ Configure omnipkg for non-interactive use
run: |
# Create omnipkg config directory
mkdir -p ~/.config/omnipkg
# Create a basic config file to avoid interactive setup
cat > ~/.config/omnipkg/config.json << EOF
{
"multiversion_base": "/opt/hostedtoolcache/Python/3.11.13/x64/lib/python3.11/site-packages/.omnipkg_versions",
"redis_url": "redis://localhost:6379",
"auto_cleanup": true,
"cleanup_threshold_days": 30
}
EOF
echo "omnipkg config created:"
cat ~/.config/omnipkg/config.json
- name: 🧪 Attempt to install uv==0.7.12 and uv==0.7.14 with omnipkg
id: omnipkg_uv_install
run: |
echo "--- Attempting omnipkg install uv==0.7.12 uv==0.7.14 ---"
omnipkg install uv==0.7.12 uv==0.7.14
if [ $? -eq 0 ]; then
echo "success=true" >> $GITHUB_OUTPUT
echo "omnipkg install completed successfully."
else
echo "success=false" >> $GITHUB_OUTPUT
echo "omnipkg install failed. See logs for details."
exit 1 # Fail the step if omnipkg install fails
fi
- name: ✅ Verify Active UV Version
if: steps.omnipkg_uv_install.outputs.success == 'true'
run: |
echo "--- Verifying Active UV Version ---"
# Try multiple ways to get UV version info
echo "=== Checking UV via command line ==="
uv --version || echo "uv command not found in PATH"
echo "=== Checking UV Python package ==="
python -c "
try:
import uv
print(f'UV package imported successfully')
# Try different version attributes
for attr in ['__version__', '_version', 'version', 'VERSION']:
if hasattr(uv, attr):
print(f'Found version attribute {attr}: {getattr(uv, attr)}')
# Try to get version from package metadata
try:
import importlib.metadata
version = importlib.metadata.version('uv')
print(f'UV version from metadata: {version}')
except Exception as e:
print(f'Could not get version from metadata: {e}')
except ImportError as e:
print(f'Could not import uv: {e}')
"
echo "=== omnipkg status ==="
omnipkg status # Show overall omnipkg status
echo "=== omnipkg info uv (showing active version details) ==="
# Select option 1 (active version) to show the sophisticated Redis metadata
echo "1" | omnipkg info uv
- name: 📊 Generate simple report
if: always() # This step will run regardless of previous step's success
run: |
REPORT_FILE="uv_test_report.md"
echo "# UV Multi-Version Installation Test Report" > $REPORT_FILE
echo "" >> $REPORT_FILE
echo "**Workflow Run:** [${{ github.run_id }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})" >> $REPORT_FILE
echo "**Test Status:** \`${{ steps.omnipkg_uv_install.outcome }}\`" >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "### Test Scenario" >> $REPORT_FILE
echo "\`\`\`bash" >> $REPORT_FILE
echo "omnipkg install uv==0.7.12 uv==0.7.14" >> $REPORT_FILE
echo "\`\`\`" >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "### omnipkg Status Output" >> $REPORT_FILE
echo "\`\`\`" >> $REPORT_FILE
omnipkg status >> $REPORT_FILE 2>&1
echo "\`\`\`" >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "### omnipkg Info UV Output (Active Version Details)" >> $REPORT_FILE
echo "\`\`\`" >> $REPORT_FILE
# Select option 1 (active version) to show the sophisticated Redis metadata
echo "1" | omnipkg info uv >> $REPORT_FILE 2>&1
echo "\`\`\`" >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "### Active UV Version Check" >> $REPORT_FILE
echo "\`\`\`" >> $REPORT_FILE
echo "=== UV Command Line Version ===" >> $REPORT_FILE
uv --version >> $REPORT_FILE 2>&1 || echo "uv command not found in PATH" >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "=== UV Python Package Info ===" >> $REPORT_FILE
python -c "
try:
import uv
print('UV package imported successfully')
# Try to get version from package metadata
try:
import importlib.metadata
version = importlib.metadata.version('uv')
print(f'UV version from metadata: {version}')
except Exception as e:
print(f'Could not get version from metadata: {e}')
except ImportError as e:
print(f'Could not import uv: {e}')
" >> $REPORT_FILE 2>&1
echo "\`\`\`" >> $REPORT_FILE
if [ "${{ steps.omnipkg_uv_install.outputs.success }}" == "true" ]; then
echo "### Conclusion" >> $REPORT_FILE
echo "✅ omnipkg successfully installed multiple conflicting \`uv\` versions and maintains the active version while keeping others isolated. This demonstrates \`omnipkg\`'s core conflict resolution capabilities." >> $REPORT_FILE
else
echo "### Conclusion" >> $REPORT_FILE
echo "❌ omnipkg failed to install multiple \`uv\` versions as expected. Review logs for errors." >> $REPORT_FILE
fi
- name: 📤 Upload Report Artifact
uses: actions/upload-artifact@v4
with:
name: uv-multi-version-test-report
path: uv_test_report.md
retention-days: 30