Publish to VS Code MarketPlace & update Sentry #60
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |