Skip to content

Build and Publish

Build and Publish #33

name: Build and Publish
on:
push:
tags:
- '*'
workflow_dispatch:
inputs:
vs_marketplace:
type: boolean
default: true
required: true
description: "Publish to VS Marketplace"
open_vsx:
type: boolean
default: true
required: true
description: "Publish to Open VSX"
release:
type: boolean
default: true
required: true
description: "Create a GitHub release"
release_tag:
type: string
default: "main"
required: true
description: "Tag for GitHub release"
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout codebase
uses: actions/checkout@v3
- name: Use Node.js 17
uses: actions/setup-node@v2
with:
node-version: 17
- name: Install dependencies
run: npm ci --no-optional
- name: Build
run: npm run build
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: vsix
path: "*.vsix"
publish:
runs-on: ubuntu-latest
needs: build
steps:
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: vsix
- name: Info
id: info
run: |
VSIX_PATH=$(echo *.vsix)
# used in workflow vars
echo "::set-output name=VSIX_PATH::$VSIX_PATH"
# can be accessed by env in other steps
echo "VSIX_PATH=$VSIX_PATH" >> $GITHUB_ENV
- name: Publish to Open VSX
if: env.tag_release == 'true' || inputs.open_vsx
uses: HaaLeo/publish-vscode-extension@v1
id: publishToOpenVSX
with:
pat: ${{ secrets.OPEN_VSX_TOKEN }}
extensionFile: ${{ steps.info.outputs.VSIX_PATH }}
- name: Publish to Visual Studio Marketplace
if: env.tag_release == 'true' || inputs.vs_marketplace
uses: HaaLeo/publish-vscode-extension@v1
with:
pat: ${{ secrets.VS_MARKETPLACE_TOKEN }}
registryUrl: https://marketplace.visualstudio.com
extensionFile: ${{ steps.info.outputs.VSIX_PATH }}
- name: GitHub release (from tag)
if: env.tag_release == 'true'
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file_glob: true
file: ${{ steps.info.outputs.VSIX_PATH }}
overwrite: true
- name: GitHub release (manual)
if: env.tag_release == 'false' || inputs.release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file_glob: true
file: ${{ steps.info.outputs.VSIX_PATH }}
tag: ${{ inputs.github_release_tag }}
overwrite: true