|
6 | 6 | workflow_dispatch: |
7 | 7 | inputs: |
8 | 8 | test_pypi: |
9 | | - description: 'Publish to TestPyPI instead of PyPI' |
| 9 | + description: 'Publish to TestPyPI (allowed from any branch) instead of PyPI (main branch only)' |
10 | 10 | required: false |
11 | 11 | default: false |
12 | 12 | type: boolean |
13 | 13 |
|
14 | | -# Only allow publishing from main branch |
| 14 | +# Branch protection: Only production PyPI requires main branch |
| 15 | +# TestPyPI publishing allowed from any branch |
15 | 16 | env: |
16 | 17 | PUBLISH_BRANCH: main |
17 | 18 |
|
18 | 19 | jobs: |
19 | | - # Block publishing from non-main branches |
| 20 | + # Branch validation: Enforce main for PyPI, allow any branch for TestPyPI |
20 | 21 | check-branch: |
21 | 22 | name: Check Branch Protection |
22 | 23 | runs-on: ubuntu-latest |
23 | 24 | if: github.event_name == 'release' || github.event_name == 'workflow_dispatch' |
24 | 25 | steps: |
25 | 26 | - uses: actions/checkout@v4 |
26 | 27 |
|
27 | | - - name: Verify main branch |
| 28 | + - name: Verify branch requirements |
28 | 29 | run: | |
29 | 30 | CURRENT_BRANCH=${GITHUB_REF#refs/heads/} |
| 31 | + IS_TEST_PYPI="${{ github.event.inputs.test_pypi || 'false' }}" |
| 32 | + IS_RELEASE="${{ github.event_name == 'release' }}" |
| 33 | + |
30 | 34 | echo "Current branch: $CURRENT_BRANCH" |
31 | | - echo "Required branch: ${{ env.PUBLISH_BRANCH }}" |
| 35 | + echo "Required branch for PyPI: ${{ env.PUBLISH_BRANCH }}" |
| 36 | + echo "Publishing to TestPyPI: $IS_TEST_PYPI" |
| 37 | + echo "Release event: $IS_RELEASE" |
| 38 | + |
| 39 | + # Allow TestPyPI publishing from any branch |
| 40 | + if [ "$IS_TEST_PYPI" = "true" ]; then |
| 41 | + echo "✅ TestPyPI publishing allowed from any branch ($CURRENT_BRANCH)" |
| 42 | + echo "✅ Branch check passed - proceeding with TestPyPI publish" |
| 43 | + exit 0 |
| 44 | + fi |
32 | 45 | |
| 46 | + # For production PyPI, require main branch |
33 | 47 | if [ "$CURRENT_BRANCH" != "${{ env.PUBLISH_BRANCH }}" ]; then |
34 | | - echo "❌ ERROR: Publishing is only allowed from the '${{ env.PUBLISH_BRANCH }}' branch" |
| 48 | + echo "❌ ERROR: Production PyPI publishing is only allowed from the '${{ env.PUBLISH_BRANCH }}' branch" |
35 | 49 | echo "Current branch is: $CURRENT_BRANCH" |
36 | | - echo "Please create a release from the main branch or switch to main before manual publish" |
| 50 | + echo "" |
| 51 | + echo "Options:" |
| 52 | + echo "1. Switch to main branch for production PyPI publishing" |
| 53 | + echo "2. Use 'test_pypi: true' to publish to TestPyPI from this branch" |
| 54 | + echo "3. Create a release from the main branch" |
37 | 55 | exit 1 |
38 | 56 | fi |
39 | 57 | |
40 | | - echo "✅ Branch check passed - proceeding with publish" |
| 58 | + echo "✅ Production PyPI branch check passed - proceeding with PyPI publish" |
41 | 59 |
|
42 | 60 | # Ensure CI passes before allowing publish |
43 | 61 | check-ci: |
|
0 commit comments