import axios from "axios"; import semver from "semver"; export default async function ({ siteVersion, projectId, includePrerelease = false, versions = null }) { const filterResult = (data) => { const versionRange = `~${siteVersion}` const suitableVersions = data .filter(({name}) => semver.satisfies(name, versionRange, {includePrerelease})) .map(({name}) => name) .sort() const result_version = semver.maxSatisfying(suitableVersions, versionRange, {includePrerelease}) console.log('Get version for project: %s, requested version: %s, includePrerelease: %s, available versions: %s, selected version: %s', projectId, siteVersion, includePrerelease, suitableVersions, result_version) return result_version } if (siteVersion === 'latest') { return 'latest' } else if (versions) { return filterResult(versions.map((name) => { return {name} })) } else { return axios.get(`https://git.fitko.de/api/v4/projects/${projectId}/repository/tags`) .catch((error) => { throw `Fetching of latest tags failed with ${error.response.status}` }) .then(async ({data}) => { return filterResult(await data) }) } }