-
Notifications
You must be signed in to change notification settings - Fork 0
138 lines (119 loc) · 3.55 KB
/
Copy pathrelease.yml
File metadata and controls
138 lines (119 loc) · 3.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
name: Release
on:
push:
tags:
- "v*"
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.14"
cache: pip
- name: Install packaging tools
run: |
python -m pip install --upgrade pip
python -m pip install build twine
- name: Build distributions
run: python -m build
- name: Check built metadata
run: python -m twine check dist/*
- name: Upload release artifacts
uses: actions/upload-artifact@v6
with:
name: python-package-distributions
path: dist/*
github-release:
runs-on: ubuntu-latest
needs: build
permissions:
contents: write
steps:
- name: Download build artifacts
uses: actions/download-artifact@v5
with:
name: python-package-distributions
path: dist
- name: Create or update GitHub release
uses: actions/github-script@v8
env:
TAG_NAME: ${{ github.ref_name }}
with:
script: |
const fs = require("fs");
const path = require("path");
const { owner, repo } = context.repo;
const tag = process.env.TAG_NAME;
let release;
try {
release = await github.rest.repos.getReleaseByTag({
owner,
repo,
tag,
});
} catch (error) {
if (error.status !== 404) {
throw error;
}
release = await github.rest.repos.createRelease({
owner,
repo,
tag_name: tag,
name: tag,
generate_release_notes: true,
});
}
const releaseId = release.data.id;
const existingAssets = await github.rest.repos.listReleaseAssets({
owner,
repo,
release_id: releaseId,
per_page: 100,
});
for (const asset of existingAssets.data) {
const assetPath = path.join("dist", asset.name);
if (fs.existsSync(assetPath)) {
await github.rest.repos.deleteReleaseAsset({
owner,
repo,
asset_id: asset.id,
});
}
}
for (const fileName of fs.readdirSync("dist")) {
const filePath = path.join("dist", fileName);
const stats = fs.statSync(filePath);
await github.rest.repos.uploadReleaseAsset({
owner,
repo,
release_id: releaseId,
name: fileName,
data: fs.readFileSync(filePath),
headers: {
"content-type": "application/octet-stream",
"content-length": stats.size,
},
});
}
pypi-publish:
runs-on: ubuntu-latest
needs: build
if: vars.PYPI_PUBLISH == 'true'
permissions:
id-token: write
environment:
name: pypi
url: https://pypi.org/project/opensky-cli/
steps:
- name: Download build artifacts
uses: actions/download-artifact@v5
with:
name: python-package-distributions
path: dist
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1