1
- name : Python Wheels
1
+ name : Release
2
2
3
3
on :
4
- push :
5
- branches : ["main"]
6
- tags :
7
- - " **"
8
- pull_request :
9
4
workflow_dispatch :
5
+ inputs :
6
+ following_version :
7
+ description : " The post (dev) version to set"
8
+ dry_run :
9
+ description : " Dry Run?"
10
+ default : false
11
+ type : boolean
12
+ schedule :
13
+ - cron : ' 30 5 * * *'
14
+
15
+ env :
16
+ # Changes per repo
17
+ PRODUCT_NAME : Flask-PyMongo
18
+ # Constant
19
+ # inputs will be empty on a scheduled run. so, we only set dry_run
20
+ # to 'false' when the input is set to 'false'.
21
+ DRY_RUN : ${{ ! contains(inputs.dry_run, 'false') }}
22
+ FOLLOWING_VERSION : ${{ inputs.following_version || '' }}
10
23
11
24
concurrency :
12
25
group : wheels-${{ github.ref }}
@@ -17,83 +30,84 @@ defaults:
17
30
shell : bash -eux {0}
18
31
19
32
jobs :
20
-
21
- build_dist :
22
- name : Build Distribution Files
33
+ pre-publish :
34
+ environment : release
23
35
runs-on : ubuntu-latest
36
+ if : github.repository_owner == 'mongodb-labs' || github.event_name == 'workflow_dispatch'
37
+ permissions :
38
+ id-token : write
39
+ contents : write
40
+ outputs :
41
+ version : ${{ steps.pre-publish.outputs.version }}
24
42
steps :
25
- - uses : actions/ checkout@v4
43
+ - uses : mongodb-labs/drivers-github-tools/secure- checkout@v2
26
44
with :
27
- fetch-depth : 0
28
- persist-credentials : false
29
-
30
- - uses : actions/setup-python@v5
45
+ app_id : ${{ vars.APP_ID }}
46
+ private_key : ${{ secrets.APP_PRIVATE_KEY }}
47
+ - uses : mongodb-labs/drivers-github-tools/setup@v2
31
48
with :
32
- # Build sdist on lowest supported Python
33
- python-version : ' 3.9'
34
-
35
- - name : Install build
36
- run : |
37
- python -m pip install build
38
-
39
- - name : build the dist files
40
- run : |
41
- python -m build .
42
-
43
- - name : Upload the dist files
44
- uses : actions/upload-artifact@v4
49
+ aws_role_arn : ${{ secrets.AWS_ROLE_ARN }}
50
+ aws_region_name : ${{ vars.AWS_REGION_NAME }}
51
+ aws_secret_id : ${{ secrets.AWS_SECRET_ID }}
52
+ artifactory_username : ${{ vars.ARTIFACTORY_USERNAME }}
53
+ - uses : mongodb-labs/drivers-github-tools/python-labs/pre-publish@v2
54
+ id : pre-publish
45
55
with :
46
- name : dist-${{ github.run_id }}
47
- path : ./dist/*.*
56
+ dry_run : ${{ env.DRY_RUN }}
48
57
49
- test_dist :
50
- needs : [build_dist]
51
- name : Test Distribution Files
52
- runs-on : ubuntu-latest
53
- steps :
54
- - uses : actions/checkout@v4
55
- with :
56
- fetch-depth : 0
57
- persist-credentials : false
58
-
59
- - uses : actions/setup-python@v5
60
- with :
61
- # Build sdist on lowest supported Python
62
- python-version : ' 3.9'
63
-
64
- - name : Download the dists
65
- uses : actions/download-artifact@v4
66
- with :
67
- name : dist-${{ github.run_id }}
68
- path : dist/
69
-
70
- - name : Test the sdist
71
- run : |
72
- cd dist
73
- pip install *.tar.gz
74
- python -c "import flask_pymongo"
75
- pip uninstall -y flask_pymongo
76
-
77
- - name : Test the wheel
78
- run : |
79
- cd dist
80
- pip install *.whl
81
- python -c "import flask_pymongo"
82
- pip uninstall -y flask_pymongo
58
+ build-dist :
59
+ needs : [pre-publish]
60
+ uses : ./.github/workflows/dist-python.yml
61
+ with :
62
+ ref : ${{ needs.pre-publish.outputs.version }}
83
63
84
64
publish :
85
65
# https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/#publishing-the-distribution-to-pypi
86
- needs : [test_dist ]
87
- if : startsWith (github.ref, 'refs/tags/')
66
+ needs : [build-dist ]
67
+ if : (github.repository_owner == 'mongodb-labs' && github.event_name != 'pull_request') || github.event_name == 'workflow_dispatch'
88
68
runs-on : ubuntu-latest
89
69
environment : release
90
70
permissions :
91
71
id-token : write
92
72
steps :
93
- - name : Download the dists
73
+ - name : Download all the dists
94
74
uses : actions/download-artifact@v4
95
75
with :
96
- name : dist-${{ github.run_id }}
76
+ name : all- dist-${{ github.run_id }}
97
77
path : dist/
78
+ - name : Publish package distributions to TestPyPI
79
+ uses : pypa/gh-action-pypi-publish@release/v1
80
+ with :
81
+ repository-url : https://test.pypi.org/legacy/
82
+ skip-existing : true
83
+ attestations : ${{ !startsWith(github.ref, 'refs/tags/') }}
98
84
- name : Publish distribution 📦 to PyPI
85
+ if : startsWith(github.ref, 'refs/tags/')
99
86
uses : pypa/gh-action-pypi-publish@release/v1
87
+
88
+ post-publish :
89
+ needs : [publish]
90
+ runs-on : ubuntu-latest
91
+ environment : release
92
+ permissions :
93
+ id-token : write
94
+ contents : write
95
+ attestations : write
96
+ security-events : write
97
+ steps :
98
+ - uses : mongodb-labs/drivers-github-tools/secure-checkout@v2
99
+ with :
100
+ app_id : ${{ vars.APP_ID }}
101
+ private_key : ${{ secrets.APP_PRIVATE_KEY }}
102
+ - uses : mongodb-labs/drivers-github-tools/setup@v2
103
+ with :
104
+ aws_role_arn : ${{ secrets.AWS_ROLE_ARN }}
105
+ aws_region_name : ${{ vars.AWS_REGION_NAME }}
106
+ aws_secret_id : ${{ secrets.AWS_SECRET_ID }}
107
+ artifactory_username : ${{ vars.ARTIFACTORY_USERNAME }}
108
+ - uses : mongodb-labs/drivers-github-tools/python-labs/post-publish@v2
109
+ with :
110
+ following_version : ${{ env.FOLLOWING_VERSION }}
111
+ product_name : ${{ env.PRODUCT_NAME }}
112
+ token : ${{ github.token }}
113
+ dry_run : ${{ env.DRY_RUN }}
0 commit comments