-
Notifications
You must be signed in to change notification settings - Fork 2
133 lines (116 loc) · 4.23 KB
/
publish-vscode-extension.yml
File metadata and controls
133 lines (116 loc) · 4.23 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
132
133
name: Publish VSCode Extension
on:
workflow_dispatch:
inputs:
version:
description: 'Version to publish (leave empty to use version from package.json)'
required: false
type: string
dry_run:
description: 'Dry run (package only, do not publish)'
required: false
type: boolean
default: false
push:
tags:
- 'vscode-v*.*.*'
permissions:
contents: write
issues: write
pull-requests: write
jobs:
publish:
name: Package and Publish VSCode Extension
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install pnpm
uses: pnpm/action-setup@v3
with:
version: 10
run_install: false
- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- name: Setup pnpm cache
uses: actions/cache@v4
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install Dependencies
run: pnpm install
timeout-minutes: 3
- name: Build Monorepo
run: pnpm run build
timeout-minutes: 5
- name: Build VSCode Extension
working-directory: packages/tools/vscode-objectql
run: pnpm run compile
- name: Update Version (if specified)
if: inputs.version != ''
working-directory: packages/tools/vscode-objectql
run: |
echo "Updating version to ${{ inputs.version }}"
npm version ${{ inputs.version }} --no-git-tag-version
- name: Package Extension
working-directory: packages/tools/vscode-objectql
run: |
npx @vscode/vsce package --no-yarn
echo "VSIX_FILE=$(ls *.vsix)" >> $GITHUB_ENV
- name: Upload VSIX as Artifact
uses: actions/upload-artifact@v4
with:
name: vscode-objectql-extension
path: packages/tools/vscode-objectql/*.vsix
retention-days: 30
- name: Publish to VSCode Marketplace
if: inputs.dry_run != true
working-directory: packages/tools/vscode-objectql
env:
VSCE_PAT: ${{ secrets.VSCE_PAT }}
run: |
if [ -z "$VSCE_PAT" ]; then
echo "::error::VSCE_PAT secret is not set. Cannot publish to marketplace."
exit 1
fi
npx @vscode/vsce publish --no-yarn --pat "$VSCE_PAT"
- name: Create GitHub Release
if: inputs.dry_run != true && startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v1
with:
files: packages/tools/vscode-objectql/*.vsix
generate_release_notes: true
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Summary
run: |
echo "## 🎉 VSCode Extension Build Complete" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Package Details" >> $GITHUB_STEP_SUMMARY
echo "- **VSIX File:** \`${{ env.VSIX_FILE }}\`" >> $GITHUB_STEP_SUMMARY
echo "- **Dry Run:** ${{ inputs.dry_run }}" >> $GITHUB_STEP_SUMMARY
if [ "${{ inputs.dry_run }}" == "true" ]; then
echo "- **Status:** ✅ Packaged (not published)" >> $GITHUB_STEP_SUMMARY
else
echo "- **Status:** ✅ Published to VSCode Marketplace" >> $GITHUB_STEP_SUMMARY
fi
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Next Steps" >> $GITHUB_STEP_SUMMARY
if [ "${{ inputs.dry_run }}" == "true" ]; then
echo "- Download the VSIX artifact to test locally" >> $GITHUB_STEP_SUMMARY
echo "- Install in VSCode: Extensions → Install from VSIX" >> $GITHUB_STEP_SUMMARY
else
echo "- Extension is now available in VSCode Marketplace" >> $GITHUB_STEP_SUMMARY
echo "- Search for 'ObjectQL' in VSCode Extensions" >> $GITHUB_STEP_SUMMARY
fi