text: const os = require('os')
  const fs = require('fs')
  const util = require('util')
  const stream = require('stream')
  const crypto = require('crypto')
  const core = require('@actions/core')
  const { performance } = require('perf_hooks')
  
  export async function measure(name, block) {
    return await core.group(name, async () => {
      const start = performance.now()
      try {
        return await block()
      } finally {
        const end = performance.now()
        const duration = (end - start) / 1000.0
        console.log(`Took ${duration.toFixed(2).padStart(6)} seconds`)
      }
    })
  }
  
  export function isHeadVersion(rubyVersion) {
    return rubyVersion === 'head' || rubyVersion === 'debug' || rubyVersion === 'mingw' || rubyVersion === 'mswin'
  }
  
  export async function hashFile(file) {
    // See https://github.com/actions/runner/blob/master/src/Misc/expressionFunc/hashFiles/src/hashFiles.ts
    const hash = crypto.createHash('sha256')
    const pipeline = util.promisify(stream.pipeline)
    await pipeline(fs.createReadStream(file), hash)
    return hash.digest('hex')
  }
  
  export function getVirtualEnvironmentName() {
    const platform = os.platform()
    if (platform === 'linux') {
      return `ubuntu-${findUbuntuVersion()}`
    } else if (platform === 'darwin') {
      return 'macos-latest'
    } else if (platform === 'win32') {
      return 'windows-latest'
    } else {
      throw new Error(`Unknown platform ${platform}`)
    }
  }
  
  function findUbuntuVersion() {
    const lsb_release = fs.readFileSync('/etc/lsb-release', 'utf8')
    const match = lsb_release.match(/^DISTRIB_RELEASE=(\d+\.\d+)$/m)
    if (match) {
      return match[1]
    } else {
      throw new Error('Could not find Ubuntu version')
    }
  }
  
  // convert windows path like C:\Users\runneradmin to /c/Users/runneradmin
  export function win2nix(path) { 
    if (/^[A-Z]:/i.test(path)) {
      // path starts with drive
      path = `/${path[0].toLowerCase()}${path.split(':', 2)[1]}`
    }
    return path.replace(/\\/g, '/').replace(/ /g, '\\ ')
  }
  