Files
actions-setup-docker-compose/src/install.ts
Kengo TODA c61c6f59f3 feat: Default docker-compose version to latest (#643)
* test: add expected behavior as a test case

Signed-off-by: Kengo TODA <skypencil@gmail.com>

* implement the necessary feature

Signed-off-by: Kengo TODA <skypencil@gmail.com>

* add a missing return type

Signed-off-by: Kengo TODA <skypencil@gmail.com>

* ci: try to run action without GITHUB_TOKEN env var

Signed-off-by: Kengo TODA <skypencil@gmail.com>

* input version is not required

Signed-off-by: Kengo TODA <skypencil@gmail.com>

* update the distributed package

Signed-off-by: Kengo TODA <skypencil@gmail.com>

* fix eslint warning

Signed-off-by: Kengo TODA <skypencil@gmail.com>

* provide GITHUB_TOKEN to create Octokit

Signed-off-by: Kengo TODA <skypencil@gmail.com>

* docs: update README.md

Signed-off-by: Kengo TODA <skypencil@gmail.com>

* docs: update README.md

Signed-off-by: Kengo TODA <skypencil@gmail.com>

* docs: update README.md

Signed-off-by: Kengo TODA <skypencil@gmail.com>

* docs: update README.md

Signed-off-by: Kengo TODA <skypencil@gmail.com>

* update distributions

Signed-off-by: Kengo TODA <skypencil@gmail.com>

Signed-off-by: Kengo TODA <skypencil@gmail.com>
2022-12-25 13:58:23 +08:00

60 lines
1.7 KiB
TypeScript

import {cacheFile, downloadTool} from '@actions/tool-cache'
import {exec} from '@actions/exec'
import * as core from '@actions/core'
import {Octokit} from '@octokit/action'
export async function runCommand(command: string): Promise<string> {
let output = ''
const result = await exec(command, [], {
listeners: {
stdout: (data: Buffer) => {
output += data.toString()
}
}
})
if (result !== 0) {
throw new Error(`Failed to run command: ${command}`)
}
return output.trim()
}
async function installOnLinux(version: string): Promise<string> {
const system = runCommand('uname -s')
const hardware = runCommand('uname -m')
if (!version.startsWith('v') && parseInt(version.split('.')[0], 10) >= 2) {
version = `v${version}`
}
const url = `https://github.com/docker/compose/releases/download/${version}/docker-compose-${await system}-${await hardware}`
const installerPath = await downloadTool(url)
await exec(`chmod +x ${installerPath}`)
const cachedPath = await cacheFile(
installerPath,
'docker-compose',
'docker-compose',
version
)
return cachedPath
}
async function findLatestVersion(): Promise<string> {
const octokit = new Octokit()
const response = await octokit.repos.getLatestRelease({
owner: 'docker',
repo: 'compose'
})
return response.data.tag_name
}
export async function install(version: string): Promise<string> {
if (version === 'latest') {
version = await findLatestVersion()
core.info(`Requested to use the latest version: ${version}`)
}
switch (process.platform) {
case 'linux':
return installOnLinux(version)
default:
throw new Error(`Unsupported platform: ${process.platform}`)
}
}