Make ActionState available to getDownloadUrl

This commit is contained in:
Michael B. Gale
2026-09-28 19:32:12 +01:00
parent 62a2268b34
commit fc2d2f7d2d
4 changed files with 60 additions and 55 deletions

View File

@@ -415,19 +415,17 @@ async function getCliVersionFromFeatures(
* Determines the URL of the proxy release asset that we should download if its not
* already in the toolcache, and its version.
*
* @param logger The logger to use.
* @param features Information about enabled features.
* @param action The action state.
* @returns Returns the download URL and version of the proxy package we plan to use.
*/
export async function getDownloadUrl(
logger: Logger,
features: FeatureEnablement,
action: ActionState<["Base", "Logger", "FeatureFlags"]>,
): Promise<{ url: string; version: string }> {
// Default to linux64 if we don't recognise the platform+arch pair.
// This maintains the behaviour we had before switching to `getBundlePlatform` here.
let platform = getBundlePlatform();
let platform = getBundlePlatform(action.platform, action.arch);
if (platform === undefined) {
logger.warning(
action.logger.warning(
`Unsupported platform ${process.platform} on architecture ${process.arch}, defaulting to ${BundlePlatform.Linux64}`,
);
platform = BundlePlatform.Linux64;
@@ -436,14 +434,14 @@ export async function getDownloadUrl(
const proxyPackage = getProxyPackage(platform);
try {
const useFeaturesToDetermineCLI = await features.getValue(
const useFeaturesToDetermineCLI = await action.features.getValue(
Feature.StartProxyUseFeaturesRelease,
);
// Retrieve information about the CLI version we should use. This will be either the linked
// version, or the one enabled by FFs.
const versionInfo = useFeaturesToDetermineCLI
? (await getCliVersionFromFeatures(features)).enabledVersions[0]
? (await getCliVersionFromFeatures(action.features)).enabledVersions[0]
: {
cliVersion: defaults.cliVersion,
tagName: defaults.bundleVersion,
@@ -455,7 +453,7 @@ export async function getDownloadUrl(
// Search the release's assets to find the one we are looking for.
for (const asset of cliRelease.data.assets) {
if (asset.name === proxyPackage) {
logger.info(
action.logger.info(
`Found '${proxyPackage}' in release '${versionInfo.tagName}' at '${asset.url}'`,
);
return {
@@ -468,13 +466,13 @@ export async function getDownloadUrl(
}
}
} catch (ex) {
logger.warning(
action.logger.warning(
`Failed to retrieve information about the linked release: ${getErrorMessage(ex)}`,
);
}
// Fallback to the hard-coded URL.
logger.info(
action.logger.info(
`Did not find '${proxyPackage}' in the linked release, falling back to hard-coded version.`,
);
return {
@@ -567,15 +565,15 @@ export function getProxyFilename() {
* runner's tool cache. Otherwise, it downloads and extracts the proxy binary,
* and stores it in the tool cache.
*
* @param logger The logger to use.
* @param action The action state.
* @returns The path to the proxy binary.
*/
export async function getProxyBinaryPath(
logger: Logger,
features: FeatureEnablement,
action: ActionState<["Base", "Logger", "FeatureFlags"]>,
): Promise<string> {
const logger = action.logger;
const proxyFileName = getProxyFilename();
const proxyInfo = await getDownloadUrl(logger, features);
const proxyInfo = await getDownloadUrl(action);
let proxyBin = toolcache.find(proxyFileName, proxyInfo.version);
if (!proxyBin) {