mirror of
https://github.com/docker/build-push-action
synced 2024-11-23 02:31:41 +00:00
Remove bake support for now (future release or subaction)
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
parent
e7964906a6
commit
2962fe9789
9 changed files with 60 additions and 995 deletions
44
.github/workflows/ci.yml
vendored
44
.github/workflows/ci.yml
vendored
|
@ -108,50 +108,6 @@ jobs:
|
||||||
if: always()
|
if: always()
|
||||||
uses: crazy-max/ghaction-dump-context@v1
|
uses: crazy-max/ghaction-dump-context@v1
|
||||||
|
|
||||||
bake:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
target:
|
|
||||||
- default
|
|
||||||
- release
|
|
||||||
steps:
|
|
||||||
-
|
|
||||||
name: Run local registry
|
|
||||||
run: |
|
|
||||||
docker run -d -p 5000:5000 registry:2
|
|
||||||
-
|
|
||||||
name: Checkout
|
|
||||||
uses: actions/checkout@v2.3.1
|
|
||||||
-
|
|
||||||
name: Set up QEMU
|
|
||||||
uses: ./setup-qemu/ # change to docker/setup-qemu-action@master
|
|
||||||
with:
|
|
||||||
platforms: all
|
|
||||||
-
|
|
||||||
name: Set up Docker Buildx
|
|
||||||
id: buildx
|
|
||||||
uses: ./setup-buildx/ # change to docker/setup-buildx-action@master
|
|
||||||
with:
|
|
||||||
driver-opt: network=host
|
|
||||||
buildkitd-flags: --allow-insecure-entitlement security.insecure
|
|
||||||
-
|
|
||||||
name: Build and push
|
|
||||||
uses: ./
|
|
||||||
with:
|
|
||||||
builder: ${{ steps.buildx.outputs.name }}
|
|
||||||
bake: true
|
|
||||||
push: false # set to true when https://github.com/docker/buildx/issues/179 is fixed
|
|
||||||
bake-files: |
|
|
||||||
./test/config.hcl
|
|
||||||
bake-targets: |
|
|
||||||
${{ matrix.target }}
|
|
||||||
-
|
|
||||||
name: Dump context
|
|
||||||
if: always()
|
|
||||||
uses: crazy-max/ghaction-dump-context@v1
|
|
||||||
|
|
||||||
github-cache:
|
github-cache:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
|
55
README.md
55
README.md
|
@ -6,7 +6,6 @@ ___
|
||||||
|
|
||||||
* [Usage](#usage)
|
* [Usage](#usage)
|
||||||
* [Quick start](#quick-start)
|
* [Quick start](#quick-start)
|
||||||
* [Bake](#bake)
|
|
||||||
* [Git context](#git-context)
|
* [Git context](#git-context)
|
||||||
* [Customizing](#customizing)
|
* [Customizing](#customizing)
|
||||||
* [inputs](#inputs)
|
* [inputs](#inputs)
|
||||||
|
@ -66,57 +65,6 @@ jobs:
|
||||||
user/app:1.0.0
|
user/app:1.0.0
|
||||||
```
|
```
|
||||||
|
|
||||||
### Bake
|
|
||||||
|
|
||||||
[Buildx bake](https://github.com/docker/buildx#buildx-bake-options-target) is also available with this action through
|
|
||||||
the [`bake` inputs](#inputs):
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
name: ci
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches: master
|
|
||||||
push:
|
|
||||||
branches: master
|
|
||||||
tags:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
bake:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
-
|
|
||||||
name: Checkout
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
-
|
|
||||||
name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v1
|
|
||||||
with:
|
|
||||||
platforms: all
|
|
||||||
-
|
|
||||||
name: Set up Docker Buildx
|
|
||||||
id: buildx
|
|
||||||
uses: docker/setup-buildx-action@v1
|
|
||||||
-
|
|
||||||
name: Login to DockerHub
|
|
||||||
uses: crazy-max/ghaction-docker-login@v1 # switch to docker/login-action@v1 when available
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
||||||
-
|
|
||||||
name: Build and push
|
|
||||||
uses: docker/build-push-action@v2
|
|
||||||
with:
|
|
||||||
builder: ${{ steps.buildx.outputs.name }}
|
|
||||||
push: true
|
|
||||||
bake: true
|
|
||||||
bake-files: |
|
|
||||||
./config.hcl
|
|
||||||
bake-targets: |
|
|
||||||
default
|
|
||||||
release
|
|
||||||
```
|
|
||||||
|
|
||||||
### Git context
|
### Git context
|
||||||
|
|
||||||
You can build from Git directly without [`actions/checkout`](https://github.com/actions/checkout/) action,
|
You can build from Git directly without [`actions/checkout`](https://github.com/actions/checkout/) action,
|
||||||
|
@ -192,9 +140,6 @@ Following inputs can be used as `step.with` keys
|
||||||
| `outputs` | List | | List of [output destinations](https://github.com/docker/buildx#-o---outputpath-typetypekeyvalue) (format: `type=local,dest=path`) |
|
| `outputs` | List | | List of [output destinations](https://github.com/docker/buildx#-o---outputpath-typetypekeyvalue) (format: `type=local,dest=path`) |
|
||||||
| `cache-from` | List | | List of [external cache sources](https://github.com/docker/buildx#--cache-fromnametypetypekeyvalue) (eg. `user/app:cache`, `type=local,src=path/to/dir`) |
|
| `cache-from` | List | | List of [external cache sources](https://github.com/docker/buildx#--cache-fromnametypetypekeyvalue) (eg. `user/app:cache`, `type=local,src=path/to/dir`) |
|
||||||
| `cache-to` | List | | List of [cache export destinations](https://github.com/docker/buildx#--cache-tonametypetypekeyvalue) (eg. `user/app:cache`, `type=local,dest=path/to/dir`) |
|
| `cache-to` | List | | List of [cache export destinations](https://github.com/docker/buildx#--cache-tonametypetypekeyvalue) (eg. `user/app:cache`, `type=local,dest=path/to/dir`) |
|
||||||
| `bake` | Bool | `false` | Use [bake](https://github.com/docker/buildx#buildx-bake-options-target) as the high-level build command |
|
|
||||||
| `bake-files` | List | | List of [bake definition files](https://github.com/docker/buildx#file-definition) |
|
|
||||||
| `bake-targets` | List | | List of bake targets |
|
|
||||||
|
|
||||||
> List type can be a comma or newline-delimited string
|
> List type can be a comma or newline-delimited string
|
||||||
> ```yaml
|
> ```yaml
|
||||||
|
|
15
action.yml
15
action.yml
|
@ -1,5 +1,6 @@
|
||||||
name: Docker Build and Push
|
# https://help.github.com/en/articles/metadata-syntax-for-github-actions
|
||||||
description: Build and push Docker images
|
name: Docker Build Push
|
||||||
|
description: Build and push Docker images with Buildx
|
||||||
author: docker
|
author: docker
|
||||||
branding:
|
branding:
|
||||||
icon: 'anchor'
|
icon: 'anchor'
|
||||||
|
@ -64,16 +65,6 @@ inputs:
|
||||||
description: "Export all the layers of all intermediate steps in the GitHub cache"
|
description: "Export all the layers of all intermediate steps in the GitHub cache"
|
||||||
required: false
|
required: false
|
||||||
default: 'false'
|
default: 'false'
|
||||||
bake:
|
|
||||||
description: "Use bake as the high-level build command"
|
|
||||||
required: false
|
|
||||||
default: 'false'
|
|
||||||
bake-files:
|
|
||||||
description: "Newline-delimited list of bake definition files"
|
|
||||||
required: false
|
|
||||||
bake-targets:
|
|
||||||
description: "Newline-delimited list of bake targets"
|
|
||||||
required: false
|
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
digest:
|
digest:
|
||||||
|
|
843
dist/index.js
generated
vendored
843
dist/index.js
generated
vendored
|
@ -1928,65 +1928,7 @@ var ValueType;
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
/* 44 */,
|
/* 44 */,
|
||||||
/* 45 */
|
/* 45 */,
|
||||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
|
|
||||||
var parseUrl = __webpack_require__(823),
|
|
||||||
isSsh = __webpack_require__(720);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gitUp
|
|
||||||
* Parses the input url.
|
|
||||||
*
|
|
||||||
* @name gitUp
|
|
||||||
* @function
|
|
||||||
* @param {String} input The input url.
|
|
||||||
* @return {Object} An object containing the following fields:
|
|
||||||
*
|
|
||||||
* - `protocols` (Array): An array with the url protocols (usually it has one element).
|
|
||||||
* - `port` (null|Number): The domain port.
|
|
||||||
* - `resource` (String): The url domain (including subdomains).
|
|
||||||
* - `user` (String): The authentication user (usually for ssh urls).
|
|
||||||
* - `pathname` (String): The url pathname.
|
|
||||||
* - `hash` (String): The url hash.
|
|
||||||
* - `search` (String): The url querystring value.
|
|
||||||
* - `href` (String): The input url.
|
|
||||||
* - `protocol` (String): The git url protocol.
|
|
||||||
* - `token` (String): The oauth token (could appear in the https urls).
|
|
||||||
*/
|
|
||||||
function gitUp(input) {
|
|
||||||
var output = parseUrl(input);
|
|
||||||
output.token = "";
|
|
||||||
|
|
||||||
var splits = output.user.split(":");
|
|
||||||
if (splits.length === 2) {
|
|
||||||
if (splits[1] === "x-oauth-basic") {
|
|
||||||
output.token = splits[0];
|
|
||||||
} else if (splits[0] === "x-token-auth") {
|
|
||||||
output.token = splits[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isSsh(output.protocols) || isSsh(input)) {
|
|
||||||
output.protocol = "ssh";
|
|
||||||
} else if (output.protocols.length) {
|
|
||||||
output.protocol = output.protocols[0];
|
|
||||||
} else {
|
|
||||||
output.protocol = "file";
|
|
||||||
}
|
|
||||||
|
|
||||||
output.href = output.href.replace(/\/$/, "");
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = gitUp;
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
/* 46 */,
|
/* 46 */,
|
||||||
/* 47 */
|
/* 47 */
|
||||||
/***/ (function(__unusedmodule, exports) {
|
/***/ (function(__unusedmodule, exports) {
|
||||||
|
@ -2023,149 +1965,46 @@ module.exports = ["ac","com.ac","edu.ac","gov.ac","net.ac","mil.ac","org.ac","ad
|
||||||
/* 51 */,
|
/* 51 */,
|
||||||
/* 52 */,
|
/* 52 */,
|
||||||
/* 53 */
|
/* 53 */
|
||||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
// TODO: Use the `URL` global when targeting Node.js 10
|
/*!
|
||||||
const URLParser = typeof URL === 'undefined' ? __webpack_require__(835).URL : URL;
|
* Copyright 2019, OpenTelemetry Authors
|
||||||
|
*
|
||||||
const testParameter = (name, filters) => {
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
return filters.some(filter => filter instanceof RegExp ? filter.test(name) : filter === name);
|
* you may not use this file except in compliance with the License.
|
||||||
};
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
module.exports = (urlString, opts) => {
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
opts = Object.assign({
|
*
|
||||||
defaultProtocol: 'http:',
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
normalizeProtocol: true,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
forceHttp: false,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
forceHttps: false,
|
* See the License for the specific language governing permissions and
|
||||||
stripHash: true,
|
* limitations under the License.
|
||||||
stripWWW: true,
|
*/
|
||||||
removeQueryParameters: [/^utm_\w+/i],
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
removeTrailingSlash: true,
|
const context_1 = __webpack_require__(560);
|
||||||
removeDirectoryIndex: false,
|
class NoopContextManager {
|
||||||
sortQueryParameters: true
|
active() {
|
||||||
}, opts);
|
return context_1.Context.ROOT_CONTEXT;
|
||||||
|
|
||||||
// Backwards compatibility
|
|
||||||
if (Reflect.has(opts, 'normalizeHttps')) {
|
|
||||||
opts.forceHttp = opts.normalizeHttps;
|
|
||||||
}
|
}
|
||||||
|
with(context, fn) {
|
||||||
if (Reflect.has(opts, 'normalizeHttp')) {
|
return fn();
|
||||||
opts.forceHttps = opts.normalizeHttp;
|
|
||||||
}
|
}
|
||||||
|
bind(target, context) {
|
||||||
if (Reflect.has(opts, 'stripFragment')) {
|
return target;
|
||||||
opts.stripHash = opts.stripFragment;
|
|
||||||
}
|
}
|
||||||
|
enable() {
|
||||||
urlString = urlString.trim();
|
return this;
|
||||||
|
|
||||||
const hasRelativeProtocol = urlString.startsWith('//');
|
|
||||||
const isRelativeUrl = !hasRelativeProtocol && /^\.*\//.test(urlString);
|
|
||||||
|
|
||||||
// Prepend protocol
|
|
||||||
if (!isRelativeUrl) {
|
|
||||||
urlString = urlString.replace(/^(?!(?:\w+:)?\/\/)|^\/\//, opts.defaultProtocol);
|
|
||||||
}
|
}
|
||||||
|
disable() {
|
||||||
const urlObj = new URLParser(urlString);
|
return this;
|
||||||
|
|
||||||
if (opts.forceHttp && opts.forceHttps) {
|
|
||||||
throw new Error('The `forceHttp` and `forceHttps` options cannot be used together');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opts.forceHttp && urlObj.protocol === 'https:') {
|
|
||||||
urlObj.protocol = 'http:';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opts.forceHttps && urlObj.protocol === 'http:') {
|
|
||||||
urlObj.protocol = 'https:';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove hash
|
|
||||||
if (opts.stripHash) {
|
|
||||||
urlObj.hash = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove duplicate slashes if not preceded by a protocol
|
|
||||||
if (urlObj.pathname) {
|
|
||||||
// TODO: Use the following instead when targeting Node.js 10
|
|
||||||
// `urlObj.pathname = urlObj.pathname.replace(/(?<!https?:)\/{2,}/g, '/');`
|
|
||||||
urlObj.pathname = urlObj.pathname.replace(/((?![https?:]).)\/{2,}/g, (_, p1) => {
|
|
||||||
if (/^(?!\/)/g.test(p1)) {
|
|
||||||
return `${p1}/`;
|
|
||||||
}
|
|
||||||
return '/';
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Decode URI octets
|
|
||||||
if (urlObj.pathname) {
|
|
||||||
urlObj.pathname = decodeURI(urlObj.pathname);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove directory index
|
|
||||||
if (opts.removeDirectoryIndex === true) {
|
|
||||||
opts.removeDirectoryIndex = [/^index\.[a-z]+$/];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Array.isArray(opts.removeDirectoryIndex) && opts.removeDirectoryIndex.length > 0) {
|
|
||||||
let pathComponents = urlObj.pathname.split('/');
|
|
||||||
const lastComponent = pathComponents[pathComponents.length - 1];
|
|
||||||
|
|
||||||
if (testParameter(lastComponent, opts.removeDirectoryIndex)) {
|
|
||||||
pathComponents = pathComponents.slice(0, pathComponents.length - 1);
|
|
||||||
urlObj.pathname = pathComponents.slice(1).join('/') + '/';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
exports.NoopContextManager = NoopContextManager;
|
||||||
if (urlObj.hostname) {
|
//# sourceMappingURL=NoopContextManager.js.map
|
||||||
// Remove trailing dot
|
|
||||||
urlObj.hostname = urlObj.hostname.replace(/\.$/, '');
|
|
||||||
|
|
||||||
// Remove `www.`
|
|
||||||
// eslint-disable-next-line no-useless-escape
|
|
||||||
if (opts.stripWWW && /^www\.([a-z\-\d]{2,63})\.([a-z\.]{2,5})$/.test(urlObj.hostname)) {
|
|
||||||
// Each label should be max 63 at length (min: 2).
|
|
||||||
// The extension should be max 5 at length (min: 2).
|
|
||||||
// Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names
|
|
||||||
urlObj.hostname = urlObj.hostname.replace(/^www\./, '');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove query unwanted parameters
|
|
||||||
if (Array.isArray(opts.removeQueryParameters)) {
|
|
||||||
for (const key of [...urlObj.searchParams.keys()]) {
|
|
||||||
if (testParameter(key, opts.removeQueryParameters)) {
|
|
||||||
urlObj.searchParams.delete(key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sort query parameters
|
|
||||||
if (opts.sortQueryParameters) {
|
|
||||||
urlObj.searchParams.sort();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Take advantage of many of the Node `url` normalizations
|
|
||||||
urlString = urlObj.toString();
|
|
||||||
|
|
||||||
// Remove ending `/`
|
|
||||||
if (opts.removeTrailingSlash || urlObj.pathname === '/') {
|
|
||||||
urlString = urlString.replace(/\/$/, '');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Restore relative protocol, if applicable
|
|
||||||
if (hasRelativeProtocol && !opts.normalizeProtocol) {
|
|
||||||
urlString = urlString.replace(/^http:\/\//, '//');
|
|
||||||
}
|
|
||||||
|
|
||||||
return urlString;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
/* 54 */,
|
/* 54 */,
|
||||||
|
@ -5545,12 +5384,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
/* 188 */,
|
/* 188 */,
|
||||||
/* 189 */,
|
/* 189 */,
|
||||||
/* 190 */,
|
/* 190 */,
|
||||||
/* 191 */
|
/* 191 */,
|
||||||
/***/ (function(module) {
|
|
||||||
|
|
||||||
module.exports = require("querystring");
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
/* 192 */,
|
/* 192 */,
|
||||||
/* 193 */,
|
/* 193 */,
|
||||||
/* 194 */,
|
/* 194 */,
|
||||||
|
@ -6368,239 +6202,7 @@ exports.downloadCacheStorageSDK = downloadCacheStorageSDK;
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
/* 252 */,
|
/* 252 */,
|
||||||
/* 253 */
|
/* 253 */,
|
||||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
|
|
||||||
var gitUp = __webpack_require__(45);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gitUrlParse
|
|
||||||
* Parses a Git url.
|
|
||||||
*
|
|
||||||
* @name gitUrlParse
|
|
||||||
* @function
|
|
||||||
* @param {String} url The Git url to parse.
|
|
||||||
* @return {GitUrl} The `GitUrl` object containing:
|
|
||||||
*
|
|
||||||
* - `protocols` (Array): An array with the url protocols (usually it has one element).
|
|
||||||
* - `port` (null|Number): The domain port.
|
|
||||||
* - `resource` (String): The url domain (including subdomains).
|
|
||||||
* - `user` (String): The authentication user (usually for ssh urls).
|
|
||||||
* - `pathname` (String): The url pathname.
|
|
||||||
* - `hash` (String): The url hash.
|
|
||||||
* - `search` (String): The url querystring value.
|
|
||||||
* - `href` (String): The input url.
|
|
||||||
* - `protocol` (String): The git url protocol.
|
|
||||||
* - `token` (String): The oauth token (could appear in the https urls).
|
|
||||||
* - `source` (String): The Git provider (e.g. `"github.com"`).
|
|
||||||
* - `owner` (String): The repository owner.
|
|
||||||
* - `name` (String): The repository name.
|
|
||||||
* - `ref` (String): The repository ref (e.g., "master" or "dev").
|
|
||||||
* - `filepath` (String): A filepath relative to the repository root.
|
|
||||||
* - `filepathtype` (String): The type of filepath in the url ("blob" or "tree").
|
|
||||||
* - `full_name` (String): The owner and name values in the `owner/name` format.
|
|
||||||
* - `toString` (Function): A function to stringify the parsed url into another url type.
|
|
||||||
* - `organization` (String): The organization the owner belongs to. This is CloudForge specific.
|
|
||||||
* - `git_suffix` (Boolean): Whether to add the `.git` suffix or not.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
function gitUrlParse(url) {
|
|
||||||
|
|
||||||
if (typeof url !== "string") {
|
|
||||||
throw new Error("The url must be a string.");
|
|
||||||
}
|
|
||||||
|
|
||||||
var urlInfo = gitUp(url),
|
|
||||||
sourceParts = urlInfo.resource.split("."),
|
|
||||||
splits = null;
|
|
||||||
|
|
||||||
urlInfo.toString = function (type) {
|
|
||||||
return gitUrlParse.stringify(this, type);
|
|
||||||
};
|
|
||||||
|
|
||||||
urlInfo.source = sourceParts.length > 2 ? sourceParts.slice(1 - sourceParts.length).join(".") : urlInfo.source = urlInfo.resource;
|
|
||||||
|
|
||||||
// Note: Some hosting services (e.g. Visual Studio Team Services) allow whitespace characters
|
|
||||||
// in the repository and owner names so we decode the URL pieces to get the correct result
|
|
||||||
urlInfo.git_suffix = /\.git$/.test(urlInfo.pathname);
|
|
||||||
urlInfo.name = decodeURIComponent(urlInfo.pathname.replace(/^\//, '').replace(/\.git$/, ""));
|
|
||||||
urlInfo.owner = decodeURIComponent(urlInfo.user);
|
|
||||||
|
|
||||||
switch (urlInfo.source) {
|
|
||||||
case "git.cloudforge.com":
|
|
||||||
urlInfo.owner = urlInfo.user;
|
|
||||||
urlInfo.organization = sourceParts[0];
|
|
||||||
urlInfo.source = "cloudforge.com";
|
|
||||||
break;
|
|
||||||
case "visualstudio.com":
|
|
||||||
// Handle VSTS SSH URLs
|
|
||||||
if (urlInfo.resource === 'vs-ssh.visualstudio.com') {
|
|
||||||
splits = urlInfo.name.split("/");
|
|
||||||
if (splits.length === 4) {
|
|
||||||
urlInfo.organization = splits[1];
|
|
||||||
urlInfo.owner = splits[2];
|
|
||||||
urlInfo.name = splits[3];
|
|
||||||
urlInfo.full_name = splits[2] + '/' + splits[3];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
splits = urlInfo.name.split("/");
|
|
||||||
if (splits.length === 2) {
|
|
||||||
urlInfo.owner = splits[1];
|
|
||||||
urlInfo.name = splits[1];
|
|
||||||
urlInfo.full_name = '_git/' + urlInfo.name;
|
|
||||||
} else if (splits.length === 3) {
|
|
||||||
urlInfo.name = splits[2];
|
|
||||||
if (splits[0] === 'DefaultCollection') {
|
|
||||||
urlInfo.owner = splits[2];
|
|
||||||
urlInfo.organization = splits[0];
|
|
||||||
urlInfo.full_name = urlInfo.organization + '/_git/' + urlInfo.name;
|
|
||||||
} else {
|
|
||||||
urlInfo.owner = splits[0];
|
|
||||||
urlInfo.full_name = urlInfo.owner + '/_git/' + urlInfo.name;
|
|
||||||
}
|
|
||||||
} else if (splits.length === 4) {
|
|
||||||
urlInfo.organization = splits[0];
|
|
||||||
urlInfo.owner = splits[1];
|
|
||||||
urlInfo.name = splits[3];
|
|
||||||
urlInfo.full_name = urlInfo.organization + '/' + urlInfo.owner + '/_git/' + urlInfo.name;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Azure DevOps (formerly Visual Studio Team Services)
|
|
||||||
case "dev.azure.com":
|
|
||||||
case "azure.com":
|
|
||||||
if (urlInfo.resource === 'ssh.dev.azure.com') {
|
|
||||||
splits = urlInfo.name.split("/");
|
|
||||||
if (splits.length === 4) {
|
|
||||||
urlInfo.organization = splits[1];
|
|
||||||
urlInfo.owner = splits[2];
|
|
||||||
urlInfo.name = splits[3];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
splits = urlInfo.name.split("/");
|
|
||||||
if (splits.length === 5) {
|
|
||||||
urlInfo.organization = splits[0];
|
|
||||||
urlInfo.owner = splits[1];
|
|
||||||
urlInfo.name = splits[4];
|
|
||||||
urlInfo.full_name = '_git/' + urlInfo.name;
|
|
||||||
} else if (splits.length === 3) {
|
|
||||||
urlInfo.name = splits[2];
|
|
||||||
if (splits[0] === 'DefaultCollection') {
|
|
||||||
urlInfo.owner = splits[2];
|
|
||||||
urlInfo.organization = splits[0];
|
|
||||||
urlInfo.full_name = urlInfo.organization + '/_git/' + urlInfo.name;
|
|
||||||
} else {
|
|
||||||
urlInfo.owner = splits[0];
|
|
||||||
urlInfo.full_name = urlInfo.owner + '/_git/' + urlInfo.name;
|
|
||||||
}
|
|
||||||
} else if (splits.length === 4) {
|
|
||||||
urlInfo.organization = splits[0];
|
|
||||||
urlInfo.owner = splits[1];
|
|
||||||
urlInfo.name = splits[3];
|
|
||||||
urlInfo.full_name = urlInfo.organization + '/' + urlInfo.owner + '/_git/' + urlInfo.name;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
splits = urlInfo.name.split("/");
|
|
||||||
var nameIndex = splits.length - 1;
|
|
||||||
if (splits.length >= 2) {
|
|
||||||
var blobIndex = splits.indexOf("blob", 2);
|
|
||||||
var treeIndex = splits.indexOf("tree", 2);
|
|
||||||
var commitIndex = splits.indexOf("commit", 2);
|
|
||||||
nameIndex = blobIndex > 0 ? blobIndex - 1 : treeIndex > 0 ? treeIndex - 1 : commitIndex > 0 ? commitIndex - 1 : nameIndex;
|
|
||||||
|
|
||||||
urlInfo.owner = splits.slice(0, nameIndex).join('/');
|
|
||||||
urlInfo.name = splits[nameIndex];
|
|
||||||
if (commitIndex) {
|
|
||||||
urlInfo.commit = splits[nameIndex + 2];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
urlInfo.ref = "";
|
|
||||||
urlInfo.filepathtype = "";
|
|
||||||
urlInfo.filepath = "";
|
|
||||||
if (splits.length > nameIndex + 2 && ["blob", "tree"].indexOf(splits[nameIndex + 1]) >= 0) {
|
|
||||||
urlInfo.filepathtype = splits[nameIndex + 1];
|
|
||||||
urlInfo.ref = splits[nameIndex + 2];
|
|
||||||
if (splits.length > nameIndex + 3) {
|
|
||||||
urlInfo.filepath = splits.slice(nameIndex + 3).join('/');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
urlInfo.organization = urlInfo.owner;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!urlInfo.full_name) {
|
|
||||||
urlInfo.full_name = urlInfo.owner;
|
|
||||||
if (urlInfo.name) {
|
|
||||||
urlInfo.full_name && (urlInfo.full_name += "/");
|
|
||||||
urlInfo.full_name += urlInfo.name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return urlInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* stringify
|
|
||||||
* Stringifies a `GitUrl` object.
|
|
||||||
*
|
|
||||||
* @name stringify
|
|
||||||
* @function
|
|
||||||
* @param {GitUrl} obj The parsed Git url object.
|
|
||||||
* @param {String} type The type of the stringified url (default `obj.protocol`).
|
|
||||||
* @return {String} The stringified url.
|
|
||||||
*/
|
|
||||||
gitUrlParse.stringify = function (obj, type) {
|
|
||||||
type = type || (obj.protocols && obj.protocols.length ? obj.protocols.join('+') : obj.protocol);
|
|
||||||
var port = obj.port ? ":" + obj.port : '';
|
|
||||||
var user = obj.user || 'git';
|
|
||||||
var maybeGitSuffix = obj.git_suffix ? ".git" : "";
|
|
||||||
switch (type) {
|
|
||||||
case "ssh":
|
|
||||||
if (port) return "ssh://" + user + "@" + obj.resource + port + "/" + obj.full_name + maybeGitSuffix;else return user + "@" + obj.resource + ":" + obj.full_name + maybeGitSuffix;
|
|
||||||
case "git+ssh":
|
|
||||||
case "ssh+git":
|
|
||||||
case "ftp":
|
|
||||||
case "ftps":
|
|
||||||
return type + "://" + user + "@" + obj.resource + port + "/" + obj.full_name + maybeGitSuffix;
|
|
||||||
case "http":
|
|
||||||
case "https":
|
|
||||||
var auth = obj.token ? buildToken(obj) : obj.user && (obj.protocols.includes('http') || obj.protocols.includes('https')) ? obj.user + "@" : "";
|
|
||||||
return type + "://" + auth + obj.resource + port + "/" + obj.full_name + maybeGitSuffix;
|
|
||||||
default:
|
|
||||||
return obj.href;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* buildToken
|
|
||||||
* Builds OAuth token prefix (helper function)
|
|
||||||
*
|
|
||||||
* @name buildToken
|
|
||||||
* @function
|
|
||||||
* @param {GitUrl} obj The parsed Git url object.
|
|
||||||
* @return {String} token prefix
|
|
||||||
*/
|
|
||||||
function buildToken(obj) {
|
|
||||||
switch (obj.source) {
|
|
||||||
case "bitbucket.org":
|
|
||||||
return "x-token-auth:" + obj.token + "@";
|
|
||||||
default:
|
|
||||||
return obj.token + "@";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = gitUrlParse;
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
/* 254 */,
|
/* 254 */,
|
||||||
/* 255 */,
|
/* 255 */,
|
||||||
/* 256 */
|
/* 256 */
|
||||||
|
@ -34836,7 +34438,7 @@ function __export(m) {
|
||||||
}
|
}
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
__export(__webpack_require__(560));
|
__export(__webpack_require__(560));
|
||||||
__export(__webpack_require__(599));
|
__export(__webpack_require__(53));
|
||||||
//# sourceMappingURL=index.js.map
|
//# sourceMappingURL=index.js.map
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
@ -35304,17 +34906,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.asyncForEach = exports.getInputList = exports.getArgs = exports.getInputs = void 0;
|
exports.asyncForEach = exports.getInputList = exports.getArgs = exports.getInputs = void 0;
|
||||||
const git_url_parse_1 = __importDefault(__webpack_require__(253));
|
|
||||||
const core = __importStar(__webpack_require__(470));
|
const core = __importStar(__webpack_require__(470));
|
||||||
function getInputs() {
|
function getInputs() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
return {
|
return {
|
||||||
context: yield getBuildContext(),
|
context: core.getInput('context') || '.',
|
||||||
file: core.getInput('file') || './Dockerfile',
|
file: core.getInput('file') || './Dockerfile',
|
||||||
buildArgs: yield getInputList('build-args'),
|
buildArgs: yield getInputList('build-args'),
|
||||||
labels: yield getInputList('labels'),
|
labels: yield getInputList('labels'),
|
||||||
|
@ -35330,10 +34928,7 @@ function getInputs() {
|
||||||
outputs: yield getInputList('outputs'),
|
outputs: yield getInputList('outputs'),
|
||||||
cacheFrom: yield getInputList('cache-from'),
|
cacheFrom: yield getInputList('cache-from'),
|
||||||
cacheTo: yield getInputList('cache-to'),
|
cacheTo: yield getInputList('cache-to'),
|
||||||
cacheGithub: /true/i.test(core.getInput('cache-github')),
|
cacheGithub: /true/i.test(core.getInput('cache-github'))
|
||||||
bake: /true/i.test(core.getInput('bake')),
|
|
||||||
bakeFiles: yield getInputList('bake-files'),
|
|
||||||
bakeTargets: yield getInputList('bake-targets')
|
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -35341,42 +34936,13 @@ exports.getInputs = getInputs;
|
||||||
function getArgs(inputs) {
|
function getArgs(inputs) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
let args = ['buildx'];
|
let args = ['buildx'];
|
||||||
if (inputs.bake) {
|
|
||||||
args.push.apply(args, yield getBakeArgs(inputs));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
args.push.apply(args, yield getBuildArgs(inputs));
|
args.push.apply(args, yield getBuildArgs(inputs));
|
||||||
}
|
|
||||||
args.push.apply(args, yield getCommonArgs(inputs));
|
args.push.apply(args, yield getCommonArgs(inputs));
|
||||||
if (!inputs.bake) {
|
|
||||||
args.push(inputs.context);
|
args.push(inputs.context);
|
||||||
}
|
|
||||||
else {
|
|
||||||
args.push.apply(args, inputs.bakeTargets);
|
|
||||||
}
|
|
||||||
return args;
|
return args;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.getArgs = getArgs;
|
exports.getArgs = getArgs;
|
||||||
function getBuildContext() {
|
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
|
||||||
let context = core.getInput('context');
|
|
||||||
if (!context) {
|
|
||||||
return '.';
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
const gitUrl = git_url_parse_1.default(context);
|
|
||||||
const gitRef = process.env['GIT_REF'] || '';
|
|
||||||
if (gitRef) {
|
|
||||||
return `${gitUrl.toString()}#${gitRef}`;
|
|
||||||
}
|
|
||||||
return gitUrl.toString();
|
|
||||||
}
|
|
||||||
catch (_a) {
|
|
||||||
return context;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function getCommonArgs(inputs) {
|
function getCommonArgs(inputs) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
let args = [];
|
let args = [];
|
||||||
|
@ -35395,15 +34961,6 @@ function getCommonArgs(inputs) {
|
||||||
return args;
|
return args;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
function getBakeArgs(inputs) {
|
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
|
||||||
let args = ['bake'];
|
|
||||||
yield exports.asyncForEach(inputs.bakeFiles, (bakeFile) => __awaiter(this, void 0, void 0, function* () {
|
|
||||||
args.push('--file', bakeFile);
|
|
||||||
}));
|
|
||||||
return args;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function getBuildArgs(inputs) {
|
function getBuildArgs(inputs) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
let args = ['build'];
|
let args = ['build'];
|
||||||
|
@ -38477,49 +38034,7 @@ exports.partialMatch = partialMatch;
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
/* 598 */,
|
/* 598 */,
|
||||||
/* 599 */
|
/* 599 */,
|
||||||
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* Copyright 2019, OpenTelemetry Authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
const context_1 = __webpack_require__(560);
|
|
||||||
class NoopContextManager {
|
|
||||||
active() {
|
|
||||||
return context_1.Context.ROOT_CONTEXT;
|
|
||||||
}
|
|
||||||
with(context, fn) {
|
|
||||||
return fn();
|
|
||||||
}
|
|
||||||
bind(target, context) {
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
enable() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
disable() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.NoopContextManager = NoopContextManager;
|
|
||||||
//# sourceMappingURL=NoopContextManager.js.map
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
/* 600 */,
|
/* 600 */,
|
||||||
/* 601 */
|
/* 601 */
|
||||||
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
||||||
|
@ -41252,145 +40767,7 @@ exports.NOOP_METER_PROVIDER = new NoopMeterProvider();
|
||||||
/* 663 */,
|
/* 663 */,
|
||||||
/* 664 */,
|
/* 664 */,
|
||||||
/* 665 */,
|
/* 665 */,
|
||||||
/* 666 */
|
/* 666 */,
|
||||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
var protocols = __webpack_require__(737),
|
|
||||||
isSsh = __webpack_require__(720),
|
|
||||||
qs = __webpack_require__(191);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* parsePath
|
|
||||||
* Parses the input url.
|
|
||||||
*
|
|
||||||
* @name parsePath
|
|
||||||
* @function
|
|
||||||
* @param {String} url The input url.
|
|
||||||
* @return {Object} An object containing the following fields:
|
|
||||||
*
|
|
||||||
* - `protocols` (Array): An array with the url protocols (usually it has one element).
|
|
||||||
* - `protocol` (String): The first protocol, `"ssh"` (if the url is a ssh url) or `"file"`.
|
|
||||||
* - `port` (null|Number): The domain port.
|
|
||||||
* - `resource` (String): The url domain (including subdomains).
|
|
||||||
* - `user` (String): The authentication user (usually for ssh urls).
|
|
||||||
* - `pathname` (String): The url pathname.
|
|
||||||
* - `hash` (String): The url hash.
|
|
||||||
* - `search` (String): The url querystring value.
|
|
||||||
* - `href` (String): The input url.
|
|
||||||
* - `query` (Object): The url querystring, parsed as object.
|
|
||||||
*/
|
|
||||||
function parsePath(url) {
|
|
||||||
url = (url || "").trim();
|
|
||||||
var output = {
|
|
||||||
protocols: protocols(url),
|
|
||||||
protocol: null,
|
|
||||||
port: null,
|
|
||||||
resource: "",
|
|
||||||
user: "",
|
|
||||||
pathname: "",
|
|
||||||
hash: "",
|
|
||||||
search: "",
|
|
||||||
href: url,
|
|
||||||
query: Object.create(null)
|
|
||||||
},
|
|
||||||
protocolIndex = url.indexOf("://"),
|
|
||||||
resourceIndex = -1,
|
|
||||||
splits = null,
|
|
||||||
parts = null;
|
|
||||||
|
|
||||||
if (url.startsWith(".")) {
|
|
||||||
if (url.startsWith("./")) {
|
|
||||||
url = url.substring(2);
|
|
||||||
}
|
|
||||||
output.pathname = url;
|
|
||||||
output.protocol = "file";
|
|
||||||
}
|
|
||||||
|
|
||||||
var firstChar = url.charAt(1);
|
|
||||||
if (!output.protocol) {
|
|
||||||
output.protocol = output.protocols[0];
|
|
||||||
if (!output.protocol) {
|
|
||||||
if (isSsh(url)) {
|
|
||||||
output.protocol = "ssh";
|
|
||||||
} else if (firstChar === "/" || firstChar === "~") {
|
|
||||||
url = url.substring(2);
|
|
||||||
output.protocol = "file";
|
|
||||||
} else {
|
|
||||||
output.protocol = "file";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (protocolIndex !== -1) {
|
|
||||||
url = url.substring(protocolIndex + 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
parts = url.split("/");
|
|
||||||
if (output.protocol !== "file") {
|
|
||||||
output.resource = parts.shift();
|
|
||||||
} else {
|
|
||||||
output.resource = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
// user@domain
|
|
||||||
splits = output.resource.split("@");
|
|
||||||
if (splits.length === 2) {
|
|
||||||
output.user = splits[0];
|
|
||||||
output.resource = splits[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
// domain.com:port
|
|
||||||
splits = output.resource.split(":");
|
|
||||||
if (splits.length === 2) {
|
|
||||||
output.resource = splits[0];
|
|
||||||
if (splits[1]) {
|
|
||||||
output.port = Number(splits[1]);
|
|
||||||
if (isNaN(output.port)) {
|
|
||||||
output.port = null;
|
|
||||||
parts.unshift(splits[1]);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
output.port = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove empty elements
|
|
||||||
parts = parts.filter(Boolean);
|
|
||||||
|
|
||||||
// Stringify the pathname
|
|
||||||
if (output.protocol === "file") {
|
|
||||||
output.pathname = output.href;
|
|
||||||
} else {
|
|
||||||
output.pathname = output.pathname || (output.protocol !== "file" || output.href[0] === "/" ? "/" : "") + parts.join("/");
|
|
||||||
}
|
|
||||||
|
|
||||||
// #some-hash
|
|
||||||
splits = output.pathname.split("#");
|
|
||||||
if (splits.length === 2) {
|
|
||||||
output.pathname = splits[0];
|
|
||||||
output.hash = splits[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
// ?foo=bar
|
|
||||||
splits = output.pathname.split("?");
|
|
||||||
if (splits.length === 2) {
|
|
||||||
output.pathname = splits[0];
|
|
||||||
output.search = splits[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
output.query = qs.parse(output.search);
|
|
||||||
output.href = output.href.replace(/\/$/, "");
|
|
||||||
output.pathname = output.pathname.replace(/\/$/, "");
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = parsePath;
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
/* 667 */,
|
/* 667 */,
|
||||||
/* 668 */,
|
/* 668 */,
|
||||||
/* 669 */
|
/* 669 */
|
||||||
|
@ -42035,47 +41412,7 @@ for (var i = 0; i < modules.length; i++) {
|
||||||
/* 717 */,
|
/* 717 */,
|
||||||
/* 718 */,
|
/* 718 */,
|
||||||
/* 719 */,
|
/* 719 */,
|
||||||
/* 720 */
|
/* 720 */,
|
||||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
var protocols = __webpack_require__(737);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* isSsh
|
|
||||||
* Checks if an input value is a ssh url or not.
|
|
||||||
*
|
|
||||||
* @name isSsh
|
|
||||||
* @function
|
|
||||||
* @param {String|Array} input The input url or an array of protocols.
|
|
||||||
* @return {Boolean} `true` if the input is a ssh url, `false` otherwise.
|
|
||||||
*/
|
|
||||||
function isSsh(input) {
|
|
||||||
|
|
||||||
if (Array.isArray(input)) {
|
|
||||||
return input.indexOf("ssh") !== -1 || input.indexOf("rsync") !== -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof input !== "string") {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var prots = protocols(input);
|
|
||||||
input = input.substring(input.indexOf("://") + 3);
|
|
||||||
if (isSsh(prots)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO This probably could be improved :)
|
|
||||||
return input.indexOf("@") < input.indexOf(":");
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = isSsh;
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
/* 721 */,
|
/* 721 */,
|
||||||
/* 722 */
|
/* 722 */
|
||||||
/***/ (function(module) {
|
/***/ (function(module) {
|
||||||
|
@ -42450,39 +41787,7 @@ function rng() {
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
/* 736 */,
|
/* 736 */,
|
||||||
/* 737 */
|
/* 737 */,
|
||||||
/***/ (function(module) {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* protocols
|
|
||||||
* Returns the protocols of an input url.
|
|
||||||
*
|
|
||||||
* @name protocols
|
|
||||||
* @function
|
|
||||||
* @param {String} input The input url.
|
|
||||||
* @param {Boolean|Number} first If `true`, the first protocol will be returned. If number, it will represent the zero-based index of the protocols array.
|
|
||||||
* @return {Array|String} The array of protocols or the specified protocol.
|
|
||||||
*/
|
|
||||||
module.exports = function protocols(input, first) {
|
|
||||||
|
|
||||||
if (first === true) {
|
|
||||||
first = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
var index = input.indexOf("://"),
|
|
||||||
splits = input.substring(0, index).split("+").filter(Boolean);
|
|
||||||
|
|
||||||
if (typeof first === "number") {
|
|
||||||
return splits[first];
|
|
||||||
}
|
|
||||||
|
|
||||||
return splits;
|
|
||||||
};
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
/* 738 */
|
/* 738 */
|
||||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
||||||
|
|
||||||
|
@ -44683,67 +43988,7 @@ module.exports = {
|
||||||
/***/ }),
|
/***/ }),
|
||||||
/* 821 */,
|
/* 821 */,
|
||||||
/* 822 */,
|
/* 822 */,
|
||||||
/* 823 */
|
/* 823 */,
|
||||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
|
|
||||||
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
|
||||||
|
|
||||||
var parsePath = __webpack_require__(666),
|
|
||||||
normalizeUrl = __webpack_require__(53);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* parseUrl
|
|
||||||
* Parses the input url.
|
|
||||||
*
|
|
||||||
* **Note**: This *throws* if invalid urls are provided.
|
|
||||||
*
|
|
||||||
* @name parseUrl
|
|
||||||
* @function
|
|
||||||
* @param {String} url The input url.
|
|
||||||
* @param {Boolean|Object} normalize Wheter to normalize the url or not.
|
|
||||||
* Default is `false`. If `true`, the url will
|
|
||||||
* be normalized. If an object, it will be the
|
|
||||||
* options object sent to [`normalize-url`](https://github.com/sindresorhus/normalize-url).
|
|
||||||
*
|
|
||||||
* For SSH urls, normalize won't work.
|
|
||||||
*
|
|
||||||
* @return {Object} An object containing the following fields:
|
|
||||||
*
|
|
||||||
* - `protocols` (Array): An array with the url protocols (usually it has one element).
|
|
||||||
* - `protocol` (String): The first protocol, `"ssh"` (if the url is a ssh url) or `"file"`.
|
|
||||||
* - `port` (null|Number): The domain port.
|
|
||||||
* - `resource` (String): The url domain (including subdomains).
|
|
||||||
* - `user` (String): The authentication user (usually for ssh urls).
|
|
||||||
* - `pathname` (String): The url pathname.
|
|
||||||
* - `hash` (String): The url hash.
|
|
||||||
* - `search` (String): The url querystring value.
|
|
||||||
* - `href` (String): The input url.
|
|
||||||
* - `query` (Object): The url querystring, parsed as object.
|
|
||||||
*/
|
|
||||||
function parseUrl(url) {
|
|
||||||
var normalize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
||||||
|
|
||||||
if (typeof url !== "string" || !url.trim()) {
|
|
||||||
throw new Error("Invalid url.");
|
|
||||||
}
|
|
||||||
if (normalize) {
|
|
||||||
if ((typeof normalize === "undefined" ? "undefined" : _typeof(normalize)) !== "object") {
|
|
||||||
normalize = {
|
|
||||||
stripFragment: false
|
|
||||||
};
|
|
||||||
}
|
|
||||||
url = normalizeUrl(url, normalize);
|
|
||||||
}
|
|
||||||
var parsed = parsePath(url);
|
|
||||||
return parsed;
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = parseUrl;
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
/* 824 */
|
/* 824 */
|
||||||
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
||||||
|
|
||||||
|
@ -44787,7 +44032,7 @@ const core = __importStar(__webpack_require__(470));
|
||||||
const cachePath = path.join(os.tmpdir(), 'docker-build-push');
|
const cachePath = path.join(os.tmpdir(), 'docker-build-push');
|
||||||
function restoreCache(inputs) {
|
function restoreCache(inputs) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
if (inputs.bake || !inputs.cacheGithub) {
|
if (!inputs.cacheGithub) {
|
||||||
return inputs;
|
return inputs;
|
||||||
}
|
}
|
||||||
const primaryKey = `${process.env.RUNNER_OS}-docker-build-push-${process.env.GITHUB_SHA}`;
|
const primaryKey = `${process.env.RUNNER_OS}-docker-build-push-${process.env.GITHUB_SHA}`;
|
||||||
|
@ -44819,7 +44064,7 @@ function restoreCache(inputs) {
|
||||||
exports.restoreCache = restoreCache;
|
exports.restoreCache = restoreCache;
|
||||||
function saveCache(inputs) {
|
function saveCache(inputs) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
if (inputs.bake || !inputs.cacheGithub) {
|
if (!inputs.cacheGithub) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!stateHelper.cachePrimaryKey) {
|
if (!stateHelper.cachePrimaryKey) {
|
||||||
|
|
|
@ -18,9 +18,6 @@ export interface Inputs {
|
||||||
cacheFrom: string[];
|
cacheFrom: string[];
|
||||||
cacheTo: string[];
|
cacheTo: string[];
|
||||||
cacheGithub: boolean;
|
cacheGithub: boolean;
|
||||||
bake: boolean;
|
|
||||||
bakeFiles: string[];
|
|
||||||
bakeTargets: string[];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getInputs(): Promise<Inputs> {
|
export async function getInputs(): Promise<Inputs> {
|
||||||
|
@ -41,29 +38,15 @@ export async function getInputs(): Promise<Inputs> {
|
||||||
outputs: await getInputList('outputs'),
|
outputs: await getInputList('outputs'),
|
||||||
cacheFrom: await getInputList('cache-from'),
|
cacheFrom: await getInputList('cache-from'),
|
||||||
cacheTo: await getInputList('cache-to'),
|
cacheTo: await getInputList('cache-to'),
|
||||||
cacheGithub: /true/i.test(core.getInput('cache-github')),
|
cacheGithub: /true/i.test(core.getInput('cache-github'))
|
||||||
bake: /true/i.test(core.getInput('bake')),
|
|
||||||
bakeFiles: await getInputList('bake-files'),
|
|
||||||
bakeTargets: await getInputList('bake-targets')
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getArgs(inputs: Inputs): Promise<Array<string>> {
|
export async function getArgs(inputs: Inputs): Promise<Array<string>> {
|
||||||
let args: Array<string> = ['buildx'];
|
let args: Array<string> = ['buildx'];
|
||||||
|
|
||||||
if (inputs.bake) {
|
|
||||||
args.push.apply(args, await getBakeArgs(inputs));
|
|
||||||
} else {
|
|
||||||
args.push.apply(args, await getBuildArgs(inputs));
|
args.push.apply(args, await getBuildArgs(inputs));
|
||||||
}
|
|
||||||
args.push.apply(args, await getCommonArgs(inputs));
|
args.push.apply(args, await getCommonArgs(inputs));
|
||||||
|
|
||||||
if (!inputs.bake) {
|
|
||||||
args.push(inputs.context);
|
args.push(inputs.context);
|
||||||
} else {
|
|
||||||
args.push.apply(args, inputs.bakeTargets);
|
|
||||||
}
|
|
||||||
|
|
||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,14 +67,6 @@ async function getCommonArgs(inputs: Inputs): Promise<Array<string>> {
|
||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getBakeArgs(inputs: Inputs): Promise<Array<string>> {
|
|
||||||
let args: Array<string> = ['bake'];
|
|
||||||
await asyncForEach(inputs.bakeFiles, async bakeFile => {
|
|
||||||
args.push('--file', bakeFile);
|
|
||||||
});
|
|
||||||
return args;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function getBuildArgs(inputs: Inputs): Promise<Array<string>> {
|
async function getBuildArgs(inputs: Inputs): Promise<Array<string>> {
|
||||||
let args: Array<string> = ['build'];
|
let args: Array<string> = ['build'];
|
||||||
await asyncForEach(inputs.buildArgs, async buildArg => {
|
await asyncForEach(inputs.buildArgs, async buildArg => {
|
||||||
|
|
|
@ -8,7 +8,7 @@ import * as core from '@actions/core';
|
||||||
const cachePath = path.join(os.tmpdir(), 'docker-build-push');
|
const cachePath = path.join(os.tmpdir(), 'docker-build-push');
|
||||||
|
|
||||||
export async function restoreCache(inputs: Inputs): Promise<Inputs> {
|
export async function restoreCache(inputs: Inputs): Promise<Inputs> {
|
||||||
if (inputs.bake || !inputs.cacheGithub) {
|
if (!inputs.cacheGithub) {
|
||||||
return inputs;
|
return inputs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ export async function restoreCache(inputs: Inputs): Promise<Inputs> {
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function saveCache(inputs: Inputs): Promise<void> {
|
export async function saveCache(inputs: Inputs): Promise<void> {
|
||||||
if (inputs.bake || !inputs.cacheGithub) {
|
if (!inputs.cacheGithub) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
4
src/md5.d.ts
vendored
4
src/md5.d.ts
vendored
|
@ -1,4 +0,0 @@
|
||||||
declare module 'md5' {
|
|
||||||
function md5(data: string, options?: {encoding: string; asBytes: boolean; asString: boolean}): string;
|
|
||||||
export = md5;
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
FROM alpine
|
|
||||||
|
|
||||||
ARG name=world
|
|
||||||
RUN echo "Hello ${name}!"
|
|
|
@ -1,39 +0,0 @@
|
||||||
group "default" {
|
|
||||||
targets = ["db", "app"]
|
|
||||||
}
|
|
||||||
|
|
||||||
group "release" {
|
|
||||||
targets = ["db", "app-plus"]
|
|
||||||
}
|
|
||||||
|
|
||||||
target "db" {
|
|
||||||
context = "./test"
|
|
||||||
tags = ["docker.io/tonistiigi/db"]
|
|
||||||
}
|
|
||||||
|
|
||||||
target "app" {
|
|
||||||
context = "./test"
|
|
||||||
dockerfile = "Dockerfile-bake"
|
|
||||||
args = {
|
|
||||||
name = "foo"
|
|
||||||
}
|
|
||||||
tags = [
|
|
||||||
"localhost:5000/name/app:latest",
|
|
||||||
"localhost:5000/name/app:1.0.0"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
target "cross" {
|
|
||||||
platforms = [
|
|
||||||
"linux/amd64",
|
|
||||||
"linux/arm64",
|
|
||||||
"linux/386"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
target "app-plus" {
|
|
||||||
inherits = ["app", "cross"]
|
|
||||||
args = {
|
|
||||||
IAMPLUS = "true"
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue