mirror of
https://github.com/ZGCA-Forge/Elevator.git
synced 2025-12-15 13:34:44 +00:00
190 lines
5.2 KiB
YAML
190 lines
5.2 KiB
YAML
name: Publish to PyPI
|
|
|
|
on:
|
|
release:
|
|
types: [published]
|
|
workflow_dispatch:
|
|
inputs:
|
|
test_pypi:
|
|
description: 'Publish to Test PyPI instead of PyPI'
|
|
required: false
|
|
default: 'false'
|
|
type: boolean
|
|
|
|
jobs:
|
|
test:
|
|
name: Run tests before publish
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: '3.12'
|
|
|
|
# - name: Install dependencies
|
|
# run: |
|
|
# python -m pip install --upgrade pip
|
|
# pip install -e .
|
|
|
|
# - name: Run comprehensive tests
|
|
# run: |
|
|
# python -m pytest --cov=msgcenterpy --cov-fail-under=80
|
|
|
|
# - name: Run linting
|
|
# run: |
|
|
# black --check msgcenterpy tests
|
|
# isort --check-only msgcenterpy tests
|
|
# mypy msgcenterpy
|
|
|
|
build:
|
|
name: Build package
|
|
runs-on: ubuntu-latest
|
|
needs: test
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: '3.12'
|
|
|
|
# - name: Install build dependencies
|
|
# run: |
|
|
# python -m pip install --upgrade pip
|
|
# pip install build twine check-manifest
|
|
|
|
# - name: Verify version consistency
|
|
# run: |
|
|
# # 检查版本号一致性
|
|
# VERSION=$(python -c "import elevator_saga; print(elevator_saga.__version__)" 2>/dev/null || echo "unknown")
|
|
# TAG_VERSION="${GITHUB_REF#refs/tags/v}"
|
|
# if [ "$GITHUB_EVENT_NAME" = "release" ]; then
|
|
# if [ "$VERSION" != "$TAG_VERSION" ]; then
|
|
# echo "Version mismatch: package=$VERSION, tag=$TAG_VERSION"
|
|
# exit 1
|
|
# fi
|
|
# fi
|
|
|
|
# - name: Check manifest
|
|
# run: check-manifest
|
|
|
|
- name: Install build dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install build twine check-manifest
|
|
|
|
- name: Build package
|
|
run: |
|
|
python -m build
|
|
|
|
# - name: Check package
|
|
# run: |
|
|
# twine check dist/*
|
|
|
|
- name: Upload build artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: dist-${{ github.run_number }}
|
|
path: dist/
|
|
retention-days: 30
|
|
|
|
publish-test:
|
|
name: Publish to Test PyPI
|
|
runs-on: ubuntu-latest
|
|
needs: build
|
|
if: github.event.inputs.test_pypi == 'true' || (github.event_name == 'release' && github.event.release.prerelease)
|
|
environment:
|
|
name: test-pypi
|
|
url: https://test.pypi.org/p/elevator-saga
|
|
|
|
steps:
|
|
- name: Download build artifacts
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: dist-${{ github.run_number }}
|
|
path: dist/
|
|
|
|
- name: Publish to Test PyPI
|
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
with:
|
|
repository-url: https://test.pypi.org/legacy/
|
|
password: ${{ secrets.TEST_PYPI_API_TOKEN }}
|
|
verbose: true
|
|
|
|
publish-pypi:
|
|
name: Publish to PyPI
|
|
runs-on: ubuntu-latest
|
|
needs: build
|
|
if: github.event_name == 'release' && !github.event.release.prerelease && github.event.inputs.test_pypi != 'true'
|
|
environment:
|
|
name: pypi
|
|
url: https://pypi.org/p/elevator-saga
|
|
|
|
steps:
|
|
- name: Download build artifacts
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: dist-${{ github.run_number }}
|
|
path: dist/
|
|
|
|
- name: Publish to PyPI
|
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
with:
|
|
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
verbose: true
|
|
|
|
create-github-release-assets:
|
|
name: Add assets to GitHub release
|
|
runs-on: ubuntu-latest
|
|
needs: build
|
|
if: github.event_name == 'release'
|
|
|
|
steps:
|
|
- name: Download build artifacts
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: dist-${{ github.run_number }}
|
|
path: dist/
|
|
|
|
- name: Upload release assets
|
|
uses: softprops/action-gh-release@v1
|
|
with:
|
|
files: dist/*
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
post-publish:
|
|
name: Post-publish tasks
|
|
runs-on: ubuntu-latest
|
|
needs: [publish-pypi, publish-test]
|
|
if: always() && (needs.publish-pypi.result == 'success' || needs.publish-test.result == 'success')
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Create deployment summary
|
|
run: |
|
|
echo "## 🚀 Deployment Summary" >> $GITHUB_STEP_SUMMARY
|
|
echo "| Item | Status |" >> $GITHUB_STEP_SUMMARY
|
|
echo "|------|--------|" >> $GITHUB_STEP_SUMMARY
|
|
|
|
if [ "${{ needs.publish-pypi.result }}" = "success" ]; then
|
|
echo "| PyPI | ✅ Published |" >> $GITHUB_STEP_SUMMARY
|
|
elif [ "${{ needs.publish-test.result }}" = "success" ]; then
|
|
echo "| Test PyPI | ✅ Published |" >> $GITHUB_STEP_SUMMARY
|
|
fi
|
|
|
|
echo "| GitHub Release | ✅ Assets uploaded |" >> $GITHUB_STEP_SUMMARY
|
|
echo "| Version | ${{ github.event.release.tag_name || 'test' }} |" >> $GITHUB_STEP_SUMMARY
|
|
|
|
# 为将来的通知预留
|
|
- name: Notify team
|
|
run: |
|
|
echo "Package published successfully!"
|
|
# 可以添加 Slack、Discord 等通知
|
|
|