Skip to content

v0.1.1

v0.1.1 #2

Workflow file for this run

name: Publish Extension
on:
workflow_dispatch:
push:
tags:
- "*"
env:
PUBLISH_OPENVSX: ${{ vars.PUBLISH_OPENVSX }}
PUBLISH_VSCODE: ${{ vars.PUBLISH_VSCODE }}
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get Version
run: |
# Get the latest tag
LATEST_TAG=$(git tag --sort=-v:refname | head -n1)
if [ -z "$LATEST_TAG" ]; then
echo "No tags found in the repository"
exit 1
fi
echo "VERSION=$LATEST_TAG" >> $GITHUB_ENV
echo "Using version: $LATEST_TAG"
- name: Check Existing Release
run: |
# Try to get the release information
RELEASE_INFO=$(gh release view ${{ env.VERSION }} --json assets,url 2>/dev/null || echo "")
if [ ! -z "$RELEASE_INFO" ]; then
echo "Release exists"
echo "RELEASE_EXISTS=yes" >> $GITHUB_ENV
# Get the VSIX asset URL from the release
VSIX_URL=$(echo $RELEASE_INFO | jq -r '.assets[] | select(.name | endswith(".vsix")) | .url')
if [ ! -z "$VSIX_URL" ]; then
echo "Found existing VSIX file"
echo "VSIX_URL=$VSIX_URL" >> $GITHUB_ENV
echo "VSIX_NAME=$(echo $RELEASE_INFO | jq -r '.assets[] | select(.name | endswith(".vsix")) | .name')" >> $GITHUB_ENV
fi
else
echo "RELEASE_EXISTS=no" >> $GITHUB_ENV
fi
env:
GH_TOKEN: ${{ github.token }}
- name: Download Existing VSIX
if: env.RELEASE_EXISTS == 'yes' && env.VSIX_URL != ''
run: |
gh api ${{ env.VSIX_URL }} --header 'Accept: application/octet-stream' > ${{ env.VSIX_NAME }}
echo "CHECKSUM=$(sha256sum ${{ env.VSIX_NAME }} | cut -d ' ' -f 1)" >> $GITHUB_ENV
env:
GH_TOKEN: ${{ github.token }}
- name: Setup Node.js
if: env.RELEASE_EXISTS == 'no'
uses: actions/setup-node@v4
with:
node-version: 20
- name: Build
if: env.RELEASE_EXISTS == 'no'
run: |
npm ci
npm install -g @vscode/vsce
npm run package
VSIX_NAME=$(ls *.vsix)
CHECKSUM=$(sha256sum $VSIX_NAME | cut -d ' ' -f 1)
echo "VSIX_NAME=$VSIX_NAME" >> $GITHUB_ENV
echo "CHECKSUM=$CHECKSUM" >> $GITHUB_ENV
echo "$CHECKSUM" > "$VSIX_NAME.sha256"
- name: Get Changelog
if: env.RELEASE_EXISTS == 'no'
run: |
CHANGELOG_ENTRY=$(node .github/scripts/get-changelog.js ${{ env.VERSION }})
# Properly handle multiline output in GitHub Actions
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
echo "CHANGELOG_ENTRY<<$EOF" >> $GITHUB_ENV
echo "$CHANGELOG_ENTRY" >> $GITHUB_ENV
echo "$EOF" >> $GITHUB_ENV
- name: Release
if: env.RELEASE_EXISTS == 'no'
uses: softprops/action-gh-release@v2
with:
files: |
${{ env.VSIX_NAME }}
${{ env.VSIX_NAME }}.sha256
name: ${{ env.VERSION }}
tag_name: ${{ env.VERSION }}
body: |
Release ${{ env.VERSION }}
## What's Changed
${{ env.CHANGELOG_ENTRY }}
## Installation
1. [Download the .vsix file](${{ github.server_url }}/${{ github.repository }}/releases/download/${{ env.VERSION }}/${{ env.VSIX_NAME }})
2. In your editor, open the Command Palette (<kbd>Meta</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd>)
3. Type `Install from VSIX` and select the downloaded file
## Checksum (SHA-256)
```
${{ env.CHECKSUM }}
```
- name: Publish to Open VSX Registry
if: env.PUBLISH_OPENVSX == 'yes'
uses: HaaLeo/publish-vscode-extension@v2
with:
extensionFile: ${{ env.VSIX_NAME }}
pat: ${{ secrets.TOKEN_OPENVSX }}
skipDuplicate: true
- name: Publish to Visual Studio Code Marketplace
if: env.PUBLISH_VSCODE == 'yes'
uses: HaaLeo/publish-vscode-extension@v2
with:
extensionFile: ${{ env.VSIX_NAME }}
pat: ${{ secrets.TOKEN_VSCODE }}
registryUrl: https://marketplace.visualstudio.com
skipDuplicate: true