返回 DeepSeek-Reasonix
resolve-npm-release.sh
根目录 / scripts / resolve-npm-release.sh
1 #!/usr/bin/env bash
2 # Resolve and validate the version argument passed to npm/build.mjs. Keeping
3 # workflow inputs in environment variables avoids interpolating dispatch input
4 # into shell source.
5 set -euo pipefail
6
7 stable_semver_re='^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$'
8 release_semver_re='^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-([0-9A-Za-z-]+)(\.[0-9A-Za-z-]+)*)?$'
9
10 if [ "${EVENT_NAME:-}" = "workflow_dispatch" ] || [ "${IN_ORCHESTRATED:-false}" = "true" ]; then
11 base="${IN_BASE_VERSION:?dispatch/call requires base_version}"
12 base="${base#v}"
13 if [[ ! "$base" =~ $stable_semver_re ]]; then
14 echo "::error::base version must be MAJOR.MINOR.PATCH, got: $base" >&2
15 exit 1
16 fi
17 if [ "${IN_CHANNEL:-stable}" = "canary" ]; then
18 if [ "${IN_ORCHESTRATED:-false}" != "true" ]; then
19 echo "::error::public npm Canary releases must be dispatched by release-preview.yml" >&2
20 exit 1
21 fi
22 preview_number="${IN_PREVIEW_NUMBER:-${RUN_NUMBER:-}}"
23 if [[ ! "$preview_number" =~ ^(0|[1-9][0-9]*)$ ]]; then
24 echo "::error::canary preview number must be a non-negative integer, got: $preview_number" >&2
25 exit 1
26 fi
27 arg="v${base}-canary.${preview_number}"
28 else
29 tag="${IN_TAG:-}"
30 if [ -z "$tag" ]; then
31 echo "::error::stable publication requires an existing npm tag" >&2
32 exit 1
33 fi
34 if [ "$tag" != "npm-v${base}" ]; then
35 echo "::error::tag $tag does not match requested version npm-v${base}" >&2
36 exit 1
37 fi
38 arg="v${base}"
39 fi
40 else
41 tag="${REF_NAME:?tag push requires ref name}"
42 if [[ ! "$tag" =~ ^npm-v(.+)$ ]] || [[ ! "${BASH_REMATCH[1]}" =~ $release_semver_re ]]; then
43 echo "::error::npm release tag must be npm-vMAJOR.MINOR.PATCH[-PRERELEASE], got: $tag" >&2
44 exit 1
45 fi
46 arg="$tag"
47 fi
48
49 echo "arg=$arg" >>"${GITHUB_OUTPUT:-/dev/stdout}"
50 echo "npm release resolved: $arg"
51
51 lines BASH