Skip to content

0.6.1

0.6.1 #38

Workflow file for this run

name: Release
on:
push:
tags:
- v*.*.*
permissions:
contents: write
jobs:
release:
name: Package and publish extension
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- name: Install dependencies
run: npm ci
- name: Verify tag matches package version
run: |
VERSION=$(node -p "require('./package.json').version")
if [ "v$VERSION" != "$GITHUB_REF_NAME" ]; then
echo "Tag $GITHUB_REF_NAME does not match package.json version v$VERSION"
exit 1
fi
- name: Compile
run: npm run compile
- name: Lint
run: npm run lint
- name: Test (headless)
run: xvfb-run -a npm test
- name: Detect pre-release
run: |
VERSION="${GITHUB_REF_NAME#v}"
MINOR=$(echo "$VERSION" | cut -d. -f2)
if (( MINOR % 2 == 1 )); then
echo "PRE_RELEASE=true" >> "$GITHUB_ENV"
else
echo "PRE_RELEASE=false" >> "$GITHUB_ENV"
fi
- name: Package VSIX
run: |
VSIX_NAME="doom-${GITHUB_REF_NAME}.vsix"
if [ "$PRE_RELEASE" = "true" ]; then
npx @vscode/vsce package --pre-release --out "$VSIX_NAME"
else
npx @vscode/vsce package --out "$VSIX_NAME"
fi
echo "VSIX_NAME=$VSIX_NAME" >> "$GITHUB_ENV"
- name: Extract release notes from changelog
run: |
VERSION="${GITHUB_REF_NAME#v}"
NOTES_FILE="release-notes.md"
awk -v version="$VERSION" '
BEGIN { in_section = 0; found = 0 }
$0 ~ "^## \\[" version "\\]" {
in_section = 1
found = 1
next
}
in_section && $0 ~ "^## \\[" {
exit
}
in_section {
print
}
END {
if (!found) {
exit 2
}
}
' CHANGELOG.md > "$NOTES_FILE"
if [ ! -s "$NOTES_FILE" ]; then
echo "No release notes found for $GITHUB_REF_NAME in CHANGELOG.md"
exit 1
fi
echo "RELEASE_NOTES_FILE=$NOTES_FILE" >> "$GITHUB_ENV"
- name: Create GitHub Release
run: |
if [ "$PRE_RELEASE" = "true" ]; then
gh release create "$GITHUB_REF_NAME" "$VSIX_NAME" \
--notes-file "$RELEASE_NOTES_FILE" \
--title "$GITHUB_REF_NAME" \
--prerelease
else
gh release create "$GITHUB_REF_NAME" "$VSIX_NAME" \
--notes-file "$RELEASE_NOTES_FILE" \
--title "$GITHUB_REF_NAME"
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish to VS Code Marketplace
run: |
if [ "$PRE_RELEASE" = "true" ]; then
npx @vscode/vsce publish --pre-release --packagePath "$VSIX_NAME"
else
npx @vscode/vsce publish --packagePath "$VSIX_NAME"
fi
env:
VSCE_PAT: ${{ secrets.VSCE_PAT }}
- name: Publish to Open VSX Registry
run: |
if [ "$PRE_RELEASE" = "true" ]; then
npx ovsx publish --pre-release "$VSIX_NAME"
else
npx ovsx publish "$VSIX_NAME"
fi
env:
OVSX_PAT: ${{ secrets.OPEN_VSX_TOKEN }}