Build package per commit (#4570)

* Build the extension on every commit push

* Publish using the vsix path

* Fix tag resolution

* Remove `while ;`

* Remove test trigger

* use while true;

* Update package.json

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Use high capacity runner

* add if check to only run in the Cline repo

* Conditionally select a runner

---------

Co-authored-by: Dennise Bartlett <bartlett.dc.1@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Tomás Barreiro
2025-08-22 17:07:52 -07:00
committed by GitHub
co-authored by Copilot Dennise Bartlett
parent a50200aba1
commit fe8ab85e1a
3 changed files with 106 additions and 33 deletions
+68
View File
@@ -0,0 +1,68 @@
name: "Build Extension"
on:
push:
branches:
- main
jobs:
test:
uses: ./.github/workflows/test.yml
build:
needs: test
name: Build Extension
runs-on: ${{ github.repository == 'cline/cline' && 'high-capacity-runner' || 'ubuntu-latest' }}
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "lts/*"
- name: Cache root dependencies
uses: actions/cache@v4
id: root-cache
with:
path: node_modules
key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json') }}
# Cache webview-ui dependencies - only reuse if package-lock.json exactly matches
- name: Cache webview-ui dependencies
uses: actions/cache@v4
id: webview-cache
with:
path: webview-ui/node_modules
key: ${{ runner.os }}-npm-webview-${{ hashFiles('webview-ui/package-lock.json') }}
- name: Install root dependencies
if: steps.root-cache.outputs.cache-hit != 'true'
run: npm ci --include=optional
- name: Install webview-ui dependencies
if: steps.webview-cache.outputs.cache-hit != 'true'
run: cd webview-ui && npm ci --include=optional
- name: Install Publishing Tools
run: npm install -g @vscode/vsce ovsx
- name: Set Variables
id: set_variables
run: |
VERSION=$(node -p "require('./package.json').version")
echo "version=$VERSION" >> $GITHUB_OUTPUT
SHORT_SHA=$(git rev-parse --short HEAD)
echo "short_sha=$SHORT_SHA" >> $GITHUB_OUTPUT
echo "file_path=cline-${VERSION}-${SHORT_SHA}.vsix" >> $GITHUB_OUTPUT
- name: Package Extension
run: |
echo "Packaging extension with version ${{ steps.set_variables.outputs.version }}"
vsce package --out "${{ steps.set_variables.outputs.file_path }}"
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: vsix-package
path: ${{ steps.set_variables.outputs.file_path }}
+36 -31
View File
@@ -23,11 +23,7 @@ permissions:
pull-requests: write
jobs:
test:
uses: ./.github/workflows/test.yml
publish:
needs: test
name: Publish Extension
runs-on: ubuntu-latest
environment: publish
@@ -42,30 +38,6 @@ jobs:
with:
node-version: "lts/*"
# Cache root dependencies - only reuse if package-lock.json exactly matches
- name: Cache root dependencies
uses: actions/cache@v4
id: root-cache
with:
path: node_modules
key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json') }}
# Cache webview-ui dependencies - only reuse if package-lock.json exactly matches
- name: Cache webview-ui dependencies
uses: actions/cache@v4
id: webview-cache
with:
path: webview-ui/node_modules
key: ${{ runner.os }}-npm-webview-${{ hashFiles('webview-ui/package-lock.json') }}
- name: Install root dependencies
if: steps.root-cache.outputs.cache-hit != 'true'
run: npm ci --include=optional
- name: Install webview-ui dependencies
if: steps.webview-cache.outputs.cache-hit != 'true'
run: cd webview-ui && npm ci --include=optional
- name: Install Publishing Tools
run: npm install -g @vscode/vsce ovsx
@@ -90,15 +62,48 @@ jobs:
echo "Tag '$TAG' validated successfully"
- name: Download Artifact
id: download_artifact
timeout-minutes: 30
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
TAG="${{ github.event.inputs.tag }}"
COMMIT_SHA=$(git rev-parse "$TAG")
while true; do
RUN_ID=$(gh run list \
--workflow="Build Extension" \
--commit="${COMMIT_SHA}" \
--status=success \
--limit=1 \
--json databaseId \
--jq '.[0].databaseId')
if [ -n "$RUN_ID" ]; then
echo "Build completed! Downloading artifact..."
gh run download $RUN_ID --name vsix-package
exit 0
fi
echo "Waiting for build..."
sleep 10
done
- name: Set VSIX Path
id: set_vsix_path
run: |
FILE_PATH=$(ls *.vsix | head -n 1)
echo "VSIX_PATH=$FILE_PATH" >> $GITHUB_OUTPUT
- name: Package and Publish Extension
env:
VSCE_PAT: ${{ secrets.VSCE_PAT }}
OVSX_PAT: ${{ secrets.OVSX_PAT }}
CLINE_ENVIRONMENT: production
VSIX_PATH: ${{ steps.set_vsix_path.outputs.VSIX_PATH }}
run: |
# Required to generate the .vsix
vsce package --out "cline-${{ steps.get_version.outputs.version }}.vsix"
if [ "${{ github.event.inputs.release-type }}" = "pre-release" ]; then
npm run publish:marketplace:prerelease
echo "Successfully published pre-release version ${{ steps.get_version.outputs.version }} to VS Code Marketplace and Open VSX Registry"