|
|
|
@ -20,6 +20,7 @@ on:
|
|
|
|
|
|
|
|
|
|
env:
|
|
|
|
|
DESTDIR: "./bin"
|
|
|
|
|
K3S_VERSION: "v1.21.2-k3s1"
|
|
|
|
|
|
|
|
|
|
jobs:
|
|
|
|
|
build:
|
|
|
|
@ -133,20 +134,67 @@ jobs:
|
|
|
|
|
-
|
|
|
|
|
name: Install k3s
|
|
|
|
|
if: matrix.driver == 'kubernetes'
|
|
|
|
|
uses: debianmaster/actions-k3s@b9cf3f599fd118699a3c8a0d18a2f2bda6cf4ce4
|
|
|
|
|
id: k3s
|
|
|
|
|
uses: actions/github-script@v6
|
|
|
|
|
with:
|
|
|
|
|
version: v1.21.2-k3s1
|
|
|
|
|
script: |
|
|
|
|
|
const fs = require('fs');
|
|
|
|
|
|
|
|
|
|
let wait = function(milliseconds) {
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
if (typeof(milliseconds) !== 'number') {
|
|
|
|
|
throw new Error('milleseconds not a number');
|
|
|
|
|
}
|
|
|
|
|
setTimeout(() => resolve("done!"), milliseconds)
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const kubeconfig="/tmp/buildkit-k3s/kubeconfig.yaml";
|
|
|
|
|
core.info(`storing kubeconfig in ${kubeconfig}`);
|
|
|
|
|
|
|
|
|
|
await exec.exec('docker', ["run", "-d",
|
|
|
|
|
"--privileged",
|
|
|
|
|
"--name=buildkit-k3s",
|
|
|
|
|
"-e", "K3S_KUBECONFIG_OUTPUT="+kubeconfig,
|
|
|
|
|
"-e", "K3S_KUBECONFIG_MODE=666",
|
|
|
|
|
"-v", "/tmp/buildkit-k3s:/tmp/buildkit-k3s",
|
|
|
|
|
"-p", "6443:6443",
|
|
|
|
|
"-p", "80:80",
|
|
|
|
|
"-p", "443:443",
|
|
|
|
|
"-p", "8080:8080",
|
|
|
|
|
"rancher/k3s:${{ env.K3S_VERSION }}", "server"
|
|
|
|
|
]);
|
|
|
|
|
await wait(10000);
|
|
|
|
|
|
|
|
|
|
core.exportVariable('KUBECONFIG', kubeconfig);
|
|
|
|
|
|
|
|
|
|
let nodeName;
|
|
|
|
|
for (let count = 1; count <= 5; count++) {
|
|
|
|
|
try {
|
|
|
|
|
const nodeNameOutput = await exec.getExecOutput("kubectl get nodes --no-headers -oname");
|
|
|
|
|
nodeName = nodeNameOutput.stdout
|
|
|
|
|
} catch (error) {
|
|
|
|
|
core.info(`Unable to resolve node name (${error.message}). Attempt ${count} of 5.`)
|
|
|
|
|
} finally {
|
|
|
|
|
if (nodeName) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
await wait(5000);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!nodeName) {
|
|
|
|
|
throw new Error(`Unable to resolve node name after 5 attempts.`);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await exec.exec(`kubectl wait --for=condition=Ready ${nodeName}`);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
core.setFailed(error.message);
|
|
|
|
|
}
|
|
|
|
|
-
|
|
|
|
|
name: Config k3s
|
|
|
|
|
name: Print KUBECONFIG
|
|
|
|
|
if: matrix.driver == 'kubernetes'
|
|
|
|
|
run: |
|
|
|
|
|
(set -x ; cat ${{ steps.k3s.outputs.kubeconfig }})
|
|
|
|
|
-
|
|
|
|
|
name: Check k3s nodes
|
|
|
|
|
if: matrix.driver == 'kubernetes'
|
|
|
|
|
run: |
|
|
|
|
|
kubectl get nodes
|
|
|
|
|
yq ${{ env.KUBECONFIG }}
|
|
|
|
|
-
|
|
|
|
|
name: Launch remote buildkitd
|
|
|
|
|
if: matrix.driver == 'remote'
|
|
|
|
|