Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 40 additions & 45 deletions dist/main.js

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions dist/main.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "flytectl-setup-action",
"version": "0.0.3",
"version": "0.0.4",
"description": "Install and setup flytectl for use in other actions ",
"main": "src/main.js",
"scripts": {
Expand Down
43 changes: 35 additions & 8 deletions src/flytectl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,17 @@ import { Error, isError } from './error';
// versionPrefix is used in Github release names, and can
// optionally be specified in the action's version parameter.
const versionPrefix = "v";
const releasesPerPage = 100;

interface ReleaseAsset {
name: string;
browser_download_url: string;
}

interface Release {
tag_name: string;
assets: ReleaseAsset[];
}

export async function getFlytectl(version: string): Promise<string | Error> {
const binaryPath = tc.find('flytectl', version, os.arch());
Expand Down Expand Up @@ -69,13 +80,7 @@ async function getDownloadURL(version: string): Promise<string | Error> {

const assetName = `flytectl_${platform}_${architecture}.tar.gz`
const octokit = new Octokit();
const { data: releases } = await octokit.request(
'GET /repos/{owner}/{repo}/releases',
{
owner: 'flyteorg',
repo: 'flyte',
}
);
const releases = await getAllFlyteReleases(octokit);
// Filter out releases for which the tags do not have the prefix `flytectl/`
const filteredReleases = releases.filter((release) => release.tag_name.startsWith('flytectl/'));
switch (version) {
Expand All @@ -102,6 +107,29 @@ async function getDownloadURL(version: string): Promise<string | Error> {
};
}

async function getAllFlyteReleases(octokit: Octokit): Promise<Release[]> {
const releases: Release[] = [];
let page = 1;

for (;;) {
const response = await octokit.request('GET /repos/{owner}/{repo}/releases', {
owner: 'flyteorg',
repo: 'flyte',
per_page: releasesPerPage,
page,
});
const currentPageReleases = response.data as Release[];

releases.push(...currentPageReleases);
if (currentPageReleases.length < releasesPerPage) {
break;
}
page += 1;
}

return releases;
}

function releaseTagIsVersion(releaseTag: string, version: string): boolean {
// Remove the prefix `flytectl/` from releaseTag if it exists
if (releaseTag.indexOf('flytectl/') === 0) {
Expand All @@ -116,4 +144,3 @@ function releaseTagIsVersion(releaseTag: string, version: string): boolean {
}
return releaseTag === version
}

Loading