From 33fdcc04835f15360247aaaf9d79168ee601d30e Mon Sep 17 00:00:00 2001 From: Shane <6071159+smashedr@users.noreply.github.com> Date: Sat, 6 Jun 2026 23:37:04 -0700 Subject: [PATCH 1/9] Updates --- .github/actionlint.yaml | 7 + .github/example/draft.yaml | 2 +- .github/workflows/check-build.yaml | 2 +- .github/workflows/draft.yaml | 35 ++ .github/workflows/issue.yaml | 35 ++ .github/workflows/lint.yaml | 21 +- README.md | 7 +- action.yml | 3 + dist/index.js | 613 +++++++++++++++++------------ package-lock.json | 325 ++++++++------- package.json | 8 +- src/index.js | 3 + 12 files changed, 635 insertions(+), 426 deletions(-) create mode 100644 .github/workflows/draft.yaml create mode 100644 .github/workflows/issue.yaml diff --git a/.github/actionlint.yaml b/.github/actionlint.yaml index 447aaa1..cd68a23 100644 --- a/.github/actionlint.yaml +++ b/.github/actionlint.yaml @@ -4,3 +4,10 @@ paths: - '"inputs" section is alias node but mapping node is expected' - '"paths" section must be sequence node but got alias node with "" tag' - '"paths-ignore" section must be sequence node but got alias node with "" tag' + .github/workflows/issue.yaml: + ignore: + - 'missing input "app-id" which is required by action "actions/create-github-app-token@v3"' + - 'input "client-id" is not defined in action "actions/create-github-app-token@v3"' + .github/workflows/test.yaml: + ignore: + - 'property ".+" is not defined in object type' diff --git a/.github/example/draft.yaml b/.github/example/draft.yaml index fca72d3..3a1b7ba 100644 --- a/.github/example/draft.yaml +++ b/.github/example/draft.yaml @@ -19,7 +19,7 @@ jobs: steps: - name: "Checkout" - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: "Draft Release Action" id: draft diff --git a/.github/workflows/check-build.yaml b/.github/workflows/check-build.yaml index 0805458..c190625 100644 --- a/.github/workflows/check-build.yaml +++ b/.github/workflows/check-build.yaml @@ -47,7 +47,7 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - - name: "Setup Node 24" + - name: "Setup Node" uses: actions/setup-node@v6 with: node-version: 24 diff --git a/.github/workflows/draft.yaml b/.github/workflows/draft.yaml new file mode 100644 index 0000000..30d369c --- /dev/null +++ b/.github/workflows/draft.yaml @@ -0,0 +1,35 @@ +name: "Draft Release" + +on: + workflow_dispatch: + push: + branches: [master] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + draft: + name: "Draft Release" + runs-on: ubuntu-latest + timeout-minutes: 5 + + permissions: + contents: write + + steps: + - name: "Checkout" + uses: actions/checkout@v6 + + - name: "Draft Release Action" + id: draft + uses: cssnr/draft-release-action@master + with: + semver: patch + prerelease: false + prefix: v + + - name: "Process Release Draft URL" + run: | + echo "url: ${{ steps.draft.outputs.url }}" diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml new file mode 100644 index 0000000..9b25afd --- /dev/null +++ b/.github/workflows/issue.yaml @@ -0,0 +1,35 @@ +name: "Issue" + +on: + issues: + types: [opened] + +jobs: + issue: + name: "Issue" + if: ${{ !contains(github.event.issue.labels.*.name, 'enhancement') }} + runs-on: ubuntu-latest + timeout-minutes: 15 + + permissions: + contents: write + issues: write + + steps: + - name: "Checkout" + uses: actions/checkout@v6 + + - name: "AI Issue" + uses: cssnr/ai-issue-action@v1 + with: + model: big-pickle + tail: | + _Response generated by the [AI Issue Action](https://github.com/cssnr/ai-issue-action)._ + instructions: | + You are a helpful assistant responding to a GitHub Issue created by user @${{ github.actor }} + in the repository ${{ github.server_url }}/${{ github.repository }} + Provide initial triage and troubleshooting steps, then gather any additional information needed to proceed. + Respond using your general knowledge of GitHub Actions and the following knowledge files: + path: | + action.yml + README.md diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 28ff25e..0a0c387 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -3,7 +3,7 @@ name: "Lint" on: workflow_dispatch: push: - branches: [master] + branches: [main, master] pull_request: concurrency: @@ -26,26 +26,22 @@ jobs: - name: "Checkout" uses: actions/checkout@v6 - - name: "Setup Node 24" + - name: "Setup Node" uses: actions/setup-node@v6 with: node-version: 24 - - name: "Install" + - name: "install" id: install - run: | - npm ci + run: npm ci - name: "eslint" - id: eslint if: ${{ !cancelled() }} - run: | - npm run lint + run: npm run lint - name: "prettier" if: ${{ !cancelled() }} - run: | - npm run prettier:check + run: npm run prettier:check - name: "yamllint" if: ${{ !cancelled() }} @@ -61,7 +57,6 @@ jobs: if: ${{ !cancelled() }} uses: cssnr/actionlint-action@v1 - - name: "Verify action.yml" + - name: "action.yml" if: ${{ !cancelled() }} - run: | - yq -e '.runs.main | test("^dist/")' action.yml + run: yq -e '.runs.main | test("^dist/")' action.yml diff --git a/README.md b/README.md index 206d278..116497b 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,7 @@ jobs: steps: - name: 'Checkout' - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: 'Draft Release Action' id: draft @@ -154,7 +154,7 @@ You can view the release notes for each version on the [releases](https://github The **Major** tag is recommended. It is the most up-to-date and always backwards compatible. Breaking changes would result in a **Major** version bump. At a minimum you should use a **Minor** tag. -## Support +# Support If you run into any issues or need help getting started, please do one of the following: @@ -184,7 +184,9 @@ Additionally, you can support other [GitHub Actions](https://actions.cssnr.com/) - [Stack Deploy Action](https://github.com/cssnr/stack-deploy-action?tab=readme-ov-file#readme) - [Portainer Stack Deploy Action](https://github.com/cssnr/portainer-stack-deploy-action?tab=readme-ov-file#readme) - [Docker Context Action](https://github.com/cssnr/docker-context-action?tab=readme-ov-file#readme) +- [AI Issue Action](https://github.com/cssnr/ai-issue-action?tab=readme-ov-file#readme) - [Actions Up Action](https://github.com/cssnr/actions-up-action?tab=readme-ov-file#readme) +- [Webstore Publish Action](https://github.com/cssnr/webstore-publish-action?tab=readme-ov-file#readme) - [Rhysd Actionlint Action](https://github.com/cssnr/actionlint-action?tab=readme-ov-file#readme) - [Zensical Action](https://github.com/cssnr/zensical-action?tab=readme-ov-file#readme) - [VirusTotal Action](https://github.com/cssnr/virustotal-action?tab=readme-ov-file#readme) @@ -218,6 +220,7 @@ These actions are not published on the Marketplace, but may be useful. - [cssnr/push-artifacts-action](https://github.com/cssnr/push-artifacts-action?tab=readme-ov-file#readme) - Sync files to a remote host with rsync. - [smashedr/update-release-notes-action](https://github.com/smashedr/update-release-notes-action?tab=readme-ov-file#readme) - Update release notes. - [smashedr/combine-release-notes-action](https://github.com/smashedr/combine-release-notes-action?tab=readme-ov-file#readme) - Combine release notes. +- [smashedr/openai-translate-action](https://github.com/smashedr/openai-translate-action?tab=readme-ov-file#readme) - OpenAI translate action. --- diff --git a/action.yml b/action.yml index 6247972..85d4a37 100644 --- a/action.yml +++ b/action.yml @@ -1,6 +1,7 @@ name: "Draft Release Action" description: "Automatically Draft Releases with Semantic Version Tags" author: "Shane" + branding: icon: "repeat" color: "green" @@ -27,6 +28,8 @@ inputs: token: description: "GitHub Token" default: ${{ github.token }} + target_commitish: + description: "The commitish value (branch or SHA) that the release tag targets. Defaults to the repository's default branch." outputs: release: diff --git a/dist/index.js b/dist/index.js index 8cb4911..d89b66f 100644 --- a/dist/index.js +++ b/dist/index.js @@ -3632,9 +3632,9 @@ var hasRequiredConstants$4; function requireConstants$4 () { if (hasRequiredConstants$4) return constants$4; hasRequiredConstants$4 = 1; - (function (exports$1) { - Object.defineProperty(exports$1, "__esModule", { value: true }); - exports$1.SPECIAL_HEADERS = exports$1.HEADER_STATE = exports$1.MINOR = exports$1.MAJOR = exports$1.CONNECTION_TOKEN_CHARS = exports$1.HEADER_CHARS = exports$1.TOKEN = exports$1.STRICT_TOKEN = exports$1.HEX = exports$1.URL_CHAR = exports$1.STRICT_URL_CHAR = exports$1.USERINFO_CHARS = exports$1.MARK = exports$1.ALPHANUM = exports$1.NUM = exports$1.HEX_MAP = exports$1.NUM_MAP = exports$1.ALPHA = exports$1.FINISH = exports$1.H_METHOD_MAP = exports$1.METHOD_MAP = exports$1.METHODS_RTSP = exports$1.METHODS_ICE = exports$1.METHODS_HTTP = exports$1.METHODS = exports$1.LENIENT_FLAGS = exports$1.FLAGS = exports$1.TYPE = exports$1.ERROR = void 0; + (function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.SPECIAL_HEADERS = exports.HEADER_STATE = exports.MINOR = exports.MAJOR = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.STRICT_TOKEN = exports.HEX = exports.URL_CHAR = exports.STRICT_URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.FINISH = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = void 0; const utils_1 = requireUtils(); (function (ERROR) { ERROR[ERROR["OK"] = 0] = "OK"; @@ -3662,12 +3662,12 @@ function requireConstants$4 () { ERROR[ERROR["PAUSED_UPGRADE"] = 22] = "PAUSED_UPGRADE"; ERROR[ERROR["PAUSED_H2_UPGRADE"] = 23] = "PAUSED_H2_UPGRADE"; ERROR[ERROR["USER"] = 24] = "USER"; - })(exports$1.ERROR || (exports$1.ERROR = {})); + })(exports.ERROR || (exports.ERROR = {})); (function (TYPE) { TYPE[TYPE["BOTH"] = 0] = "BOTH"; TYPE[TYPE["REQUEST"] = 1] = "REQUEST"; TYPE[TYPE["RESPONSE"] = 2] = "RESPONSE"; - })(exports$1.TYPE || (exports$1.TYPE = {})); + })(exports.TYPE || (exports.TYPE = {})); (function (FLAGS) { FLAGS[FLAGS["CONNECTION_KEEP_ALIVE"] = 1] = "CONNECTION_KEEP_ALIVE"; FLAGS[FLAGS["CONNECTION_CLOSE"] = 2] = "CONNECTION_CLOSE"; @@ -3679,12 +3679,12 @@ function requireConstants$4 () { FLAGS[FLAGS["TRAILING"] = 128] = "TRAILING"; // 1 << 8 is unused FLAGS[FLAGS["TRANSFER_ENCODING"] = 512] = "TRANSFER_ENCODING"; - })(exports$1.FLAGS || (exports$1.FLAGS = {})); + })(exports.FLAGS || (exports.FLAGS = {})); (function (LENIENT_FLAGS) { LENIENT_FLAGS[LENIENT_FLAGS["HEADERS"] = 1] = "HEADERS"; LENIENT_FLAGS[LENIENT_FLAGS["CHUNKED_LENGTH"] = 2] = "CHUNKED_LENGTH"; LENIENT_FLAGS[LENIENT_FLAGS["KEEP_ALIVE"] = 4] = "KEEP_ALIVE"; - })(exports$1.LENIENT_FLAGS || (exports$1.LENIENT_FLAGS = {})); + })(exports.LENIENT_FLAGS || (exports.LENIENT_FLAGS = {})); var METHODS; (function (METHODS) { METHODS[METHODS["DELETE"] = 0] = "DELETE"; @@ -3744,8 +3744,8 @@ function requireConstants$4 () { METHODS[METHODS["RECORD"] = 44] = "RECORD"; /* RAOP */ METHODS[METHODS["FLUSH"] = 45] = "FLUSH"; - })(METHODS = exports$1.METHODS || (exports$1.METHODS = {})); - exports$1.METHODS_HTTP = [ + })(METHODS = exports.METHODS || (exports.METHODS = {})); + exports.METHODS_HTTP = [ METHODS.DELETE, METHODS.GET, METHODS.HEAD, @@ -3783,10 +3783,10 @@ function requireConstants$4 () { // TODO(indutny): should we allow it with HTTP? METHODS.SOURCE, ]; - exports$1.METHODS_ICE = [ + exports.METHODS_ICE = [ METHODS.SOURCE, ]; - exports$1.METHODS_RTSP = [ + exports.METHODS_RTSP = [ METHODS.OPTIONS, METHODS.DESCRIBE, METHODS.ANNOUNCE, @@ -3803,59 +3803,59 @@ function requireConstants$4 () { METHODS.GET, METHODS.POST, ]; - exports$1.METHOD_MAP = utils_1.enumToMap(METHODS); - exports$1.H_METHOD_MAP = {}; - Object.keys(exports$1.METHOD_MAP).forEach((key) => { + exports.METHOD_MAP = utils_1.enumToMap(METHODS); + exports.H_METHOD_MAP = {}; + Object.keys(exports.METHOD_MAP).forEach((key) => { if (/^H/.test(key)) { - exports$1.H_METHOD_MAP[key] = exports$1.METHOD_MAP[key]; + exports.H_METHOD_MAP[key] = exports.METHOD_MAP[key]; } }); (function (FINISH) { FINISH[FINISH["SAFE"] = 0] = "SAFE"; FINISH[FINISH["SAFE_WITH_CB"] = 1] = "SAFE_WITH_CB"; FINISH[FINISH["UNSAFE"] = 2] = "UNSAFE"; - })(exports$1.FINISH || (exports$1.FINISH = {})); - exports$1.ALPHA = []; + })(exports.FINISH || (exports.FINISH = {})); + exports.ALPHA = []; for (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) { // Upper case - exports$1.ALPHA.push(String.fromCharCode(i)); + exports.ALPHA.push(String.fromCharCode(i)); // Lower case - exports$1.ALPHA.push(String.fromCharCode(i + 0x20)); + exports.ALPHA.push(String.fromCharCode(i + 0x20)); } - exports$1.NUM_MAP = { + exports.NUM_MAP = { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, }; - exports$1.HEX_MAP = { + exports.HEX_MAP = { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 0XA, B: 0XB, C: 0XC, D: 0XD, E: 0XE, F: 0XF, a: 0xa, b: 0xb, c: 0xc, d: 0xd, e: 0xe, f: 0xf, }; - exports$1.NUM = [ + exports.NUM = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ]; - exports$1.ALPHANUM = exports$1.ALPHA.concat(exports$1.NUM); - exports$1.MARK = ['-', '_', '.', '!', '~', '*', '\'', '(', ')']; - exports$1.USERINFO_CHARS = exports$1.ALPHANUM - .concat(exports$1.MARK) + exports.ALPHANUM = exports.ALPHA.concat(exports.NUM); + exports.MARK = ['-', '_', '.', '!', '~', '*', '\'', '(', ')']; + exports.USERINFO_CHARS = exports.ALPHANUM + .concat(exports.MARK) .concat(['%', ';', ':', '&', '=', '+', '$', ',']); // TODO(indutny): use RFC - exports$1.STRICT_URL_CHAR = [ + exports.STRICT_URL_CHAR = [ '!', '"', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~', - ].concat(exports$1.ALPHANUM); - exports$1.URL_CHAR = exports$1.STRICT_URL_CHAR + ].concat(exports.ALPHANUM); + exports.URL_CHAR = exports.STRICT_URL_CHAR .concat(['\t', '\f']); // All characters with 0x80 bit set to 1 for (let i = 0x80; i <= 0xff; i++) { - exports$1.URL_CHAR.push(i); + exports.URL_CHAR.push(i); } - exports$1.HEX = exports$1.NUM.concat(['a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F']); + exports.HEX = exports.NUM.concat(['a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F']); /* Tokens as defined by rfc 2616. Also lowercases them. * token = 1* * separators = "(" | ")" | "<" | ">" | "@" @@ -3863,27 +3863,27 @@ function requireConstants$4 () { * | "/" | "[" | "]" | "?" | "=" * | "{" | "}" | SP | HT */ - exports$1.STRICT_TOKEN = [ + exports.STRICT_TOKEN = [ '!', '#', '$', '%', '&', '\'', '*', '+', '-', '.', '^', '_', '`', '|', '~', - ].concat(exports$1.ALPHANUM); - exports$1.TOKEN = exports$1.STRICT_TOKEN.concat([' ']); + ].concat(exports.ALPHANUM); + exports.TOKEN = exports.STRICT_TOKEN.concat([' ']); /* * Verify that a char is a valid visible (printable) US-ASCII * character or %x80-FF */ - exports$1.HEADER_CHARS = ['\t']; + exports.HEADER_CHARS = ['\t']; for (let i = 32; i <= 255; i++) { if (i !== 127) { - exports$1.HEADER_CHARS.push(i); + exports.HEADER_CHARS.push(i); } } // ',' = \x44 - exports$1.CONNECTION_TOKEN_CHARS = exports$1.HEADER_CHARS.filter((c) => c !== 44); - exports$1.MAJOR = exports$1.NUM_MAP; - exports$1.MINOR = exports$1.MAJOR; + exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS.filter((c) => c !== 44); + exports.MAJOR = exports.NUM_MAP; + exports.MINOR = exports.MAJOR; var HEADER_STATE; (function (HEADER_STATE) { HEADER_STATE[HEADER_STATE["GENERAL"] = 0] = "GENERAL"; @@ -3895,8 +3895,8 @@ function requireConstants$4 () { HEADER_STATE[HEADER_STATE["CONNECTION_CLOSE"] = 6] = "CONNECTION_CLOSE"; HEADER_STATE[HEADER_STATE["CONNECTION_UPGRADE"] = 7] = "CONNECTION_UPGRADE"; HEADER_STATE[HEADER_STATE["TRANSFER_ENCODING_CHUNKED"] = 8] = "TRANSFER_ENCODING_CHUNKED"; - })(HEADER_STATE = exports$1.HEADER_STATE || (exports$1.HEADER_STATE = {})); - exports$1.SPECIAL_HEADERS = { + })(HEADER_STATE = exports.HEADER_STATE || (exports.HEADER_STATE = {})); + exports.SPECIAL_HEADERS = { 'connection': HEADER_STATE.CONNECTION, 'content-length': HEADER_STATE.CONTENT_LENGTH, 'proxy-connection': HEADER_STATE.CONNECTION, @@ -8787,10 +8787,10 @@ function requireClientH1 () { const TIMEOUT_KEEP_ALIVE = 8 | USE_NATIVE_TIMER; class Parser { - constructor (client, socket, { exports: exports$1 }) { + constructor (client, socket, { exports }) { assert(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0); - this.llhttp = exports$1; + this.llhttp = exports; this.ptr = this.llhttp.llhttp_alloc(constants.TYPE.RESPONSE); this.client = client; this.socket = socket; @@ -8922,29 +8922,71 @@ function requireClientH1 () { const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr; - if (ret === constants.ERROR.PAUSED_UPGRADE) { - this.onUpgrade(data.slice(offset)); - } else if (ret === constants.ERROR.PAUSED) { - this.paused = true; - socket.unshift(data.slice(offset)); - } else if (ret !== constants.ERROR.OK) { - const ptr = llhttp.llhttp_get_error_reason(this.ptr); - let message = ''; - /* istanbul ignore else: difficult to make a test case for */ - if (ptr) { - const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0); - message = - 'Response does not match the HTTP/1.1 protocol (' + - Buffer.from(llhttp.memory.buffer, ptr, len).toString() + - ')'; + if (ret !== constants.ERROR.OK) { + const body = data.subarray(offset); + + if (ret === constants.ERROR.PAUSED_UPGRADE) { + this.onUpgrade(body); + } else if (ret === constants.ERROR.PAUSED) { + this.paused = true; + socket.unshift(body); + } else { + throw this.createError(ret, body) } - throw new HTTPParserError(message, constants.ERROR[ret], data.slice(offset)) } } catch (err) { util.destroy(socket, err); } } + finish () { + assert(currentParser === null); + assert(this.ptr != null); + assert(!this.paused); + + const { llhttp } = this; + + let ret; + + try { + currentParser = this; + ret = llhttp.llhttp_finish(this.ptr); + } finally { + currentParser = null; + } + + if (ret === constants.ERROR.OK) { + return null + } + + if (ret === constants.ERROR.PAUSED || ret === constants.ERROR.PAUSED_UPGRADE) { + this.paused = true; + return null + } + + return this.createError(ret, EMPTY_BUF) + } + + createError (ret, data) { + const { llhttp, contentLength, bytesRead } = this; + + if (contentLength && bytesRead !== parseInt(contentLength, 10)) { + return new ResponseContentLengthMismatchError() + } + + const ptr = llhttp.llhttp_get_error_reason(this.ptr); + let message = ''; + if (ptr) { + const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0); + message = + 'Response does not match the HTTP/1.1 protocol (' + + Buffer.from(llhttp.memory.buffer, ptr, len).toString() + + ')'; + } + + return new HTTPParserError(message, constants.ERROR[ret], data) + } + destroy () { assert(this.ptr != null); assert(currentParser == null); @@ -9316,8 +9358,11 @@ function requireClientH1 () { // On Mac OS, we get an ECONNRESET even if there is a full body to be forwarded // to the user. if (err.code === 'ECONNRESET' && parser.statusCode && !parser.shouldKeepAlive) { - // We treat all incoming data so for as a valid response. - parser.onMessageComplete(); + const parserErr = parser.finish(); + if (parserErr) { + this[kError] = parserErr; + this[kClient][kOnError](parserErr); + } return } @@ -9336,8 +9381,10 @@ function requireClientH1 () { const parser = this[kParser]; if (parser.statusCode && !parser.shouldKeepAlive) { - // We treat all incoming data so far as a valid response. - parser.onMessageComplete(); + const parserErr = parser.finish(); + if (parserErr) { + util.destroy(this, parserErr); + } return } @@ -9349,8 +9396,7 @@ function requireClientH1 () { if (parser) { if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) { - // We treat all incoming data so far as a valid response. - parser.onMessageComplete(); + this[kError] = parser.finish() || this[kError]; } this[kParser].destroy(); @@ -12377,7 +12423,6 @@ function requireAgent () { class Agent extends DispatcherBase { constructor ({ factory = defaultFactory, maxRedirections = 0, connect, ...options } = {}) { - if (typeof factory !== 'function') { throw new InvalidArgumentError('factory must be a function.') } @@ -29930,185 +29975,186 @@ function withDefaults$2(oldDefaults, newDefaults) { // pkg/dist-src/index.js var endpoint = withDefaults$2(null, DEFAULTS); -var fastContentTypeParse = {}; - -var hasRequiredFastContentTypeParse; +var dist = {}; -function requireFastContentTypeParse () { - if (hasRequiredFastContentTypeParse) return fastContentTypeParse; - hasRequiredFastContentTypeParse = 1; +var hasRequiredDist; - const NullObject = function NullObject () { }; - NullObject.prototype = Object.create(null); - - /** - * RegExp to match *( ";" parameter ) in RFC 7231 sec 3.1.1.1 - * - * parameter = token "=" ( token / quoted-string ) - * token = 1*tchar - * tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" - * / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" - * / DIGIT / ALPHA - * ; any VCHAR, except delimiters - * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE - * qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text - * obs-text = %x80-FF - * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) +function requireDist () { + if (hasRequiredDist) return dist; + hasRequiredDist = 1; + /*! + * content-type + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed */ - const paramRE = /; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu; - + Object.defineProperty(dist, "__esModule", { value: true }); + dist.format = format; + dist.parse = parse; + const TEXT_REGEXP = /^[\u0009\u0020-\u007e\u0080-\u00ff]*$/; + const TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/; /** - * RegExp to match quoted-pair in RFC 7230 sec 3.2.6 - * - * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) - * obs-text = %x80-FF + * RegExp to match chars that must be quoted-pair in RFC 9110 sec 5.6.4 */ - const quotedPairRE = /\\([\v\u0020-\u00ff])/gu; - + const QUOTE_REGEXP = /[\\"]/g; /** - * RegExp to match type in RFC 7231 sec 3.1.1.1 + * RegExp to match type in RFC 9110 sec 8.3.1 * * media-type = type "/" subtype * type = token * subtype = token */ - const mediaTypeRE = /^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u; - - // default ContentType to prevent repeated object creation - const defaultContentType = { type: '', parameters: new NullObject() }; - Object.freeze(defaultContentType.parameters); - Object.freeze(defaultContentType); - + const TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/; /** - * Parse media type to object. - * - * @param {string|object} header - * @return {Object} - * @public + * Null object perf optimization. Faster than `Object.create(null)` and `{ __proto__: null }`. */ - - function parse (header) { - if (typeof header !== 'string') { - throw new TypeError('argument header is required and must be a string') - } - - let index = header.indexOf(';'); - const type = index !== -1 - ? header.slice(0, index).trim() - : header.trim(); - - if (mediaTypeRE.test(type) === false) { - throw new TypeError('invalid media type') - } - - const result = { - type: type.toLowerCase(), - parameters: new NullObject() - }; - - // parse parameters - if (index === -1) { - return result - } - - let key; - let match; - let value; - - paramRE.lastIndex = index; - - while ((match = paramRE.exec(header))) { - if (match.index !== index) { - throw new TypeError('invalid parameter format') + const NullObject = /* @__PURE__ */ (() => { + const C = function () { }; + C.prototype = Object.create(null); + return C; + })(); + /** + * Format an object into a `Content-Type` header. + */ + function format(obj) { + const { type, parameters } = obj; + if (!type || !TYPE_REGEXP.test(type)) { + throw new TypeError(`Invalid type: ${type}`); + } + let result = type; + if (parameters) { + for (const param of Object.keys(parameters)) { + if (!TOKEN_REGEXP.test(param)) { + throw new TypeError(`Invalid parameter name: ${param}`); + } + result += `; ${param}=${qstring(parameters[param])}`; + } } - - index += match[0].length; - key = match[1].toLowerCase(); - value = match[2]; - - if (value[0] === '"') { - // remove quotes and escapes - value = value - .slice(1, value.length - 1); - - quotedPairRE.test(value) && (value = value.replace(quotedPairRE, '$1')); + return result; + } + /** + * Parse a `Content-Type` header. + */ + function parse(header, options) { + const len = header.length; + let index = skipOWS(header, 0, len); + const valueStart = index; + index = skipValue(header, index, len); + const valueEnd = trailingOWS(header, valueStart, index); + const type = header.slice(valueStart, valueEnd).toLowerCase(); + const parameters = options?.parameters === false + ? new NullObject() + : parseParameters(header, index, len); + return { type, parameters }; + } + const SP = 32; // " " + const HTAB = 9; // "\t" + const SEMI = 59; // ";" + const EQ = 61; // "=" + const DQUOTE = 34; // '"' + const BSLASH = 92; // "\\" + /** + * Parses the parameters of a `Content-Type` header starting at the given index. + */ + function parseParameters(header, index, len) { + const parameters = new NullObject(); + parameter: while (index < len) { + index = skipOWS(header, index + 1 /* Skip over ; */, len); + const keyStart = index; + while (index < len) { + const code = header.charCodeAt(index); + if (code === SEMI) + continue parameter; + if (code === EQ) { + const keyEnd = trailingOWS(header, keyStart, index); + const key = header.slice(keyStart, keyEnd).toLowerCase(); + index = skipOWS(header, index + 1, len); + if (index < len && header.charCodeAt(index) === DQUOTE) { + index++; + let value = ""; + while (index < len) { + const code = header.charCodeAt(index++); + if (code === DQUOTE) { + index = skipValue(header, index, len); + if (parameters[key] === undefined) + parameters[key] = value; + break; + } + if (code === BSLASH && index < len) { + value += header[index++]; + continue; + } + value += String.fromCharCode(code); + } + continue parameter; + } + const valueStart = index; + index = skipValue(header, index, len); + if (parameters[key] === undefined) { + const valueEnd = trailingOWS(header, valueStart, index); + parameters[key] = header.slice(valueStart, valueEnd); + } + continue parameter; + } + index++; + } } - - result.parameters[key] = value; - } - - if (index !== header.length) { - throw new TypeError('invalid parameter format') - } - - return result + return parameters; } - - function safeParse (header) { - if (typeof header !== 'string') { - return defaultContentType - } - - let index = header.indexOf(';'); - const type = index !== -1 - ? header.slice(0, index).trim() - : header.trim(); - - if (mediaTypeRE.test(type) === false) { - return defaultContentType - } - - const result = { - type: type.toLowerCase(), - parameters: new NullObject() - }; - - // parse parameters - if (index === -1) { - return result - } - - let key; - let match; - let value; - - paramRE.lastIndex = index; - - while ((match = paramRE.exec(header))) { - if (match.index !== index) { - return defaultContentType + /** + * Skip over characters until a semicolon. + */ + function skipValue(str, index, len) { + while (index < len) { + const char = str.charCodeAt(index); + if (char === SEMI) + break; + index++; } - - index += match[0].length; - key = match[1].toLowerCase(); - value = match[2]; - - if (value[0] === '"') { - // remove quotes and escapes - value = value - .slice(1, value.length - 1); - - quotedPairRE.test(value) && (value = value.replace(quotedPairRE, '$1')); + return index; + } + /** + * Skip optional whitespace (OWS) in an HTTP header value. + * + * OWS is defined in RFC 9110 sec 5.6.3 as SP (" ") or HTAB ("\t"). + */ + function skipOWS(header, index, len) { + while (index < len) { + const char = header.charCodeAt(index); + if (char !== SP && char !== HTAB) + break; + index++; } - - result.parameters[key] = value; - } - - if (index !== header.length) { - return defaultContentType - } - - return result + return index; } - - fastContentTypeParse.default = { parse, safeParse }; - fastContentTypeParse.parse = parse; - fastContentTypeParse.safeParse = safeParse; - fastContentTypeParse.defaultContentType = defaultContentType; - return fastContentTypeParse; + /** + * Trim optional whitespace (OWS) from the end of a substring. + * + * OWS is defined in RFC 9110 sec 5.6.3 as SP (" ") or HTAB ("\t"). + */ + function trailingOWS(header, start, end) { + while (end > start) { + const char = header.charCodeAt(end - 1); + if (char !== SP && char !== HTAB) + break; + end--; + } + return end; + } + /** + * Serialize a parameter value. + */ + function qstring(str) { + if (TOKEN_REGEXP.test(str)) + return str; + if (TEXT_REGEXP.test(str)) + return `"${str.replace(QUOTE_REGEXP, "\\$&")}"`; + throw new TypeError(`Invalid parameter value: ${str}`); + } + + return dist; } -var fastContentTypeParseExports = requireFastContentTypeParse(); +var distExports = requireDist(); const intRegex = /^-?\d+$/; const noiseValue = /^-?\d+n+$/; // Noise - strings that match the custom format before being converted to it @@ -30358,7 +30404,7 @@ class RequestError extends Error { // pkg/dist-src/index.js // pkg/dist-src/version.js -var VERSION$4 = "10.0.8"; +var VERSION$4 = "10.0.10"; // pkg/dist-src/defaults.js var defaults_default = { @@ -30480,7 +30526,7 @@ async function getResponseData(response) { if (!contentType) { return response.text().catch(noop$1); } - const mimetype = fastContentTypeParseExports.safeParse(contentType); + const mimetype = distExports.parse(contentType); if (isJSONResponse(mimetype)) { let text = ""; try { @@ -33513,7 +33559,7 @@ var hasRequiredRe; function requireRe () { if (hasRequiredRe) return re.exports; hasRequiredRe = 1; - (function (module, exports$1) { + (function (module, exports) { const { MAX_SAFE_COMPONENT_LENGTH, @@ -33521,14 +33567,14 @@ function requireRe () { MAX_LENGTH, } = requireConstants(); const debug = requireDebug(); - exports$1 = module.exports = {}; + exports = module.exports = {}; // The actual regexps go on exports.re - const re = exports$1.re = []; - const safeRe = exports$1.safeRe = []; - const src = exports$1.src = []; - const safeSrc = exports$1.safeSrc = []; - const t = exports$1.t = {}; + const re = exports.re = []; + const safeRe = exports.safeRe = []; + const src = exports.src = []; + const safeSrc = exports.safeSrc = []; + const t = exports.t = {}; let R = 0; const LETTERDASHNUMBER = '[a-zA-Z0-9-]'; @@ -33651,7 +33697,7 @@ function requireRe () { createToken('GTLT', '((?:<|>)?=?)'); // Something like "2.*" or "1.2.x". - // Note that "x.x" is a valid xRange identifer, meaning "any version" + // Note that "x.x" is a valid xRange identifier, meaning "any version" // Only the first item is strictly required. createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`); createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`); @@ -33692,7 +33738,7 @@ function requireRe () { createToken('LONETILDE', '(?:~>?)'); createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true); - exports$1.tildeTrimReplace = '$1~'; + exports.tildeTrimReplace = '$1~'; createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`); createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`); @@ -33702,7 +33748,7 @@ function requireRe () { createToken('LONECARET', '(?:\\^)'); createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true); - exports$1.caretTrimReplace = '$1^'; + exports.caretTrimReplace = '$1^'; createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`); createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`); @@ -33715,7 +33761,7 @@ function requireRe () { // it modifies, so that `> 1.2.3` ==> `>1.2.3` createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] }\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true); - exports$1.comparatorTrimReplace = '$1$2$3'; + exports.comparatorTrimReplace = '$1$2$3'; // Something like `1.2.3 - 1.2.4` // Note that these all use the loose form, because they'll be @@ -33815,6 +33861,22 @@ function requireSemver$1 () { const parseOptions = requireParseOptions(); const { compareIdentifiers } = requireIdentifiers(); + + const isPrereleaseIdentifier = (prerelease, identifier) => { + const identifiers = identifier.split('.'); + if (identifiers.length > prerelease.length) { + return false + } + + for (let i = 0; i < identifiers.length; i++) { + if (compareIdentifiers(prerelease[i], identifiers[i]) !== 0) { + return false + } + } + + return true + }; + class SemVer { constructor (version, options) { options = parseOptions(options); @@ -34118,8 +34180,9 @@ function requireSemver$1 () { if (identifierBase === false) { prerelease = [identifier]; } - if (compareIdentifiers(this.prerelease[0], identifier) === 0) { - if (isNaN(this.prerelease[1])) { + if (isPrereleaseIdentifier(this.prerelease, identifier)) { + const prereleaseBase = this.prerelease[identifier.split('.').length]; + if (isNaN(prereleaseBase)) { this.prerelease = prerelease; } } else { @@ -34647,6 +34710,62 @@ function requireCoerce () { return coerce_1; } +var truncate_1; +var hasRequiredTruncate; + +function requireTruncate () { + if (hasRequiredTruncate) return truncate_1; + hasRequiredTruncate = 1; + + const parse = requireParse(); + const constants = requireConstants(); + const SemVer = requireSemver$1(); + + const truncate = (version, truncation, options) => { + if (!constants.RELEASE_TYPES.includes(truncation)) { + return null + } + + const clonedVersion = cloneInputVersion(version, options); + return clonedVersion && doTruncation(clonedVersion, truncation) + }; + + const cloneInputVersion = (version, options) => { + const versionStringToParse = ( + version instanceof SemVer ? version.version : version + ); + + return parse(versionStringToParse, options) + }; + + const doTruncation = (version, truncation) => { + if (isPrerelease(truncation)) { + return version.version + } + + version.prerelease = []; + + switch (truncation) { + case 'major': + version.minor = 0; + version.patch = 0; + break + case 'minor': + version.patch = 0; + break + } + + return version.format() + }; + + const isPrerelease = (type) => { + return type.startsWith('pre') + }; + + truncate_1 = truncate; + return truncate_1; +} + var lrucache; var hasRequiredLrucache; @@ -34802,6 +34921,9 @@ function requireRange () { } parseRange (range) { + // strip build metadata so it can't bleed into the version + range = range.replace(BUILDSTRIPRE, ''); + // memoize range parsing for performance. // this is a very hot path, and fully deterministic. const memoOpts = @@ -34927,6 +35049,7 @@ function requireRange () { const SemVer = requireSemver$1(); const { safeRe: re, + src, t, comparatorTrimReplace, tildeTrimReplace, @@ -34934,6 +35057,9 @@ function requireRange () { } = requireRe(); const { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = requireConstants(); + // unbounded global build-metadata stripper used by parseRange + const BUILDSTRIPRE = new RegExp(src[t.BUILD], 'g'); + const isNullSet = c => c.value === '<0.0.0-0'; const isAny = c => c.value === ''; @@ -35985,7 +36111,7 @@ function requireSubset () { if (higher === c && higher !== gt) { return false } - } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) { + } else if (gt.operator === '>=' && !c.test(gt.semver)) { return false } } @@ -36003,7 +36129,7 @@ function requireSubset () { if (lower === c && lower !== lt) { return false } - } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) { + } else if (lt.operator === '<=' && !c.test(lt.semver)) { return false } } @@ -36096,6 +36222,7 @@ function requireSemver () { const lte = requireLte(); const cmp = requireCmp(); const coerce = requireCoerce(); + const truncate = requireTruncate(); const Comparator = requireComparator(); const Range = requireRange(); const satisfies = requireSatisfies(); @@ -36134,6 +36261,7 @@ function requireSemver () { lte, cmp, coerce, + truncate, Comparator, Range, satisfies, @@ -36272,6 +36400,7 @@ async function processRelease(inputs) { ...context.repo, tag_name, previous_tag_name: latest.tag_name, + target_commitish: inputs.target_commitish, }); console.log('notes.status:', notes.status); console.log('notes.data:', notes.data); @@ -36329,6 +36458,7 @@ async function addSummary(inputs, response) { * @property {string} prefix * @property {boolean} summary * @property {string} token + * @property {string|undefined} target_commitish * @return {Inputs} */ function getInputs() { @@ -36339,5 +36469,6 @@ function getInputs() { prefix: getInput('prefix'), summary: getBooleanInput('summary'), token: getInput('token', { required: true }), + target_commitish: getInput('target_commitish') || undefined, } } diff --git a/package-lock.json b/package-lock.json index 8a3ee02..8ca7ada 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,15 +8,15 @@ "dependencies": { "@actions/core": "^3.0.1", "@actions/github": "^9.1.1", - "semver": "^7.7.4" + "semver": "^7.8.2" }, "devDependencies": { "@eslint/js": "^10.0.1", - "@rollup/plugin-commonjs": "^29.0.2", + "@rollup/plugin-commonjs": "^29.0.3", "@rollup/plugin-node-resolve": "^16.0.3", - "eslint": "^10.2.1", + "eslint": "^10.4.1", "prettier": "^3.8.3", - "rollup": "^4.60.2" + "rollup": "^4.61.1" } }, "node_modules/@actions/core": { @@ -137,9 +137,9 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.5.tgz", - "integrity": "sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.6.0.tgz", + "integrity": "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -194,9 +194,9 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz", - "integrity": "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz", + "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -371,15 +371,15 @@ } }, "node_modules/@octokit/request": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.8.tgz", - "integrity": "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.10.tgz", + "integrity": "sha512-KxNC2pTqqhszMNrf12ZRd4PonRgyJdsM4F/jySiddQK+DsRcfBtUvqn8t7UsyZhnRJHvX46OohDt5N3VqIWC2w==", "license": "MIT", "dependencies": { "@octokit/endpoint": "^11.0.3", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", - "fast-content-type-parse": "^3.0.0", + "content-type": "^2.0.0", "json-with-bigint": "^3.5.3", "universal-user-agent": "^7.0.2" }, @@ -409,9 +409,9 @@ } }, "node_modules/@rollup/plugin-commonjs": { - "version": "29.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-29.0.2.tgz", - "integrity": "sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==", + "version": "29.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-29.0.3.tgz", + "integrity": "sha512-ZaOxZceP7SOUW7Lqw5IRVweSQYWaeIPnXIGLiB690EBA3FGJTO40EEr2L5yZplJWsgTCogILRSpcAe7+U0Otdg==", "dev": true, "license": "MIT", "dependencies": { @@ -461,9 +461,9 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", - "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", + "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", "dev": true, "license": "MIT", "dependencies": { @@ -484,9 +484,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.2.tgz", - "integrity": "sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.61.1.tgz", + "integrity": "sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA==", "cpu": [ "arm" ], @@ -498,9 +498,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.2.tgz", - "integrity": "sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.61.1.tgz", + "integrity": "sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw==", "cpu": [ "arm64" ], @@ -512,9 +512,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.2.tgz", - "integrity": "sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.61.1.tgz", + "integrity": "sha512-0F1L/Z3Eqv8mT2n3dCpeO8GcTvHvVqkP5/t6DMsn0KzhYVcg+s7Ncl5DS8qjKYEeio6Az0Gt6nyBORay5qIlCA==", "cpu": [ "arm64" ], @@ -526,9 +526,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.2.tgz", - "integrity": "sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.61.1.tgz", + "integrity": "sha512-qLttcH871ujY4YcVfUSShhOw+CsoTatYz8gRbHO7Bb92QH059/P0y5do1KMs41fY0BpD2x4AJH/gID0zFiqVKQ==", "cpu": [ "x64" ], @@ -540,9 +540,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.2.tgz", - "integrity": "sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.61.1.tgz", + "integrity": "sha512-fUI4RapGE0Oh3mb8mgfvC1O2nU1RpDZUKnDQm3xB1Ipg7C2wTs5Kstz7G2uWK99a8S2yTMq8/P4uycwNa0nJyw==", "cpu": [ "arm64" ], @@ -554,9 +554,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.2.tgz", - "integrity": "sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.61.1.tgz", + "integrity": "sha512-H5YrdvJaDtI/U9/emrD4b++xkvp3y/JvOe4rizHbxvkyMfRS/CiRYdji+Pl8D0brEaNFWUh1drQxgAGIl6Xudw==", "cpu": [ "x64" ], @@ -568,9 +568,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.2.tgz", - "integrity": "sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.61.1.tgz", + "integrity": "sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA==", "cpu": [ "arm" ], @@ -585,9 +585,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.2.tgz", - "integrity": "sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.61.1.tgz", + "integrity": "sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ==", "cpu": [ "arm" ], @@ -602,9 +602,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.2.tgz", - "integrity": "sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.61.1.tgz", + "integrity": "sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg==", "cpu": [ "arm64" ], @@ -619,9 +619,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.2.tgz", - "integrity": "sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.61.1.tgz", + "integrity": "sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w==", "cpu": [ "arm64" ], @@ -636,9 +636,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.2.tgz", - "integrity": "sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.61.1.tgz", + "integrity": "sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ==", "cpu": [ "loong64" ], @@ -653,9 +653,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.2.tgz", - "integrity": "sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.61.1.tgz", + "integrity": "sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ==", "cpu": [ "loong64" ], @@ -670,9 +670,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.2.tgz", - "integrity": "sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.61.1.tgz", + "integrity": "sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g==", "cpu": [ "ppc64" ], @@ -687,9 +687,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.2.tgz", - "integrity": "sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.61.1.tgz", + "integrity": "sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw==", "cpu": [ "ppc64" ], @@ -704,9 +704,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.2.tgz", - "integrity": "sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.61.1.tgz", + "integrity": "sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g==", "cpu": [ "riscv64" ], @@ -721,9 +721,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.2.tgz", - "integrity": "sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.61.1.tgz", + "integrity": "sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ==", "cpu": [ "riscv64" ], @@ -738,9 +738,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.2.tgz", - "integrity": "sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.61.1.tgz", + "integrity": "sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g==", "cpu": [ "s390x" ], @@ -755,9 +755,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.2.tgz", - "integrity": "sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.61.1.tgz", + "integrity": "sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==", "cpu": [ "x64" ], @@ -772,9 +772,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.2.tgz", - "integrity": "sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.61.1.tgz", + "integrity": "sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw==", "cpu": [ "x64" ], @@ -789,9 +789,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.2.tgz", - "integrity": "sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.61.1.tgz", + "integrity": "sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg==", "cpu": [ "x64" ], @@ -803,9 +803,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.2.tgz", - "integrity": "sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.61.1.tgz", + "integrity": "sha512-fbWnKqVkjrJN38vNe3ahkbk6iejS/3b0Nt7EEtPpE6RBacZcGXNKbzfHN3GUUlXOPghUg0j6XUGrtjX9z1sIvA==", "cpu": [ "arm64" ], @@ -817,9 +817,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.2.tgz", - "integrity": "sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.61.1.tgz", + "integrity": "sha512-ArMl38iVAbk0New1ogihQNY6iphLi4ZaRsa037gUzv5yeKPY8TD3Dmy4x2RNC1VztU/uqm+G+/RwFrSka3Oy2g==", "cpu": [ "arm64" ], @@ -831,9 +831,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.2.tgz", - "integrity": "sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.61.1.tgz", + "integrity": "sha512-0mYtjHS9ucAbcATycCNK9IGBk/cCe/ma7EmSLGZdsxnOA8cjRIyU04wDpVAD9NiOfLUR9KTxdiO53uOkherqjQ==", "cpu": [ "ia32" ], @@ -845,9 +845,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.2.tgz", - "integrity": "sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.61.1.tgz", + "integrity": "sha512-gK1iCEPfpoSG9wfBihXxvBMi8ZfcWffYkEsC/Eih+iFENTaewvNcrEQ69lIOWYO5pePHKLHHO7nq5AILGO/HQQ==", "cpu": [ "x64" ], @@ -859,9 +859,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.2.tgz", - "integrity": "sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.61.1.tgz", + "integrity": "sha512-X+zaP2x+j4RXGfbp/seSoRHWnPxzApilDszisZxbYH5C/jTxFhCtDNdPGZb9lJyYPs24wGxruPF7Y+sIXt9Gzw==", "cpu": [ "x64" ], @@ -880,9 +880,9 @@ "license": "MIT" }, "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "dev": true, "license": "MIT" }, @@ -957,9 +957,9 @@ "license": "Apache-2.0" }, "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, "license": "MIT", "dependencies": { @@ -976,6 +976,19 @@ "dev": true, "license": "MIT" }, + "node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -1050,18 +1063,18 @@ } }, "node_modules/eslint": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.1.tgz", - "integrity": "sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.4.1.tgz", + "integrity": "sha512-AyIKhnOBuOAdueD7RB3xB+YeAWScb9jHsJBgH2Hcde8InP5JYhqrRR6iTMHyTEwgENK54Cp44e4v8BwNhsuHuw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.5", - "@eslint/config-helpers": "^0.5.5", + "@eslint/config-helpers": "^0.6.0", "@eslint/core": "^1.2.1", - "@eslint/plugin-kit": "^0.7.1", + "@eslint/plugin-kit": "^0.7.2", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -1208,22 +1221,6 @@ "node": ">=0.10.0" } }, - "node_modules/fast-content-type-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", - "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "MIT" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1353,9 +1350,9 @@ } }, "node_modules/hasown": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", - "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, "license": "MIT", "dependencies": { @@ -1386,13 +1383,13 @@ } }, "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "hasown": "^2.0.3" }, "engines": { "node": ">= 0.4" @@ -1704,13 +1701,13 @@ } }, "node_modules/rollup": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz", - "integrity": "sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==", + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.61.1.tgz", + "integrity": "sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.8" + "@types/estree": "1.0.9" }, "bin": { "rollup": "dist/bin/rollup" @@ -1720,38 +1717,38 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.60.2", - "@rollup/rollup-android-arm64": "4.60.2", - "@rollup/rollup-darwin-arm64": "4.60.2", - "@rollup/rollup-darwin-x64": "4.60.2", - "@rollup/rollup-freebsd-arm64": "4.60.2", - "@rollup/rollup-freebsd-x64": "4.60.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.60.2", - "@rollup/rollup-linux-arm-musleabihf": "4.60.2", - "@rollup/rollup-linux-arm64-gnu": "4.60.2", - "@rollup/rollup-linux-arm64-musl": "4.60.2", - "@rollup/rollup-linux-loong64-gnu": "4.60.2", - "@rollup/rollup-linux-loong64-musl": "4.60.2", - "@rollup/rollup-linux-ppc64-gnu": "4.60.2", - "@rollup/rollup-linux-ppc64-musl": "4.60.2", - "@rollup/rollup-linux-riscv64-gnu": "4.60.2", - "@rollup/rollup-linux-riscv64-musl": "4.60.2", - "@rollup/rollup-linux-s390x-gnu": "4.60.2", - "@rollup/rollup-linux-x64-gnu": "4.60.2", - "@rollup/rollup-linux-x64-musl": "4.60.2", - "@rollup/rollup-openbsd-x64": "4.60.2", - "@rollup/rollup-openharmony-arm64": "4.60.2", - "@rollup/rollup-win32-arm64-msvc": "4.60.2", - "@rollup/rollup-win32-ia32-msvc": "4.60.2", - "@rollup/rollup-win32-x64-gnu": "4.60.2", - "@rollup/rollup-win32-x64-msvc": "4.60.2", + "@rollup/rollup-android-arm-eabi": "4.61.1", + "@rollup/rollup-android-arm64": "4.61.1", + "@rollup/rollup-darwin-arm64": "4.61.1", + "@rollup/rollup-darwin-x64": "4.61.1", + "@rollup/rollup-freebsd-arm64": "4.61.1", + "@rollup/rollup-freebsd-x64": "4.61.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.61.1", + "@rollup/rollup-linux-arm-musleabihf": "4.61.1", + "@rollup/rollup-linux-arm64-gnu": "4.61.1", + "@rollup/rollup-linux-arm64-musl": "4.61.1", + "@rollup/rollup-linux-loong64-gnu": "4.61.1", + "@rollup/rollup-linux-loong64-musl": "4.61.1", + "@rollup/rollup-linux-ppc64-gnu": "4.61.1", + "@rollup/rollup-linux-ppc64-musl": "4.61.1", + "@rollup/rollup-linux-riscv64-gnu": "4.61.1", + "@rollup/rollup-linux-riscv64-musl": "4.61.1", + "@rollup/rollup-linux-s390x-gnu": "4.61.1", + "@rollup/rollup-linux-x64-gnu": "4.61.1", + "@rollup/rollup-linux-x64-musl": "4.61.1", + "@rollup/rollup-openbsd-x64": "4.61.1", + "@rollup/rollup-openharmony-arm64": "4.61.1", + "@rollup/rollup-win32-arm64-msvc": "4.61.1", + "@rollup/rollup-win32-ia32-msvc": "4.61.1", + "@rollup/rollup-win32-x64-gnu": "4.61.1", + "@rollup/rollup-win32-x64-msvc": "4.61.1", "fsevents": "~2.3.2" } }, "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.2.tgz", + "integrity": "sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -1819,9 +1816,9 @@ } }, "node_modules/undici": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.25.0.tgz", - "integrity": "sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg==", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.26.0.tgz", + "integrity": "sha512-4yqz8a3n5HmGTlsbADNtr/dJlhkh/55Rq798G6ibiULcXbDtaLpTl1pvdqcbFfeoj3iSi52lePFM7h9H21cw/A==", "license": "MIT", "engines": { "node": ">=18.17" diff --git a/package.json b/package.json index 08c9a83..4a90fe4 100644 --- a/package.json +++ b/package.json @@ -12,14 +12,14 @@ "dependencies": { "@actions/core": "^3.0.1", "@actions/github": "^9.1.1", - "semver": "^7.7.4" + "semver": "^7.8.2" }, "devDependencies": { "@eslint/js": "^10.0.1", - "@rollup/plugin-commonjs": "^29.0.2", + "@rollup/plugin-commonjs": "^29.0.3", "@rollup/plugin-node-resolve": "^16.0.3", - "eslint": "^10.2.1", + "eslint": "^10.4.1", "prettier": "^3.8.3", - "rollup": "^4.60.2" + "rollup": "^4.61.1" } } diff --git a/src/index.js b/src/index.js index f9fbe1c..c8cdff4 100644 --- a/src/index.js +++ b/src/index.js @@ -111,6 +111,7 @@ async function processRelease(inputs) { ...github.context.repo, tag_name, previous_tag_name: latest.tag_name, + target_commitish: inputs.target_commitish, }) console.log('notes.status:', notes.status) console.log('notes.data:', notes.data) @@ -168,6 +169,7 @@ async function addSummary(inputs, response) { * @property {string} prefix * @property {boolean} summary * @property {string} token + * @property {string|undefined} target_commitish * @return {Inputs} */ function getInputs() { @@ -178,5 +180,6 @@ function getInputs() { prefix: core.getInput('prefix'), summary: core.getBooleanInput('summary'), token: core.getInput('token', { required: true }), + target_commitish: core.getInput('target_commitish') || undefined, } } From 79a0ef4d97e2b9ba00fc2e05d4b720bb89df2070 Mon Sep 17 00:00:00 2001 From: Shane <6071159+smashedr@users.noreply.github.com> Date: Sat, 6 Jun 2026 23:38:43 -0700 Subject: [PATCH 2/9] FFS --- .github/workflows/draft.yaml | 35 ----------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 .github/workflows/draft.yaml diff --git a/.github/workflows/draft.yaml b/.github/workflows/draft.yaml deleted file mode 100644 index 30d369c..0000000 --- a/.github/workflows/draft.yaml +++ /dev/null @@ -1,35 +0,0 @@ -name: "Draft Release" - -on: - workflow_dispatch: - push: - branches: [master] - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - draft: - name: "Draft Release" - runs-on: ubuntu-latest - timeout-minutes: 5 - - permissions: - contents: write - - steps: - - name: "Checkout" - uses: actions/checkout@v6 - - - name: "Draft Release Action" - id: draft - uses: cssnr/draft-release-action@master - with: - semver: patch - prerelease: false - prefix: v - - - name: "Process Release Draft URL" - run: | - echo "url: ${{ steps.draft.outputs.url }}" From d50a0c2fd8d7e4d8f2c916cb1730f6b80bcb9c2c Mon Sep 17 00:00:00 2001 From: Shane <6071159+smashedr@users.noreply.github.com> Date: Sun, 7 Jun 2026 20:46:10 -0700 Subject: [PATCH 3/9] Test latest.target_commitish --- dist/index.js | 2 +- src/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index d89b66f..818e119 100644 --- a/dist/index.js +++ b/dist/index.js @@ -36400,7 +36400,7 @@ async function processRelease(inputs) { ...context.repo, tag_name, previous_tag_name: latest.tag_name, - target_commitish: inputs.target_commitish, + target_commitish: latest.target_commitish, // TODO: REMOVE INPUT IF WORKING }); console.log('notes.status:', notes.status); console.log('notes.data:', notes.data); diff --git a/src/index.js b/src/index.js index c8cdff4..34c7202 100644 --- a/src/index.js +++ b/src/index.js @@ -111,7 +111,7 @@ async function processRelease(inputs) { ...github.context.repo, tag_name, previous_tag_name: latest.tag_name, - target_commitish: inputs.target_commitish, + target_commitish: latest.target_commitish, // TODO: REMOVE INPUT IF WORKING }) console.log('notes.status:', notes.status) console.log('notes.data:', notes.data) From f62b850ba30d7cbf5adc00e506fb85d0937e6620 Mon Sep 17 00:00:00 2001 From: Shane <6071159+smashedr@users.noreply.github.com> Date: Sun, 7 Jun 2026 21:52:58 -0700 Subject: [PATCH 4/9] AI Retarded --- README.md | 22 ++++++++++++++-------- action.yml | 6 +++--- dist/index.js | 7 +++---- src/index.js | 7 +++---- 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 116497b..caa5026 100644 --- a/README.md +++ b/README.md @@ -35,18 +35,24 @@ Want to see more feature? [Request one](https://github.com/cssnr/draft-release-a ## Inputs -| Input | Req. | Default Value | Input Description | -| :--------- | :--: | :----------------- | :----------------------------- | -| semver | - | `prerelease` | Semantaic Version to Incriment | -| identifier | - | `beta` | Prerelease Tag to Append | -| prerelease | - | `true` | Set Draft as Prerelease | -| prefix | - | - | Release Tag Prefix | -| summary | - | `true` | Add Job Summary to Workflow | -| token | - | `github.token` | Only for Use with a PAT | +| Input | Req. | Default Value | Input Description | +| :---------------- | :--: | :----------------- | :--------------------------------- | +| semver | - | `prerelease` | Semantaic Version to Incriment | +| identifier | - | `beta` | Prerelease Tag to Append | +| prerelease | - | `true` | Set Draft as Prerelease | +| prefix | - | - | Release Tag Prefix | +| previous_tag_name | - | - | Previous Tag or SHA for Comparison | +| summary | - | `true` | Add Job Summary to Workflow | +| token | - | `github.token` | Only for Use with a PAT | **semver:** This is the string passed to `semver.inc()` to determine which version to increment. For more details, see the [docs](https://github.com/npm/node-semver?tab=readme-ov-file#functions). +**previous_tag_name:** Override the previous tag used as the starting point for generating release notes. +This can be a tag name or a commit SHA. Use this if your release tag was moved after publication +(e.g., by a force-push to a release branch) and the auto-detected tag name no longer produces +correct release notes. Defaults to the latest release tag name. +
👀 View Example Job Summary --- diff --git a/action.yml b/action.yml index 85d4a37..4d6f810 100644 --- a/action.yml +++ b/action.yml @@ -18,7 +18,7 @@ inputs: # required: false # default: "" prerelease: - description: "Mark release as prerelease" + description: "Mark Release as prerelease" default: "true" prefix: description: "Release Tag Prefix" @@ -28,8 +28,8 @@ inputs: token: description: "GitHub Token" default: ${{ github.token }} - target_commitish: - description: "The commitish value (branch or SHA) that the release tag targets. Defaults to the repository's default branch." + previous_tag_name: + description: "Previous Tag or SHA for Comparison" outputs: release: diff --git a/dist/index.js b/dist/index.js index 818e119..8dafa32 100644 --- a/dist/index.js +++ b/dist/index.js @@ -36399,8 +36399,7 @@ async function processRelease(inputs) { const notes = await octokit.rest.repos.generateReleaseNotes({ ...context.repo, tag_name, - previous_tag_name: latest.tag_name, - target_commitish: latest.target_commitish, // TODO: REMOVE INPUT IF WORKING + previous_tag_name: inputs.previous_tag_name || latest.tag_name, }); console.log('notes.status:', notes.status); console.log('notes.data:', notes.data); @@ -36458,7 +36457,7 @@ async function addSummary(inputs, response) { * @property {string} prefix * @property {boolean} summary * @property {string} token - * @property {string|undefined} target_commitish + * @property {string} previous_tag_name * @return {Inputs} */ function getInputs() { @@ -36469,6 +36468,6 @@ function getInputs() { prefix: getInput('prefix'), summary: getBooleanInput('summary'), token: getInput('token', { required: true }), - target_commitish: getInput('target_commitish') || undefined, + previous_tag_name: getInput('previous_tag_name'), } } diff --git a/src/index.js b/src/index.js index 34c7202..d99e81b 100644 --- a/src/index.js +++ b/src/index.js @@ -110,8 +110,7 @@ async function processRelease(inputs) { const notes = await octokit.rest.repos.generateReleaseNotes({ ...github.context.repo, tag_name, - previous_tag_name: latest.tag_name, - target_commitish: latest.target_commitish, // TODO: REMOVE INPUT IF WORKING + previous_tag_name: inputs.previous_tag_name || latest.tag_name, }) console.log('notes.status:', notes.status) console.log('notes.data:', notes.data) @@ -169,7 +168,7 @@ async function addSummary(inputs, response) { * @property {string} prefix * @property {boolean} summary * @property {string} token - * @property {string|undefined} target_commitish + * @property {string} previous_tag_name * @return {Inputs} */ function getInputs() { @@ -180,6 +179,6 @@ function getInputs() { prefix: core.getInput('prefix'), summary: core.getBooleanInput('summary'), token: core.getInput('token', { required: true }), - target_commitish: core.getInput('target_commitish') || undefined, + previous_tag_name: core.getInput('previous_tag_name'), } } From 40dd866e7ef090cc9b0cdc0ec08f9b735d2f8159 Mon Sep 17 00:00:00 2001 From: Shane <6071159+smashedr@users.noreply.github.com> Date: Thu, 11 Jun 2026 15:19:03 -0700 Subject: [PATCH 5/9] Add notes_strip_prefix --- action.yml | 3 +++ dist/index.js | 15 +++++++++------ src/index.js | 15 +++++++++------ 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/action.yml b/action.yml index 4d6f810..a95e1dc 100644 --- a/action.yml +++ b/action.yml @@ -30,6 +30,9 @@ inputs: default: ${{ github.token }} previous_tag_name: description: "Previous Tag or SHA for Comparison" + notes_strip_prefix: + description: "Strip Prefix from Release Notes Tag" + default: "false" outputs: release: diff --git a/dist/index.js b/dist/index.js index 8dafa32..ce61a00 100644 --- a/dist/index.js +++ b/dist/index.js @@ -36388,17 +36388,18 @@ async function processRelease(inputs) { latest = previous; } - let tag_name = semver.inc(latest.tag_name, inputs.semver, inputs.identifier); - console.log('tag_name:', tag_name); - if (!tag_name) { + const new_name = semver.inc(latest.tag_name, inputs.semver, inputs.identifier); + console.log('new_name:', new_name); + if (!new_name) { throw new Error(`Unable to parse ${inputs.semver} from ${latest.tag_name}`) } - tag_name = `${inputs.prefix}${tag_name}`; - console.log('tag_name w/ prefix:', tag_name); + const tag_name = `${inputs.prefix}${new_name}`; + console.log('tag_name:', tag_name); + const notes_tag_name = inputs.notes_strip_prefix ? new_name : tag_name; const notes = await octokit.rest.repos.generateReleaseNotes({ ...context.repo, - tag_name, + tag_name: notes_tag_name, previous_tag_name: inputs.previous_tag_name || latest.tag_name, }); console.log('notes.status:', notes.status); @@ -36458,6 +36459,7 @@ async function addSummary(inputs, response) { * @property {boolean} summary * @property {string} token * @property {string} previous_tag_name + * @property {boolean} notes_strip_prefix * @return {Inputs} */ function getInputs() { @@ -36469,5 +36471,6 @@ function getInputs() { summary: getBooleanInput('summary'), token: getInput('token', { required: true }), previous_tag_name: getInput('previous_tag_name'), + notes_strip_prefix: getBooleanInput('notes_strip_prefix'), } } diff --git a/src/index.js b/src/index.js index d99e81b..b520969 100644 --- a/src/index.js +++ b/src/index.js @@ -99,17 +99,18 @@ async function processRelease(inputs) { latest = previous } - let tag_name = semver.inc(latest.tag_name, inputs.semver, inputs.identifier) - console.log('tag_name:', tag_name) - if (!tag_name) { + const new_name = semver.inc(latest.tag_name, inputs.semver, inputs.identifier) + console.log('new_name:', new_name) + if (!new_name) { throw new Error(`Unable to parse ${inputs.semver} from ${latest.tag_name}`) } - tag_name = `${inputs.prefix}${tag_name}` - console.log('tag_name w/ prefix:', tag_name) + const tag_name = `${inputs.prefix}${new_name}` + console.log('tag_name:', tag_name) + const notes_tag_name = inputs.notes_strip_prefix ? new_name : tag_name const notes = await octokit.rest.repos.generateReleaseNotes({ ...github.context.repo, - tag_name, + tag_name: notes_tag_name, previous_tag_name: inputs.previous_tag_name || latest.tag_name, }) console.log('notes.status:', notes.status) @@ -169,6 +170,7 @@ async function addSummary(inputs, response) { * @property {boolean} summary * @property {string} token * @property {string} previous_tag_name + * @property {boolean} notes_strip_prefix * @return {Inputs} */ function getInputs() { @@ -180,5 +182,6 @@ function getInputs() { summary: core.getBooleanInput('summary'), token: core.getInput('token', { required: true }), previous_tag_name: core.getInput('previous_tag_name'), + notes_strip_prefix: core.getBooleanInput('notes_strip_prefix'), } } From 51d7db2f7614a0d5a8fe4e01045ab8fb4893bcb3 Mon Sep 17 00:00:00 2001 From: Shane <6071159+smashedr@users.noreply.github.com> Date: Thu, 11 Jun 2026 15:21:51 -0700 Subject: [PATCH 6/9] Al Retarded --- action.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/action.yml b/action.yml index a95e1dc..90179e5 100644 --- a/action.yml +++ b/action.yml @@ -32,7 +32,6 @@ inputs: description: "Previous Tag or SHA for Comparison" notes_strip_prefix: description: "Strip Prefix from Release Notes Tag" - default: "false" outputs: release: From 63d9b5671923a8c7088adb7dc36cab1a6dbdb3cc Mon Sep 17 00:00:00 2001 From: Shane <6071159+smashedr@users.noreply.github.com> Date: Thu, 11 Jun 2026 15:31:40 -0700 Subject: [PATCH 7/9] Al Retarded --- dist/index.js | 2 +- src/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index ce61a00..633305b 100644 --- a/dist/index.js +++ b/dist/index.js @@ -36412,7 +36412,7 @@ async function processRelease(inputs) { draft: true, prerelease: inputs.prerelease, generate_release_notes: false, - name: notes.data.name, + name: tag_name, body: `\n\n\n${script_id}\n\n${notes.data.body}`, }); console.log('response.status:', response.status); diff --git a/src/index.js b/src/index.js index b520969..aa6264a 100644 --- a/src/index.js +++ b/src/index.js @@ -123,7 +123,7 @@ async function processRelease(inputs) { draft: true, prerelease: inputs.prerelease, generate_release_notes: false, - name: notes.data.name, + name: tag_name, body: `\n\n\n${script_id}\n\n${notes.data.body}`, }) console.log('response.status:', response.status) From ed04a355550de12125123276316186f68fb89cf1 Mon Sep 17 00:00:00 2001 From: Shane <6071159+smashedr@users.noreply.github.com> Date: Thu, 11 Jun 2026 15:51:06 -0700 Subject: [PATCH 8/9] Updates --- README.md | 5 +++++ dist/index.js | 15 ++++++++++++--- package-lock.json | 16 ++++++++-------- package.json | 4 ++-- src/index.js | 2 +- 5 files changed, 28 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index caa5026..bb8f83d 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ Want to see more feature? [Request one](https://github.com/cssnr/draft-release-a | prerelease | - | `true` | Set Draft as Prerelease | | prefix | - | - | Release Tag Prefix | | previous_tag_name | - | - | Previous Tag or SHA for Comparison | +| notes_strip_prefix| - | - | Strip Prefix from Release Notes Tag| | summary | - | `true` | Add Job Summary to Workflow | | token | - | `github.token` | Only for Use with a PAT | @@ -53,6 +54,10 @@ This can be a tag name or a commit SHA. Use this if your release tag was moved a (e.g., by a force-push to a release branch) and the auto-detected tag name no longer produces correct release notes. Defaults to the latest release tag name. +**notes_strip_prefix:** Strip the prefix from the tag name when generating release notes. +When enabled, the prefix (e.g. `v`) is removed from the tag name before passing it to +`generateReleaseNotes`, so the notes reference the version number without the prefix. +
👀 View Example Job Summary --- diff --git a/dist/index.js b/dist/index.js index 633305b..68f2c3b 100644 --- a/dist/index.js +++ b/dist/index.js @@ -35100,6 +35100,11 @@ function requireRange () { const isX = id => !id || id.toLowerCase() === 'x' || id === '*'; + const invalidXRangeOrder = (M, m, p) => ( + (isX(M) && !isX(m)) || + (isX(m) && p && !isX(p)) + ); + // ~, ~> --> * (any, kinda silly) // ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0 // ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0 @@ -35196,10 +35201,10 @@ function requireRange () { if (M === '0') { if (m === '0') { ret = `>=${M}.${m}.${p - }${z} <${M}.${m}.${+p + 1}-0`; + } <${M}.${m}.${+p + 1}-0`; } else { ret = `>=${M}.${m}.${p - }${z} <${M}.${+m + 1}.0-0`; + } <${M}.${+m + 1}.0-0`; } } else { ret = `>=${M}.${m}.${p @@ -35225,6 +35230,10 @@ function requireRange () { const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]; return comp.replace(r, (ret, gtlt, M, m, p, pr) => { debug('xRange', comp, ret, gtlt, M, m, p, pr); + if (invalidXRangeOrder(M, m, p)) { + return comp + } + const xM = isX(M); const xm = xM || isX(m); const xp = xm || isX(p); @@ -36412,7 +36421,7 @@ async function processRelease(inputs) { draft: true, prerelease: inputs.prerelease, generate_release_notes: false, - name: tag_name, + name: tag_name, // changed from: notes.data.name body: `\n\n\n${script_id}\n\n${notes.data.body}`, }); console.log('response.status:', response.status); diff --git a/package-lock.json b/package-lock.json index 8ca7ada..9eff272 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,14 +8,14 @@ "dependencies": { "@actions/core": "^3.0.1", "@actions/github": "^9.1.1", - "semver": "^7.8.2" + "semver": "^7.8.4" }, "devDependencies": { "@eslint/js": "^10.0.1", "@rollup/plugin-commonjs": "^29.0.3", "@rollup/plugin-node-resolve": "^16.0.3", "eslint": "^10.4.1", - "prettier": "^3.8.3", + "prettier": "^3.8.4", "rollup": "^4.61.1" } }, @@ -1653,9 +1653,9 @@ } }, "node_modules/prettier": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", - "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.4.tgz", + "integrity": "sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q==", "dev": true, "license": "MIT", "bin": { @@ -1746,9 +1746,9 @@ } }, "node_modules/semver": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.2.tgz", - "integrity": "sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", + "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==", "license": "ISC", "bin": { "semver": "bin/semver.js" diff --git a/package.json b/package.json index 4a90fe4..e5d9436 100644 --- a/package.json +++ b/package.json @@ -12,14 +12,14 @@ "dependencies": { "@actions/core": "^3.0.1", "@actions/github": "^9.1.1", - "semver": "^7.8.2" + "semver": "^7.8.4" }, "devDependencies": { "@eslint/js": "^10.0.1", "@rollup/plugin-commonjs": "^29.0.3", "@rollup/plugin-node-resolve": "^16.0.3", "eslint": "^10.4.1", - "prettier": "^3.8.3", + "prettier": "^3.8.4", "rollup": "^4.61.1" } } diff --git a/src/index.js b/src/index.js index aa6264a..dc335c6 100644 --- a/src/index.js +++ b/src/index.js @@ -123,7 +123,7 @@ async function processRelease(inputs) { draft: true, prerelease: inputs.prerelease, generate_release_notes: false, - name: tag_name, + name: tag_name, // changed from: notes.data.name body: `\n\n\n${script_id}\n\n${notes.data.body}`, }) console.log('response.status:', response.status) From 53a4b4a6a2eb16f21ec7caf08084ebc6d9353bf8 Mon Sep 17 00:00:00 2001 From: Shane <6071159+smashedr@users.noreply.github.com> Date: Thu, 11 Jun 2026 15:52:50 -0700 Subject: [PATCH 9/9] Al Retarded --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index bb8f83d..3ee83d8 100644 --- a/README.md +++ b/README.md @@ -35,16 +35,16 @@ Want to see more feature? [Request one](https://github.com/cssnr/draft-release-a ## Inputs -| Input | Req. | Default Value | Input Description | -| :---------------- | :--: | :----------------- | :--------------------------------- | -| semver | - | `prerelease` | Semantaic Version to Incriment | -| identifier | - | `beta` | Prerelease Tag to Append | -| prerelease | - | `true` | Set Draft as Prerelease | -| prefix | - | - | Release Tag Prefix | -| previous_tag_name | - | - | Previous Tag or SHA for Comparison | -| notes_strip_prefix| - | - | Strip Prefix from Release Notes Tag| -| summary | - | `true` | Add Job Summary to Workflow | -| token | - | `github.token` | Only for Use with a PAT | +| Input | Req. | Default Value | Input Description | +| :----------------- | :--: | :----------------- | :---------------------------------- | +| semver | - | `prerelease` | Semantaic Version to Incriment | +| identifier | - | `beta` | Prerelease Tag to Append | +| prerelease | - | `true` | Set Draft as Prerelease | +| prefix | - | - | Release Tag Prefix | +| previous_tag_name | - | - | Previous Tag or SHA for Comparison | +| notes_strip_prefix | - | - | Strip Prefix from Release Notes Tag | +| summary | - | `true` | Add Job Summary to Workflow | +| token | - | `github.token` | Only for Use with a PAT | **semver:** This is the string passed to `semver.inc()` to determine which version to increment. For more details, see the [docs](https://github.com/npm/node-semver?tab=readme-ov-file#functions).