Skip to content

🚀 Publish ExTester Runner #11

🚀 Publish ExTester Runner

🚀 Publish ExTester Runner #11

Workflow file for this run

name: 🚀 Publish ExTester Runner
on:
workflow_dispatch:
inputs:
tag:
description: "Version tag to publish (runner-vX.X.X)"
required: true
skipPublish:
description: "Skip publish into marketplaces step"
default: false
type: boolean
permissions:
contents: write
jobs:
build-and-publish:
runs-on: ubuntu-latest
steps:
- name: 🔖 Show input tag
run: echo "Publishing version ${{ github.event.inputs.tag }}"
- name: ✅ Validate tag format
run: |
TAG=${{ github.event.inputs.tag }}
if [[ ! "$TAG" =~ ^runner-v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "❌ Invalid tag format: $TAG. Use format like 'runner-v1.2.3'"
exit 1
fi
- name: 👷🏻 Checkout Repository
uses: actions/checkout@v4
- name: ✅ Verify Git tag exists
run: |
git fetch --tags
if ! git rev-parse "refs/tags/${{ github.event.inputs.tag }}" >/dev/null 2>&1; then
echo "❌ Tag '${{ github.event.inputs.tag }}' does not exist!"
exit 1
fi
- name: ✅ Ensure tag matches package.json version
working-directory: packages/extester-runner
run: |
PKG_VERSION=$(node -p "require('./package.json').version")
TAG=${{ github.event.inputs.tag }}
TAG_VERSION=${TAG#runner-v}
echo "Package version: $PKG_VERSION"
echo "Input tag version: $TAG_VERSION"
if [ "$PKG_VERSION" != "$TAG_VERSION" ]; then
echo "❌ Tag version ($TAG_VERSION) does not match package.json version ($PKG_VERSION)!"
exit 1
fi
- name: 👷🏻 Checkout the tag
uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.tag }}
- name: ⚙️ Setup NodeJS
uses: actions/setup-node@v4
with:
node-version: 20
- name: 📦 Install vsce
run: npm install -g @vscode/vsce
- name: 📦 Install ovsx
run: npm install -g ovsx
- name: 📦 Install GitHub CLI
run: sudo apt-get install gh -y
- name: 🔧 Install
run: npm ci
- name: 🔧 Build
run: npm run build
- name: 🛠 Extract version from a tag
id: version
run: |
TAG=${{ github.event.inputs.tag }}
VER=$(echo "$TAG" | sed 's/^runner-v//')
echo "VERSION=$VER" >> $GITHUB_OUTPUT
- name: 🛠 Package extension
working-directory: packages/extester-runner
run: vsce package -o extester-runner-${{ steps.version.outputs.VERSION }}.vsix
- name: 🧾 Inspect packaged contents
working-directory: packages/extester-runner
run: vsce ls extester-runner-${{ steps.version.outputs.VERSION }}.vsix
- name: 🚀 Publish to VS Code Marketplace
if: ${{ github.event.inputs.skipPublish != 'true' }}
working-directory: packages/extester-runner
run: vsce publish --pat ${{ secrets.VSCODE_MARKETPLACE_TOKEN }} --packagePath extester-runner-${{ steps.version.outputs.VERSION }}.vsix
- name: 🚀 Publish to Open VSX Registry
if: ${{ github.event.inputs.skipPublish != 'true' }}
working-directory: packages/extester-runner
run: ovsx publish -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} extester-runner-${{ steps.version.outputs.VERSION }}.vsix
- name: 📣 Add summary
if: ${{ github.event.inputs.skipPublish != 'true' }}
run: |
echo "#### ✅ Published \`extester-runner-${{ steps.version.outputs.VERSION }}.vsix\` to VS Code Marketplace" >> $GITHUB_STEP_SUMMARY
echo "#### ✅ Published \`extester-runner-${{ steps.version.outputs.VERSION }}.vsix\` to Open VSX Registry" >> $GITHUB_STEP_SUMMARY
- name: 💾 Upload VSIX
uses: actions/upload-artifact@v4
with:
name: extester-runner-${{ steps.version.outputs.VERSION }}.vsix
path: "packages/extester-runner/extester-runner-${{ steps.version.outputs.VERSION }}.vsix"
- name: 📝 Generate changelog
id: changelog
working-directory: packages/extester-runner
run: |
TAG=${{ github.event.inputs.tag }}
VERSION=${TAG#runner-v}
PREV_TAG=$(git tag --list "runner-v*" --sort=-creatordate | grep -v "$TAG" | head -n 1)
echo "Comparing changes from $PREV_TAG to $TAG in packages/extester-runner"
git fetch --unshallow || true
if [ -z "$PREV_TAG" ]; then
# First tag: include everything reachable from it
LOG=$(git log "$TAG" --reverse -- packages/extester-runner --no-merges --pretty=format:'%s (%h)')
if [ -z "$LOG" ]; then
# Still empty? Fallback to full history
LOG=$(git log --reverse -- packages/extester-runner --no-merges --pretty=format:'%s (%h)')
fi
else
LOG=$(git log "$PREV_TAG..$TAG" -- packages/extester-runner --no-merges --pretty=format:'%s (%h)')
fi
if [ -z "$LOG" ]; then
LOG="Initial release (first tag)"
fi
# Helper to format sections
format_section() {
local pattern="$1"
local title="$2"
local content=$(echo "$LOG" | grep -iE "$pattern" || true)
if [[ -n "$content" ]]; then
echo "### $title"
echo "$content"
echo ""
fi
}
{
format_section 'feat|feature' "🚀 Features"
format_section 'fix' "🚫 Bugs"
format_section 'test' "🔎 Tests"
format_section 'chore|refactor|internal|ci|docs' "🔧 Maintenance"
format_section 'deps|dependencies' "📦 Dependencies"
# Other commits not matching any above
OTHER=$(echo "$LOG" | grep -vE 'feat|feature|fix|test|chore|refactor|internal|ci|docs|deps|dependencies' || true)
if [[ -n "$OTHER" ]]; then
echo "### 🧼 Other Changes"
echo "$OTHER"
echo ""
fi
} > CHANGELOG.md
echo "Generated CHANGELOG.md:"
cat CHANGELOG.md
- name: 🚀 Publish GitHub Release with VSIX
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
working-directory: packages/extester-runner
run: |
TAG=${{ github.event.inputs.tag }}
gh release create "$TAG" --title "ExTester Runner v${{ steps.version.outputs.VERSION }}" \
--notes-file CHANGELOG.md \
"extester-runner-${{ steps.version.outputs.VERSION }}.vsix"