mirror of
https://github.com/hoverkraft-tech/compose-action.git
synced 2026-03-06 16:23:08 +08:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5a56211d04 | ||
|
|
65c12c82c2 | ||
|
|
265e476512 | ||
|
|
387ab0a78f | ||
|
|
2a6935e036 | ||
|
|
eeae15a0f9 | ||
|
|
b160464f2e |
10
.github/dependabot.yml
vendored
10
.github/dependabot.yml
vendored
@ -47,11 +47,17 @@ updates:
|
|||||||
day: friday
|
day: friday
|
||||||
time: "04:00"
|
time: "04:00"
|
||||||
groups:
|
groups:
|
||||||
npm-dev-dependencies:
|
|
||||||
dependency-type: development
|
|
||||||
npm-actions-dependencies:
|
npm-actions-dependencies:
|
||||||
patterns:
|
patterns:
|
||||||
- "@actions/*"
|
- "@actions/*"
|
||||||
|
npm-development-dependencies:
|
||||||
|
dependency-type: development
|
||||||
|
patterns:
|
||||||
|
- "*"
|
||||||
|
npm-production-dependencies:
|
||||||
|
dependency-type: production
|
||||||
|
patterns:
|
||||||
|
- "*"
|
||||||
|
|
||||||
- package-ecosystem: "devcontainers"
|
- package-ecosystem: "devcontainers"
|
||||||
open-pull-requests-limit: 20
|
open-pull-requests-limit: 20
|
||||||
|
|||||||
2
.github/workflows/__check-action.yml
vendored
2
.github/workflows/__check-action.yml
vendored
@ -179,7 +179,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Set up Docker context
|
- name: Set up Docker context
|
||||||
if: ${{ matrix.docker-context }}
|
if: ${{ matrix.docker-context }}
|
||||||
uses: docker/setup-docker-action@e43656e248c0bd0647d3f5c195d116aacf6fcaf4 # v4.7.0
|
uses: docker/setup-docker-action@1a6edb0ba9ac496f6850236981f15d8f9a82254d # v5.0.0
|
||||||
with:
|
with:
|
||||||
context: ${{ matrix.docker-context }}
|
context: ${{ matrix.docker-context }}
|
||||||
|
|
||||||
|
|||||||
2
.github/workflows/__check-dist.yml
vendored
2
.github/workflows/__check-dist.yml
vendored
@ -17,7 +17,7 @@ jobs:
|
|||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- id: setup-node
|
- id: setup-node
|
||||||
uses: hoverkraft-tech/ci-github-nodejs/actions/setup-node@c9d9d041ba4ef35695ee469c4782fa6a8bbebbcc # 0.21.2
|
uses: hoverkraft-tech/ci-github-nodejs/actions/setup-node@775ce0902c528062cc94141dd7d13261083b752a # 0.22.0
|
||||||
|
|
||||||
- name: Build dist/ Directory
|
- name: Build dist/ Directory
|
||||||
id: package
|
id: package
|
||||||
|
|||||||
2
.github/workflows/__check-nodejs.yml
vendored
2
.github/workflows/__check-nodejs.yml
vendored
@ -7,7 +7,7 @@ permissions: {}
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test-nodejs:
|
test-nodejs:
|
||||||
uses: hoverkraft-tech/ci-github-nodejs/.github/workflows/continuous-integration.yml@c9d9d041ba4ef35695ee469c4782fa6a8bbebbcc # 0.21.2
|
uses: hoverkraft-tech/ci-github-nodejs/.github/workflows/continuous-integration.yml@775ce0902c528062cc94141dd7d13261083b752a # 0.22.0
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
id-token: write
|
id-token: write
|
||||||
|
|||||||
2
.github/workflows/__shared-ci.yml
vendored
2
.github/workflows/__shared-ci.yml
vendored
@ -7,7 +7,7 @@ permissions: {}
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
linter:
|
linter:
|
||||||
uses: hoverkraft-tech/ci-github-common/.github/workflows/linter.yml@b17226e57c8ef31f860719766656ebb6df017218 # 0.31.6
|
uses: hoverkraft-tech/ci-github-common/.github/workflows/linter.yml@f5847cb398fe65d53794e6aba98ebdfa0801f691 # 0.32.0
|
||||||
permissions:
|
permissions:
|
||||||
actions: read
|
actions: read
|
||||||
contents: read
|
contents: read
|
||||||
|
|||||||
2
.github/workflows/greetings.yml
vendored
2
.github/workflows/greetings.yml
vendored
@ -10,7 +10,7 @@ permissions: {}
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
greetings:
|
greetings:
|
||||||
uses: hoverkraft-tech/ci-github-common/.github/workflows/greetings.yml@b17226e57c8ef31f860719766656ebb6df017218 # 0.31.6
|
uses: hoverkraft-tech/ci-github-common/.github/workflows/greetings.yml@f5847cb398fe65d53794e6aba98ebdfa0801f691 # 0.32.0
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
issues: write
|
issues: write
|
||||||
|
|||||||
4
.github/workflows/main-ci.yml
vendored
4
.github/workflows/main-ci.yml
vendored
@ -62,7 +62,7 @@ jobs:
|
|||||||
app-id: ${{ vars.CI_BOT_APP_ID }}
|
app-id: ${{ vars.CI_BOT_APP_ID }}
|
||||||
private-key: ${{ secrets.CI_BOT_APP_PRIVATE_KEY }}
|
private-key: ${{ secrets.CI_BOT_APP_PRIVATE_KEY }}
|
||||||
|
|
||||||
- uses: hoverkraft-tech/ci-github-common/actions/create-and-merge-pull-request@b17226e57c8ef31f860719766656ebb6df017218 # 0.31.6
|
- uses: hoverkraft-tech/ci-github-common/actions/create-and-merge-pull-request@f5847cb398fe65d53794e6aba98ebdfa0801f691 # 0.32.0
|
||||||
with:
|
with:
|
||||||
github-token: ${{ steps.generate-token.outputs.token }}
|
github-token: ${{ steps.generate-token.outputs.token }}
|
||||||
branch: docs/actions-workflows-documentation-update
|
branch: docs/actions-workflows-documentation-update
|
||||||
@ -74,7 +74,7 @@ jobs:
|
|||||||
[skip ci]
|
[skip ci]
|
||||||
|
|
||||||
- id: upload-artifact
|
- id: upload-artifact
|
||||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
||||||
with:
|
with:
|
||||||
name: documentation-files-${{ github.run_id }}
|
name: documentation-files-${{ github.run_id }}
|
||||||
path: |
|
path: |
|
||||||
|
|||||||
2
.github/workflows/need-fix-to-issue.yml
vendored
2
.github/workflows/need-fix-to-issue.yml
vendored
@ -19,7 +19,7 @@ permissions: {}
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
main:
|
main:
|
||||||
uses: hoverkraft-tech/ci-github-common/.github/workflows/need-fix-to-issue.yml@b17226e57c8ef31f860719766656ebb6df017218 # 0.31.6
|
uses: hoverkraft-tech/ci-github-common/.github/workflows/need-fix-to-issue.yml@f5847cb398fe65d53794e6aba98ebdfa0801f691 # 0.32.0
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
issues: write
|
issues: write
|
||||||
|
|||||||
2
.github/workflows/prepare-release.yml
vendored
2
.github/workflows/prepare-release.yml
vendored
@ -15,7 +15,7 @@ permissions: {}
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release:
|
release:
|
||||||
uses: hoverkraft-tech/ci-github-publish/.github/workflows/prepare-release.yml@84e8ace407055e7a40ba6670a8c697e1ce2dfafa # 0.20.1
|
uses: hoverkraft-tech/ci-github-publish/.github/workflows/prepare-release.yml@5ff7d4c3910971ed53834becd5967271b4e228cf # 0.21.1
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
id-token: write
|
id-token: write
|
||||||
|
|||||||
2
.github/workflows/semantic-pull-request.yml
vendored
2
.github/workflows/semantic-pull-request.yml
vendored
@ -11,7 +11,7 @@ permissions: {}
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
main:
|
main:
|
||||||
uses: hoverkraft-tech/ci-github-common/.github/workflows/semantic-pull-request.yml@b17226e57c8ef31f860719766656ebb6df017218 # 0.31.6
|
uses: hoverkraft-tech/ci-github-common/.github/workflows/semantic-pull-request.yml@f5847cb398fe65d53794e6aba98ebdfa0801f691 # 0.32.0
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|||||||
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
@ -8,7 +8,7 @@ permissions: {}
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
main:
|
main:
|
||||||
uses: hoverkraft-tech/ci-github-common/.github/workflows/stale.yml@b17226e57c8ef31f860719766656ebb6df017218 # 0.31.6
|
uses: hoverkraft-tech/ci-github-common/.github/workflows/stale.yml@f5847cb398fe65d53794e6aba98ebdfa0801f691 # 0.32.0
|
||||||
permissions:
|
permissions:
|
||||||
issues: write
|
issues: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|||||||
12
README.md
12
README.md
@ -49,7 +49,7 @@ Some extra options can be passed to the `docker compose down` command using the
|
|||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: hoverkraft-tech/compose-action@05da55b2bb8a5a759d1c4732095044bd9018c050 # v2.4.3
|
- uses: hoverkraft-tech/compose-action@4894d2492015c1774ee5a13a95b1072093087ec3 # v2.5.0
|
||||||
with:
|
with:
|
||||||
# Additional options to pass to `docker` command.
|
# Additional options to pass to `docker` command.
|
||||||
docker-flags: ""
|
docker-flags: ""
|
||||||
@ -139,7 +139,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v4.2.2
|
- uses: actions/checkout@v4.2.2
|
||||||
|
|
||||||
- name: Run docker compose
|
- name: Run docker compose
|
||||||
uses: hoverkraft-tech/compose-action@05da55b2bb8a5a759d1c4732095044bd9018c050 # v2.4.3
|
uses: hoverkraft-tech/compose-action@4894d2492015c1774ee5a13a95b1072093087ec3 # v2.5.0
|
||||||
with:
|
with:
|
||||||
compose-file: "./docker/docker-compose.yml"
|
compose-file: "./docker/docker-compose.yml"
|
||||||
|
|
||||||
@ -153,7 +153,7 @@ jobs:
|
|||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4.2.2
|
- uses: actions/checkout@v4.2.2
|
||||||
- uses: hoverkraft-tech/compose-action@05da55b2bb8a5a759d1c4732095044bd9018c050 # v2.4.3
|
- uses: hoverkraft-tech/compose-action@4894d2492015c1774ee5a13a95b1072093087ec3 # v2.5.0
|
||||||
with:
|
with:
|
||||||
compose-file: "./docker/docker-compose.yml"
|
compose-file: "./docker/docker-compose.yml"
|
||||||
env:
|
env:
|
||||||
@ -168,7 +168,7 @@ Perform `docker compose up` to some given service instead of all of them
|
|||||||
steps:
|
steps:
|
||||||
# need checkout before using compose-action
|
# need checkout before using compose-action
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: hoverkraft-tech/compose-action@05da55b2bb8a5a759d1c4732095044bd9018c050 # v2.4.3
|
- uses: hoverkraft-tech/compose-action@4894d2492015c1774ee5a13a95b1072093087ec3 # v2.5.0
|
||||||
with:
|
with:
|
||||||
compose-file: "./docker/docker-compose.yml"
|
compose-file: "./docker/docker-compose.yml"
|
||||||
services: |
|
services: |
|
||||||
@ -206,7 +206,7 @@ A full list of flags can be found in the [Docker compose documentation](https://
|
|||||||
steps:
|
steps:
|
||||||
# need checkout before using compose-action
|
# need checkout before using compose-action
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: hoverkraft-tech/compose-action@05da55b2bb8a5a759d1c4732095044bd9018c050 # v2.4.3
|
- uses: hoverkraft-tech/compose-action@4894d2492015c1774ee5a13a95b1072093087ec3 # v2.5.0
|
||||||
with:
|
with:
|
||||||
compose-file: "./docker/docker-compose.yml"
|
compose-file: "./docker/docker-compose.yml"
|
||||||
compose-flags: "--profile profile-1"
|
compose-flags: "--profile profile-1"
|
||||||
@ -220,7 +220,7 @@ This is useful when you have a base compose file and additional files for differ
|
|||||||
steps:
|
steps:
|
||||||
# need checkout before using compose-action
|
# need checkout before using compose-action
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: hoverkraft-tech/compose-action@05da55b2bb8a5a759d1c4732095044bd9018c050 # v2.4.3
|
- uses: hoverkraft-tech/compose-action@4894d2492015c1774ee5a13a95b1072093087ec3 # v2.5.0
|
||||||
with:
|
with:
|
||||||
compose-file: |
|
compose-file: |
|
||||||
./docker/docker-compose.yml
|
./docker/docker-compose.yml
|
||||||
|
|||||||
1015
dist/index.js
generated
vendored
1015
dist/index.js
generated
vendored
File diff suppressed because it is too large
Load Diff
25
dist/licenses.txt
generated
vendored
25
dist/licenses.txt
generated
vendored
@ -512,6 +512,31 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
|
|
||||||
|
json-with-bigint
|
||||||
|
MIT
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2023 Ivan Korolenko
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
semver
|
semver
|
||||||
ISC
|
ISC
|
||||||
The ISC License
|
The ISC License
|
||||||
|
|||||||
26
dist/post.js
generated
vendored
26
dist/post.js
generated
vendored
@ -28436,7 +28436,7 @@ function composeCollection(CN, ctx, token, props, onError) {
|
|||||||
let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);
|
let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);
|
||||||
if (!tag) {
|
if (!tag) {
|
||||||
const kt = ctx.schema.knownTags[tagName];
|
const kt = ctx.schema.knownTags[tagName];
|
||||||
if (kt && kt.collection === expType) {
|
if (kt?.collection === expType) {
|
||||||
ctx.schema.tags.push(Object.assign({}, kt, { default: false }));
|
ctx.schema.tags.push(Object.assign({}, kt, { default: false }));
|
||||||
tag = kt;
|
tag = kt;
|
||||||
}
|
}
|
||||||
@ -29315,7 +29315,7 @@ function resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, ta
|
|||||||
});
|
});
|
||||||
if (!props.found) {
|
if (!props.found) {
|
||||||
if (props.anchor || props.tag || value) {
|
if (props.anchor || props.tag || value) {
|
||||||
if (value && value.type === 'block-seq')
|
if (value?.type === 'block-seq')
|
||||||
onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');
|
onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');
|
||||||
else
|
else
|
||||||
onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');
|
onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');
|
||||||
@ -29530,7 +29530,7 @@ function resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onErr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (value) {
|
else if (value) {
|
||||||
if ('source' in value && value.source && value.source[0] === ':')
|
if ('source' in value && value.source?.[0] === ':')
|
||||||
onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);
|
onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);
|
||||||
else
|
else
|
||||||
onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);
|
onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);
|
||||||
@ -29574,7 +29574,7 @@ function resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onErr
|
|||||||
const expectedEnd = isMap ? '}' : ']';
|
const expectedEnd = isMap ? '}' : ']';
|
||||||
const [ce, ...ee] = fc.end;
|
const [ce, ...ee] = fc.end;
|
||||||
let cePos = offset;
|
let cePos = offset;
|
||||||
if (ce && ce.source === expectedEnd)
|
if (ce?.source === expectedEnd)
|
||||||
cePos = ce.offset + ce.source.length;
|
cePos = ce.offset + ce.source.length;
|
||||||
else {
|
else {
|
||||||
const name = fcName[0].toUpperCase() + fcName.substring(1);
|
const name = fcName[0].toUpperCase() + fcName.substring(1);
|
||||||
@ -30943,7 +30943,7 @@ const prettifyError = (src, lc) => (error) => {
|
|||||||
if (/[^ ]/.test(lineStr)) {
|
if (/[^ ]/.test(lineStr)) {
|
||||||
let count = 1;
|
let count = 1;
|
||||||
const end = error.linePos[1];
|
const end = error.linePos[1];
|
||||||
if (end && end.line === line && end.col > col) {
|
if (end?.line === line && end.col > col) {
|
||||||
count = Math.max(1, Math.min(end.col - col, 80 - ci));
|
count = Math.max(1, Math.min(end.col - col, 80 - ci));
|
||||||
}
|
}
|
||||||
const pointer = ' '.repeat(ci) + '^'.repeat(count);
|
const pointer = ' '.repeat(ci) + '^'.repeat(count);
|
||||||
@ -31108,7 +31108,7 @@ class Alias extends Node.NodeBase {
|
|||||||
data = anchors.get(source);
|
data = anchors.get(source);
|
||||||
}
|
}
|
||||||
/* istanbul ignore if */
|
/* istanbul ignore if */
|
||||||
if (!data || data.res === undefined) {
|
if (data?.res === undefined) {
|
||||||
const msg = 'This should not happen: Alias anchor was not resolved?';
|
const msg = 'This should not happen: Alias anchor was not resolved?';
|
||||||
throw new ReferenceError(msg);
|
throw new ReferenceError(msg);
|
||||||
}
|
}
|
||||||
@ -33434,7 +33434,7 @@ class Parser {
|
|||||||
}
|
}
|
||||||
*step() {
|
*step() {
|
||||||
const top = this.peek(1);
|
const top = this.peek(1);
|
||||||
if (this.type === 'doc-end' && (!top || top.type !== 'doc-end')) {
|
if (this.type === 'doc-end' && top?.type !== 'doc-end') {
|
||||||
while (this.stack.length > 0)
|
while (this.stack.length > 0)
|
||||||
yield* this.pop();
|
yield* this.pop();
|
||||||
this.stack.push({
|
this.stack.push({
|
||||||
@ -33966,7 +33966,7 @@ class Parser {
|
|||||||
do {
|
do {
|
||||||
yield* this.pop();
|
yield* this.pop();
|
||||||
top = this.peek(1);
|
top = this.peek(1);
|
||||||
} while (top && top.type === 'flow-collection');
|
} while (top?.type === 'flow-collection');
|
||||||
}
|
}
|
||||||
else if (fc.end.length === 0) {
|
else if (fc.end.length === 0) {
|
||||||
switch (this.type) {
|
switch (this.type) {
|
||||||
@ -36124,7 +36124,7 @@ function stringifyNumber({ format, minFractionDigits, tag, value }) {
|
|||||||
const num = typeof value === 'number' ? value : Number(value);
|
const num = typeof value === 'number' ? value : Number(value);
|
||||||
if (!isFinite(num))
|
if (!isFinite(num))
|
||||||
return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';
|
return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';
|
||||||
let n = JSON.stringify(value);
|
let n = Object.is(value, -0) ? '-0' : JSON.stringify(value);
|
||||||
if (!format &&
|
if (!format &&
|
||||||
minFractionDigits &&
|
minFractionDigits &&
|
||||||
(!tag || tag === 'tag:yaml.org,2002:float') &&
|
(!tag || tag === 'tag:yaml.org,2002:float') &&
|
||||||
@ -36254,7 +36254,7 @@ function stringifyPair({ key, value }, ctx, onComment, onChompKeep) {
|
|||||||
ws += `\n${stringifyComment.indentComment(cs, ctx.indent)}`;
|
ws += `\n${stringifyComment.indentComment(cs, ctx.indent)}`;
|
||||||
}
|
}
|
||||||
if (valueStr === '' && !ctx.inFlow) {
|
if (valueStr === '' && !ctx.inFlow) {
|
||||||
if (ws === '\n')
|
if (ws === '\n' && valueComment)
|
||||||
ws = '\n\n';
|
ws = '\n\n';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -37108,7 +37108,7 @@ const external_path_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.me
|
|||||||
var external_http_ = __nccwpck_require__(8611);
|
var external_http_ = __nccwpck_require__(8611);
|
||||||
// EXTERNAL MODULE: external "https"
|
// EXTERNAL MODULE: external "https"
|
||||||
var external_https_ = __nccwpck_require__(5692);
|
var external_https_ = __nccwpck_require__(5692);
|
||||||
;// CONCATENATED MODULE: ./node_modules/@actions/core/node_modules/@actions/http-client/lib/proxy.js
|
;// CONCATENATED MODULE: ./node_modules/@actions/http-client/lib/proxy.js
|
||||||
function getProxyUrl(reqUrl) {
|
function getProxyUrl(reqUrl) {
|
||||||
const usingSsl = reqUrl.protocol === 'https:';
|
const usingSsl = reqUrl.protocol === 'https:';
|
||||||
if (checkBypass(reqUrl)) {
|
if (checkBypass(reqUrl)) {
|
||||||
@ -37203,7 +37203,7 @@ class DecodedURL extends URL {
|
|||||||
var node_modules_tunnel = __nccwpck_require__(770);
|
var node_modules_tunnel = __nccwpck_require__(770);
|
||||||
// EXTERNAL MODULE: ./node_modules/undici/index.js
|
// EXTERNAL MODULE: ./node_modules/undici/index.js
|
||||||
var undici = __nccwpck_require__(6752);
|
var undici = __nccwpck_require__(6752);
|
||||||
;// CONCATENATED MODULE: ./node_modules/@actions/core/node_modules/@actions/http-client/lib/index.js
|
;// CONCATENATED MODULE: ./node_modules/@actions/http-client/lib/index.js
|
||||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||||
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
|
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
@ -37900,7 +37900,7 @@ class lib_HttpClient {
|
|||||||
}
|
}
|
||||||
const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
|
const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
|
||||||
//# sourceMappingURL=index.js.map
|
//# sourceMappingURL=index.js.map
|
||||||
;// CONCATENATED MODULE: ./node_modules/@actions/core/node_modules/@actions/http-client/lib/auth.js
|
;// CONCATENATED MODULE: ./node_modules/@actions/http-client/lib/auth.js
|
||||||
var auth_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
|
var auth_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
|||||||
6418
package-lock.json
generated
6418
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -32,10 +32,10 @@
|
|||||||
"docker-compose": "^1.3.1"
|
"docker-compose": "^1.3.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@ts-dev-tools/core": "^1.9.14",
|
"@ts-dev-tools/core": "^1.11.1",
|
||||||
"@vercel/ncc": "^0.38.4",
|
"@vercel/ncc": "^0.38.4",
|
||||||
"eslint-plugin-github": "^6.0.0",
|
"eslint-plugin-github": "^6.0.0",
|
||||||
"eslint-plugin-jsonc": "^2.21.0"
|
"eslint-plugin-jsonc": "^3.1.1"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"package": "npm run package:index && npm run package:post",
|
"package": "npm run package:index && npm run package:post",
|
||||||
|
|||||||
@ -24,18 +24,25 @@ jest.unstable_mockModule("docker-compose", () => ({
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
// Mock node:fs
|
// Mock node:fs
|
||||||
jest.unstable_mockModule("node:fs", () => ({
|
jest.unstable_mockModule("node:fs", async () => {
|
||||||
existsSync: jest.fn().mockReturnValue(true),
|
const actualFs = await jest.requireActual<typeof import("node:fs")>("node:fs");
|
||||||
default: { existsSync: jest.fn().mockReturnValue(true) },
|
|
||||||
}));
|
return {
|
||||||
|
...actualFs,
|
||||||
|
existsSync: jest.fn().mockReturnValue(true),
|
||||||
|
default: {
|
||||||
|
...actualFs,
|
||||||
|
existsSync: jest.fn().mockReturnValue(true),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
// Dynamic imports after mock setup
|
// Dynamic imports after mock setup
|
||||||
const { run } = await import("./index-runner.js");
|
const { run } = await import("./index-runner.js");
|
||||||
const { InputService } = await import("./services/input.service.js");
|
const { InputService } = await import("./services/input.service.js");
|
||||||
const { LoggerService, LogLevel } = await import("./services/logger.service.js");
|
const { LoggerService, LogLevel } = await import("./services/logger.service.js");
|
||||||
const { DockerComposeInstallerService } = await import(
|
const { DockerComposeInstallerService } =
|
||||||
"./services/docker-compose-installer.service.js"
|
await import("./services/docker-compose-installer.service.js");
|
||||||
);
|
|
||||||
const { DockerComposeService } = await import("./services/docker-compose.service.js");
|
const { DockerComposeService } = await import("./services/docker-compose.service.js");
|
||||||
|
|
||||||
describe("run", () => {
|
describe("run", () => {
|
||||||
|
|||||||
@ -24,17 +24,24 @@ jest.unstable_mockModule("docker-compose", () => ({
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
// Mock node:fs
|
// Mock node:fs
|
||||||
jest.unstable_mockModule("node:fs", () => ({
|
jest.unstable_mockModule("node:fs", async () => {
|
||||||
existsSync: jest.fn().mockReturnValue(true),
|
const actualFs = await jest.requireActual<typeof import("node:fs")>("node:fs");
|
||||||
default: { existsSync: jest.fn().mockReturnValue(true) },
|
|
||||||
}));
|
return {
|
||||||
|
...actualFs,
|
||||||
|
existsSync: jest.fn().mockReturnValue(true),
|
||||||
|
default: {
|
||||||
|
...actualFs,
|
||||||
|
existsSync: jest.fn().mockReturnValue(true),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
// Dynamic imports after mock setup
|
// Dynamic imports after mock setup
|
||||||
const { InputService } = await import("./services/input.service.js");
|
const { InputService } = await import("./services/input.service.js");
|
||||||
const { LoggerService, LogLevel } = await import("./services/logger.service.js");
|
const { LoggerService, LogLevel } = await import("./services/logger.service.js");
|
||||||
const { DockerComposeInstallerService } = await import(
|
const { DockerComposeInstallerService } =
|
||||||
"./services/docker-compose-installer.service.js"
|
await import("./services/docker-compose-installer.service.js");
|
||||||
);
|
|
||||||
const { DockerComposeService } = await import("./services/docker-compose.service.js");
|
const { DockerComposeService } = await import("./services/docker-compose.service.js");
|
||||||
|
|
||||||
let getInputsMock: jest.SpiedFunction<typeof InputService.prototype.getInputs>;
|
let getInputsMock: jest.SpiedFunction<typeof InputService.prototype.getInputs>;
|
||||||
|
|||||||
@ -80,6 +80,23 @@ describe("DockerComposeInstallerService", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe("install", () => {
|
describe("install", () => {
|
||||||
|
it("should install latest when compose version is not specified and Compose is missing", async () => {
|
||||||
|
// Arrange: first call to version() fails (Compose missing)
|
||||||
|
versionMock.mockRejectedValueOnce(new Error("version not installed"));
|
||||||
|
|
||||||
|
const latestVersion = "v2.0.0";
|
||||||
|
mockLatestRelease(latestVersion);
|
||||||
|
versionMock.mockResolvedValueOnce(composeVersionResponse(latestVersion));
|
||||||
|
setPlatform("linux");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
const result = await installCompose(null, "token");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
expect(result).toBe(latestVersion);
|
||||||
|
expect(manualInstallerAdapterMock.install).toHaveBeenCalledWith(latestVersion);
|
||||||
|
});
|
||||||
|
|
||||||
it("should return current version when no version is provided", async () => {
|
it("should return current version when no version is provided", async () => {
|
||||||
// Arrange
|
// Arrange
|
||||||
versionMock.mockResolvedValue(composeVersionResponse("2.0.0"));
|
versionMock.mockResolvedValue(composeVersionResponse("2.0.0"));
|
||||||
@ -236,5 +253,20 @@ describe("DockerComposeInstallerService", () => {
|
|||||||
);
|
);
|
||||||
expect(manualInstallerAdapterMock.install).toHaveBeenCalledWith(targetVersion);
|
expect(manualInstallerAdapterMock.install).toHaveBeenCalledWith(targetVersion);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should throw with unknown installed version when post-install version check fails", async () => {
|
||||||
|
// Arrange
|
||||||
|
versionMock.mockResolvedValueOnce(composeVersionResponse("1.2.3"));
|
||||||
|
|
||||||
|
const targetVersion = "v1.4.0";
|
||||||
|
versionMock.mockRejectedValueOnce(new Error("version check failed after install"));
|
||||||
|
setPlatform("linux");
|
||||||
|
|
||||||
|
// Act & Assert
|
||||||
|
await expect(installCompose(targetVersion, "token")).rejects.toThrow(
|
||||||
|
`Failed to install Docker Compose version "${targetVersion}", installed version is "unknown"`
|
||||||
|
);
|
||||||
|
expect(manualInstallerAdapterMock.install).toHaveBeenCalledWith(targetVersion);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,5 +1,9 @@
|
|||||||
import { jest, describe, it, expect, beforeEach } from "@jest/globals";
|
import { jest, describe, it, expect, beforeEach } from "@jest/globals";
|
||||||
import type { IDockerComposeOptions, IDockerComposeResult } from "docker-compose";
|
import type {
|
||||||
|
IDockerComposeLogOptions,
|
||||||
|
IDockerComposeOptions,
|
||||||
|
IDockerComposeResult,
|
||||||
|
} from "docker-compose";
|
||||||
|
|
||||||
// Mock docker-compose before importing the module under test
|
// Mock docker-compose before importing the module under test
|
||||||
const upAllMock = jest.fn<(options: IDockerComposeOptions) => Promise<IDockerComposeResult>>();
|
const upAllMock = jest.fn<(options: IDockerComposeOptions) => Promise<IDockerComposeResult>>();
|
||||||
@ -7,7 +11,9 @@ const upManyMock =
|
|||||||
jest.fn<(services: string[], options: IDockerComposeOptions) => Promise<IDockerComposeResult>>();
|
jest.fn<(services: string[], options: IDockerComposeOptions) => Promise<IDockerComposeResult>>();
|
||||||
const downMock = jest.fn<(options: IDockerComposeOptions) => Promise<IDockerComposeResult>>();
|
const downMock = jest.fn<(options: IDockerComposeOptions) => Promise<IDockerComposeResult>>();
|
||||||
const logsMock =
|
const logsMock =
|
||||||
jest.fn<(services: string[], options: IDockerComposeOptions) => Promise<IDockerComposeResult>>();
|
jest.fn<
|
||||||
|
(services: string[], options: IDockerComposeLogOptions) => Promise<IDockerComposeResult>
|
||||||
|
>();
|
||||||
|
|
||||||
jest.unstable_mockModule("docker-compose", () => ({
|
jest.unstable_mockModule("docker-compose", () => ({
|
||||||
upAll: upAllMock,
|
upAll: upAllMock,
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import { jest, describe, it, expect, beforeEach } from "@jest/globals";
|
import { jest, describe, it, expect, beforeEach } from "@jest/globals";
|
||||||
import type { ExecOptions } from "@actions/exec";
|
import type { ExecOptions } from "@actions/exec";
|
||||||
|
import type { OutgoingHttpHeaders } from "node:http";
|
||||||
|
|
||||||
// Mock @actions/exec
|
// Mock @actions/exec
|
||||||
const execMock =
|
const execMock =
|
||||||
@ -17,8 +18,20 @@ jest.unstable_mockModule("@actions/io", () => ({
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
// Mock @actions/tool-cache
|
// Mock @actions/tool-cache
|
||||||
const cacheFileMock = jest.fn<() => Promise<string>>();
|
const cacheFileMock =
|
||||||
const downloadToolMock = jest.fn<() => Promise<string>>();
|
jest.fn<
|
||||||
|
(
|
||||||
|
sourceFile: string,
|
||||||
|
targetFile: string,
|
||||||
|
tool: string,
|
||||||
|
version: string,
|
||||||
|
arch?: string
|
||||||
|
) => Promise<string>
|
||||||
|
>();
|
||||||
|
const downloadToolMock =
|
||||||
|
jest.fn<
|
||||||
|
(url: string, dest?: string, auth?: string, headers?: OutgoingHttpHeaders) => Promise<string>
|
||||||
|
>();
|
||||||
|
|
||||||
jest.unstable_mockModule("@actions/tool-cache", () => ({
|
jest.unstable_mockModule("@actions/tool-cache", () => ({
|
||||||
cacheFile: cacheFileMock,
|
cacheFile: cacheFileMock,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user