@@ -8,9 +8,35 @@ const child_process = require('child_process');
88const supportedCombination = [ "darwin-amd64" , "linux-amd64" , "linux-arm64" , "linux-ppc64le" ] ;
99const installedBinary = [ "kubectl" , "kube-apiserver" , "kubebuilder" , "etcd" ] ;
1010
11+ function execSync ( command ) {
12+ child_process . execSync ( command , { shell : '/bin/bash' } ) ;
13+ }
14+
1115async function run ( ) {
1216 try {
1317 const version = core . getInput ( 'version' ) ;
18+ const kubebuilderOnly = core . getInput ( 'kubebuilderOnly' ) === 'true' ;
19+ let etcdVersion = core . getInput ( 'etcdVersion' ) ;
20+ let kubernetesVersion = core . getInput ( 'kubernetesVersion' ) ;
21+ const majorVersion = version . split ( "." ) [ 0 ] ;
22+
23+ if ( kubebuilderOnly && etcdVersion ) {
24+ core . warning ( "kubebuilderOnly is activated. etcdVersion will not be respected." ) ;
25+ } else if ( ! kubebuilderOnly && etcdVersion && ! majorVersion > 2 ) {
26+ core . warning ( "Requested kubebuilder major version is less than 3. etcdVersion will not be respected." ) ;
27+ } else if ( ! kubebuilderOnly && ! ! ! etcdVersion ) {
28+ core . info ( "No etcdVersion specified. Going to use the default one." ) ;
29+ etcdVersion = 'v3.2.32' ;
30+ }
31+
32+ if ( kubebuilderOnly && kubernetesVersion ) {
33+ core . warning ( "kubebuilderOnly is activated. kubernetesVersion will not be respected." ) ;
34+ } else if ( ! kubebuilderOnly && kubernetesVersion && ! majorVersion > 2 ) {
35+ core . warning ( "Requested kubebuilder major version is less than 3. kubernetesVersion will not be respected." ) ;
36+ } else if ( ! kubebuilderOnly && ! ! ! kubernetesVersion ) {
37+ core . info ( "No kubernetesVersion specified. Going to use the latest one." ) ;
38+ }
39+
1440 const osPlat = os . platform ( ) ;
1541 var osArch = os . arch ( ) ;
1642 if ( osArch === "x64" ) {
@@ -23,9 +49,47 @@ async function run() {
2349 core . info ( `Going to install kubebuilder ${ version } for ${ osPlat } -${ osArch } ` ) ;
2450
2551 const downloadUrl = `https://go.kubebuilder.io/dl/${ version } /${ osPlat } /${ osArch } ` ;
26- child_process . execSync ( `curl -L ${ downloadUrl } | tar -xz -C /tmp/` , { shell : '/bin/bash' } )
27- child_process . execSync ( `sudo mv /tmp/kubebuilder_${ version } _${ osPlat } _${ osArch } / /usr/local/kubebuilder/` , { shell : '/bin/bash' } )
28- child_process . execSync ( `ls -la /usr/local/kubebuilder/bin` , { shell : '/bin/bash' } )
52+
53+ if ( majorVersion > 2 ) {
54+ core . debug ( `MajorVersion is greater than 2` ) ;
55+ execSync ( `sudo mkdir -p /usr/local/kubebuilder/bin` ) ;
56+ execSync ( `sudo curl -L ${ downloadUrl } -o /usr/local/kubebuilder/bin/kubebuilder` ) ;
57+ execSync ( `sudo chmod +x /usr/local/kubebuilder/bin/kubebuilder` ) ;
58+ if ( ! kubebuilderOnly ) {
59+ // Install kubectl and kube-apiserver
60+ [ "kubectl" , "kube-apiserver" ] . map ( ( binary ) => {
61+ if ( kubernetesVersion ) {
62+ core . info ( `Going to install ${ binary } ${ kubernetesVersion } ` ) ;
63+ execSync ( `curl -LO "https://dl.k8s.io//release/${ kubernetesVersion } /bin/${ osPlat } /${ osArch } /${ binary } "` ) ;
64+ } else {
65+ core . info ( `Going to install ${ binary } in latest version` ) ;
66+ execSync ( `curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/${ osPlat } /${ osArch } /${ binary } "` ) ;
67+ }
68+ execSync ( `chmod +x ${ binary } ` ) ;
69+ execSync ( `sudo mv ${ binary } /usr/local/kubebuilder/bin` ) ;
70+ } )
71+ // Install etcd
72+ core . info ( `Going to install etcd ${ etcdVersion } ` ) ;
73+ execSync ( `curl -L https://github.com/etcd-io/etcd/releases/download/${ etcdVersion } /etcd-${ etcdVersion } -${ osPlat } -${ osArch } .tar.gz | tar -xz --strip-components=1 -C /tmp/` ) ;
74+ execSync ( `sudo mv /tmp/etcd /usr/local/kubebuilder/bin` ) ;
75+ } else {
76+ core . debug ( `No extra binary will be installed.` ) ;
77+ }
78+ } else {
79+ execSync ( `curl -L ${ downloadUrl } | tar -xz -C /tmp/` ) ;
80+ execSync ( `sudo mv /tmp/kubebuilder_${ version } _${ osPlat } _${ osArch } / /usr/local/kubebuilder/` ) ;
81+ execSync ( `ls -la /usr/local/kubebuilder/bin` ) ;
82+ if ( kubebuilderOnly ) {
83+ installedBinary
84+ . filter ( x => x !== "kubebuilder" )
85+ . map ( x => {
86+ core . info ( `Going to remove ${ x } ` ) ;
87+ execSync ( `sudo rm /usr/local/kubebuilder/bin/${ x } ` ) ;
88+ } ) ;
89+ } else {
90+ core . debug ( `No extra binary will be deleted.` ) ;
91+ }
92+ }
2993
3094 const cachedPath = await tc . cacheDir ( '/usr/local/kubebuilder' , 'kubebuilder' , version ) ;
3195 core . addPath ( cachedPath ) ;
@@ -34,4 +98,4 @@ async function run() {
3498 }
3599}
36100
37- run ( )
101+ run ( ) ;
0 commit comments