69 lines
2.1 KiB
JavaScript
69 lines
2.1 KiB
JavaScript
// Copyright The ORAS Authors.
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
const os = require('os');
|
|
const core = require('@actions/core');
|
|
const tc = require('@actions/tool-cache');
|
|
|
|
// Map arch to go releaser arch
|
|
// Reference: https://nodejs.org/api/os.html#os_os_arch
|
|
function mapArch(arch) {
|
|
const mappings = {
|
|
arm: 'armv7',
|
|
x64: 'amd64'
|
|
};
|
|
return mappings[arch] || arch;
|
|
}
|
|
|
|
// Map os to go releaser os
|
|
// Reference: https://nodejs.org/api/os.html#os_os_platform
|
|
function mapOS(os) {
|
|
const mappings = {
|
|
win32: 'windows'
|
|
};
|
|
return mappings[os] || os;
|
|
}
|
|
|
|
// Get the URL to download asset
|
|
function getDownloadURL(version) {
|
|
const platform = os.platform();
|
|
const filename = `oras_${version}_${mapOS(platform)}_${mapArch(os.arch())}`;
|
|
const extension = platform === 'win32' ? 'zip' : 'tar.gz';
|
|
return `https://github.com/oras-project/oras/releases/download/v${version}/${filename}.${extension}`;
|
|
}
|
|
|
|
// Download and install ORAS CLI of the specified version
|
|
async function setup() {
|
|
try {
|
|
// Download ORAS CLI of the specified version
|
|
const version = core.getInput('version');
|
|
const donwloadURL = getDownloadURL(version)
|
|
const assetPath = await tc.downloadTool(donwloadURL);
|
|
|
|
// Extract the tarball/zipball onto host runner
|
|
const extract = donwloadURL.endsWith('.zip') ? tc.extractZip : tc.extractTar;
|
|
const pathToCLI = await extract(assetPath);
|
|
|
|
// Expose the tool by adding it to the PATH
|
|
core.addPath(pathToCLI);
|
|
} catch (e) {
|
|
core.setFailed(e);
|
|
}
|
|
}
|
|
|
|
module.exports = setup
|
|
|
|
if (require.main === module) {
|
|
setup();
|
|
}
|