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 : python-bsonjs
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,94 @@ 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.10'
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
45
- with :
46
- name : dist-${{ github.run_id }}
47
- path : ./dist/*.*
48
-
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
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
60
55
with :
61
- # Build sdist on lowest supported Python
62
- python-version : ' 3.10'
56
+ dry_run : ${{ env.DRY_RUN }}
63
57
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 pymongo_voyageai"
75
- pip uninstall -y pymongo_voyageai
58
+ build-dist :
59
+ needs : [pre-publish]
60
+ uses : ./.github/workflows/dist.yml
61
+ permissions :
62
+ contents : read
63
+ with :
64
+ ref : ${{ needs.pre-publish.outputs.version }}
76
65
77
- - name : Test the wheel
78
- run : |
79
- cd dist
80
- pip install *.whl
81
- python -c "import pymongo_voyageai"
82
- pip uninstall -y pymongo_voyageai
66
+ static-scan :
67
+ needs : [pre-publish]
68
+ uses : ./.github/workflows/codeql.yml
69
+ permissions :
70
+ contents : read
71
+ with :
72
+ ref : ${{ needs.pre-publish.outputs.version }}
83
73
84
74
publish :
85
75
# 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/')
76
+ needs : [build-dist, static-scan ]
77
+ if : (github.repository_owner == 'mongodb-labs' && github.event_name != 'pull_request') || github.event_name == 'workflow_dispatch'
88
78
runs-on : ubuntu-latest
89
79
environment : release
90
80
permissions :
91
81
id-token : write
92
82
steps :
93
- - name : Download the dists
83
+ - name : Download all the dists
94
84
uses : actions/download-artifact@v4
95
85
with :
96
- name : dist-${{ github.run_id }}
86
+ name : all- dist-${{ github.run_id }}
97
87
path : dist/
88
+ - name : Publish package distributions to TestPyPI
89
+ uses : pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # release/v1
90
+ with :
91
+ repository-url : https://test.pypi.org/legacy/
92
+ skip-existing : true
93
+ attestations : ${{ env.DRY_RUN }}
98
94
- name : Publish distribution 📦 to PyPI
99
- uses : pypa/gh-action-pypi-publish@release/v1
95
+ if : startsWith(env.DRY_RUN, 'false')
96
+ uses : pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # release/v1
97
+
98
+ post-publish :
99
+ needs : [publish]
100
+ runs-on : ubuntu-latest
101
+ environment : release
102
+ permissions :
103
+ id-token : write
104
+ contents : write
105
+ attestations : write
106
+ security-events : write
107
+ steps :
108
+ - uses : mongodb-labs/drivers-github-tools/secure-checkout@v2
109
+ with :
110
+ app_id : ${{ vars.APP_ID }}
111
+ private_key : ${{ secrets.APP_PRIVATE_KEY }}
112
+ - uses : mongodb-labs/drivers-github-tools/setup@v2
113
+ with :
114
+ aws_role_arn : ${{ secrets.AWS_ROLE_ARN }}
115
+ aws_region_name : ${{ vars.AWS_REGION_NAME }}
116
+ aws_secret_id : ${{ secrets.AWS_SECRET_ID }}
117
+ artifactory_username : ${{ vars.ARTIFACTORY_USERNAME }}
118
+ - uses : mongodb-labs/drivers-github-tools/python-labs/post-publish@v2
119
+ with :
120
+ following_version : ${{ env.FOLLOWING_VERSION }}
121
+ product_name : ${{ env.PRODUCT_NAME }}
122
+ token : ${{ github.token }}
123
+ dry_run : ${{ env.DRY_RUN }}
0 commit comments