export async function fetchPreviousVersion()

in packages/@aws-cdk-testing/cli-integ/lib/github.ts [4:47]


export async function fetchPreviousVersion(token: string, options?: {
  priorTo?: string;
  majorVersion?: string;
}) {
  const github = new Octokit({ auth: token });
  const releases = await github.repos.listReleases({
    owner: 'aws',
    repo: 'aws-cdk',
  });

  // this returns a list in descending order, newest releases first
  // opts for same major version where possible, falling back otherwise
  // to previous major versions.
  let previousMVRelease = undefined;
  for (const release of releases.data) {
    const version = release.name?.replace('v', '');
    if (!version) {
      continue;
    }

    // Any old version is fine
    if (!options?.majorVersion && !options?.priorTo) {
      return version;
    }

    if (options?.majorVersion && `${semver.major(version)}` === options.majorVersion) {
      return version;
    }

    if (options?.priorTo && semver.lt(version, options?.priorTo) && semver.major(version) === semver.major(options.priorTo)) {
      return version;
    }

    // Otherwise return the most recent version that didn't match any
    if (!previousMVRelease) {
      previousMVRelease = version;
    }
  }
  if (previousMVRelease) {
    return previousMVRelease;
  }

  throw new Error(`Unable to find previous version given ${JSON.stringify(options)}`);
}