The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/packages/grafana-toolkit/docker/grafana-plugin-ci-alpine/install/bin/githubRelease.js

153 lines
5.3 KiB

'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var tslib_1 = require('tslib');
var getPluginId_1 = require('../../config/utils/getPluginId');
var pluginValidation_1 = require('../../config/utils/pluginValidation');
var env_1 = require('../../plugins/env');
var path = require('path');
var fs = require('fs');
// @ts-ignore
// import execa = require('execa');
var githubClient_1 = tslib_1.__importDefault(require('./githubClient'));
var resolveContentType = function (extension) {
if (extension.startsWith('.')) {
extension = extension.slice(1);
}
switch (extension) {
case 'zip':
return 'application/zip';
case 'json':
return 'application/json';
case 'sha1':
return 'text/plain';
default:
return 'application/octet-stream';
}
};
var GitHubRelease = /** @class */ (function () {
function GitHubRelease(token, username, repository, releaseNotes, commitHash) {
this.token = token;
this.username = username;
this.repository = repository;
this.releaseNotes = releaseNotes;
this.commitHash = commitHash;
this.git = new githubClient_1.default({
required: true,
repo: repository,
});
}
GitHubRelease.prototype.publishAssets = function (srcLocation, destUrl) {
var _this = this;
// Add the assets. Loop through files in the ci/dist folder and upload each asset.
var files = fs.readdirSync(srcLocation);
return files.map(function (file) {
return tslib_1.__awaiter(_this, void 0, void 0, function () {
var fileStat, fileData;
return tslib_1.__generator(this, function (_a) {
fileStat = fs.statSync(srcLocation + '/' + file);
fileData = fs.readFileSync(srcLocation + '/' + file);
return [
2 /*return*/,
this.git.client.post(destUrl + '?name=' + file, fileData, {
headers: {
'Content-Type': resolveContentType(path.extname(file)),
'Content-Length': fileStat.size,
},
maxContentLength: fileStat.size * 2 * 1024 * 1024,
}),
];
});
});
});
};
GitHubRelease.prototype.release = function () {
var _a, _b, _c, _d;
return tslib_1.__awaiter(this, void 0, void 0, function () {
var ciDir,
distDir,
distContentDir,
pluginJsonFile,
pluginInfo,
PUBLISH_DIR,
commitHash,
latestRelease,
reason_1,
newReleaseResponse,
publishPromises,
reason_2;
return tslib_1.__generator(this, function (_e) {
switch (_e.label) {
case 0:
ciDir = env_1.getCiFolder();
distDir = path.resolve(ciDir, 'dist');
distContentDir = path.resolve(distDir, getPluginId_1.getPluginId());
pluginJsonFile = path.resolve(distContentDir, 'plugin.json');
pluginInfo = pluginValidation_1.getPluginJson(pluginJsonFile).info;
PUBLISH_DIR = path.resolve(env_1.getCiFolder(), 'packages');
commitHash = this.commitHash || ((_a = pluginInfo.build) === null || _a === void 0 ? void 0 : _a.hash);
_e.label = 1;
case 1:
_e.trys.push([1, 5, , 6]);
return [4 /*yield*/, this.git.client.get('releases/tags/v' + pluginInfo.version)];
case 2:
latestRelease = _e.sent();
if (!(latestRelease.data.tag_name === 'v' + pluginInfo.version)) {
return [3 /*break*/, 4];
}
return [4 /*yield*/, this.git.client.delete('releases/' + latestRelease.data.id)];
case 3:
_e.sent();
_e.label = 4;
case 4:
return [3 /*break*/, 6];
case 5:
reason_1 = _e.sent();
if (reason_1.response.status !== 404) {
// 404 just means no release found. Not an error. Anything else though, re throw the error
throw reason_1;
}
return [3 /*break*/, 6];
case 6:
_e.trys.push([6, 9, , 10]);
return [
4 /*yield*/,
this.git.client.post('releases', {
tag_name: 'v' + pluginInfo.version,
target_commitish: commitHash,
name: 'v' + pluginInfo.version,
body: this.releaseNotes,
draft: false,
prerelease: false,
}),
];
case 7:
newReleaseResponse = _e.sent();
publishPromises = this.publishAssets(
PUBLISH_DIR,
'https://uploads.github.com/repos/' +
this.username +
'/' +
this.repository +
'/releases/' +
newReleaseResponse.data.id +
'/assets'
);
return [4 /*yield*/, Promise.all(publishPromises)];
case 8:
_e.sent();
return [3 /*break*/, 10];
case 9:
reason_2 = _e.sent();
console.log(reason_2);
// Rethrow the error so that we can trigger a non-zero exit code to circle-ci
throw reason_2;
case 10:
return [2 /*return*/];
}
});
});
};
return GitHubRelease;
})();
exports.GitHubRelease = GitHubRelease;
//# sourceMappingURL=githubRelease.js.map7027e10521e9