diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 11c8b1114f..0000000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,68 +0,0 @@ -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 }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 8450e96a2e..2be2b2a992 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -23,7 +23,11 @@ permissions: pull-requests: write jobs: + test: + uses: ./.github/workflows/test.yml + publish: + needs: test name: Publish Extension runs-on: ubuntu-latest environment: publish @@ -38,6 +42,30 @@ 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 @@ -62,48 +90,15 @@ 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" diff --git a/package.json b/package.json index 5fd9e937bb..a54a8fab83 100644 --- a/package.json +++ b/package.json @@ -371,8 +371,8 @@ "dev:webview": "cd webview-ui && npm run dev", "build:webview": "cd webview-ui && npm run build", "test:webview": "cd webview-ui && npm run test", - "publish:marketplace": "vsce publish ${VSIX_PATH:+--packagePath $VSIX_PATH} && ovsx publish ${VSIX_PATH:+--packagePath $VSIX_PATH}", - "publish:marketplace:prerelease": "vsce publish --pre-release ${VSIX_PATH:+--packagePath $VSIX_PATH} && ovsx publish --pre-release ${VSIX_PATH:+--packagePath $VSIX_PATH}", + "publish:marketplace": "vsce publish && ovsx publish", + "publish:marketplace:prerelease": "vsce publish --pre-release && ovsx publish --pre-release", "prepare": "husky", "changeset": "changeset", "version-packages": "changeset version",