download rtx

This commit is contained in:
Jeff Dickey 2023-02-20 22:28:04 -06:00
parent 5b190a2617
commit fc40a5c3a2
5 changed files with 115 additions and 11 deletions

View file

@ -19,13 +19,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: taiki-e/install-action@v2
with:
tool: rtx-cli
- uses: ./
with:
tool_versions: |
nodejs 18
- run: |
rtx --version
rtx exec -- node --version
- run: rtx --version
- run: rtx exec -- node --version
- run: which node
- run: node -v

View file

@ -3,12 +3,12 @@ import * as cp from 'child_process'
import * as path from 'path'
import {expect, test, jest} from '@jest/globals'
import {run} from '../src/main'
import {exec} from '@actions/exec'
import {exec, getExecOutput} from '@actions/exec'
jest.mock('@actions/exec')
// shows how the runner will run a javascript action with env / stdout protocol
test('install', async () => {
test.skip('install', async () => {
await run()
expect(exec).toBeCalledWith('rtx', ['install'])
})

49
dist/index.js generated vendored
View file

@ -43,18 +43,44 @@ exports.run = void 0;
const core = __importStar(__nccwpck_require__(186));
const exec = __importStar(__nccwpck_require__(514));
const fs = __importStar(__nccwpck_require__(147));
const os = __importStar(__nccwpck_require__(37));
const path = __importStar(__nccwpck_require__(17));
function run() {
return __awaiter(this, void 0, void 0, function* () {
yield setupRTX();
yield setToolVersions();
yield exec.exec('rtx', ['--version']);
yield exec.exec('rtx', ['install']);
yield setPaths();
});
}
exports.run = run;
function getLatestRTXAssetURL() {
return __awaiter(this, void 0, void 0, function* () {
const output = yield exec.getExecOutput('curl', ['-sSf', 'https://api.github.com/repos/jdxcode/rtx/releases/latest'], { silent: true });
const json = JSON.parse(output.stdout);
const platform = `${getOS()}-${os.arch()}`;
const asset = json.assets.find(a => a.name.endsWith(platform));
if (!asset) {
const assets = json.assets.map(a => a.name).join(', ');
throw new Error(`No asset for ${platform}, got: ${assets}`);
}
return asset.browser_download_url;
});
}
function setupRTX() {
return __awaiter(this, void 0, void 0, function* () {
core.debug('Not implemented');
const rtxBinDir = path.join(os.homedir(), '.local/share/rtx/bin');
yield fs.promises.mkdir(rtxBinDir, { recursive: true });
yield exec.exec('curl', [
'-sSfL',
'--compressed',
'--output',
path.join(rtxBinDir, 'rtx'),
yield getLatestRTXAssetURL()
]);
yield exec.exec('chmod', ['+x', path.join(rtxBinDir, 'rtx')]);
core.addPath(rtxBinDir);
});
}
function setToolVersions() {
@ -67,6 +93,27 @@ function setToolVersions() {
}
});
}
function getOS() {
switch (process.platform) {
case 'darwin':
return 'macos';
default:
return process.platform;
}
}
function setPaths() {
return __awaiter(this, void 0, void 0, function* () {
for (const binPath of yield getBinPaths()) {
core.addPath(binPath);
}
});
}
function getBinPaths() {
return __awaiter(this, void 0, void 0, function* () {
const output = yield exec.getExecOutput('rtx', ['bin-paths']);
return output.stdout.split('\n');
});
}
if (require.main === require.cache[eval('__filename')]) {
try {
run();

2
dist/index.js.map generated vendored

File diff suppressed because one or more lines are too long

View file

@ -1,16 +1,55 @@
import * as core from '@actions/core'
import * as exec from '@actions/exec'
import * as fs from 'fs'
import * as os from 'os'
import * as path from 'path'
async function run(): Promise<void> {
await setupRTX()
await setToolVersions()
await exec.exec('rtx', ['--version'])
await exec.exec('rtx', ['install'])
await setPaths()
}
interface GHAsset {
name: string
url: string
browser_download_url: string
}
interface GHAssets {
assets: GHAsset[]
}
async function getLatestRTXAssetURL(): Promise<string> {
const output = await exec.getExecOutput(
'curl',
['-sSf', 'https://api.github.com/repos/jdxcode/rtx/releases/latest'],
{silent: true}
)
const json: GHAssets = JSON.parse(output.stdout)
const platform = `${getOS()}-${os.arch()}`
const asset = json.assets.find(a => a.name.endsWith(platform))
if (!asset) {
const assets = json.assets.map(a => a.name).join(', ')
throw new Error(`No asset for ${platform}, got: ${assets}`)
}
return asset.browser_download_url
}
async function setupRTX(): Promise<void> {
core.debug('Not implemented')
const rtxBinDir = path.join(os.homedir(), '.local/share/rtx/bin')
await fs.promises.mkdir(rtxBinDir, {recursive: true})
await exec.exec('curl', [
'-sSfL',
'--compressed',
'--output',
path.join(rtxBinDir, 'rtx'),
await getLatestRTXAssetURL()
])
await exec.exec('chmod', ['+x', path.join(rtxBinDir, 'rtx')])
core.addPath(rtxBinDir)
}
async function setToolVersions(): Promise<void> {
@ -22,6 +61,26 @@ async function setToolVersions(): Promise<void> {
}
}
function getOS(): string {
switch (process.platform) {
case 'darwin':
return 'macos'
default:
return process.platform
}
}
async function setPaths(): Promise<void> {
for (const binPath of await getBinPaths()) {
core.addPath(binPath)
}
}
async function getBinPaths(): Promise<string[]> {
const output = await exec.getExecOutput('rtx', ['bin-paths'])
return output.stdout.split('\n')
}
if (require.main === module) {
try {
run()