setup-opentofu/lib/releases.js
Dmitry Kisler 01bef202d2
feat: ported action definition from setup-terraform
Signed-off-by: Dmitry Kisler <admin@dkisler.com>
2023-10-05 01:15:05 +02:00

62 lines
1.5 KiB
JavaScript

/**
* Copyright (c) OpenTofu
* SPDX-License-Identifier: MPL-2.0
*/
class Build {
constructor (name, url) {
this.name = name;
this.url = url;
}
}
class Release {
constructor (releaseMeta) {
this.version = releaseMeta.tag_name.replace('v', '');
this.builds = releaseMeta.assets.map(asset => new Build(asset.name, asset.browser_download_url));
}
getBuild (platform, arch) {
const requiredName = `tofu_${this.version}_${platform}_${arch}.zip`;
return this.builds.find(build => build.name === requiredName);
}
}
/**
* Fetches the top 30 releases sorted in desc order.
*
*/
async function fetchReleases () {
const url = 'https://api.github.com/repos/opentofu/opentofu/releases';
const resp = await fetch(url, {
headers: {
Accept: 'application/vnd.github+json',
'X-GitHub-Api-Version': '2022-11-28'
}
});
if (!resp.ok) {
throw Error('failed fetching releases');
}
const releasesMeta = await resp.json();
return releasesMeta.map(releaseMeta => new Release(releaseMeta));
}
/**
* Fetches the release given the version.
*
* @param {string} version: Release version.
*/
async function getRelease (version) {
const releases = await fetchReleases();
return releases.find(release => release.version === version);
}
// Note that the export is defined as adaptor to replace hashicorp/js-releases
// See: https://github.com/hashicorp/setup-terraform/blob/e192cfcbae6c6ed207c277ed7624131996c9bf13/lib/setup-terraform.js#L15
module.exports = {
getRelease
};