Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0e6aab82a5 | |||
| 5b2f1fe9d4 | |||
| a6e0311a4b | |||
| 37b7b07e3f | |||
| d8bc68ab96 | |||
| 3ee34e6241 | |||
| 475ca7533e |
@@ -10,10 +10,10 @@ jobs:
|
||||
name: Release
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version-file: .nvmrc
|
||||
- run: npm ci
|
||||
|
||||
@@ -8,8 +8,8 @@ jobs:
|
||||
name: Test
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version-file: .nvmrc
|
||||
- run: npm ci
|
||||
@@ -24,8 +24,8 @@ jobs:
|
||||
name: Check Dist
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version-file: .nvmrc
|
||||
- run: npm ci
|
||||
@@ -43,10 +43,10 @@ jobs:
|
||||
name: Dry-Run
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version-file: .nvmrc
|
||||
- run: npm ci
|
||||
@@ -63,3 +63,37 @@ jobs:
|
||||
fi
|
||||
|
||||
echo "New tag: ${{ steps.increment-tag.outputs.new-tag }}"
|
||||
|
||||
dry-run-prerelease:
|
||||
name: Dry-Run Prerelease
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version-file: .nvmrc
|
||||
- run: npm ci
|
||||
- name: Create prerelease tag
|
||||
id: prerelease-tag
|
||||
uses: ./
|
||||
with:
|
||||
token: ${{ secrets.GITEA_TOKEN }}
|
||||
prerelease: "true"
|
||||
- name: Print new tag
|
||||
run: |
|
||||
if [ -z "${{ steps.prerelease-tag.outputs.new-tag }}" ]; then
|
||||
echo "No new tag found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "New tag: ${{ steps.prerelease-tag.outputs.new-tag }}"
|
||||
- name: Verify prerelease tag format
|
||||
run: |
|
||||
if [[ "${{ steps.prerelease-tag.outputs.new-tag }}" =~ -rc-[a-f0-9]{7,}$ ]]; then
|
||||
echo "✓ Prerelease tag format is correct"
|
||||
else
|
||||
echo "✗ Prerelease tag format is incorrect. Expected format: X.Y.Z-rc-<sha>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
20
README.md
20
README.md
@@ -43,6 +43,15 @@ jobs:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
```
|
||||
|
||||
### With prerelease tags
|
||||
|
||||
```yaml
|
||||
- uses: tbehrendt/conventional-semantic-git-tag-increment@v1
|
||||
with:
|
||||
prerelease: "true"
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
| Commit Message | Current Tag | New Tag | Reason |
|
||||
@@ -52,11 +61,20 @@ jobs:
|
||||
| `feat!: change API response format` | `v1.1.1` | `v2.0.0` | Breaking change |
|
||||
| `docs: update README` | `v2.0.0` | `v2.0.1` | Documentation update |
|
||||
|
||||
### Prerelease Examples
|
||||
|
||||
| Commit Message | Current Tag | New Tag (prerelease) | Reason |
|
||||
| ------------------------------- | ----------- | -------------------- | ----------- |
|
||||
| `feat: add user authentication` | `v1.0.0` | `1.1.0-rc-abc123` | New feature |
|
||||
| `fix: resolve login bug` | `v1.1.0` | `1.1.1-rc-def456` | Bug fix |
|
||||
|
||||
## Inputs
|
||||
|
||||
- `last-tag` (optional): Starting tag to increment from. If not provided, uses the latest tag in the repository.
|
||||
- `token` (required): GitHub token for repository access. Use `${{ github.token }}` for public repos or a PAT for private repos.
|
||||
- `prerelease` (optional): Whether to create a prerelease tag with `-rc-<github.sha>` suffix. Defaults to `false`.
|
||||
- `max-tags` (optional): Maximum number of tags to fetch when looking for the latest non-pre-release tag. Defaults to `50`.
|
||||
|
||||
## Outputs
|
||||
|
||||
- `new-tag`: The incremented semantic version tag (e.g., `1.2.3`)
|
||||
- `new-tag`: The incremented semantic version tag (e.g., `1.2.3` or `1.2.3-rc-abc123` for prerelease)
|
||||
|
||||
10
action.yml
10
action.yml
@@ -11,11 +11,19 @@ inputs:
|
||||
description: "Token for repository access"
|
||||
required: true
|
||||
default: "${{ github.token }}"
|
||||
prerelease:
|
||||
description: "Whether to create a prerelease tag"
|
||||
required: false
|
||||
default: "false"
|
||||
max-tags:
|
||||
description: "Maximum number of tags to fetch when looking for the latest non-pre-release tag"
|
||||
required: false
|
||||
default: "50"
|
||||
|
||||
outputs:
|
||||
new-tag:
|
||||
description: "The new incremented git tag"
|
||||
|
||||
runs:
|
||||
using: "node20"
|
||||
using: "node24"
|
||||
main: "dist/index.js"
|
||||
|
||||
64
dist/index.js
vendored
64
dist/index.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,12 +0,0 @@
|
||||
import { build } from "esbuild";
|
||||
|
||||
await build({
|
||||
entryPoints: ["src/index.ts"],
|
||||
bundle: true,
|
||||
platform: "node",
|
||||
target: "node20",
|
||||
outfile: "dist/index.js",
|
||||
sourcemap: false,
|
||||
minify: true,
|
||||
logLevel: "info",
|
||||
});
|
||||
328
package-lock.json
generated
328
package-lock.json
generated
@@ -586,21 +586,21 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@emnapi/core": {
|
||||
"version": "1.4.5",
|
||||
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz",
|
||||
"integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==",
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz",
|
||||
"integrity": "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"@emnapi/wasi-threads": "1.0.4",
|
||||
"@emnapi/wasi-threads": "1.1.0",
|
||||
"tslib": "^2.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@emnapi/runtime": {
|
||||
"version": "1.4.5",
|
||||
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz",
|
||||
"integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==",
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz",
|
||||
"integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
@@ -609,9 +609,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@emnapi/wasi-threads": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz",
|
||||
"integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==",
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz",
|
||||
"integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
@@ -1090,9 +1090,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/console": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/console/-/console-30.1.0.tgz",
|
||||
"integrity": "sha512-qCEJKC53Z/mpRcxuK8wg0rnkUKoAeN+pet1T7Da/l8WPGzSWdE+RIUQM+LN5bQkNH5PBUab+ua9BiFTW0hKXSQ==",
|
||||
"version": "30.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jest/console/-/console-30.1.2.tgz",
|
||||
"integrity": "sha512-BGMAxj8VRmoD0MoA/jo9alMXSRoqW8KPeqOfEo1ncxnRLatTBCpRoOwlwlEMdudp68Q6WSGwYrrLtTGOh8fLzw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -1108,17 +1108,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/core": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/core/-/core-30.1.0.tgz",
|
||||
"integrity": "sha512-pxSGVBndJFgHS8IuW6gT39kmbZwPvBZfnqJG4lN9xS++0hxuINsitpTswq8hiaZo+R/OYjVbuw0ee+UDsrK4aw==",
|
||||
"version": "30.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@jest/core/-/core-30.1.3.tgz",
|
||||
"integrity": "sha512-LIQz7NEDDO1+eyOA2ZmkiAyYvZuo6s1UxD/e2IHldR6D7UYogVq3arTmli07MkENLq6/3JEQjp0mA8rrHHJ8KQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jest/console": "30.1.0",
|
||||
"@jest/console": "30.1.2",
|
||||
"@jest/pattern": "30.0.1",
|
||||
"@jest/reporters": "30.1.0",
|
||||
"@jest/test-result": "30.1.0",
|
||||
"@jest/transform": "30.1.0",
|
||||
"@jest/reporters": "30.1.3",
|
||||
"@jest/test-result": "30.1.3",
|
||||
"@jest/transform": "30.1.2",
|
||||
"@jest/types": "30.0.5",
|
||||
"@types/node": "*",
|
||||
"ansi-escapes": "^4.3.2",
|
||||
@@ -1127,18 +1127,18 @@
|
||||
"exit-x": "^0.2.2",
|
||||
"graceful-fs": "^4.2.11",
|
||||
"jest-changed-files": "30.0.5",
|
||||
"jest-config": "30.1.0",
|
||||
"jest-config": "30.1.3",
|
||||
"jest-haste-map": "30.1.0",
|
||||
"jest-message-util": "30.1.0",
|
||||
"jest-regex-util": "30.0.1",
|
||||
"jest-resolve": "30.1.0",
|
||||
"jest-resolve-dependencies": "30.1.0",
|
||||
"jest-runner": "30.1.0",
|
||||
"jest-runtime": "30.1.0",
|
||||
"jest-snapshot": "30.1.0",
|
||||
"jest-resolve": "30.1.3",
|
||||
"jest-resolve-dependencies": "30.1.3",
|
||||
"jest-runner": "30.1.3",
|
||||
"jest-runtime": "30.1.3",
|
||||
"jest-snapshot": "30.1.2",
|
||||
"jest-util": "30.0.5",
|
||||
"jest-validate": "30.1.0",
|
||||
"jest-watcher": "30.1.0",
|
||||
"jest-watcher": "30.1.3",
|
||||
"micromatch": "^4.0.8",
|
||||
"pretty-format": "30.0.5",
|
||||
"slash": "^3.0.0"
|
||||
@@ -1166,13 +1166,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/environment": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.1.0.tgz",
|
||||
"integrity": "sha512-a9yjDya5j/6jFFCbuF3wBlxHzaFNRpZBpO52VP80BzgEfLFY7ZlZnS8K3qZGlKYiA02tLCJL3R6+66l1lY05zQ==",
|
||||
"version": "30.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.1.2.tgz",
|
||||
"integrity": "sha512-N8t1Ytw4/mr9uN28OnVf0SYE2dGhaIxOVYcwsf9IInBKjvofAjbFRvedvBBlyTYk2knbJTiEjEJ2PyyDIBnd9w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jest/fake-timers": "30.1.0",
|
||||
"@jest/fake-timers": "30.1.2",
|
||||
"@jest/types": "30.0.5",
|
||||
"@types/node": "*",
|
||||
"jest-mock": "30.0.5"
|
||||
@@ -1182,23 +1182,23 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/expect": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.1.0.tgz",
|
||||
"integrity": "sha512-Mnl7ZZ0NurliixNfFGTJ1aC+RBi2p9fFj+0RCsrXJDouaYZbQ7IZbmI9OWsf8f3BsBS/0UWCBztyXmHTn0Q8dQ==",
|
||||
"version": "30.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.1.2.tgz",
|
||||
"integrity": "sha512-tyaIExOwQRCxPCGNC05lIjWJztDwk2gPDNSDGg1zitXJJ8dC3++G/CRjE5mb2wQsf89+lsgAgqxxNpDLiCViTA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"expect": "30.1.0",
|
||||
"jest-snapshot": "30.1.0"
|
||||
"expect": "30.1.2",
|
||||
"jest-snapshot": "30.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/expect-utils": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.1.0.tgz",
|
||||
"integrity": "sha512-3anLWpBieOCIvDYkEoHTK3351znRkmtAiOyURPRwn3IIT2TLlwqkgl6P7wk5mxwW04MZvHHx/gw1qGb3VPDmLA==",
|
||||
"version": "30.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.1.2.tgz",
|
||||
"integrity": "sha512-HXy1qT/bfdjCv7iC336ExbqqYtZvljrV8odNdso7dWK9bSeHtLlvwWWC3YSybSPL03Gg5rug6WLCZAZFH72m0A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -1209,9 +1209,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/fake-timers": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.1.0.tgz",
|
||||
"integrity": "sha512-Yei5/jGS0OZbPaLOUMrWVjAlwrlQWPkrBx2lp9M1kx79q2O4JJnrXRCEGgag06zN+a4M3FKatw7g1GYcNATPMg==",
|
||||
"version": "30.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.1.2.tgz",
|
||||
"integrity": "sha512-Beljfv9AYkr9K+ETX9tvV61rJTY706BhBUtiaepQHeEGfe0DbpvUA5Z3fomwc5Xkhns6NWrcFDZn+72fLieUnA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -1237,14 +1237,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/globals": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.1.0.tgz",
|
||||
"integrity": "sha512-zZEscSJnh/yNA+7Rw0aNtIy6DZ9EQGWK2PD7Ig934Y/5xJOOGnLBgGKG4YNkORhkR4UZo33CKwaazSy1+Rfosw==",
|
||||
"version": "30.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.1.2.tgz",
|
||||
"integrity": "sha512-teNTPZ8yZe3ahbYnvnVRDeOjr+3pu2uiAtNtrEsiMjVPPj+cXd5E/fr8BL7v/T7F31vYdEHrI5cC/2OoO/vM9A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jest/environment": "30.1.0",
|
||||
"@jest/expect": "30.1.0",
|
||||
"@jest/environment": "30.1.2",
|
||||
"@jest/expect": "30.1.2",
|
||||
"@jest/types": "30.0.5",
|
||||
"jest-mock": "30.0.5"
|
||||
},
|
||||
@@ -1267,16 +1267,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/reporters": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.1.0.tgz",
|
||||
"integrity": "sha512-BJg8JUaJrX9Q01DUFs4+/P9XMsYivfoafXr/vjxy43rRebkd8ZC+NrxEh2tBdOBS5ow89dSL2mIcAFqASQCU3w==",
|
||||
"version": "30.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.1.3.tgz",
|
||||
"integrity": "sha512-VWEQmJWfXMOrzdFEOyGjUEOuVXllgZsoPtEHZzfdNz18RmzJ5nlR6kp8hDdY8dDS1yGOXAY7DHT+AOHIPSBV0w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@bcoe/v8-coverage": "^0.2.3",
|
||||
"@jest/console": "30.1.0",
|
||||
"@jest/test-result": "30.1.0",
|
||||
"@jest/transform": "30.1.0",
|
||||
"@jest/console": "30.1.2",
|
||||
"@jest/test-result": "30.1.3",
|
||||
"@jest/transform": "30.1.2",
|
||||
"@jest/types": "30.0.5",
|
||||
"@jridgewell/trace-mapping": "^0.3.25",
|
||||
"@types/node": "*",
|
||||
@@ -1323,9 +1323,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/snapshot-utils": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.1.0.tgz",
|
||||
"integrity": "sha512-8Hc0WVaquUqVQ9J3inaJtV3EvkLzep81qtuS0l/gD7huGPEZCf6TZWugvaF6LpZARw6oLF291E5Y3e+eKcZe1w==",
|
||||
"version": "30.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.1.2.tgz",
|
||||
"integrity": "sha512-vHoMTpimcPSR7OxS2S0V1Cpg8eKDRxucHjoWl5u4RQcnxqQrV3avETiFpl8etn4dqxEGarBeHbIBety/f8mLXw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -1354,13 +1354,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/test-result": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.1.0.tgz",
|
||||
"integrity": "sha512-ByBm3rucBDAeYUsArrOq6dnYIRsQ0dogs0DqOWaYjPvO4McVQYb/6dVNz9vIqz3hJbhb7b/XF5ZBLoTxUNJwbQ==",
|
||||
"version": "30.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.1.3.tgz",
|
||||
"integrity": "sha512-P9IV8T24D43cNRANPPokn7tZh0FAFnYS2HIfi5vK18CjRkTDR9Y3e1BoEcAJnl4ghZZF4Ecda4M/k41QkvurEQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jest/console": "30.1.0",
|
||||
"@jest/console": "30.1.2",
|
||||
"@jest/types": "30.0.5",
|
||||
"@types/istanbul-lib-coverage": "^2.0.6",
|
||||
"collect-v8-coverage": "^1.0.2"
|
||||
@@ -1370,13 +1370,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/test-sequencer": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.1.0.tgz",
|
||||
"integrity": "sha512-qKfPCHMEHP+vLdGOVkoxbR42deneEdlAtJkn5z/h0HSfd8LJyUbTysO5esd1hJu9pXmeK6yA9ug1ccV+OJKFPg==",
|
||||
"version": "30.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.1.3.tgz",
|
||||
"integrity": "sha512-82J+hzC0qeQIiiZDThh+YUadvshdBswi5nuyXlEmXzrhw5ZQSRHeQ5LpVMD/xc8B3wPePvs6VMzHnntxL+4E3w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jest/test-result": "30.1.0",
|
||||
"@jest/test-result": "30.1.3",
|
||||
"graceful-fs": "^4.2.11",
|
||||
"jest-haste-map": "30.1.0",
|
||||
"slash": "^3.0.0"
|
||||
@@ -1386,9 +1386,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/transform": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.1.0.tgz",
|
||||
"integrity": "sha512-OvzganIbExZDS2jl37re14XSJXK3sREyGP641RL+Ek1galupCMLWHlxop+4wQnVX7e3fxF6C3W16VzWdl2ducQ==",
|
||||
"version": "30.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.1.2.tgz",
|
||||
"integrity": "sha512-UYYFGifSgfjujf1Cbd3iU/IQoSd6uwsj8XHj5DSDf5ERDcWMdJOPTkHWXj4U+Z/uMagyOQZ6Vne8C4nRIrCxqA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -1643,9 +1643,9 @@
|
||||
"integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag=="
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "24.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz",
|
||||
"integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==",
|
||||
"version": "24.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.1.tgz",
|
||||
"integrity": "sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -2035,13 +2035,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/babel-jest": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.1.0.tgz",
|
||||
"integrity": "sha512-xoF2zwb3po3dOJMahde//mE284gcxp9WH8TTbo3Y102fas7Ga1mjGUwrw137RmvUkuA2liISRlg2BFQhmTfeHg==",
|
||||
"version": "30.1.2",
|
||||
"resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.1.2.tgz",
|
||||
"integrity": "sha512-IQCus1rt9kaSh7PQxLYRY5NmkNrNlU2TpabzwV7T2jljnpdHOcmnYYv8QmE04Li4S3a2Lj8/yXyET5pBarPr6g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jest/transform": "30.1.0",
|
||||
"@jest/transform": "30.1.2",
|
||||
"@types/babel__core": "^7.20.5",
|
||||
"babel-plugin-istanbul": "^7.0.0",
|
||||
"babel-preset-jest": "30.0.1",
|
||||
@@ -2545,9 +2545,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/dedent": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz",
|
||||
"integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==",
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz",
|
||||
"integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peerDependencies": {
|
||||
@@ -2722,15 +2722,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/expect": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/expect/-/expect-30.1.0.tgz",
|
||||
"integrity": "sha512-BjTOhEHlQVAXJqkgmxRt33ZbA8H+NLKpZ+Ff0qsFEOhPMNNcdJ160TocOSyiQS8ZNEUHXozg2ykBDboySPTSKQ==",
|
||||
"version": "30.1.2",
|
||||
"resolved": "https://registry.npmjs.org/expect/-/expect-30.1.2.tgz",
|
||||
"integrity": "sha512-xvHszRavo28ejws8FpemjhwswGj4w/BetHIL8cU49u4sGyXDw2+p3YbeDbj6xzlxi6kWTjIRSTJ+9sNXPnF0Zg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jest/expect-utils": "30.1.0",
|
||||
"@jest/expect-utils": "30.1.2",
|
||||
"@jest/get-type": "30.1.0",
|
||||
"jest-matcher-utils": "30.1.0",
|
||||
"jest-matcher-utils": "30.1.2",
|
||||
"jest-message-util": "30.1.0",
|
||||
"jest-mock": "30.0.5",
|
||||
"jest-util": "30.0.5"
|
||||
@@ -3241,16 +3241,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jest": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest/-/jest-30.1.0.tgz",
|
||||
"integrity": "sha512-4/QcV9Yw4+O3Hsjj/71s4fz2WHdJuXd11bbEJYeK7kxF/bZ1Kx1aCjBaXQ5eTeSLSLv3/XwhAhFQaX/KnTF/yw==",
|
||||
"version": "30.1.3",
|
||||
"resolved": "https://registry.npmjs.org/jest/-/jest-30.1.3.tgz",
|
||||
"integrity": "sha512-Ry+p2+NLk6u8Agh5yVqELfUJvRfV51hhVBRIB5yZPY7mU0DGBmOuFG5GebZbMbm86cdQNK0fhJuDX8/1YorISQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jest/core": "30.1.0",
|
||||
"@jest/core": "30.1.3",
|
||||
"@jest/types": "30.0.5",
|
||||
"import-local": "^3.2.0",
|
||||
"jest-cli": "30.1.0"
|
||||
"jest-cli": "30.1.3"
|
||||
},
|
||||
"bin": {
|
||||
"jest": "bin/jest.js"
|
||||
@@ -3283,15 +3283,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jest-circus": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.1.0.tgz",
|
||||
"integrity": "sha512-+59Jn7UmRwWiC9GV2mKdf6ei2SGE2/QwO3fn+G7gm3XprNCJsbn+8VFdkI7vKsyRH8yzzPXMnF88XCBcYy8+PQ==",
|
||||
"version": "30.1.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.1.3.tgz",
|
||||
"integrity": "sha512-Yf3dnhRON2GJT4RYzM89t/EXIWNxKTpWTL9BfF3+geFetWP4XSvJjiU1vrWplOiUkmq8cHLiwuhz+XuUp9DscA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jest/environment": "30.1.0",
|
||||
"@jest/expect": "30.1.0",
|
||||
"@jest/test-result": "30.1.0",
|
||||
"@jest/environment": "30.1.2",
|
||||
"@jest/expect": "30.1.2",
|
||||
"@jest/test-result": "30.1.3",
|
||||
"@jest/types": "30.0.5",
|
||||
"@types/node": "*",
|
||||
"chalk": "^4.1.2",
|
||||
@@ -3299,10 +3299,10 @@
|
||||
"dedent": "^1.6.0",
|
||||
"is-generator-fn": "^2.1.0",
|
||||
"jest-each": "30.1.0",
|
||||
"jest-matcher-utils": "30.1.0",
|
||||
"jest-matcher-utils": "30.1.2",
|
||||
"jest-message-util": "30.1.0",
|
||||
"jest-runtime": "30.1.0",
|
||||
"jest-snapshot": "30.1.0",
|
||||
"jest-runtime": "30.1.3",
|
||||
"jest-snapshot": "30.1.2",
|
||||
"jest-util": "30.0.5",
|
||||
"p-limit": "^3.1.0",
|
||||
"pretty-format": "30.0.5",
|
||||
@@ -3315,19 +3315,19 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jest-cli": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.1.0.tgz",
|
||||
"integrity": "sha512-H18qsWNR73XNzHbafx+UrP8L4EcziiG41S192You2tfellKSj5BERpAovjh+RMHtuCId4F50VC/JuwPVNaFkRg==",
|
||||
"version": "30.1.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.1.3.tgz",
|
||||
"integrity": "sha512-G8E2Ol3OKch1DEeIBl41NP7OiC6LBhfg25Btv+idcusmoUSpqUkbrneMqbW9lVpI/rCKb/uETidb7DNteheuAQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jest/core": "30.1.0",
|
||||
"@jest/test-result": "30.1.0",
|
||||
"@jest/core": "30.1.3",
|
||||
"@jest/test-result": "30.1.3",
|
||||
"@jest/types": "30.0.5",
|
||||
"chalk": "^4.1.2",
|
||||
"exit-x": "^0.2.2",
|
||||
"import-local": "^3.2.0",
|
||||
"jest-config": "30.1.0",
|
||||
"jest-config": "30.1.3",
|
||||
"jest-util": "30.0.5",
|
||||
"jest-validate": "30.1.0",
|
||||
"yargs": "^17.7.2"
|
||||
@@ -3348,29 +3348,29 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jest-config": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.1.0.tgz",
|
||||
"integrity": "sha512-XqpN5l/DkQQJIFig+eZL2KiBTXrhV9MUXQtstX0ES3XhgIujQppUagF79CI86ES3pp/UVVJVwQyCBt89I9nsJA==",
|
||||
"version": "30.1.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.1.3.tgz",
|
||||
"integrity": "sha512-M/f7gqdQEPgZNA181Myz+GXCe8jXcJsGjCMXUzRj22FIXsZOyHNte84e0exntOvdPaeh9tA0w+B8qlP2fAezfw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.27.4",
|
||||
"@jest/get-type": "30.1.0",
|
||||
"@jest/pattern": "30.0.1",
|
||||
"@jest/test-sequencer": "30.1.0",
|
||||
"@jest/test-sequencer": "30.1.3",
|
||||
"@jest/types": "30.0.5",
|
||||
"babel-jest": "30.1.0",
|
||||
"babel-jest": "30.1.2",
|
||||
"chalk": "^4.1.2",
|
||||
"ci-info": "^4.2.0",
|
||||
"deepmerge": "^4.3.1",
|
||||
"glob": "^10.3.10",
|
||||
"graceful-fs": "^4.2.11",
|
||||
"jest-circus": "30.1.0",
|
||||
"jest-circus": "30.1.3",
|
||||
"jest-docblock": "30.0.1",
|
||||
"jest-environment-node": "30.1.0",
|
||||
"jest-environment-node": "30.1.2",
|
||||
"jest-regex-util": "30.0.1",
|
||||
"jest-resolve": "30.1.0",
|
||||
"jest-runner": "30.1.0",
|
||||
"jest-resolve": "30.1.3",
|
||||
"jest-runner": "30.1.3",
|
||||
"jest-util": "30.0.5",
|
||||
"jest-validate": "30.1.0",
|
||||
"micromatch": "^4.0.8",
|
||||
@@ -3400,9 +3400,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jest-diff": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.1.0.tgz",
|
||||
"integrity": "sha512-DHkvlHONjXknCIzYqFCIqH9uT0G6ZMN0U9Brb64BbQnCmVNcILa3FLTHh21h+E1oNRpaTvupTQTCiOhz2hx7hw==",
|
||||
"version": "30.1.2",
|
||||
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.1.2.tgz",
|
||||
"integrity": "sha512-4+prq+9J61mOVXCa4Qp8ZjavdxzrWQXrI80GNxP8f4tkI2syPuPrJgdRPZRrfUTRvIoUwcmNLbqEJy9W800+NQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -3446,14 +3446,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jest-environment-node": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.1.0.tgz",
|
||||
"integrity": "sha512-PoHcBVniqBcJubrLbMSrDIzD3RONpnqPeuNB1dOvU4aWzuV5vwViAtZtvAPtcZJW6i4n2YAAM+r8AvKWgUegmA==",
|
||||
"version": "30.1.2",
|
||||
"resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.1.2.tgz",
|
||||
"integrity": "sha512-w8qBiXtqGWJ9xpJIA98M0EIoq079GOQRQUyse5qg1plShUCQ0Ek1VTTcczqKrn3f24TFAgFtT+4q3aOXvjbsuA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jest/environment": "30.1.0",
|
||||
"@jest/fake-timers": "30.1.0",
|
||||
"@jest/environment": "30.1.2",
|
||||
"@jest/fake-timers": "30.1.2",
|
||||
"@jest/types": "30.0.5",
|
||||
"@types/node": "*",
|
||||
"jest-mock": "30.0.5",
|
||||
@@ -3504,15 +3504,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jest-matcher-utils": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.1.0.tgz",
|
||||
"integrity": "sha512-A0/O5+WzSmeBrsm1PMOLyKkKUekbCbAtgyViRvJagjMnOsuKQbukiHJy7y+7cTST9pvoi81NyHXz5Fc96UoKUQ==",
|
||||
"version": "30.1.2",
|
||||
"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.1.2.tgz",
|
||||
"integrity": "sha512-7ai16hy4rSbDjvPTuUhuV8nyPBd6EX34HkBsBcBX2lENCuAQ0qKCPb/+lt8OSWUa9WWmGYLy41PrEzkwRwoGZQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jest/get-type": "30.1.0",
|
||||
"chalk": "^4.1.2",
|
||||
"jest-diff": "30.1.0",
|
||||
"jest-diff": "30.1.2",
|
||||
"pretty-format": "30.0.5"
|
||||
},
|
||||
"engines": {
|
||||
@@ -3584,9 +3584,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jest-resolve": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.1.0.tgz",
|
||||
"integrity": "sha512-hASe7D/wRtZw8Cm607NrlF7fi3HWC5wmA5jCVc2QjQAB2pTwP9eVZILGEi6OeSLNUtE1zb04sXRowsdh5CUjwA==",
|
||||
"version": "30.1.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.1.3.tgz",
|
||||
"integrity": "sha512-DI4PtTqzw9GwELFS41sdMK32Ajp3XZQ8iygeDMWkxlRhm7uUTOFSZFVZABFuxr0jvspn8MAYy54NxZCsuCTSOw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -3604,30 +3604,30 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jest-resolve-dependencies": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.1.0.tgz",
|
||||
"integrity": "sha512-pNWAfnzoqPWPYNaHwWmR34+5ib9DcUr5E+GLyIxjGxZEwdfgYnXLjPP3WfSW0VaTUnYes1Tl0cQNyBPr5plZmg==",
|
||||
"version": "30.1.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.1.3.tgz",
|
||||
"integrity": "sha512-DNfq3WGmuRyHRHfEet+Zm3QOmVFtIarUOQHHryKPc0YL9ROfgWZxl4+aZq/VAzok2SS3gZdniP+dO4zgo59hBg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"jest-regex-util": "30.0.1",
|
||||
"jest-snapshot": "30.1.0"
|
||||
"jest-snapshot": "30.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/jest-runner": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.1.0.tgz",
|
||||
"integrity": "sha512-Qd8JLWBooJQZBbstY9sdzt3B3Euj4cjDB0X+CeExURm1+BqZcXA5pSPb4XwbgPlBhTXkUva3bb0B94CFy9ZnZw==",
|
||||
"version": "30.1.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.1.3.tgz",
|
||||
"integrity": "sha512-dd1ORcxQraW44Uz029TtXj85W11yvLpDuIzNOlofrC8GN+SgDlgY4BvyxJiVeuabA1t6idjNbX59jLd2oplOGQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jest/console": "30.1.0",
|
||||
"@jest/environment": "30.1.0",
|
||||
"@jest/test-result": "30.1.0",
|
||||
"@jest/transform": "30.1.0",
|
||||
"@jest/console": "30.1.2",
|
||||
"@jest/environment": "30.1.2",
|
||||
"@jest/test-result": "30.1.3",
|
||||
"@jest/transform": "30.1.2",
|
||||
"@jest/types": "30.0.5",
|
||||
"@types/node": "*",
|
||||
"chalk": "^4.1.2",
|
||||
@@ -3635,14 +3635,14 @@
|
||||
"exit-x": "^0.2.2",
|
||||
"graceful-fs": "^4.2.11",
|
||||
"jest-docblock": "30.0.1",
|
||||
"jest-environment-node": "30.1.0",
|
||||
"jest-environment-node": "30.1.2",
|
||||
"jest-haste-map": "30.1.0",
|
||||
"jest-leak-detector": "30.1.0",
|
||||
"jest-message-util": "30.1.0",
|
||||
"jest-resolve": "30.1.0",
|
||||
"jest-runtime": "30.1.0",
|
||||
"jest-resolve": "30.1.3",
|
||||
"jest-runtime": "30.1.3",
|
||||
"jest-util": "30.0.5",
|
||||
"jest-watcher": "30.1.0",
|
||||
"jest-watcher": "30.1.3",
|
||||
"jest-worker": "30.1.0",
|
||||
"p-limit": "^3.1.0",
|
||||
"source-map-support": "0.5.13"
|
||||
@@ -3652,18 +3652,18 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jest-runtime": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.1.0.tgz",
|
||||
"integrity": "sha512-tPKb7oCj1D0CffhJrP+yheK/lHx2PrMaK21BmBD3YUirr4E4gxXa6jNb9r9yhiD0LRv9J5AoTmzJVYeyWPgt6A==",
|
||||
"version": "30.1.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.1.3.tgz",
|
||||
"integrity": "sha512-WS8xgjuNSphdIGnleQcJ3AKE4tBKOVP+tKhCD0u+Tb2sBmsU8DxfbBpZX7//+XOz81zVs4eFpJQwBNji2Y07DA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jest/environment": "30.1.0",
|
||||
"@jest/fake-timers": "30.1.0",
|
||||
"@jest/globals": "30.1.0",
|
||||
"@jest/environment": "30.1.2",
|
||||
"@jest/fake-timers": "30.1.2",
|
||||
"@jest/globals": "30.1.2",
|
||||
"@jest/source-map": "30.0.1",
|
||||
"@jest/test-result": "30.1.0",
|
||||
"@jest/transform": "30.1.0",
|
||||
"@jest/test-result": "30.1.3",
|
||||
"@jest/transform": "30.1.2",
|
||||
"@jest/types": "30.0.5",
|
||||
"@types/node": "*",
|
||||
"chalk": "^4.1.2",
|
||||
@@ -3675,8 +3675,8 @@
|
||||
"jest-message-util": "30.1.0",
|
||||
"jest-mock": "30.0.5",
|
||||
"jest-regex-util": "30.0.1",
|
||||
"jest-resolve": "30.1.0",
|
||||
"jest-snapshot": "30.1.0",
|
||||
"jest-resolve": "30.1.3",
|
||||
"jest-snapshot": "30.1.2",
|
||||
"jest-util": "30.0.5",
|
||||
"slash": "^3.0.0",
|
||||
"strip-bom": "^4.0.0"
|
||||
@@ -3686,9 +3686,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jest-snapshot": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.1.0.tgz",
|
||||
"integrity": "sha512-rBR/lTOi4ANpoqMhehPcGX/KGVXBEwe4V6HH27B3J1VZoXHXLk4nbMVGusbPc2y+of9/sU5uH2E998IlO7sLlQ==",
|
||||
"version": "30.1.2",
|
||||
"resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.1.2.tgz",
|
||||
"integrity": "sha512-4q4+6+1c8B6Cy5pGgFvjDy/Pa6VYRiGu0yQafKkJ9u6wQx4G5PqI2QR6nxTl43yy7IWsINwz6oT4o6tD12a8Dg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -3697,17 +3697,17 @@
|
||||
"@babel/plugin-syntax-jsx": "^7.27.1",
|
||||
"@babel/plugin-syntax-typescript": "^7.27.1",
|
||||
"@babel/types": "^7.27.3",
|
||||
"@jest/expect-utils": "30.1.0",
|
||||
"@jest/expect-utils": "30.1.2",
|
||||
"@jest/get-type": "30.1.0",
|
||||
"@jest/snapshot-utils": "30.1.0",
|
||||
"@jest/transform": "30.1.0",
|
||||
"@jest/snapshot-utils": "30.1.2",
|
||||
"@jest/transform": "30.1.2",
|
||||
"@jest/types": "30.0.5",
|
||||
"babel-preset-current-node-syntax": "^1.1.0",
|
||||
"chalk": "^4.1.2",
|
||||
"expect": "30.1.0",
|
||||
"expect": "30.1.2",
|
||||
"graceful-fs": "^4.2.11",
|
||||
"jest-diff": "30.1.0",
|
||||
"jest-matcher-utils": "30.1.0",
|
||||
"jest-diff": "30.1.2",
|
||||
"jest-matcher-utils": "30.1.2",
|
||||
"jest-message-util": "30.1.0",
|
||||
"jest-util": "30.0.5",
|
||||
"pretty-format": "30.0.5",
|
||||
@@ -3781,13 +3781,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jest-watcher": {
|
||||
"version": "30.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.1.0.tgz",
|
||||
"integrity": "sha512-aXSHgnDY2XhHt7zo8MkdN0ovl/DbmPEw2KTEZRtH+4MeLZ+eYwnO+RIUk4nVlIx1wwH+7FZk+wPOYSDWDW3F4w==",
|
||||
"version": "30.1.3",
|
||||
"resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.1.3.tgz",
|
||||
"integrity": "sha512-6jQUZCP1BTL2gvG9E4YF06Ytq4yMb4If6YoQGRR6PpjtqOXSP3sKe2kqwB6SQ+H9DezOfZaSLnmka1NtGm3fCQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jest/test-result": "30.1.0",
|
||||
"@jest/test-result": "30.1.3",
|
||||
"@jest/types": "30.0.5",
|
||||
"@types/node": "*",
|
||||
"ansi-escapes": "^4.3.2",
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"main": "src/index.ts",
|
||||
"scripts": {
|
||||
"typecheck": "tsc --noEmit",
|
||||
"build": "esbuild src/index.ts --bundle --outfile=dist/index.js --platform=node --target=node20 --minify",
|
||||
"build": "esbuild src/index.ts --bundle --outfile=dist/index.js --platform=node --target=node24 --minify",
|
||||
"test": "jest",
|
||||
"format": "prettier --write src/**/*.ts"
|
||||
},
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json"
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"packageRules": [
|
||||
{
|
||||
"matchUpdateTypes": ["patch", "minor"],
|
||||
"groupName": "dependencies (non-major)"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -149,6 +149,16 @@ describe("TagService", () => {
|
||||
const result = tagService.renderTag(tag, "v");
|
||||
expect(result).toBe("v1.2.3");
|
||||
});
|
||||
|
||||
it("should render tag with prerelease suffix", () => {
|
||||
const result = tagService.renderTag(tag, "", "-rc-abc123");
|
||||
expect(result).toBe("1.2.3-rc-abc123");
|
||||
});
|
||||
|
||||
it("should render tag with prefix and prerelease suffix", () => {
|
||||
const result = tagService.renderTag(tag, "v", "-rc-abc123");
|
||||
expect(result).toBe("v1.2.3-rc-abc123");
|
||||
});
|
||||
});
|
||||
|
||||
describe("parseTag", () => {
|
||||
@@ -221,7 +231,7 @@ describe("TagIncrementer", () => {
|
||||
const result = await tagIncrementer.getBaseTag(undefined);
|
||||
|
||||
expect(result).toBe("v2.0.0");
|
||||
expect(mockCoreService.getLogs()).toContain("INFO: Using latest tag: v2.0.0");
|
||||
expect(mockCoreService.getLogs()).toContain("INFO: Using latest real tag: v2.0.0");
|
||||
});
|
||||
|
||||
it("should default to 0.0.0 when no tags found", async () => {
|
||||
@@ -234,6 +244,34 @@ describe("TagIncrementer", () => {
|
||||
"WARNING: No tags found in repository, defaulting to 0.0.0"
|
||||
);
|
||||
});
|
||||
|
||||
it("should skip pre-release tags and use latest real tag", async () => {
|
||||
mockGitService.setMockTags([
|
||||
{ name: "v2.0.0-rc-26035c6e13" },
|
||||
{ name: "v1.2.3" },
|
||||
{ name: "v1.1.4-rc-aa512edb16" },
|
||||
{ name: "v1.0.0" },
|
||||
]);
|
||||
|
||||
const result = await tagIncrementer.getBaseTag(undefined);
|
||||
|
||||
expect(result).toBe("v1.2.3");
|
||||
expect(mockCoreService.getLogs()).toContain("INFO: Using latest real tag: v1.2.3");
|
||||
});
|
||||
|
||||
it("should default to 0.0.0 when only pre-release tags found", async () => {
|
||||
mockGitService.setMockTags([
|
||||
{ name: "v2.0.0-rc-26035c6e13" },
|
||||
{ name: "v1.1.4-rc-aa512edb16" },
|
||||
]);
|
||||
|
||||
const result = await tagIncrementer.getBaseTag(undefined);
|
||||
|
||||
expect(result).toBe("0.0.0");
|
||||
expect(mockCoreService.getWarnings()).toContain(
|
||||
"WARNING: No real tags found (only pre-release tags), defaulting to 0.0.0"
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("determineIncrementType", () => {
|
||||
@@ -302,6 +340,28 @@ describe("TagIncrementer", () => {
|
||||
|
||||
expect(result).toBe("2.1.1");
|
||||
});
|
||||
|
||||
it("should create prerelease tag when prerelease is true", async () => {
|
||||
mockGitService.setMockTags([{ name: "v1.2.3" }]);
|
||||
mockGitService.setMockCommit({
|
||||
commit: { message: "feat: new feature" },
|
||||
});
|
||||
|
||||
const result = await tagIncrementer.incrementTag(undefined, "ref", 50, true, "abc123");
|
||||
|
||||
expect(result).toBe("1.3.0-rc-abc123");
|
||||
});
|
||||
|
||||
it("should not create prerelease tag when prerelease is false", async () => {
|
||||
mockGitService.setMockTags([{ name: "v1.2.3" }]);
|
||||
mockGitService.setMockCommit({
|
||||
commit: { message: "feat: new feature" },
|
||||
});
|
||||
|
||||
const result = await tagIncrementer.incrementTag(undefined, "ref", 50, false, "abc123");
|
||||
|
||||
expect(result).toBe("1.3.0");
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -315,14 +375,18 @@ describe("LocalGitService", () => {
|
||||
|
||||
describe("listTags", () => {
|
||||
it("should call git command to list tags", async () => {
|
||||
mockExecSync.mockReturnValue("v1.0.0\nv1.1.0\n" as any);
|
||||
mockExecSync.mockReturnValue("v1.0.0\n1.1.0\n2.0.0-rc-26035c6e13\n" as any);
|
||||
|
||||
const result = await localGitService.listTags(5);
|
||||
|
||||
expect(mockExecSync).toHaveBeenCalledWith("git tag --sort=-version:refname", {
|
||||
encoding: "utf8",
|
||||
});
|
||||
expect(result).toEqual([{ name: "v1.0.0" }, { name: "v1.1.0" }]);
|
||||
expect(result).toEqual([
|
||||
{ name: "v1.0.0" },
|
||||
{ name: "1.1.0" },
|
||||
{ name: "2.0.0-rc-26035c6e13" },
|
||||
]);
|
||||
});
|
||||
|
||||
it("should return empty array when no tags exist", async () => {
|
||||
@@ -391,9 +455,12 @@ describe("LocalCoreService", () => {
|
||||
// Integration test example
|
||||
describe("TagIncrementer Integration", () => {
|
||||
it("should handle complete tag increment flow", async () => {
|
||||
const mockGitService = new MockGitService([{ name: "v1.2.3" }], {
|
||||
commit: { message: "feat: new feature" },
|
||||
});
|
||||
const mockGitService = new MockGitService(
|
||||
[{ name: "v2.0.0-rc-26035c6e13" }, { name: "v1.1.4-rc-aa512edb16" }, { name: "v1.2.3" }],
|
||||
{
|
||||
commit: { message: "feat: new feature" },
|
||||
}
|
||||
);
|
||||
const mockCoreService = new MockCoreService();
|
||||
const commitAnalyzer = new ConventionalCommitAnalyzer();
|
||||
const tagService = new TagService();
|
||||
@@ -410,5 +477,23 @@ describe("TagIncrementer Integration", () => {
|
||||
expect(result).toBe("1.3.0");
|
||||
expect(mockCoreService.getLogs()).toContain("INFO: Determined increment type: minor");
|
||||
expect(mockCoreService.getLogs()).toContain("INFO: New tag: 1.3.0");
|
||||
expect(mockCoreService.getLogs()).toContain("INFO: Using latest real tag: v1.2.3");
|
||||
});
|
||||
});
|
||||
|
||||
describe("Prerelease Validation", () => {
|
||||
it("should validate prerelease configuration correctly", () => {
|
||||
// Test cases for prerelease validation logic
|
||||
const testCases = [
|
||||
{ prerelease: true, githubSha: "abc123", shouldFail: false },
|
||||
{ prerelease: true, githubSha: "", shouldFail: true },
|
||||
{ prerelease: false, githubSha: "abc123", shouldFail: false },
|
||||
{ prerelease: false, githubSha: "", shouldFail: false },
|
||||
];
|
||||
|
||||
testCases.forEach(({ prerelease, githubSha, shouldFail }) => {
|
||||
const result = prerelease && !githubSha;
|
||||
expect(result).toBe(shouldFail);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
58
src/main.ts
58
src/main.ts
@@ -73,8 +73,8 @@ export class TagService {
|
||||
}
|
||||
}
|
||||
|
||||
renderTag(tag: Tag, prefix: string = ""): string {
|
||||
return `${prefix}${tag.major}.${tag.minor}.${tag.patch}`;
|
||||
renderTag(tag: Tag, prefix: string = "", prereleaseSuffix: string = ""): string {
|
||||
return `${prefix}${tag.major}.${tag.minor}.${tag.patch}${prereleaseSuffix}`;
|
||||
}
|
||||
|
||||
parseTag(tagString: string): Tag {
|
||||
@@ -103,22 +103,29 @@ export class TagIncrementer {
|
||||
private tagService: TagService
|
||||
) {}
|
||||
|
||||
async getBaseTag(lastTag: string | undefined): Promise<string> {
|
||||
async getBaseTag(lastTag: string | undefined, maxTags: number = 50): Promise<string> {
|
||||
if (lastTag) {
|
||||
this.coreService.info(`Using provided tag: ${lastTag}`);
|
||||
return lastTag;
|
||||
}
|
||||
|
||||
this.coreService.info("Fetching tags from local repository");
|
||||
const tags = await this.gitService.listTags(1);
|
||||
this.coreService.info(`Fetching up to ${maxTags} tags from local repository`);
|
||||
const tags = await this.gitService.listTags(maxTags);
|
||||
|
||||
if (tags.length === 0) {
|
||||
this.coreService.warning("No tags found in repository, defaulting to 0.0.0");
|
||||
return "0.0.0";
|
||||
}
|
||||
|
||||
const baseTag = tags[0].name;
|
||||
this.coreService.info(`Using latest tag: ${baseTag}`);
|
||||
const realTags = tags.filter((tag) => !tag.name.includes("-rc-"));
|
||||
|
||||
if (realTags.length === 0) {
|
||||
this.coreService.warning("No real tags found (only pre-release tags), defaulting to 0.0.0");
|
||||
return "0.0.0";
|
||||
}
|
||||
|
||||
const baseTag = realTags[0].name;
|
||||
this.coreService.info(`Using latest real tag: ${baseTag}`);
|
||||
return baseTag;
|
||||
}
|
||||
|
||||
@@ -155,10 +162,16 @@ export class TagIncrementer {
|
||||
}
|
||||
}
|
||||
|
||||
async incrementTag(lastTag: string | undefined, ref: string): Promise<string> {
|
||||
async incrementTag(
|
||||
lastTag: string | undefined,
|
||||
ref: string,
|
||||
maxTags: number = 50,
|
||||
prerelease: boolean = false,
|
||||
githubSha: string = ""
|
||||
): Promise<string> {
|
||||
this.coreService.info(`Starting tag increment process at ref ${ref}`);
|
||||
|
||||
const baseTag = await this.getBaseTag(lastTag);
|
||||
const baseTag = await this.getBaseTag(lastTag, maxTags);
|
||||
const parsedTag = this.tagService.parseTag(baseTag);
|
||||
|
||||
this.coreService.info(
|
||||
@@ -168,7 +181,9 @@ export class TagIncrementer {
|
||||
const incrementType = await this.determineIncrementType(ref);
|
||||
|
||||
const newTag = this.tagService.bumpTag(parsedTag, incrementType);
|
||||
const renderedTag = this.tagService.renderTag(newTag);
|
||||
|
||||
const prereleaseSuffix = prerelease && githubSha ? `-rc-${githubSha}` : "";
|
||||
const renderedTag = this.tagService.renderTag(newTag, "", prereleaseSuffix);
|
||||
|
||||
this.coreService.info(`New tag: ${renderedTag}`);
|
||||
this.coreService.info(
|
||||
@@ -242,12 +257,27 @@ export async function run(): Promise<void> {
|
||||
const coreService = new LocalCoreService();
|
||||
|
||||
const lastTag = coreService.getInput("last-tag");
|
||||
const maxTagsInput = coreService.getInput("max-tags");
|
||||
const maxTags = parseInt(maxTagsInput || "50", 10);
|
||||
const prereleaseInput = coreService.getInput("prerelease");
|
||||
const prerelease = prereleaseInput === "true";
|
||||
const githubSha = process.env.GITHUB_SHA || "";
|
||||
const ref = "HEAD";
|
||||
|
||||
if (prerelease && !githubSha) {
|
||||
const errorMessage =
|
||||
"Prerelease is enabled but GITHUB_SHA environment variable is not available. This is required for prerelease tags.";
|
||||
coreService.setFailed(errorMessage);
|
||||
return;
|
||||
}
|
||||
|
||||
// Log context information for debugging
|
||||
coreService.info(`Working with local git repository`);
|
||||
coreService.info(`Commit ref: ${ref}`);
|
||||
coreService.info(`Last tag input: ${lastTag || "undefined"}`);
|
||||
coreService.info(`Max tags limit: ${maxTags}`);
|
||||
coreService.info(`Prerelease: ${prerelease}`);
|
||||
coreService.info(`GitHub SHA: ${githubSha || "undefined"}`);
|
||||
|
||||
const gitService = new LocalGitService();
|
||||
const commitAnalyzer = new ConventionalCommitAnalyzer();
|
||||
@@ -261,7 +291,13 @@ export async function run(): Promise<void> {
|
||||
await gitService.testConnection();
|
||||
coreService.info("Git repository connection successful");
|
||||
|
||||
const newTag = await tagIncrementer.incrementTag(lastTag || undefined, ref);
|
||||
const newTag = await tagIncrementer.incrementTag(
|
||||
lastTag || undefined,
|
||||
ref,
|
||||
maxTags,
|
||||
prerelease,
|
||||
githubSha
|
||||
);
|
||||
|
||||
coreService.info(`Process completed successfully. New tag: ${newTag}`);
|
||||
coreService.setOutput("new-tag", newTag);
|
||||
|
||||
Reference in New Issue
Block a user