-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.js
103 lines (92 loc) · 3 KB
/
index.js
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
// const releases = require('./releases.json');
const _ = require('lodash');
const fetch = require('node-fetch');
const core = require('@actions/core');
const github = require('@actions/github');
new Promise((resolve, reject) => {
let org = core.getInput('userOrg');
let auth_token = core.getInput('token');
let package_name = core.getInput('package');
let pattern = core.getInput('pattern');
let result_packages = [];
let request = `/orgs/${org}/packages/npm/${package_name}/versions`;
send_request(request, 'GET', {
"per_page": 100
}, auth_token)
.then((response) => {
if (response.statusCode > 399) {
return reject(new Error(`${response.statusCode}: ${response.json.message}`));
}
return response.json;
})
.then((response_json) => {
_.forEach(response_json, (package_entry) => {
if (package_entry.name.indexOf(pattern) !== -1) {
result_packages.push({
"name": package_entry.name,
"id": package_entry.id
});
}
});
return delete_packages(result_packages, org, package_name, auth_token);
});
})
.then((packages_deleted) => {
console.log(`Deleted ${packages_deleted} package versions`);
core.setOutput("num_deleted", packages_deleted);
})
.catch((error) => {
console.error(error);
});
function delete_packages(result_packages, org, package_name, auth_token) {
let num_packages = result_packages.length;
let total_packages_deleted = 0;
return new Promise((resolve, reject) => {
_.forEach(result_packages, (package_entry) => {
send_request(`/orgs/${org}/packages/npm/${package_name}/versions/${package_entry.id}`, 'DELETE', null, auth_token)
.then((response) => {
console.log(`Status of request: ${response.statusCode}`);
total_packages_deleted++;
if (total_packages_deleted === num_packages) {
resolve(num_packages);
}
})
.catch((error) => {
reject(error);
});
});
});
}
function send_request(path, method, body, auth_token) {
// Pull data from github
const base_url = "https://api.github.com";
const accept_header = "application/vnd.github.v3+json";
const url = new URL(path, base_url);
console.log(`Making ${method} request to: ${url}`);
return fetch(url, {
headers: {
'Accept': accept_header,
'Authorization': `token ${auth_token}`
},
method: method,
body: method !== 'GET' && body !== null ? JSON.stringify(body) : null,
})
.then((response) => {
return new Promise((resolve, reject) => {
if (response.status === 204 || response.body === null) {
resolve({
statusCode: response.status,
body: null
});
return;
}
response.json()
.then((resulting_json) => {
resolve({
statusCode: response.status,
json: resulting_json
});
});
});
});
}