-
Notifications
You must be signed in to change notification settings - Fork 2
97 lines (89 loc) · 3.68 KB
/
Copy pathcreate-github-release.yml
File metadata and controls
97 lines (89 loc) · 3.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
name: Create GitHub Release
on:
pull_request:
types: [closed]
branches: [main]
permissions:
contents: write
jobs:
release:
if: github.event_name == 'pull_request' && github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'automation/docs-')
runs-on: ubuntu-latest
env:
GH_TOKEN: ${{ github.token }}
steps:
- uses: actions/checkout@v7
with:
ref: main
- uses: actions/setup-node@v7
with:
node-version: "22"
- name: Extract and validate version
id: ver
env:
PR_HEAD_REF: ${{ github.event.pull_request.head.ref }}
run: |
set -eu
branch="$PR_HEAD_REF"
ver="${branch#automation/docs-}"
echo "$ver" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+(-[0-9]+)?$' || {
echo "ERROR: Cannot extract valid version from branch: $branch" >&2
exit 1
}
echo "ver=$ver" >> "$GITHUB_OUTPUT"
- name: Verify npm publish exists
run: |
set -eu
ver="${{ steps.ver.outputs.ver }}"
published=$(npm view "@bash0816/codex-termux@${ver}" version 2>/dev/null || echo "")
if [ "$published" != "$ver" ]; then
echo "ERROR: @bash0816/codex-termux@${ver} not published on npm" >&2
exit 1
fi
echo "Confirmed: @bash0816/codex-termux@${ver} is published"
- name: Resolve previous version
id: prev
run: |
set -eu
ver="${{ steps.ver.outputs.ver }}"
previous_ver="$(npm view @bash0816/codex-termux versions --json 2>/dev/null \
| python3 -c "import sys,json; vers=json.load(sys.stdin); t='${ver}'; idx=next((i for i,v in enumerate(vers) if v==t),None); print(vers[idx-1] if idx and idx>0 else '')" 2>/dev/null || echo "")"
if [ -z "$previous_ver" ]; then
echo "ERROR: Cannot determine previous version for rollback" >&2
exit 1
fi
echo "previous_ver=$previous_ver" >> "$GITHUB_OUTPUT"
- name: Create GitHub Release
run: |
set -eu
ver="${{ steps.ver.outputs.ver }}"
previous_ver="${{ steps.prev.outputs.previous_ver }}"
tag="v${ver}"
if gh release view "$tag" --repo "$GITHUB_REPOSITORY" > /dev/null 2>&1; then
echo "Release $tag already exists, skipping"
exit 0
fi
release_notes=$(awk -v ver="$ver" 'BEGIN{f=0} $0=="## " ver " — " substr($0, length("## " ver " — ")+1) || ($0 ~ "^## " && index($0, "## " ver " ")>0){f=1;next} f && /^### /{exit} f && /^## /{exit} f{print}' RELEASES.md | sed '/^[[:space:]] *$/d')
if [ -z "$release_notes" ]; then
release_notes="upstream openai/codex@${ver} 追従。"
fi
release_body_file="$(mktemp)"
{
printf "## codex-termux v%s\n\n" "$ver"
printf "%s\n\n" "$release_notes"
printf "### Install\n\`\`\`sh\nnpm install -g @bash0816/codex-termux@%s\n\`\`\`\n\n" "$ver"
printf "### Rollback\n\`\`\`sh\nnpm install -g @bash0816/codex-termux@%s\n\`\`\`\n" "$previous_ver"
} >"$release_body_file"
npm_latest=$(npm view @bash0816/codex-termux dist-tags.latest 2>/dev/null || echo "")
if [ "$ver" = "$npm_latest" ]; then
latest_flag="--latest"
else
latest_flag="--latest=false"
fi
gh release create "$tag" \
--repo "$GITHUB_REPOSITORY" \
--title "codex-termux v${ver}" \
--notes-file "$release_body_file" \
--target main \
$latest_flag
echo "Created release $tag"