Skip to content

Publish to VS Code MarketPlace & update Sentry #60

Publish to VS Code MarketPlace & update Sentry

Publish to VS Code MarketPlace & update Sentry #60

Workflow file for this run

name: Publish to VS Code MarketPlace & update Sentry
on:
workflow_dispatch:
jobs:
setup:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
outputs:
package-lock-hash: ${{ runner.os }}-repo-${{ steps.hash.outputs.hash }}
steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Install dependencies
run: |
npm ci
npm run compile-tests
npm run compile
- name: Calculate package-lock.json hash
id: hash
run: echo "hash=$(sha256sum package-lock.json | awk '{ print $1 }')" >> "$GITHUB_OUTPUT"
- name: Cache repository
uses: actions/cache@v4
with:
path: .
key: ${{ runner.os }}-repo-${{ steps.hash.outputs.hash }}
vulnerabilities-scan:
runs-on: ubuntu-latest
needs: setup
steps:
- uses: actions/checkout@v4
- uses: debricked/actions@v4
env:
DEBRICKED_TOKEN: ${{ secrets.DEBRICKED_TOKEN }}
build-package:
runs-on: ubuntu-latest
needs: setup
steps:
- name: Restore repository cache
uses: actions/cache@v4
with:
path: .
key: ${{ needs.setup.outputs.package-lock-hash }}
fail-on-cache-miss: true
- name: Get latest tag
run: |
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "0.0.0-beta")
echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_ENV
shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
- name: Update version in package.json
run: |
jq --arg version "$LATEST_TAG" '.version = $version' package.json > package.tmp.json
mv package.tmp.json package.json
shell: bash
- name: Verify updated package.json
run: cat package.json
- name: Package VS Code Extension
run: |
npm install -g vsce
vsce package
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
- name: Upload VSIX artifact
uses: actions/upload-artifact@v4
with:
name: vsce-package
path: "*.vsix"
# - name: Publish to VS Code Marketplace
# env:
# VSCE_PAT: ${{ secrets.VSCE_PAT }}
# run: vsce publish -p $VSCE_PAT
sentry-release:
runs-on: ubuntu-latest
needs: [setup, build-package]
steps:
- name: Restore repository cache
uses: actions/cache@v4
with:
path: .
key: ${{ needs.setup.outputs.package-lock-hash }}
fail-on-cache-miss: true
- name: List all folders
run: |
ls -l
- name: Get latest tag
run: |
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "0.0.0-beta")
echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_ENV
shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
- name: Install Sentry CLI
run: npm install -g @sentry/cli
- name: Create Sentry release
uses: getsentry/action-release@v1
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
SENTRY_URL: ${{ secrets.SENTRY_URL }}
with:
environment: production
version: vs-code-extension@${{ env.LATEST_TAG }}
notify:
runs-on: ubuntu-latest
needs: [build-package, sentry-release]
steps:
- name: Send Slack Notification
if: success()
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
run: |
curl -X POST -H 'Content-type: application/json' \
--data '{
"text": "The VS Code extension has been successfully published to the Marketplace.\n*Version:* ${{ env.LATEST_TAG }}\n*Repository:* ${{ github.repository }}."
}' $SLACK_WEBHOOK_URL
- name: Send Microsoft Teams Notification
if: success()
env:
TEAMS_WEBHOOK_URL: ${{ secrets.TEAMS_WEBHOOK_URL }}
run: |
curl -H 'Content-Type: application/json' -d '{
"@type": "MessageCard",
"@context": "https://schema.org/extensions",
"summary": "VS Code Extension Published",
"themeColor": "0076D7",
"title": "VS Code Extension Published",
"sections": [{
"activityTitle": "VS Code extension published",
"activitySubtitle": "Version: ${{ env.LATEST_TAG }}",
"activityImage": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png",
"facts": [{
"name": "Repository",
"value": "${{ github.repository }}"
},
{
"name": "Version",
"value": "${{ env.LATEST_TAG }}"
}
],
"markdown": true
}]
}' $TEAMS_WEBHOOK_URL
cleanup:
runs-on: ubuntu-latest
needs: [setup, build-package, sentry-release]
if: always()
steps:
- name: Cleanup
run: npm cache clean --force
- name: Delete GitHub Actions cache
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
CACHE_KEY="${{ needs.setup.outputs.package-lock-hash }}"
if [ -n "$CACHE_KEY" ]; then
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: token $GH_TOKEN" \
"https://api.github.com/repos/${{ github.repository }}/actions/caches?key=$CACHE_KEY"
echo "Cache deleted successfully"
else
echo "No matching cache found"
fi