Compare commits

...

7 Commits
v2.5.0 ... main

Author SHA1 Message Date
dependabot[bot]
5a56211d04 chore(deps-dev): bump the npm-development-dependencies group across 1 directory with 2 updates
Some checks are pending
Internal - Main - Continuous Integration / ci (push) Waiting to run
Internal - Main - Continuous Integration / prepare-docs (push) Blocked by required conditions
Internal - Main - Continuous Integration / sync-docs (push) Blocked by required conditions
Need fix to Issue / main (push) Waiting to run
Prepare release / release (push) Waiting to run
Bumps the npm-development-dependencies group with 2 updates in the / directory:
- [@ts-dev-tools/core](https://github.com/escemi-tech/ts-dev-tools)
- [eslint-plugin-jsonc](https://github.com/ota-meshi/eslint-plugin-jsonc)

Updates `@ts-dev-tools/core` from 1.10.0 to 1.11.1
- [Release notes](https://github.com/escemi-tech/ts-dev-tools/releases)

Updates `eslint-plugin-jsonc` from 2.21.1 to 3.1.1
- [Release notes](https://github.com/ota-meshi/eslint-plugin-jsonc/releases)
- [Changelog](https://github.com/ota-meshi/eslint-plugin-jsonc/blob/master/CHANGELOG.md)

---
updated-dependencies:
- dependency-name: "@ts-dev-tools/core"
  dependency-version: 1.11.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-development-dependencies
- dependency-name: eslint-plugin-jsonc
  dependency-version: 3.1.1
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: npm-development-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Emilien Escalle <emilien.escalle@escemi.com>
2026-03-05 11:20:58 +01:00
dependabot[bot]
65c12c82c2 chore(deps): bump the github-actions-dependencies group across 1 directory with 2 updates
Bumps the github-actions-dependencies group with 2 updates in the / directory:
- [docker/setup-docker-action](https://github.com/docker/setup-docker-action)
- [actions/upload-artifact](https://github.com/actions/upload-artifact)

Updates `docker/setup-docker-action` from 4.7.0 to 5.0.0
- [Release notes](https://github.com/docker/setup-docker-action/releases)

Updates `actions/upload-artifact` from 6.0.0 to 7.0.0
- [Release notes](https://github.com/actions/upload-artifact/releases)

---
updated-dependencies:
- dependency-name: docker/setup-docker-action
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions-dependencies
- dependency-name: actions/upload-artifact
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-05 10:40:34 +01:00
dependabot[bot]
265e476512 chore(deps-dev): bump minimatch from 3.1.2 to 3.1.5
Some checks failed
Internal - Main - Continuous Integration / ci (push) Has been cancelled
Need fix to Issue / main (push) Has been cancelled
Prepare release / release (push) Has been cancelled
Internal - Main - Continuous Integration / prepare-docs (push) Has been cancelled
Internal - Main - Continuous Integration / sync-docs (push) Has been cancelled
Mark stale issues and pull requests / main (push) Has been cancelled
Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.1.2 to 3.1.5.
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.5)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-version: 3.1.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 15:10:07 +01:00
dependabot[bot]
387ab0a78f chore(deps): bump the github-actions-dependencies group with 8 updates
Some checks failed
Internal - Main - Continuous Integration / ci (push) Has been cancelled
Need fix to Issue / main (push) Has been cancelled
Prepare release / release (push) Has been cancelled
Internal - Main - Continuous Integration / prepare-docs (push) Has been cancelled
Internal - Main - Continuous Integration / sync-docs (push) Has been cancelled
Mark stale issues and pull requests / main (push) Has been cancelled
Bumps the github-actions-dependencies group with 8 updates:
---
updated-dependencies:
- dependency-name: hoverkraft-tech/ci-github-nodejs
  dependency-version: 0.22.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions-dependencies
- dependency-name: hoverkraft-tech/ci-github-nodejs/.github/workflows/continuous-integration.yml
  dependency-version: 0.22.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions-dependencies
- dependency-name: hoverkraft-tech/ci-github-common/.github/workflows/linter.yml
  dependency-version: 0.32.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions-dependencies
- dependency-name: hoverkraft-tech/ci-github-common/.github/workflows/greetings.yml
  dependency-version: 0.32.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions-dependencies
- dependency-name: hoverkraft-tech/ci-github-common
  dependency-version: 0.32.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions-dependencies
- dependency-name: hoverkraft-tech/ci-github-common/.github/workflows/need-fix-to-issue.yml
  dependency-version: 0.32.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions-dependencies
- dependency-name: hoverkraft-tech/ci-github-common/.github/workflows/semantic-pull-request.yml
  dependency-version: 0.32.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions-dependencies
- dependency-name: hoverkraft-tech/ci-github-common/.github/workflows/stale.yml
  dependency-version: 0.32.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-20 10:03:29 +01:00
dependabot[bot]
2a6935e036 chore(deps-dev): bump the npm-dev-dependencies group with 2 updates
Some checks failed
Mark stale issues and pull requests / main (push) Has been cancelled
Internal - Main - Continuous Integration / ci (push) Has been cancelled
Need fix to Issue / main (push) Has been cancelled
Prepare release / release (push) Has been cancelled
Internal - Main - Continuous Integration / prepare-docs (push) Has been cancelled
Internal - Main - Continuous Integration / sync-docs (push) Has been cancelled
Bumps the npm-dev-dependencies group with 2 updates:
- [@ts-dev-tools/core](https://github.com/escemi-tech/ts-dev-tools)
- [eslint-plugin-jsonc](https://github.com/ota-meshi/eslint-plugin-jsonc)

Updates `@ts-dev-tools/core` from 1.9.14 to 1.10.0
- [Release notes](https://github.com/escemi-tech/ts-dev-tools/releases)

Updates `eslint-plugin-jsonc` from 2.21.0 to 2.21.1
- [Release notes](https://github.com/ota-meshi/eslint-plugin-jsonc/releases)

---
updated-dependencies:
- dependency-name: "@ts-dev-tools/core"
  dependency-version: 1.10.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-dev-dependencies
- dependency-name: eslint-plugin-jsonc
  dependency-version: 2.21.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-dev-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Emilien Escalle <emilien.escalle@escemi.com>
2026-02-16 18:22:30 +01:00
dependabot[bot]
eeae15a0f9 chore(deps): bump the github-actions-dependencies group with 7 updates
Some checks failed
Internal - Main - Continuous Integration / ci (push) Has been cancelled
Need fix to Issue / main (push) Has been cancelled
Prepare release / release (push) Has been cancelled
Internal - Main - Continuous Integration / prepare-docs (push) Has been cancelled
Internal - Main - Continuous Integration / sync-docs (push) Has been cancelled
Mark stale issues and pull requests / main (push) Has been cancelled
Bumps the github-actions-dependencies group with 7 updates:

---
updated-dependencies:
- dependency-name: hoverkraft-tech/ci-github-common/.github/workflows/linter.yml
  dependency-version: 0.31.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions-dependencies
- dependency-name: hoverkraft-tech/ci-github-common/.github/workflows/greetings.yml
  dependency-version: 0.31.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions-dependencies
- dependency-name: hoverkraft-tech/ci-github-common
  dependency-version: 0.31.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions-dependencies
- dependency-name: hoverkraft-tech/ci-github-common/.github/workflows/need-fix-to-issue.yml
  dependency-version: 0.31.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions-dependencies
- dependency-name: hoverkraft-tech/ci-github-publish/.github/workflows/prepare-release.yml
  dependency-version: 0.21.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions-dependencies
- dependency-name: hoverkraft-tech/ci-github-common/.github/workflows/semantic-pull-request.yml
  dependency-version: 0.31.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions-dependencies
- dependency-name: hoverkraft-tech/ci-github-common/.github/workflows/stale.yml
  dependency-version: 0.31.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-09 10:37:57 +01:00
hoverkraft-bot[bot]
b160464f2e docs: update actions and workflows documentation
[skip ci]

Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-03 15:26:54 +00:00
22 changed files with 3023 additions and 4610 deletions

View File

@ -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

View File

@ -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 }}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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: |

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

File diff suppressed because it is too large Load Diff

25
dist/licenses.txt generated vendored
View File

@ -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
View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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",

View File

@ -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", () => {

View File

@ -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>;

View File

@ -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);
});
}); });
}); });

View File

@ -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,

View File

@ -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,