diff --git a/.github/workflows/selftest.yml b/.github/workflows/selftest.yml index 2908ed0..aa43acc 100644 --- a/.github/workflows/selftest.yml +++ b/.github/workflows/selftest.yml @@ -8,7 +8,7 @@ jobs: strategy: fail-fast: false matrix: - os: ['ubuntu', 'macos'] # TODO: add windows + os: ['ubuntu', 'macos', 'windows'] name: on ${{ matrix.os }} runs-on: ${{ matrix.os }}-latest diff --git a/index.js b/index.js index 8fa3c3c..78324b0 100644 --- a/index.js +++ b/index.js @@ -4,36 +4,40 @@ const fs = require("fs") const { execSync } = require("child_process") async function downloadRelease(octokit, os, org, repo, release, token) { + const postfix = `_${os}_amd64.${os === "windows" ? "zip" : "tar.gz"}`; + const tempdir = os === "windows" ? process.env.TEMP + "\\" : "/tmp/"; + const extract = os === "windows" ? "tar -xvf" : "tar -xvzf"; + const archive = `${tempdir}gotestfmt${postfix}`; const releaseAssets = await octokit.rest.repos.listReleaseAssets({ owner: org, repo: repo, release_id: release.id, }) - tarPostfix = `_${os}_amd64.tar.gz` + for (let asset of releaseAssets.data) { console.log("Examining release asset " + asset.name + " at " + asset.browser_download_url + " ...") - if (asset.name.endsWith(tarPostfix)) { - console.log("Found Linux binary named " + asset.name + " at " + asset.browser_download_url + " , attempting download...") + if (asset.name.endsWith(postfix)) { + console.log("Found binary named " + asset.name + " at " + asset.browser_download_url + " , attempting download...") if (token) { - execSync("curl -L -o /tmp/gotestfmt.tar.gz -H \"Authorization: Bearer " + token + "\" " + asset.browser_download_url) + execSync(`curl -L -o ${archive} -H "Authorization: Bearer ${token}" ${asset.browser_download_url}`) } else { - execSync("curl -L -o /tmp/gotestfmt.tar.gz " + asset.browser_download_url) + execSync(`curl -L -o ${archive} ${asset.browser_download_url}`) } - console.log("Creating /usr/local/lib/gotestfmt directory...") - execSync("sudo mkdir -p /usr/local/lib/gotestfmt") - console.log("Unpacking tar file...") - execSync("cd /usr/local/lib/gotestfmt && sudo tar -xvzf /tmp/gotestfmt.tar.gz") - console.log("Removing tarball...") - fs.unlinkSync("/tmp/gotestfmt.tar.gz") - console.log("Creating /usr/local/bin directory if it does not exist already...") - execSync("sudo mkdir -p /usr/local/bin") - console.log("Linking gotestfmt...") - execSync("sudo ln -s /usr/local/lib/gotestfmt/gotestfmt /usr/local/bin/gotestfmt") + + console.log("Unpacking archive file...") + core.addPath(process.env.GITHUB_WORKSPACE) + process.chdir(process.env.GITHUB_WORKSPACE) + execSync(`${extract} "${archive}"`) + + console.log("Removing asset archive...") + fs.unlinkSync(archive) + console.log("Successfully set up gotestfmt.") return } } - throw `No release asset matched postfix '${tarPostfix}'.` + + throw `No release asset matched postfix '${postfix}'.` } async function downloadGofmt(octokit, version, versionPrefix, os, org, repo, token) { @@ -73,8 +77,16 @@ async function downloadGofmt(octokit, version, versionPrefix, os, org, repo, tok } async function determineOS() { - const os = execSync("uname").toString().trim().toLowerCase() + const uname = execSync("uname") + + let os = uname.toString().trim().toLowerCase() + if (os.indexOf("msys_nt") === 0) + { + os = "windows"; + } + console.log(`Running on OS '${os}'`) + return os }