1717 - beta
1818 - rc
1919 - release
20+ publish-to :
21+ description : " Where to publish the package to"
22+ type : choice
23+ default : " none"
24+ options :
25+ - none
26+ - all
27+ - pypi-test
28+ - pypi-prod
2029
2130env :
2231 PYTHON_VERSION : " 3.13"
3039 contents : write
3140 env :
3241 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
42+ outputs :
43+ version : ${{steps.gen-buildnum.outputs.version}}
44+ version-with-buildnum : ${{steps.gen-buildnum.outputs.version-with-buildnum}}
45+ version-variant-raw : ${{steps.gen-buildnum.outputs.variant-raw}}
3346 steps :
3447 - name : " Checkout code"
3548 uses : actions/checkout@v4
@@ -39,34 +52,87 @@ jobs:
3952 with :
4053 build-variant : ${{ inputs.build-variant }}
4154 - name : " Tag repository"
42- # Tagging is part of the build number generation in part because
43- # tag uniqueness serves as a synchronization mechanism to prevent
44- # multiple releases of the same version.
55+ # Tagging is part of the build number generation at the start of the
56+ # pipeline because tag uniqueness serves as a synchronization
57+ # mechanism to prevent multiple releases of the same version.
4558 run : |
4659 set -x
4760 git config --global user.email "[email protected] " 4861 git config --global user.name "CICD for github repository ${GITHUB_REPOSITORY}"
4962 if [ "${{ steps.gen-buildnum.outputs.variant-raw }}" = "release" ]
5063 then
51- git tag -a -m "test tag comment for final release " "${{steps.gen-buildnum.outputs.version}}"
52- git push origin "${{steps.gen-buildnum.outputs.version}}"
64+ git tag -a -m "Tagging from release orchestration pipeline " "${{steps.gen-buildnum.outputs.version}}"
65+ git push origin "${{steps.gen-buildnum.outputs.version}}"
5366 fi
54- git tag -a -m "test tag comment " "${{steps.gen-buildnum.outputs.version-with-buildnum}}"
55- git push origin "${{steps.gen-buildnum.outputs.version-with-buildnum}}"
67+ git tag -a -m "Tagging from release orchestration pipeline " "${{steps.gen-buildnum.outputs.version-with-buildnum}}"
68+ git push origin "${{steps.gen-buildnum.outputs.version-with-buildnum}}"
5669 test :
5770 name : " Prerelease Tests"
5871 uses : ./.github/workflows/test.yml
59- needs : generate-build-number # Doesn't really need it, but gates the pipeline to not waste time.
72+ # We do not really need the build number, but this gates the job so we do not waste
73+ # time testing a build that is attempting an illegal clobbering of a released version.
74+ needs : generate-build-number
75+ generate-release :
76+ name : " Create Github Release"
77+ runs-on : ubuntu-latest
78+ needs : [test, generate-build-number]
79+ permissions : write-all
80+ env :
81+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
82+ steps :
83+ - name : " Create Github Release (Version candidate release)"
84+ # if: needs.generate-build-number.outputs.version-variant-raw != 'release'
85+ uses : actions/create-release@v1
86+ with :
87+ tag_name : " ${{ needs.generate-build-number.outputs.version-with-buildnum }}"
88+ release_name : " ${{ needs.generate-build-number.outputs.version-with-buildnum }}"
89+ draft : false
90+ prerelease : ${{ inputs.version-prerelease }}
91+ - name : " Create Github Release (Final version release)"
92+ if : needs.generate-build-number.outputs.version-variant-raw == 'release'
93+ uses : actions/create-release@v1
94+ with :
95+ tag_name : " ${{ needs.generate-build-number.outputs.version }}"
96+ release_name : " ${{ needs.generate-build-number.outputs.version }}"
97+ draft : false
98+ prerelease : ${{ inputs.version-prerelease }}
6099 package :
61100 name : " Build Release Artifacts"
62101 uses : ./.github/workflows/release-build.yml
63102 needs : [test, generate-build-number]
64103 publish :
65104 name : " Publish Release Artifacts"
66105 uses : ./.github/workflows/release-publish.yml
67- needs : [package, generate-build-number]
106+ needs : [package, generate-release, generate-build-number]
107+ with :
108+ publish-to : ${{inputs.publish-to}}
68109 secrets :
69110 PYPI_API_TOKEN : ${{ secrets.PYPI_API_TOKEN }}
70111 PYPI_API_TOKEN_TEST : ${{ secrets.PYPI_API_TOKEN_TEST }}
71- # with:
72- # version-with-buildnumber: ${{needs.generate-build-number.outputs.version-with-buildnum}}
112+ publish-2 :
113+ # Python trusted publishing does not currently support
114+ # reusable workflows. I really would prefer this be part
115+ # of "uses: ./.github/workflows/release-publish.yml" for
116+ # better encapsulation.
117+ # See https://github.com/pypi/warehouse/issues/11096
118+ name : " Publish Release Artifacts (Trusted)"
119+ needs : [package, generate-release, generate-build-number]
120+ if : inputs.publish-to == 'pypi-prod' || inputs.publish-to == 'all'
121+ runs-on : ubuntu-latest
122+ environment : pypi-prod
123+ permissions :
124+ # Needed for Trusted Publishing
125+ id-token : write
126+ steps :
127+ - name : " Download Wheel Package"
128+ uses : actions/download-artifact@v4
129+ with :
130+ name : planet-auth-wheel
131+ path : dist
132+ - name : " Download Source Package"
133+ uses : actions/download-artifact@v4
134+ with :
135+ name : planet-auth-src-targz
136+ path : dist
137+ - name : " Trusted Publishing - Publish to PyPi (Production)"
138+ uses : pypa/gh-action-pypi-publish@release/v1
0 commit comments