mirror of
https://github.com/docker/setup-buildx-action.git
synced 2026-10-17 12:27:52 +02:00
Merge pull request #164 from crazy-max/node-auth
auth support for tls endpoint
This commit is contained in:
10 files changed
+242
-19
No files matched your search
@@ -20,6 +20,7 @@ ___
|
|||||||
|
|
||||||
* [Usage](#usage)
|
* [Usage](#usage)
|
||||||
* [Advanced usage](#advanced-usage)
|
* [Advanced usage](#advanced-usage)
|
||||||
|
* [Authentication support](docs/advanced/auth.md)
|
||||||
* [Install by default](docs/advanced/install-default.md)
|
* [Install by default](docs/advanced/install-default.md)
|
||||||
* [BuildKit daemon configuration](docs/advanced/buildkit-config.md)
|
* [BuildKit daemon configuration](docs/advanced/buildkit-config.md)
|
||||||
* [Standalone mode](docs/advanced/standalone.md)
|
* [Standalone mode](docs/advanced/standalone.md)
|
||||||
@@ -58,6 +59,7 @@ jobs:
|
|||||||
|
|
||||||
## Advanced usage
|
## Advanced usage
|
||||||
|
|
||||||
|
* [Authentication support](docs/advanced/auth.md)
|
||||||
* [Install by default](docs/advanced/install-default.md)
|
* [Install by default](docs/advanced/install-default.md)
|
||||||
* [BuildKit daemon configuration](docs/advanced/buildkit-config.md)
|
* [BuildKit daemon configuration](docs/advanced/buildkit-config.md)
|
||||||
* [Standalone mode](docs/advanced/standalone.md)
|
* [Standalone mode](docs/advanced/standalone.md)
|
||||||
|
|||||||
@@ -0,0 +1,88 @@
|
|||||||
|
import {describe, expect, jest, test, beforeEach} from '@jest/globals';
|
||||||
|
import * as fs from 'fs';
|
||||||
|
import * as os from 'os';
|
||||||
|
import * as path from 'path';
|
||||||
|
import * as auth from '../src/auth';
|
||||||
|
|
||||||
|
const tmpdir = fs.mkdtempSync(path.join(os.tmpdir(), 'docker-setup-buildx-jest')).split(path.sep).join(path.posix.sep);
|
||||||
|
const dockerConfigHome = path.join(tmpdir, '.docker');
|
||||||
|
const credsdir = path.join(dockerConfigHome, 'buildx', 'creds');
|
||||||
|
|
||||||
|
describe('setCredentials', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
process.env = Object.keys(process.env).reduce((object, key) => {
|
||||||
|
if (!key.startsWith(auth.envPrefix)) {
|
||||||
|
object[key] = process.env[key];
|
||||||
|
}
|
||||||
|
return object;
|
||||||
|
}, {});
|
||||||
|
});
|
||||||
|
|
||||||
|
// prettier-ignore
|
||||||
|
test.each([
|
||||||
|
[
|
||||||
|
'mycontext',
|
||||||
|
'docker-container',
|
||||||
|
{},
|
||||||
|
[],
|
||||||
|
[]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'docker-container://mycontainer',
|
||||||
|
'docker-container',
|
||||||
|
{},
|
||||||
|
[],
|
||||||
|
[]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'tcp://graviton2:1234',
|
||||||
|
'remote',
|
||||||
|
{},
|
||||||
|
[],
|
||||||
|
[]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'tcp://graviton2:1234',
|
||||||
|
'remote',
|
||||||
|
{
|
||||||
|
'BUILDER_NODE_0_AUTH_TLS_CACERT': 'foo',
|
||||||
|
'BUILDER_NODE_0_AUTH_TLS_CERT': 'foo',
|
||||||
|
'BUILDER_NODE_0_AUTH_TLS_KEY': 'foo'
|
||||||
|
},
|
||||||
|
[
|
||||||
|
path.join(credsdir, 'cacert_graviton2-1234.pem'),
|
||||||
|
path.join(credsdir, 'cert_graviton2-1234.pem'),
|
||||||
|
path.join(credsdir, 'key_graviton2-1234.pem')
|
||||||
|
],
|
||||||
|
[
|
||||||
|
`cacert=${path.join(credsdir, 'cacert_graviton2-1234.pem')}`,
|
||||||
|
`cert=${path.join(credsdir, 'cert_graviton2-1234.pem')}`,
|
||||||
|
`key=${path.join(credsdir, 'key_graviton2-1234.pem')}`
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'tcp://graviton2:1234',
|
||||||
|
'docker-container',
|
||||||
|
{
|
||||||
|
'BUILDER_NODE_0_AUTH_TLS_CACERT': 'foo',
|
||||||
|
'BUILDER_NODE_0_AUTH_TLS_CERT': 'foo',
|
||||||
|
'BUILDER_NODE_0_AUTH_TLS_KEY': 'foo'
|
||||||
|
},
|
||||||
|
[
|
||||||
|
path.join(credsdir, 'cacert_graviton2-1234.pem'),
|
||||||
|
path.join(credsdir, 'cert_graviton2-1234.pem'),
|
||||||
|
path.join(credsdir, 'key_graviton2-1234.pem')
|
||||||
|
],
|
||||||
|
[]
|
||||||
|
],
|
||||||
|
])('given %p endpoint', async (endpoint: string, driver: string, envs: Record<string, string>, expectedFiles: Array<string>, expectedOpts: Array<string>) => {
|
||||||
|
fs.mkdirSync(credsdir, {recursive: true});
|
||||||
|
for (const [key, value] of Object.entries(envs)) {
|
||||||
|
process.env[key] = value;
|
||||||
|
}
|
||||||
|
expect(auth.setCredentials(credsdir, 0, driver, endpoint)).toEqual(expectedOpts);
|
||||||
|
expectedFiles.forEach( (file) => {
|
||||||
|
expect(fs.existsSync(file)).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -7,18 +7,14 @@ import * as context from '../src/context';
|
|||||||
import * as semver from 'semver';
|
import * as semver from 'semver';
|
||||||
import * as exec from '@actions/exec';
|
import * as exec from '@actions/exec';
|
||||||
|
|
||||||
const tmpNameSync = path.join('/tmp/.docker-setup-buildx-jest', '.tmpname-jest').split(path.sep).join(path.posix.sep);
|
const tmpdir = fs.mkdtempSync(path.join(os.tmpdir(), 'docker-setup-buildx-')).split(path.sep).join(path.posix.sep);
|
||||||
|
|
||||||
jest.spyOn(context, 'tmpDir').mockImplementation((): string => {
|
jest.spyOn(context, 'tmpDir').mockImplementation((): string => {
|
||||||
const tmpDir = path.join('/tmp/.docker-setup-buildx-jest').split(path.sep).join(path.posix.sep);
|
return tmpdir;
|
||||||
if (!fs.existsSync(tmpDir)) {
|
|
||||||
fs.mkdirSync(tmpDir, {recursive: true});
|
|
||||||
}
|
|
||||||
return tmpDir;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const tmpname = path.join(tmpdir, '.tmpname').split(path.sep).join(path.posix.sep);
|
||||||
jest.spyOn(context, 'tmpNameSync').mockImplementation((): string => {
|
jest.spyOn(context, 'tmpNameSync').mockImplementation((): string => {
|
||||||
return tmpNameSync;
|
return tmpname;
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('isAvailable', () => {
|
describe('isAvailable', () => {
|
||||||
@@ -136,8 +132,8 @@ describe('getConfig', () => {
|
|||||||
config = await buildx.getConfigInline(val);
|
config = await buildx.getConfigInline(val);
|
||||||
}
|
}
|
||||||
expect(true).toBe(!invalid);
|
expect(true).toBe(!invalid);
|
||||||
expect(config).toEqual(`${tmpNameSync}`);
|
expect(config).toEqual(tmpname);
|
||||||
const configValue = fs.readFileSync(tmpNameSync, 'utf-8');
|
const configValue = fs.readFileSync(tmpname, 'utf-8');
|
||||||
expect(configValue).toEqual(exValue);
|
expect(configValue).toEqual(exValue);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
// eslint-disable-next-line jest/no-conditional-expect
|
// eslint-disable-next-line jest/no-conditional-expect
|
||||||
|
|||||||
@@ -4,16 +4,13 @@ import * as os from 'os';
|
|||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as context from '../src/context';
|
import * as context from '../src/context';
|
||||||
|
|
||||||
|
const tmpdir = fs.mkdtempSync(path.join(os.tmpdir(), 'docker-setup-buildx-')).split(path.sep).join(path.posix.sep);
|
||||||
jest.spyOn(context, 'tmpDir').mockImplementation((): string => {
|
jest.spyOn(context, 'tmpDir').mockImplementation((): string => {
|
||||||
const tmpDir = path.join('/tmp/.docker-setup-buildx-jest').split(path.sep).join(path.posix.sep);
|
return tmpdir;
|
||||||
if (!fs.existsSync(tmpDir)) {
|
|
||||||
fs.mkdirSync(tmpDir, {recursive: true});
|
|
||||||
}
|
|
||||||
return tmpDir;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
jest.spyOn(context, 'tmpNameSync').mockImplementation((): string => {
|
jest.spyOn(context, 'tmpNameSync').mockImplementation((): string => {
|
||||||
return path.join('/tmp/.docker-setup-buildx-jest', '.tmpname-jest').split(path.sep).join(path.posix.sep);
|
return path.join(tmpdir, '.tmpname').split(path.sep).join(path.posix.sep);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('getInputList', () => {
|
describe('getInputList', () => {
|
||||||
|
|||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
require('./sourcemap-register.js');(()=>{var e={7351:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!=="default"&&Object.hasOwnProperty.call(e,r))n(t,e,r);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.issue=t.issueCommand=void 0;const s=o(r(2037));const a=r(5278);function issueCommand(e,t,r){const n=new Command(e,t,r);process.stdout.write(n.toString()+s.EOL)}t.issueCommand=issueCommand;function issue(e,t=""){issueCommand(e,{},t)}t.issue=issue;const c="::";class Command{constructor(e,t,r){if(!e){e="missing.command"}this.command=e;this.properties=t;this.message=r}toString(){let e=c+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let t=true;for(const r in this.properties){if(this.properties.hasOwnProperty(r)){const n=this.properties[r];if(n){if(t){t=false}else{e+=","}e+=`${r}=${escapeProperty(n)}`}}}}e+=`${c}${escapeData(this.message)}`;return e}}function escapeData(e){return a.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function escapeProperty(e){return a.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}},2186:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!=="default"&&Object.hasOwnProperty.call(e,r))n(t,e,r);i(t,e);return t};var s=this&&this.__awaiter||function(e,t,r,n){function adopt(e){return e instanceof r?e:new r((function(t){t(e)}))}return new(r||(r=Promise))((function(r,i){function fulfilled(e){try{step(n.next(e))}catch(e){i(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){i(e)}}function step(e){e.done?r(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:true});t.getIDToken=t.getState=t.saveState=t.group=t.endGroup=t.startGroup=t.info=t.notice=t.warning=t.error=t.debug=t.isDebug=t.setFailed=t.setCommandEcho=t.setOutput=t.getBooleanInput=t.getMultilineInput=t.getInput=t.addPath=t.setSecret=t.exportVariable=t.ExitCode=void 0;const a=r(7351);const c=r(717);const l=r(5278);const u=o(r(2037));const d=o(r(1017));const h=r(5840);const p=r(8041);var m;(function(e){e[e["Success"]=0]="Success";e[e["Failure"]=1]="Failure"})(m=t.ExitCode||(t.ExitCode={}));function exportVariable(e,t){const r=l.toCommandValue(t);process.env[e]=r;const n=process.env["GITHUB_ENV"]||"";if(n){const t=`ghadelimiter_${h.v4()}`;if(e.includes(t)){throw new Error(`Unexpected input: name should not contain the delimiter "${t}"`)}if(r.includes(t)){throw new Error(`Unexpected input: value should not contain the delimiter "${t}"`)}const n=`${e}<<${t}${u.EOL}${r}${u.EOL}${t}`;c.issueCommand("ENV",n)}else{a.issueCommand("set-env",{name:e},r)}}t.exportVariable=exportVariable;function setSecret(e){a.issueCommand("add-mask",{},e)}t.setSecret=setSecret;function addPath(e){const t=process.env["GITHUB_PATH"]||"";if(t){c.issueCommand("PATH",e)}else{a.issueCommand("add-path",{},e)}process.env["PATH"]=`${e}${d.delimiter}${process.env["PATH"]}`}t.addPath=addPath;function getInput(e,t){const r=process.env[`INPUT_${e.replace(/ /g,"_").toUpperCase()}`]||"";if(t&&t.required&&!r){throw new Error(`Input required and not supplied: ${e}`)}if(t&&t.trimWhitespace===false){return r}return r.trim()}t.getInput=getInput;function getMultilineInput(e,t){const r=getInput(e,t).split("\n").filter((e=>e!==""));return r}t.getMultilineInput=getMultilineInput;function getBooleanInput(e,t){const r=["true","True","TRUE"];const n=["false","False","FALSE"];const i=getInput(e,t);if(r.includes(i))return true;if(n.includes(i))return false;throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${e}\n`+`Support boolean input list: \`true | True | TRUE | false | False | FALSE\``)}t.getBooleanInput=getBooleanInput;function setOutput(e,t){process.stdout.write(u.EOL);a.issueCommand("set-output",{name:e},t)}t.setOutput=setOutput;function setCommandEcho(e){a.issue("echo",e?"on":"off")}t.setCommandEcho=setCommandEcho;function setFailed(e){process.exitCode=m.Failure;error(e)}t.setFailed=setFailed;function isDebug(Line truncated
|
require('./sourcemap-register.js');(()=>{var e={7351:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!=="default"&&Object.hasOwnProperty.call(e,r))n(t,e,r);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.issue=t.issueCommand=void 0;const s=o(r(2037));const a=r(5278);function issueCommand(e,t,r){const n=new Command(e,t,r);process.stdout.write(n.toString()+s.EOL)}t.issueCommand=issueCommand;function issue(e,t=""){issueCommand(e,{},t)}t.issue=issue;const c="::";class Command{constructor(e,t,r){if(!e){e="missing.command"}this.command=e;this.properties=t;this.message=r}toString(){let e=c+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let t=true;for(const r in this.properties){if(this.properties.hasOwnProperty(r)){const n=this.properties[r];if(n){if(t){t=false}else{e+=","}e+=`${r}=${escapeProperty(n)}`}}}}e+=`${c}${escapeData(this.message)}`;return e}}function escapeData(e){return a.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function escapeProperty(e){return a.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}},2186:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!=="default"&&Object.hasOwnProperty.call(e,r))n(t,e,r);i(t,e);return t};var s=this&&this.__awaiter||function(e,t,r,n){function adopt(e){return e instanceof r?e:new r((function(t){t(e)}))}return new(r||(r=Promise))((function(r,i){function fulfilled(e){try{step(n.next(e))}catch(e){i(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){i(e)}}function step(e){e.done?r(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:true});t.getIDToken=t.getState=t.saveState=t.group=t.endGroup=t.startGroup=t.info=t.notice=t.warning=t.error=t.debug=t.isDebug=t.setFailed=t.setCommandEcho=t.setOutput=t.getBooleanInput=t.getMultilineInput=t.getInput=t.addPath=t.setSecret=t.exportVariable=t.ExitCode=void 0;const a=r(7351);const c=r(717);const l=r(5278);const u=o(r(2037));const d=o(r(1017));const h=r(5840);const p=r(8041);var m;(function(e){e[e["Success"]=0]="Success";e[e["Failure"]=1]="Failure"})(m=t.ExitCode||(t.ExitCode={}));function exportVariable(e,t){const r=l.toCommandValue(t);process.env[e]=r;const n=process.env["GITHUB_ENV"]||"";if(n){const t=`ghadelimiter_${h.v4()}`;if(e.includes(t)){throw new Error(`Unexpected input: name should not contain the delimiter "${t}"`)}if(r.includes(t)){throw new Error(`Unexpected input: value should not contain the delimiter "${t}"`)}const n=`${e}<<${t}${u.EOL}${r}${u.EOL}${t}`;c.issueCommand("ENV",n)}else{a.issueCommand("set-env",{name:e},r)}}t.exportVariable=exportVariable;function setSecret(e){a.issueCommand("add-mask",{},e)}t.setSecret=setSecret;function addPath(e){const t=process.env["GITHUB_PATH"]||"";if(t){c.issueCommand("PATH",e)}else{a.issueCommand("add-path",{},e)}process.env["PATH"]=`${e}${d.delimiter}${process.env["PATH"]}`}t.addPath=addPath;function getInput(e,t){const r=process.env[`INPUT_${e.replace(/ /g,"_").toUpperCase()}`]||"";if(t&&t.required&&!r){throw new Error(`Input required and not supplied: ${e}`)}if(t&&t.trimWhitespace===false){return r}return r.trim()}t.getInput=getInput;function getMultilineInput(e,t){const r=getInput(e,t).split("\n").filter((e=>e!==""));return r}t.getMultilineInput=getMultilineInput;function getBooleanInput(e,t){const r=["true","True","TRUE"];const n=["false","False","FALSE"];const i=getInput(e,t);if(r.includes(i))return true;if(n.includes(i))return false;throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${e}\n`+`Support boolean input list: \`true | True | TRUE | false | False | FALSE\``)}t.getBooleanInput=getBooleanInput;function setOutput(e,t){process.stdout.write(u.EOL);a.issueCommand("set-output",{name:e},t)}t.setOutput=setOutput;function setCommandEcho(e){a.issue("echo",e?"on":"off")}t.setCommandEcho=setCommandEcho;function setFailed(e){process.exitCode=m.Failure;error(e)}t.setFailed=setFailed;function isDebug(Line truncated
|
||||||
/*!
|
/*!
|
||||||
* Tmp
|
* Tmp
|
||||||
*
|
*
|
||||||
@@ -6,5 +6,5 @@ require('./sourcemap-register.js');(()=>{var e={7351:function(e,t,r){"use strict
|
|||||||
*
|
*
|
||||||
* MIT Licensed
|
* MIT Licensed
|
||||||
*/
|
*/
|
||||||
const n=r(7147);const i=r(2037);const o=r(1017);const s=r(6113);const a={fs:n.constants,os:i.constants};const c=r(4959);const l="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",u=/XXXXXX/,d=3,h=(a.O_CREAT||a.fs.O_CREAT)|(a.O_EXCL||a.fs.O_EXCL)|(a.O_RDWR||a.fs.O_RDWR),p=i.platform()==="win32",m=a.EBADF||a.os.errno.EBADF,v=a.ENOENT||a.os.errno.ENOENT,g=448,E=384,y="exit",b=[],w=n.rmdirSync.bind(n),_=c.sync;let O=false;function tmpName(e,t){const r=_parseArguments(e,t),i=r[0],o=r[1];try{_assertAndSanitizeOptions(i)}catch(e){return o(e)}let s=i.tries;(function _getUniqueName(){try{const e=_generateTmpName(i);n.stat(e,(function(t){if(!t){if(s-- >0)return _getUniqueName();return o(new Error("Could not get a unique tmp filename, max tries reached "+e))}o(null,e)}))}catch(e){o(e)}})()}function tmpNameSync(e){const t=_parseArguments(e),r=t[0];_assertAndSanitizeOptions(r);let i=r.tries;do{const e=_generateTmpName(r);try{n.statSync(e)}catch(t){return e}}while(i-- >0);throw new Error("Could not get a unique tmp filename, max tries reached")}function file(e,t){const r=_parseArguments(e,t),i=r[0],o=r[1];tmpName(i,(function _tmpNameCreated(e,t){if(e)return o(e);n.open(t,h,i.mode||E,(function _fileCreated(e,r){if(e)return o(e);if(i.discardDescriptor){return n.close(r,(function _discardCallback(e){return o(e,t,undefined,_prepareTmpFileRemoveCallback(t,-1,i,false))}))}else{const e=i.discardDescriptor||i.detachDescriptor;o(null,t,r,_prepareTmpFileRemoveCallback(t,e?-1:r,i,false))}}))}))}function fileSync(e){const t=_parseArguments(e),r=t[0];const i=r.discardDescriptor||r.detachDescriptor;const o=tmpNameSync(r);var s=n.openSync(o,h,r.mode||E);if(r.discardDescriptor){n.closeSync(s);s=undefined}return{name:o,fd:s,removeCallback:_prepareTmpFileRemoveCallback(o,i?-1:s,r,true)}}function dir(e,t){const r=_parseArguments(e,t),i=r[0],o=r[1];tmpName(i,(function _tmpNameCreated(e,t){if(e)return o(e);n.mkdir(t,i.mode||g,(function _dirCreated(e){if(e)return o(e);o(null,t,_prepareTmpDirRemoveCallback(t,i,false))}))}))}function dirSync(e){const t=_parseArguments(e),r=t[0];const i=tmpNameSync(r);n.mkdirSync(i,r.mode||g);return{name:i,removeCallback:_prepareTmpDirRemoveCallback(i,r,true)}}function _removeFileAsync(e,t){const _handler=function(e){if(e&&!_isENOENT(e)){return t(e)}t()};if(0<=e[0])n.close(e[0],(function(){n.unlink(e[1],_handler)}));else n.unlink(e[1],_handler)}function _removeFileSync(e){let t=null;try{if(0<=e[0])n.closeSync(e[0])}catch(e){if(!_isEBADF(e)&&!_isENOENT(e))throw e}finally{try{n.unlinkSync(e[1])}catch(e){if(!_isENOENT(e))t=e}}if(t!==null){throw t}}function _prepareTmpFileRemoveCallback(e,t,r,n){const i=_prepareRemoveCallback(_removeFileSync,[t,e],n);const o=_prepareRemoveCallback(_removeFileAsync,[t,e],n,i);if(!r.keep)b.unshift(i);return n?i:o}function _prepareTmpDirRemoveCallback(e,t,r){const i=t.unsafeCleanup?c:n.rmdir.bind(n);const o=t.unsafeCleanup?_:w;const s=_prepareRemoveCallback(o,e,r);const a=_prepareRemoveCallback(i,e,r,s);if(!t.keep)b.unshift(s);return r?s:a}function _prepareRemoveCallback(e,t,r,n){let i=false;return function _cleanupCallback(o){if(!i){const s=n||_cleanupCallback;const a=b.indexOf(s);if(a>=0)b.splice(a,1);i=true;if(r||e===w||e===_){return e(t)}else{return e(t,o||function(){})}}}}function _garbageCollector(){if(!O)return;while(b.length){try{b[0]()}catch(e){}}}function _randomChars(e){let t=[],r=null;try{r=s.randomBytes(e)}catch(t){r=s.pseudoRandomBytes(e)}for(var n=0;n<e;n++){t.push(l[r[n]%l.length])}return t.join("")}function _isBlank(e){return e===null||_isUndefined(e)||!e.trim()}function _isUndefined(e){return typeof e==="undefined"}function _parseArguments(e,t){if(typeof e==="function"){return[{},e]}if(_isUndefined(e)){return[{},t]}const r={};for(const t of Object.getOwnPropertyNames(e)){r[t]=e[t]}return[r,t]}function _generateTmpName(e){const t=e.tmpdir;if(!_isUndefined(e.name))return o.join(t,e.dir,e.name);if(!_isUndefined(e.template))return o.join(t,e.dir,e.template).replace(u,_randomChars(6));const r=[e.prefix?e.prefix:"tmp","-",process.pid,"-",_randomChars(12),e.postfix?"-"+e.postfix:""].join("");return o.join(t,e.dir,r)}function _assertAndSanitizeOptions(e){e.tmpdir=_getTmpDir(e);const t=e.tmpdir;if(!_isUndefined(e.name))_assertIsRelative(e.name,"name",t);if(!_isUndefined(e.dir))_assertIsRelative(e.dir,"dir",t);if(!_isUndefined(e.template)){_assertIsRelative(e.template,"template",t);if(!e.template.match(u))throw new Error(`Invalid template, found "${e.template}".`)}if(!_isUndefined(e.tries)&&isNaN(e.tries)||e.tries<0)throw new Error(`Invalid tries, found "${e.tries}".`);e.tries=_isUndefined(e.name)?e.tries||d:1;e.keep=!!e.keep;e.detachDescriptor=!!e.detachDescriptor;e.discardDescriptor=!!e.discardDescriptor;e.unsafeCleanup=!!e.unsafeCleanup;e.dir=_isUndefined(e.dir)?"":o.relative(t,_resolvePath(e.dir,t));e.template=_isUndefined(e.template)?undefined:o.relative(t,_resolvePath(e.template,t));e.template=_isBlank(e.template)?undefined:o.relative(e.dir,e.template);e.naLine truncated
|
const n=r(7147);const i=r(2037);const o=r(1017);const s=r(6113);const a={fs:n.constants,os:i.constants};const c=r(4959);const l="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",u=/XXXXXX/,d=3,h=(a.O_CREAT||a.fs.O_CREAT)|(a.O_EXCL||a.fs.O_EXCL)|(a.O_RDWR||a.fs.O_RDWR),p=i.platform()==="win32",m=a.EBADF||a.os.errno.EBADF,v=a.ENOENT||a.os.errno.ENOENT,g=448,E=384,y="exit",b=[],_=n.rmdirSync.bind(n),w=c.sync;let O=false;function tmpName(e,t){const r=_parseArguments(e,t),i=r[0],o=r[1];try{_assertAndSanitizeOptions(i)}catch(e){return o(e)}let s=i.tries;(function _getUniqueName(){try{const e=_generateTmpName(i);n.stat(e,(function(t){if(!t){if(s-- >0)return _getUniqueName();return o(new Error("Could not get a unique tmp filename, max tries reached "+e))}o(null,e)}))}catch(e){o(e)}})()}function tmpNameSync(e){const t=_parseArguments(e),r=t[0];_assertAndSanitizeOptions(r);let i=r.tries;do{const e=_generateTmpName(r);try{n.statSync(e)}catch(t){return e}}while(i-- >0);throw new Error("Could not get a unique tmp filename, max tries reached")}function file(e,t){const r=_parseArguments(e,t),i=r[0],o=r[1];tmpName(i,(function _tmpNameCreated(e,t){if(e)return o(e);n.open(t,h,i.mode||E,(function _fileCreated(e,r){if(e)return o(e);if(i.discardDescriptor){return n.close(r,(function _discardCallback(e){return o(e,t,undefined,_prepareTmpFileRemoveCallback(t,-1,i,false))}))}else{const e=i.discardDescriptor||i.detachDescriptor;o(null,t,r,_prepareTmpFileRemoveCallback(t,e?-1:r,i,false))}}))}))}function fileSync(e){const t=_parseArguments(e),r=t[0];const i=r.discardDescriptor||r.detachDescriptor;const o=tmpNameSync(r);var s=n.openSync(o,h,r.mode||E);if(r.discardDescriptor){n.closeSync(s);s=undefined}return{name:o,fd:s,removeCallback:_prepareTmpFileRemoveCallback(o,i?-1:s,r,true)}}function dir(e,t){const r=_parseArguments(e,t),i=r[0],o=r[1];tmpName(i,(function _tmpNameCreated(e,t){if(e)return o(e);n.mkdir(t,i.mode||g,(function _dirCreated(e){if(e)return o(e);o(null,t,_prepareTmpDirRemoveCallback(t,i,false))}))}))}function dirSync(e){const t=_parseArguments(e),r=t[0];const i=tmpNameSync(r);n.mkdirSync(i,r.mode||g);return{name:i,removeCallback:_prepareTmpDirRemoveCallback(i,r,true)}}function _removeFileAsync(e,t){const _handler=function(e){if(e&&!_isENOENT(e)){return t(e)}t()};if(0<=e[0])n.close(e[0],(function(){n.unlink(e[1],_handler)}));else n.unlink(e[1],_handler)}function _removeFileSync(e){let t=null;try{if(0<=e[0])n.closeSync(e[0])}catch(e){if(!_isEBADF(e)&&!_isENOENT(e))throw e}finally{try{n.unlinkSync(e[1])}catch(e){if(!_isENOENT(e))t=e}}if(t!==null){throw t}}function _prepareTmpFileRemoveCallback(e,t,r,n){const i=_prepareRemoveCallback(_removeFileSync,[t,e],n);const o=_prepareRemoveCallback(_removeFileAsync,[t,e],n,i);if(!r.keep)b.unshift(i);return n?i:o}function _prepareTmpDirRemoveCallback(e,t,r){const i=t.unsafeCleanup?c:n.rmdir.bind(n);const o=t.unsafeCleanup?w:_;const s=_prepareRemoveCallback(o,e,r);const a=_prepareRemoveCallback(i,e,r,s);if(!t.keep)b.unshift(s);return r?s:a}function _prepareRemoveCallback(e,t,r,n){let i=false;return function _cleanupCallback(o){if(!i){const s=n||_cleanupCallback;const a=b.indexOf(s);if(a>=0)b.splice(a,1);i=true;if(r||e===_||e===w){return e(t)}else{return e(t,o||function(){})}}}}function _garbageCollector(){if(!O)return;while(b.length){try{b[0]()}catch(e){}}}function _randomChars(e){let t=[],r=null;try{r=s.randomBytes(e)}catch(t){r=s.pseudoRandomBytes(e)}for(var n=0;n<e;n++){t.push(l[r[n]%l.length])}return t.join("")}function _isBlank(e){return e===null||_isUndefined(e)||!e.trim()}function _isUndefined(e){return typeof e==="undefined"}function _parseArguments(e,t){if(typeof e==="function"){return[{},e]}if(_isUndefined(e)){return[{},t]}const r={};for(const t of Object.getOwnPropertyNames(e)){r[t]=e[t]}return[r,t]}function _generateTmpName(e){const t=e.tmpdir;if(!_isUndefined(e.name))return o.join(t,e.dir,e.name);if(!_isUndefined(e.template))return o.join(t,e.dir,e.template).replace(u,_randomChars(6));const r=[e.prefix?e.prefix:"tmp","-",process.pid,"-",_randomChars(12),e.postfix?"-"+e.postfix:""].join("");return o.join(t,e.dir,r)}function _assertAndSanitizeOptions(e){e.tmpdir=_getTmpDir(e);const t=e.tmpdir;if(!_isUndefined(e.name))_assertIsRelative(e.name,"name",t);if(!_isUndefined(e.dir))_assertIsRelative(e.dir,"dir",t);if(!_isUndefined(e.template)){_assertIsRelative(e.template,"template",t);if(!e.template.match(u))throw new Error(`Invalid template, found "${e.template}".`)}if(!_isUndefined(e.tries)&&isNaN(e.tries)||e.tries<0)throw new Error(`Invalid tries, found "${e.tries}".`);e.tries=_isUndefined(e.name)?e.tries||d:1;e.keep=!!e.keep;e.detachDescriptor=!!e.detachDescriptor;e.discardDescriptor=!!e.discardDescriptor;e.unsafeCleanup=!!e.unsafeCleanup;e.dir=_isUndefined(e.dir)?"":o.relative(t,_resolvePath(e.dir,t));e.template=_isUndefined(e.template)?undefined:o.relative(t,_resolvePath(e.template,t));e.template=_isBlank(e.template)?undefined:o.relative(e.dir,e.template);e.naLine truncated
|
||||||
//# sourceMappingURL=index.js.map
|
//# sourceMappingURL=index.js.map
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
{"version":3,"sources":["../webpack:/docker-setup-buildx/node_modules/@actions/core/lib/command.js","../webpack:/docker-setup-buildx/node_modules/@actions/core/lib/core.js","../webpack:/docker-setup-buildx/node_modules/@actions/core/lib/file-command.js","../webpack:/docker-setup-buildx/node_modules/@actions/core/lib/oidc-utils.js","../webpack:/docker-setup-buildx/node_modules/@actions/core/lib/path-utils.js","../webpack:/docker-setup-buildx/node_modules/@actions/core/lib/summary.js","../webpack:/docker-setup-buildx/node_modules/@actions/core/lib/utils.js","../webpack:/docker-setup-buildx/node_modules/@actions/exec/lib/exec.js","../webpack:/docker-setup-buildx/node_modules/@actions/exec/lib/toolrunner.js","../webpack:/docker-setup-buildx/node_modules/@actions/http-client/lib/auth.js","../webpack:/docker-setup-buildx/node_modules/@actions/http-client/lib/index.js","../webpack:/docker-setup-buildx/node_modules/@actions/http-client/lib/proxy.js","../webpack:/docker-setup-buildx/node_modules/@actions/io/lib/io-util.js","../webpack:/docker-setup-buildx/node_modules/@actions/io/lib/io.js","../webpack:/docker-setup-buildx/node_modules/@actions/tool-cache/lib/manifest.js","../webpack:/docker-setup-buildx/node_modules/@actions/tool-cache/lib/retry-helper.js","../webpack:/docker-setup-buildx/node_modules/@actions/tool-cache/lib/tool-cache.js","../webpack:/docker-setup-buildx/node_modules/@actions/tool-cache/node_modules/semver/semver.js","../webpack:/docker-setup-buildx/node_modules/@actions/tool-cache/node_modules/uuid/lib/bytesToUuid.js","../webpack:/docker-setup-buildx/node_modules/@actions/tool-cache/node_modules/uuid/lib/rng.js","../webpack:/docker-setup-buildx/node_modules/@actions/tool-cache/node_modules/uuid/v4.js","../webpack:/docker-setup-buildx/node_modules/balanced-match/index.js","../webpack:/docker-setup-buildx/node_modules/brace-expansion/index.js","../webpack:/docker-setup-buildx/node_modules/concat-map/index.js","../webpack:/docker-setup-buildx/node_modules/fs.realpath/index.js","../webpack:/docker-setup-buildx/node_modules/fs.realpath/old.js","../webpack:/docker-setup-buildx/node_modules/glob/common.js","../webpack:/docker-setup-buildx/node_modules/glob/glob.js","../webpack:/docker-setup-buildx/node_modules/glob/sync.js","../webpack:/docker-setup-buildx/node_modules/inflight/inflight.js","../webpack:/docker-setup-buildx/node_modules/inherits/inherits.js","../webpack:/docker-setup-buildx/node_modules/inherits/inherits_browser.js","../webpack:/docker-setup-buildx/node_modules/lru-cache/index.js","../webpack:/docker-setup-buildx/node_modules/minimatch/minimatch.js","../webpack:/docker-setup-buildx/node_modules/once/once.js","../webpack:/docker-setup-buildx/node_modules/path-is-absolute/index.js","../webpack:/docker-setup-buildx/node_modules/rimraf/rimraf.js","../webpack:/docker-setup-buildx/node_modules/semver/classes/comparator.js","../webpack:/docker-setup-buildx/node_modules/semver/classes/range.js","../webpack:/docker-setup-buildx/node_modules/semver/classes/semver.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/clean.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/cmp.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/coerce.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/compare-build.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/compare-loose.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/compare.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/diff.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/eq.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/gt.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/gte.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/inc.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/lt.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/lte.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/major.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/minor.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/neq.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/parse.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/patch.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/prerelease.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/rcompare.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/rsort.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/satisfies.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/sort.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/valid.js","../webpack:/docker-setup-buildx/node_modules/semver/index.js","../webpack:/docker-setup-buildx/node_modules/semver/internal/constants.js","../webpack:/docker-setup-buildx/node_modules/semver/internal/debuLine truncated
|
{"version":3,"sources":["../webpack:/docker-setup-buildx/node_modules/@actions/core/lib/command.js","../webpack:/docker-setup-buildx/node_modules/@actions/core/lib/core.js","../webpack:/docker-setup-buildx/node_modules/@actions/core/lib/file-command.js","../webpack:/docker-setup-buildx/node_modules/@actions/core/lib/oidc-utils.js","../webpack:/docker-setup-buildx/node_modules/@actions/core/lib/path-utils.js","../webpack:/docker-setup-buildx/node_modules/@actions/core/lib/summary.js","../webpack:/docker-setup-buildx/node_modules/@actions/core/lib/utils.js","../webpack:/docker-setup-buildx/node_modules/@actions/exec/lib/exec.js","../webpack:/docker-setup-buildx/node_modules/@actions/exec/lib/toolrunner.js","../webpack:/docker-setup-buildx/node_modules/@actions/http-client/lib/auth.js","../webpack:/docker-setup-buildx/node_modules/@actions/http-client/lib/index.js","../webpack:/docker-setup-buildx/node_modules/@actions/http-client/lib/proxy.js","../webpack:/docker-setup-buildx/node_modules/@actions/io/lib/io-util.js","../webpack:/docker-setup-buildx/node_modules/@actions/io/lib/io.js","../webpack:/docker-setup-buildx/node_modules/@actions/tool-cache/lib/manifest.js","../webpack:/docker-setup-buildx/node_modules/@actions/tool-cache/lib/retry-helper.js","../webpack:/docker-setup-buildx/node_modules/@actions/tool-cache/lib/tool-cache.js","../webpack:/docker-setup-buildx/node_modules/@actions/tool-cache/node_modules/semver/semver.js","../webpack:/docker-setup-buildx/node_modules/@actions/tool-cache/node_modules/uuid/lib/bytesToUuid.js","../webpack:/docker-setup-buildx/node_modules/@actions/tool-cache/node_modules/uuid/lib/rng.js","../webpack:/docker-setup-buildx/node_modules/@actions/tool-cache/node_modules/uuid/v4.js","../webpack:/docker-setup-buildx/node_modules/balanced-match/index.js","../webpack:/docker-setup-buildx/node_modules/brace-expansion/index.js","../webpack:/docker-setup-buildx/node_modules/concat-map/index.js","../webpack:/docker-setup-buildx/node_modules/fs.realpath/index.js","../webpack:/docker-setup-buildx/node_modules/fs.realpath/old.js","../webpack:/docker-setup-buildx/node_modules/glob/common.js","../webpack:/docker-setup-buildx/node_modules/glob/glob.js","../webpack:/docker-setup-buildx/node_modules/glob/sync.js","../webpack:/docker-setup-buildx/node_modules/inflight/inflight.js","../webpack:/docker-setup-buildx/node_modules/inherits/inherits.js","../webpack:/docker-setup-buildx/node_modules/inherits/inherits_browser.js","../webpack:/docker-setup-buildx/node_modules/lru-cache/index.js","../webpack:/docker-setup-buildx/node_modules/minimatch/minimatch.js","../webpack:/docker-setup-buildx/node_modules/once/once.js","../webpack:/docker-setup-buildx/node_modules/path-is-absolute/index.js","../webpack:/docker-setup-buildx/node_modules/rimraf/rimraf.js","../webpack:/docker-setup-buildx/node_modules/semver/classes/comparator.js","../webpack:/docker-setup-buildx/node_modules/semver/classes/range.js","../webpack:/docker-setup-buildx/node_modules/semver/classes/semver.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/clean.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/cmp.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/coerce.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/compare-build.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/compare-loose.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/compare.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/diff.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/eq.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/gt.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/gte.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/inc.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/lt.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/lte.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/major.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/minor.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/neq.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/parse.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/patch.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/prerelease.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/rcompare.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/rsort.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/satisfies.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/sort.js","../webpack:/docker-setup-buildx/node_modules/semver/functions/valid.js","../webpack:/docker-setup-buildx/node_modules/semver/index.js","../webpack:/docker-setup-buildx/node_modules/semver/internal/constants.js","../webpack:/docker-setup-buildx/node_modules/semver/internal/debuLine truncated
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
# Authentication support
|
||||||
|
|
||||||
|
## SSH authentication
|
||||||
|
|
||||||
|
To be able to connect to an SSH endpoint using the [`docker-container` driver](https://docs.docker.com/build/building/drivers/docker-container/),
|
||||||
|
you have to set up the SSH private key and configuration on the GitHub Runner:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
name: ci
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
buildx:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
-
|
||||||
|
name: Set up SSH
|
||||||
|
uses: MrSquaare/ssh-setup-action@523473d91581ccbf89565e12b40faba93f2708bd # v1.1.0
|
||||||
|
with:
|
||||||
|
host: graviton2
|
||||||
|
private-key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||||
|
private-key-name: aws_graviton2
|
||||||
|
-
|
||||||
|
name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
with:
|
||||||
|
endpoint: ssh://me@graviton2
|
||||||
|
```
|
||||||
|
|
||||||
|
## TLS authentication
|
||||||
|
|
||||||
|
You can also [set up a remote BuildKit instance](https://docs.docker.com/build/building/drivers/remote/#remote-buildkit-in-docker-container)
|
||||||
|
using the remote driver. To ease the integration in your workflow, we put in
|
||||||
|
place environment variables that will set up authentication using the BuildKit
|
||||||
|
client certificates for the `tcp://` endpoint where `<idx>` is the position of
|
||||||
|
the node in the list of nodes:
|
||||||
|
|
||||||
|
* `BUILDER_NODE_<idx>_AUTH_TLS_CACERT`
|
||||||
|
* `BUILDER_NODE_<idx>_AUTH_TLS_CERT`
|
||||||
|
* `BUILDER_NODE_<idx>_AUTH_TLS_KEY`
|
||||||
|
|
||||||
|
> **Note**
|
||||||
|
>
|
||||||
|
> The index is always `0` at the moment as we don't support (yet) appending new
|
||||||
|
> nodes with this action.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
name: ci
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
buildx:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
-
|
||||||
|
name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
with:
|
||||||
|
driver: remote
|
||||||
|
endpoint: tcp://graviton2:1234
|
||||||
|
env:
|
||||||
|
BUILDER_NODE_0_AUTH_TLS_CACERT: ${{ secrets.GRAVITON2_CA }}
|
||||||
|
BUILDER_NODE_0_AUTH_TLS_CERT: ${{ secrets.GRAVITON2_CERT }}
|
||||||
|
BUILDER_NODE_0_AUTH_TLS_KEY: ${{ secrets.GRAVITON2_KEY }}
|
||||||
|
```
|
||||||
+51
@@ -0,0 +1,51 @@
|
|||||||
|
import * as fs from 'fs';
|
||||||
|
|
||||||
|
export const envPrefix = 'BUILDER_NODE';
|
||||||
|
|
||||||
|
export function setCredentials(credsdir: string, index: number, driver: string, endpoint: string): Array<string> {
|
||||||
|
let url: URL;
|
||||||
|
try {
|
||||||
|
url = new URL(endpoint);
|
||||||
|
} catch (e) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
switch (url.protocol) {
|
||||||
|
case 'tcp:': {
|
||||||
|
return setBuildKitClientCerts(credsdir, index, driver, url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
function setBuildKitClientCerts(credsdir: string, index: number, driver: string, endpoint: URL): Array<string> {
|
||||||
|
const driverOpts: Array<string> = [];
|
||||||
|
const buildkitCacert = process.env[`${envPrefix}_${index}_AUTH_TLS_CACERT`] || '';
|
||||||
|
const buildkitCert = process.env[`${envPrefix}_${index}_AUTH_TLS_CERT`] || '';
|
||||||
|
const buildkitKey = process.env[`${envPrefix}_${index}_AUTH_TLS_KEY`] || '';
|
||||||
|
if (buildkitCacert.length == 0 && buildkitCert.length == 0 && buildkitKey.length == 0) {
|
||||||
|
return driverOpts;
|
||||||
|
}
|
||||||
|
let host = endpoint.hostname;
|
||||||
|
if (endpoint.port.length > 0) {
|
||||||
|
host += `-${endpoint.port}`;
|
||||||
|
}
|
||||||
|
if (buildkitCacert.length > 0) {
|
||||||
|
const cacertpath = `${credsdir}/cacert_${host}.pem`;
|
||||||
|
fs.writeFileSync(cacertpath, buildkitCacert);
|
||||||
|
driverOpts.push(`cacert=${cacertpath}`);
|
||||||
|
}
|
||||||
|
if (buildkitCert.length > 0) {
|
||||||
|
const certpath = `${credsdir}/cert_${host}.pem`;
|
||||||
|
fs.writeFileSync(certpath, buildkitCert);
|
||||||
|
driverOpts.push(`cert=${certpath}`);
|
||||||
|
}
|
||||||
|
if (buildkitKey.length > 0) {
|
||||||
|
const keypath = `${credsdir}/key_${host}.pem`;
|
||||||
|
fs.writeFileSync(keypath, buildkitKey);
|
||||||
|
driverOpts.push(`key=${keypath}`);
|
||||||
|
}
|
||||||
|
if (driver != 'remote') {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
return driverOpts;
|
||||||
|
}
|
||||||
+15
@@ -1,6 +1,8 @@
|
|||||||
|
import * as fs from 'fs';
|
||||||
import * as os from 'os';
|
import * as os from 'os';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as uuid from 'uuid';
|
import * as uuid from 'uuid';
|
||||||
|
import * as auth from './auth';
|
||||||
import * as buildx from './buildx';
|
import * as buildx from './buildx';
|
||||||
import * as context from './context';
|
import * as context from './context';
|
||||||
import * as docker from './docker';
|
import * as docker from './docker';
|
||||||
@@ -56,8 +58,16 @@ async function run(): Promise<void> {
|
|||||||
context.setOutput('name', builderName);
|
context.setOutput('name', builderName);
|
||||||
stateHelper.setBuilderName(builderName);
|
stateHelper.setBuilderName(builderName);
|
||||||
|
|
||||||
|
const credsdir = path.join(dockerConfigHome, 'buildx', 'creds', builderName);
|
||||||
|
fs.mkdirSync(credsdir, {recursive: true});
|
||||||
|
stateHelper.setCredsDir(credsdir);
|
||||||
|
|
||||||
if (inputs.driver !== 'docker') {
|
if (inputs.driver !== 'docker') {
|
||||||
core.startGroup(`Creating a new builder instance`);
|
core.startGroup(`Creating a new builder instance`);
|
||||||
|
const authOpts = auth.setCredentials(credsdir, 0, inputs.driver, inputs.endpoint);
|
||||||
|
if (authOpts.length > 0) {
|
||||||
|
inputs.driverOpts = [...inputs.driverOpts, ...authOpts];
|
||||||
|
}
|
||||||
const createArgs: Array<string> = ['create', '--name', builderName, '--driver', inputs.driver];
|
const createArgs: Array<string> = ['create', '--name', builderName, '--driver', inputs.driver];
|
||||||
if (buildx.satisfies(buildxVersion, '>=0.3.0')) {
|
if (buildx.satisfies(buildxVersion, '>=0.3.0')) {
|
||||||
await context.asyncForEach(inputs.driverOpts, async driverOpt => {
|
await context.asyncForEach(inputs.driverOpts, async driverOpt => {
|
||||||
@@ -156,6 +166,11 @@ async function cleanup(): Promise<void> {
|
|||||||
});
|
});
|
||||||
core.endGroup();
|
core.endGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (stateHelper.credsDir.length > 0 && fs.existsSync(stateHelper.credsDir)) {
|
||||||
|
core.info(`Cleaning up credentials`);
|
||||||
|
fs.rmdirSync(stateHelper.credsDir, {recursive: true});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!stateHelper.IsPost) {
|
if (!stateHelper.IsPost) {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export const IsDebug = !!process.env['STATE_isDebug'];
|
|||||||
export const standalone = process.env['STATE_standalone'] || '';
|
export const standalone = process.env['STATE_standalone'] || '';
|
||||||
export const builderName = process.env['STATE_builderName'] || '';
|
export const builderName = process.env['STATE_builderName'] || '';
|
||||||
export const containerName = process.env['STATE_containerName'] || '';
|
export const containerName = process.env['STATE_containerName'] || '';
|
||||||
|
export const credsDir = process.env['STATE_credsDir'] || '';
|
||||||
|
|
||||||
export function setDebug(debug: string) {
|
export function setDebug(debug: string) {
|
||||||
core.saveState('isDebug', debug);
|
core.saveState('isDebug', debug);
|
||||||
@@ -22,6 +23,10 @@ export function setContainerName(containerName: string) {
|
|||||||
core.saveState('containerName', containerName);
|
core.saveState('containerName', containerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function setCredsDir(credsDir: string) {
|
||||||
|
core.saveState('credsDir', credsDir);
|
||||||
|
}
|
||||||
|
|
||||||
if (!IsPost) {
|
if (!IsPost) {
|
||||||
core.saveState('isPost', 'true');
|
core.saveState('isPost', 'true');
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user