mirror of
https://github.com/GoTestTools/gotestfmt-action.git
synced 2026-02-08 00:37:27 +00:00
Fix installation on Windows runners (#10)
* Correctly identify windows os Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Prevent darwin from being reported as Linux Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Remove unix specific logging and determine .zip extension on windows Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Add selftest on windows Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Run self test on all push events (for testing) Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Inline postfix declaration Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Separate extension detection from postfix Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Correctly avoid assignment to const variable Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Make postfix constant Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Prevent curl from assuming tar.gz format Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Refactor download stage * Separate logical steps * Use string interpolation for curl command Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Use environment defined temp path Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Fix missing `$` Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Correct all references to hardcoded filename Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Attempt debugging missing download Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Restore original console loggers Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * USe GOOs Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Extract binary directly to GOPATH rather than hardcoded lib path Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Properly log GOOS detection Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Remove GOOS detection as GOOS not in environment Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Replace GOPATH with system dependent lib path Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Fix windows path separator problems Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Simplify archive path Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Fix escape character Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Use more meaningful name for binpath Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Fix whitespace Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Add debugger lines Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Add debugger lines for executed commands Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Use console debug instead of log Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Use program files as binpath Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Add install directory to path Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Remove debuggers Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Fix os check Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Remove redundant pathsep variable Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Add documentation comments Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Fix missing path separators Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Explicitly echo bin path into GITHUB_PATH Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Quote bin path when `cd`ing into it to avoid shell globbing Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Ensure bin path exists Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Attempt to prevent existing directories causing problems Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Use core.addPath to add binpath to job's PATH Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Attempt to use pre-existing lib path instead of creating new one Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Add debugger for PATH variable Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * List System32 files to look for gotestfmt binary Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Remove debugger Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Manually setup binpath and add it to system path Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * List PATH targets for debugging Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Add debuggers for userprofile Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * List install target's contents Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * List files recursively and verbosely Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Search `/bin` specifically Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Only manually add the binpath on windows Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * List all PATHs Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Split on correct separator Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Don't force the directory to exist/into PATH Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Attempt to create custom binpath in windows Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Fix mkdir invocation Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Create all path components Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * List all files in target directory Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Try using pwsh for Windows runner Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Try using exe for pwsh Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Remove testing step Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * List files extracted to bin path Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Expand debugger Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * List files in temporary directory Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * List files in current directory Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Rather than changing directories, specify target to tar command Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Quote parameters to tar command Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Specify target directory before target files Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Move extracted binary manually Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Add callback to file move Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Use system defined target file Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Correct interpolation Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Copy binfile instead of renaming to prevent cross-device linking Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * List installed files Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Use binfile in final success log message Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Remove explicit path separator Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Specify fs.constants.COPYFILE_EXCL copy mode Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Extract archive directly into workspace Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Remove redundant `binfile` variable Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Remove debugger Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * List all files in workspace Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Remove debugging steps Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> * Remove inline comments This is per @engelmi's comment: https://github.com/GoTestTools/gotestfmt-action/pull/10/files#r1017614705 Signed-off-by: Y. Meyer-Norwood <106889957+norwd@users.noreply.github.com> Signed-off-by: Yuri Norwood <106889957+norwd@users.noreply.github.com> Signed-off-by: Y. Meyer-Norwood <106889957+norwd@users.noreply.github.com>
This commit is contained in:
parent
19aa3d4945
commit
ed11bda1c4
2 changed files with 30 additions and 18 deletions
2
.github/workflows/selftest.yml
vendored
2
.github/workflows/selftest.yml
vendored
|
|
@ -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
|
||||
|
|
|
|||
46
index.js
46
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
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue