83 lines
1.6 KiB
JavaScript
83 lines
1.6 KiB
JavaScript
/*
|
|
Create draft release
|
|
Assert HTTP 200
|
|
Upload release.zip
|
|
Upload system.json
|
|
*/
|
|
import { createReadStream } from "fs";
|
|
import axios from "axios";
|
|
|
|
const {
|
|
TAG,
|
|
REPO,
|
|
TOKEN,
|
|
API_URL: API,
|
|
} = process.env;
|
|
|
|
async function uploadFile(releaseID, localPath, remoteName = undefined) {
|
|
remoteName ??= localPath.split(`/`).at(-1);
|
|
const stream = createReadStream(localPath);
|
|
return axios.post(
|
|
`${API}/repos/${REPO}/releases/${releaseID}/assets`,
|
|
{
|
|
attachment: stream,
|
|
},
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${TOKEN}`,
|
|
"Content-Type": `multipart/form-data`,
|
|
"X-GitHub-Api-Version": `2022-11-28`,
|
|
},
|
|
params: { name: remoteName },
|
|
}
|
|
);
|
|
};
|
|
|
|
async function main() {
|
|
|
|
// Initial Release Data
|
|
const release = await axios.post(
|
|
`${API}/repos/${REPO}/releases`,
|
|
{
|
|
name: TAG,
|
|
tag_name: TAG,
|
|
draft: true,
|
|
generate_release_notes: false,
|
|
make_latest: false,
|
|
},
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${TOKEN}`,
|
|
"X-GitHub-Api-Version": `2022-11-28`,
|
|
},
|
|
}
|
|
);
|
|
|
|
try {
|
|
await uploadFile(release.data.id, `release.zip`);
|
|
await uploadFile(release.data.id, `system.json`);
|
|
} catch (e) {
|
|
console.error(`Failed to upload files, deleting draft release`);
|
|
console.error(e);
|
|
|
|
try {
|
|
await axios.delete(
|
|
`${API}/repos/${REPO}/releases/${release.data.id}`,
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${TOKEN}`,
|
|
"X-GitHub-Api-Version": `2022-11-28`,
|
|
},
|
|
}
|
|
)
|
|
} catch {
|
|
console.error(`Failed to delete draft release`);
|
|
};
|
|
|
|
process.exit(1);
|
|
};
|
|
|
|
console.log(`Release created, and files uploaded successfully!`);
|
|
};
|
|
|
|
main();
|