Skip to content

Merge pull request #368 from github/release/0.26.4 #31

Merge pull request #368 from github/release/0.26.4

Merge pull request #368 from github/release/0.26.4 #31

Workflow file for this run

name: Release and publish extension
on:
push:
branches:
- main
paths:
- package.json
workflow_dispatch:
inputs:
version:
description: "Version to release"
required: true
jobs:
check-version-change:
outputs:
changed: ${{ steps.check-version.outputs.result }}
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Check if version has changed
id: check-version
uses: actions/github-script@v7
with:
script: |
const version = '${{ github.event.inputs.version }}' || require('./package.json').version;
// Find a release for that version
const release = await github.rest.repos.getReleaseByTag({
owner: context.repo.owner,
repo: context.repo.repo,
tag: `release-v${version}`,
}).catch(() => null);
// If the release exists, the version has not changed
if (release) {
console.log(`Version ${version} has an existing release`);
console.log(release.data.html_url);
core.summary.addLink(`Release v${version}`, release.data.html_url);
await core.summary.write();
return "false";
}
console.log(`Version ${version} does not have a release`);
return true;
release:
needs: check-version-change
if: ${{ needs.check-version-change.outputs.changed == 'true' }}
runs-on: ubuntu-latest
permissions:
contents: write
packages: read
env:
EXT_VERSION: "" # will be set in the workflow
outputs:
version: ${{ env.EXT_VERSION }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 16.x
cache: "npm"
registry-url: "https://npm.pkg.github.com"
- name: Parse version from package.json
run: |
echo "EXT_VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV
- run: npm ci
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: create a package.json that actions/upload will like
run: |
cp package.json package.json.real
sed --regexp-extended '/"name"\s*:/ s#@[a-zA-Z\\-]+/##' package.json.real > package.json
- run: npm run package
- uses: actions/upload-artifact@v4
with:
name: vscode-github-actions-${{ env.EXT_VERSION }}.vsix
path: ./vscode-github-actions-${{ env.EXT_VERSION }}.vsix
- name: restore old package.json
run: mv package.json.real package.json
- name: Create release and upload release asset
uses: actions/github-script@v7
with:
script: |
const fs = require("fs");
const release = await github.rest.repos.createRelease({
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: "release-v${{ env.EXT_VERSION }}",
name: "v${{ env.EXT_VERSION }}",
draft: false,
prerelease: false
});
const path = "./vscode-github-actions-${{ env.EXT_VERSION }}.vsix";
await github.rest.repos.uploadReleaseAsset({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: release.data.id,
data: fs.readFileSync(path),
name: "vscode-github-actions-${{ env.EXT_VERSION }}.vsix",
headers: {
"content-type": "application/vsix",
"content-length": fs.statSync(path).size
}
});
core.summary.addLink(`Release v${{ env.EXT_VERSION }}`, release.data.html_url);
await core.summary.write();
publish:
environment: publish
needs: release
runs-on: ubuntu-latest
permissions: {}
steps:
- uses: actions/download-artifact@v4
with:
name: vscode-github-actions-${{ needs.release.outputs.version }}.vsix
- name: Publish to marketplace
# https://github.com/HaaLeo/publish-vscode-extension/releases/tag/v1.2.0
uses: HaaLeo/publish-vscode-extension@c1a0486c5a3eed24e8c21d4e37889a7c4c60c443
with:
pat: ${{ secrets.PUBLISHER_KEY }}
registryUrl: https://marketplace.visualstudio.com
extensionFile: ./vscode-github-actions-${{ needs.release.outputs.version }}.vsix
open-vsx-publish:
name: Publish to Open VSX Registry
needs: release
environment: publish-open-vsx
runs-on: ubuntu-latest
env:
OPEN_VSX_TOKEN: ${{ secrets.OPEN_VSX_TOKEN }}
steps:
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: vscode-github-actions-${{ needs.release.outputs.version }}.vsix
- name: Publish to Registry
run: |
npx ovsx publish -p $OPEN_VSX_TOKEN *.vsix