Skip to content

Commit c16ae91

Browse files
authored
Update publish-pypi.yml
Added for SuperQwen Signed-off-by: Mithun Gowda B <[email protected]>
1 parent 2fd28bf commit c16ae91

File tree

1 file changed

+108
-39
lines changed

1 file changed

+108
-39
lines changed

.github/workflows/publish-pypi.yml

Lines changed: 108 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,140 @@
1-
# This workflow builds and publishes the SuperQwen package to PyPI and TestPyPI.
2-
# It is triggered on new releases or can be run manually.
3-
41
name: Publish to PyPI
52

63
on:
7-
# Trigger on new releases (e.g., when you create a release in the GitHub UI)
4+
# Trigger on new releases
85
release:
96
types: [published]
107

11-
# Allow manual triggering from the Actions tab
8+
# Allow manual triggering
129
workflow_dispatch:
10+
inputs:
11+
target:
12+
description: 'Publication target'
13+
required: true
14+
default: 'testpypi'
15+
type: choice
16+
options:
17+
- testpypi
18+
- pypi
1319

1420
# Restrict permissions for security
1521
permissions:
16-
id-token: write # Required for trusted publishing
22+
contents: read
1723

1824
jobs:
1925
build-and-publish:
2026
name: Build and publish Python package
2127
runs-on: ubuntu-latest
28+
environment:
29+
name: ${{ github.event_name == 'release' && 'pypi' || 'testpypi' }}
30+
url: ${{ github.event_name == 'release' && 'https://pypi.org/p/SuperQwen' || 'https://test.pypi.org/p/SuperQwen' }}
2231

2332
steps:
2433
- name: Checkout repository
2534
uses: actions/checkout@v4
35+
with:
36+
# Fetch full history for proper version detection
37+
fetch-depth: 0
2638

2739
- name: Set up Python
2840
uses: actions/setup-python@v5
2941
with:
3042
python-version: '3.11'
43+
cache: 'pip'
3144

3245
- name: Install build dependencies
3346
run: |
3447
python -m pip install --upgrade pip
35-
python -m pip install build twine
48+
python -m pip install build twine toml
3649
37-
- name: Verify project structure and version
50+
- name: Verify package structure
3851
run: |
39-
echo "📦 Checking project structure..."
40-
ls -l
41-
echo "🔍 Checking SuperQwen package contents..."
42-
ls -l SuperQwen/
52+
echo "📦 Checking package structure..."
53+
ls -la
54+
echo "🔍 Checking SuperQwen package..."
55+
ls -la SuperQwen/
56+
echo "🔍 Checking setup package..."
57+
ls -la SuperQwen/setup/
4358
44-
echo "📋 Checking version..."
45-
if ! grep -q "__version__" "SuperQwen/__init__.py"; then
46-
echo "❌ Version not found in SuperQwen/__init__.py!"
47-
exit 1
48-
fi
49-
version=$(grep "__version__" "SuperQwen/__init__.py" | cut -d'"' -f2)
50-
echo "✅ Found version: $version"
51-
59+
# Verify version consistency
60+
echo "📋 Checking version consistency..."
61+
python -c "
62+
import toml
63+
import sys
64+
sys.path.insert(0, '.')
65+
66+
# Load pyproject.toml version using dynamic version
67+
with open('pyproject.toml', 'r') as f:
68+
pyproject = toml.load(f)
69+
70+
# Load package version
71+
from SuperQwen import __version__
72+
73+
print(f'Package version: {__version__}')
74+
print(f'Dynamic version configured in pyproject.toml: {pyproject[\"tool\"][\"setuptools\"][\"dynamic\"][\"version\"]}')
75+
76+
# Since version is dynamic, we just verify the package can be imported
77+
print('✅ Version loaded successfully from package')
78+
"
79+
80+
- name: Clean previous builds
81+
run: |
82+
rm -rf dist/ build/ *.egg-info/
83+
5284
- name: Build package
5385
run: |
5486
echo "🔨 Building package..."
5587
python -m build
5688
echo "📦 Built files:"
57-
ls -l dist/
89+
ls -la dist/
5890
5991
- name: Validate package
6092
run: |
61-
echo "🔍 Validating package with Twine..."
93+
echo "🔍 Validating package..."
6294
python -m twine check dist/*
6395
64-
- name: Publish to PyPI
65-
if: github.event_name == 'release'
66-
uses: pypa/gh-action-pypi-publish@release/v1
67-
# This uses trusted publishing, which is more secure than API tokens.
68-
# Make sure you have configured this project as a trusted publisher on PyPI.
69-
70-
- name: Publish to TestPyPI
71-
if: github.event_name == 'workflow_dispatch'
96+
# Upload to TestPyPI for testing (manual trigger or non-release)
97+
- name: Upload to TestPyPI
98+
if: github.event_name == 'workflow_dispatch' && github.event.inputs.target == 'testpypi'
7299
uses: pypa/gh-action-pypi-publish@release/v1
73100
with:
74101
repository-url: https://test.pypi.org/legacy/
75-
# For manual TestPyPI uploads, you'll need to use a token.
76-
# Add a secret named TEST_PYPI_API_TOKEN to your repository.
77102
password: ${{ secrets.TEST_PYPI_API_TOKEN }}
103+
print-hash: true
104+
105+
# Upload to production PyPI (only on releases)
106+
- name: Upload to PyPI
107+
if: github.event_name == 'release' || (github.event_name == 'workflow_dispatch' && github.event.inputs.target == 'pypi')
108+
uses: pypa/gh-action-pypi-publish@release/v1
109+
with:
110+
password: ${{ secrets.PYPI_API_TOKEN }}
111+
print-hash: true
112+
113+
- name: Create deployment summary
114+
if: always()
115+
run: |
116+
echo "## 📦 SuperQwen Package Deployment" >> $GITHUB_STEP_SUMMARY
117+
echo "| Property | Value |" >> $GITHUB_STEP_SUMMARY
118+
echo "|----------|-------|" >> $GITHUB_STEP_SUMMARY
119+
echo "| Target | ${{ github.event_name == 'release' && 'PyPI (Production)' || github.event.inputs.target || 'TestPyPI' }} |" >> $GITHUB_STEP_SUMMARY
120+
echo "| Trigger | ${{ github.event_name }} |" >> $GITHUB_STEP_SUMMARY
121+
echo "| Version | $(python -c 'from SuperQwen import __version__; print(__version__)') |" >> $GITHUB_STEP_SUMMARY
122+
echo "| Commit | ${{ github.sha }} |" >> $GITHUB_STEP_SUMMARY
123+
echo "" >> $GITHUB_STEP_SUMMARY
124+
125+
if [ "${{ github.event_name }}" == "release" ]; then
126+
echo "🎉 **Production release published to PyPI!**" >> $GITHUB_STEP_SUMMARY
127+
echo "Install with: \`pip install SuperQwen\`" >> $GITHUB_STEP_SUMMARY
128+
else
129+
echo "🧪 **Test release published to TestPyPI**" >> $GITHUB_STEP_SUMMARY
130+
echo "Test install with: \`pip install --index-url https://test.pypi.org/simple/ SuperQwen\`" >> $GITHUB_STEP_SUMMARY
131+
fi
78132
79133
test-installation:
80-
name: Test package installation from TestPyPI
134+
name: Test package installation
81135
needs: build-and-publish
82-
if: github.event_name == 'workflow_dispatch' # Only run on manual triggers
136+
runs-on: ubuntu-latest
137+
if: github.event_name == 'workflow_dispatch' && github.event.inputs.target == 'testpypi'
83138

84139
steps:
85140
- name: Set up Python
@@ -91,17 +146,31 @@ jobs:
91146
run: |
92147
echo "🧪 Testing installation from TestPyPI..."
93148
94-
# Wait a bit for the package to be available on TestPyPI
149+
# Wait a bit for the package to be available
95150
sleep 30
96151
152+
# Install from TestPyPI
97153
pip install --index-url https://test.pypi.org/simple/ \
98154
--extra-index-url https://pypi.org/simple/ \
99155
SuperQwen
100156
101-
echo "🐍 Testing package import..."
102-
python -c "import SuperQwen; print(f'✅ Successfully imported SuperQwen v{SuperQwen.__version__}')"
157+
# Test basic import
158+
python -c "
159+
import SuperQwen
160+
print(f'✅ Successfully imported SuperQwen v{SuperQwen.__version__}')
103161
104-
echo "🎤 Testing CLI entry point..."
105-
superqwen --help
162+
# Test CLI entry point
163+
import subprocess
164+
try:
165+
result = subprocess.run(['superqwen', '--help'], capture_output=True, text=True, timeout=10)
166+
if result.returncode == 0:
167+
print('✅ CLI entry point working')
168+
else:
169+
print('⚠️ CLI returned non-zero exit code')
170+
except subprocess.TimeoutExpired:
171+
print('⚠️ CLI command timed out')
172+
except Exception as e:
173+
print(f'⚠️ CLI test failed: {e}')
174+
"
106175
107176
echo "✅ Installation test completed successfully!"

0 commit comments

Comments
 (0)