-
Notifications
You must be signed in to change notification settings - Fork 1
131 lines (112 loc) · 4.24 KB
/
release.yml
File metadata and controls
131 lines (112 loc) · 4.24 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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
name: Release
on:
push:
tags:
- v*.*.*
permissions:
contents: write
jobs:
release:
name: Package and publish extension
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- name: Install dependencies
run: npm ci
- name: Verify tag matches package version
run: |
VERSION=$(node -p "require('./package.json').version")
if [ "v$VERSION" != "$GITHUB_REF_NAME" ]; then
echo "Tag $GITHUB_REF_NAME does not match package.json version v$VERSION"
exit 1
fi
- name: Compile
run: npm run compile
- name: Lint
run: npm run lint
- name: Test (headless)
run: xvfb-run -a npm test
- name: Detect pre-release
run: |
VERSION="${GITHUB_REF_NAME#v}"
MINOR=$(echo "$VERSION" | cut -d. -f2)
if (( MINOR % 2 == 1 )); then
echo "PRE_RELEASE=true" >> "$GITHUB_ENV"
else
echo "PRE_RELEASE=false" >> "$GITHUB_ENV"
fi
- name: Package VSIX
run: |
VSIX_NAME="doom-${GITHUB_REF_NAME}.vsix"
if [ "$PRE_RELEASE" = "true" ]; then
npx @vscode/vsce package --pre-release --out "$VSIX_NAME"
else
npx @vscode/vsce package --out "$VSIX_NAME"
fi
echo "VSIX_NAME=$VSIX_NAME" >> "$GITHUB_ENV"
- name: Extract release notes from changelog
run: |
VERSION="${GITHUB_REF_NAME#v}"
NOTES_FILE="release-notes.md"
awk -v version="$VERSION" '
BEGIN { in_section = 0; found = 0 }
$0 ~ "^## \\[" version "\\]" {
in_section = 1
found = 1
next
}
in_section && $0 ~ "^## \\[" {
exit
}
in_section {
print
}
END {
if (!found) {
exit 2
}
}
' CHANGELOG.md > "$NOTES_FILE"
if [ ! -s "$NOTES_FILE" ]; then
echo "No release notes found for $GITHUB_REF_NAME in CHANGELOG.md"
exit 1
fi
echo "RELEASE_NOTES_FILE=$NOTES_FILE" >> "$GITHUB_ENV"
- name: Create GitHub Release
run: |
if [ "$PRE_RELEASE" = "true" ]; then
gh release create "$GITHUB_REF_NAME" "$VSIX_NAME" \
--notes-file "$RELEASE_NOTES_FILE" \
--title "$GITHUB_REF_NAME" \
--prerelease
else
gh release create "$GITHUB_REF_NAME" "$VSIX_NAME" \
--notes-file "$RELEASE_NOTES_FILE" \
--title "$GITHUB_REF_NAME"
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish to VS Code Marketplace
run: |
if [ "$PRE_RELEASE" = "true" ]; then
npx @vscode/vsce publish --pre-release --packagePath "$VSIX_NAME"
else
npx @vscode/vsce publish --packagePath "$VSIX_NAME"
fi
env:
VSCE_PAT: ${{ secrets.VSCE_PAT }}
- name: Publish to Open VSX Registry
run: |
if [ "$PRE_RELEASE" = "true" ]; then
npx ovsx publish --pre-release "$VSIX_NAME"
else
npx ovsx publish "$VSIX_NAME"
fi
env:
OVSX_PAT: ${{ secrets.OPEN_VSX_TOKEN }}