0.6.1 #38
Workflow file for this run
This file contains hidden or 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: 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 { | |
| } | |
| 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 }} |