Skip to content
Snippets Groups Projects
getLatestVersion.js 1.18 KiB
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)
      })
  }
}