private async getHighestVersionsForMajor()

in src/common/github-service.ts [110:137]


  private async getHighestVersionsForMajor(major: number, minorCount: number): Promise<string[]> {
    const allLabelsResponse = await this.octokit.search.labels({
      repository_id: this.repoId as number,
      q: `v${major}.`,
      per_page: 100,
      sort: 'created',
      order: 'desc',
    });

    const labels = allLabelsResponse.data.items
      .map(({ name }) => semver.parse(name))
      .filter((v): v is semver.SemVer => v !== null);

    if (!labels.length) {
      return [];
    }

    const highestMinor = labels.reduce((highest, current) => Math.max(current.minor, highest), 0);
    // Create an array listing the highest x minors (x === minorCount), like [15, 14, 13].
    // It will make sure this never goes below 0.
    const highestMinors = uniq(
      [...Array(minorCount)].map((_, idx) => Math.max(0, highestMinor - idx))
    );

    return labels
      .filter((label) => label.major === major && highestMinors.includes(label.minor))
      .map((label) => `v${label.version}`);
  }