Uh oh!
There was an error while loading. Please reload this page.
forked from ruby/setup-ruby
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathruby-builder.js
More file actions
Latest commit
119 lines (102 loc) · 4.5 KB
/
Copy pathruby-builder.js
File metadata and controls
119 lines (102 loc) · 4.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
constos=require('os')
constfs=require('fs')
constpath=require('path')
constcore=require('@actions/core')
constexec=require('@actions/exec')
constio=require('@actions/io')
consttc=require('@actions/tool-cache')
constcommon=require('./common')
construbyBuilderVersions=require('./ruby-builder-versions')
constbuilderReleaseTag='toolcache'
constreleasesURL='https://github.com/ruby/ruby-builder/releases'
constwindows=common.windows
exportfunctiongetAvailableVersions(platform,engine){
returnrubyBuilderVersions[engine]
}
exportasyncfunctioninstall(platform,engine,version){
letrubyPrefix,inToolCache
if(common.shouldUseToolCache(engine,version)){
inToolCache=common.toolCacheFind(engine,version)
if(inToolCache){
rubyPrefix=inToolCache
}else{
consttoolCacheRubyPrefix=common.getToolCacheRubyPrefix(platform,engine,version)
if(common.isSelfHostedRunner()){
construbyBuildDefinition=engine==='ruby' ? version : `${engine}-${version}`
core.error(
`The current runner (${common.getOSNameVersionArch()}) was detected as self-hosted because ${common.selfHostedRunnerReason()}.\n`+
`In such a case, you should install Ruby in the $RUNNER_TOOL_CACHE yourself, for example using https://github.com/rbenv/ruby-build\n`+
`You can take inspiration from this workflow for more details: https://github.com/ruby/ruby-builder/blob/master/.github/workflows/build.yml\n`+
`$ ruby-build ${rubyBuildDefinition}${toolCacheRubyPrefix}\n`+
`Once that completes successfully, mark it as complete with:\n`+
`$ touch ${common.toolCacheCompleteFile(toolCacheRubyPrefix)}\n`+
`It is your responsibility to ensure installing Ruby like that is not done in parallel.\n`)
process.exit(1)
}else{
rubyPrefix=toolCacheRubyPrefix
}
}
}elseif(windows){
rubyPrefix=path.join(`${common.drive}:`,`${engine}-${version}`)
}else{
rubyPrefix=path.join(os.homedir(),'.rubies',`${engine}-${version}`)
}
// Set the PATH now, so the MSYS2 'tar' is in Path on Windows
common.setupPath([path.join(rubyPrefix,'bin')])
if(!inToolCache){
awaitio.mkdirP(rubyPrefix)
if(engine==='truffleruby+graalvm'){
awaitinstallWithRubyBuild(engine,version,rubyPrefix)
}else{
awaitdownloadAndExtract(platform,engine,version,rubyPrefix)
}
}
returnrubyPrefix
}
asyncfunctioninstallWithRubyBuild(engine,version,rubyPrefix){
consttmp=process.env['RUNNER_TEMP']||os.tmpdir()
construbyBuildDir=path.join(tmp,'ruby-build-for-setup-ruby')
awaitcommon.measure('Cloning ruby-build',async()=>{
awaitexec.exec('git',['clone','https://github.com/rbenv/ruby-build.git',rubyBuildDir])
})
construbyName=`${engine}-${version==='head' ? 'dev' : version}`
awaitcommon.measure(`Installing ${engine}-${version} with ruby-build`,async()=>{
awaitexec.exec(`${rubyBuildDir}/bin/ruby-build`,[rubyName,rubyPrefix])
})
awaitio.rmRF(rubyBuildDir)
}
asyncfunctiondownloadAndExtract(platform,engine,version,rubyPrefix){
constparentDir=path.dirname(rubyPrefix)
constdownloadPath=awaitcommon.measure('Downloading Ruby',async()=>{
consturl=getDownloadURL(platform,engine,version)
console.log(url)
returnawaittc.downloadTool(url)
})
awaitcommon.measure('Extracting Ruby',async()=>{
if(windows){
// Windows 2016 doesn't have system tar, use MSYS2's, it needs unix style paths
awaitexec.exec('tar',['-xz','-C',common.win2nix(parentDir),'-f',common.win2nix(downloadPath)])
}else{
awaitexec.exec('tar',['-xz','-C',parentDir,'-f',downloadPath])
}
})
if(common.shouldUseToolCache(engine,version)){
common.createToolCacheCompleteFile(rubyPrefix)
}
}
functiongetDownloadURL(platform,engine,version){
letbuilderPlatform=platform
if(platform.startsWith('windows-')){
builderPlatform='windows-latest'
}elseif(platform.startsWith('macos-')){
builderPlatform='macos-latest'
}
if(common.isHeadVersion(version)){
returngetLatestHeadBuildURL(builderPlatform,engine,version)
}else{
return`${releasesURL}/download/${builderReleaseTag}/${engine}-${version}-${builderPlatform}.tar.gz`
}
}
functiongetLatestHeadBuildURL(platform,engine,version){
return`https://github.com/ruby/${engine}-dev-builder/releases/latest/download/${engine}-${version}-${platform}.tar.gz`
}