Create workflows for changie PR and publish

This commit is contained in:
Saoud Rizwan 2025-01-29 00:58:16 -08:00
parent b2dd04cff3
commit dae36f6540
4 changed files with 176 additions and 168 deletions

68
.github/workflows/changie-pr.yml vendored Normal file
View file

@ -0,0 +1,68 @@
name: "Changie Version PR"
on:
push:
branches:
- main
jobs:
version-pr:
name: Create/Update Version PR
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0 # Important for changelog history
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20.15.1
- name: Install dependencies
run: npm ci
# Use Changie to batch changes and get the next version
- name: Batch changes
id: batch
uses: miniscruff/changie-action@v2
with:
args: batch auto
# If no changes, stop here
- name: Check for changes
id: check
run: |
if [ -z "$(git status --porcelain)" ]; then
echo "No changes to process"
echo "has_changes=false" >> $GITHUB_OUTPUT
else
echo "has_changes=true" >> $GITHUB_OUTPUT
fi
# If we have changes, merge them and create/update PR
- name: Merge changes
if: steps.check.outputs.has_changes == 'true'
uses: miniscruff/changie-action@v2
with:
args: merge
- name: Get latest version
if: steps.check.outputs.has_changes == 'true'
id: latest
uses: miniscruff/changie-action@v2
with:
args: latest
- name: Create Pull Request
if: steps.check.outputs.has_changes == 'true'
uses: peter-evans/create-pull-request@v4
with:
title: "Release ${{ steps.latest.outputs.output }}"
branch: "release/${{ steps.latest.outputs.output }}"
commit-message: "chore: update changelog for ${{ steps.latest.outputs.output }}"
body: |
This PR was automatically created by the Changie workflow.
- Updates CHANGELOG.md
- Bumps version to ${{ steps.latest.outputs.output }}

View file

@ -1,85 +0,0 @@
name: Pre-release Publisher
on:
release:
types: [prereleased]
workflow_dispatch:
permissions:
contents: write
packages: write
actions: read
checks: read
deployments: read
discussions: read
issues: read
pages: read
pull-requests: read
repository-projects: read
security-events: read
statuses: read
jobs:
test:
uses: ./.github/workflows/test.yml
publish-prerelease:
needs: test
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20.15.1"
cache: "npm"
# Cache root dependencies
- name: Cache root dependencies
uses: actions/cache@v4
id: root-cache
with:
path: node_modules
key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json') }}
# Cache webview-ui dependencies
- name: Cache webview-ui dependencies
uses: actions/cache@v4
id: webview-cache
with:
path: webview-ui/node_modules
key: ${{ runner.os }}-npm-webview-${{ hashFiles('webview-ui/package-lock.json') }}
- name: Install root dependencies
if: steps.root-cache.outputs.cache-hit != 'true'
run: npm ci
- name: Install webview-ui dependencies
if: steps.webview-cache.outputs.cache-hit != 'true'
run: cd webview-ui && npm ci
- name: Build Extension
run: npm run build
- name: Install Publishing Tools
run: npm install -g vsce ovsx
- name: Package and Publish Pre-release
env:
VSCE_PAT: ${{ secrets.VSCE_PAT }}
OVSX_PAT: ${{ secrets.OVSX_PAT }}
run: |
current_package_version=$(node -p "require('./package.json').version")
npm run publish:marketplace:prerelease
echo "Successfully published pre-release version $current_package_version to VS Code Marketplace and Open VSX Registry"
- name: Create GitHub Pre-release
uses: softprops/action-gh-release@v1
with:
files: "*.vsix"
generate_release_notes: true
prerelease: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

108
.github/workflows/publish.yml vendored Normal file
View file

@ -0,0 +1,108 @@
name: "Publish Release"
on:
workflow_dispatch:
inputs:
release-type:
description: "Choose release type (release or pre-release)"
required: true
default: "release"
type: choice
options:
- pre-release
- release
permissions:
contents: write
packages: write
jobs:
test:
uses: ./.github/workflows/test.yml
publish:
needs: test
name: Publish Extension
runs-on: ubuntu-latest
environment: publish
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20.15.1
# Cache root dependencies - only reuse if package-lock.json exactly matches
- name: Cache root dependencies
uses: actions/cache@v4
id: root-cache
with:
path: node_modules
key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json') }}
# Cache webview-ui dependencies - only reuse if package-lock.json exactly matches
- name: Cache webview-ui dependencies
uses: actions/cache@v4
id: webview-cache
with:
path: webview-ui/node_modules
key: ${{ runner.os }}-npm-webview-${{ hashFiles('webview-ui/package-lock.json') }}
- name: Install root dependencies
if: steps.root-cache.outputs.cache-hit != 'true'
run: npm ci
- name: Install webview-ui dependencies
if: steps.webview-cache.outputs.cache-hit != 'true'
run: cd webview-ui && npm ci
- name: Install Publishing Tools
run: npm install -g vsce ovsx
- name: Get Version
id: get_version
run: echo "version=$(node -p \"require('./package.json').version\")" >> $GITHUB_OUTPUT
- name: Create Git Tag
run: |
VERSION=v${{ steps.get_version.outputs.version }}
echo "Tagging with $VERSION"
git tag "$VERSION"
git push origin "$VERSION"
- name: Package and Publish Extension
env:
VSCE_PAT: ${{ secrets.VSCE_PAT }}
OVSX_PAT: ${{ secrets.OVSX_PAT }}
run: |
# Required to generate the .vsix
vsce package --out "cline-${{ steps.get_version.outputs.version }}.vsix"
if [ "${{ github.event.inputs.release-type }}" = "pre-release" ]; then
npm run publish:marketplace:prerelease
echo "Successfully published pre-release version ${{ steps.get_version.outputs.version }} to VS Code Marketplace and Open VSX Registry"
else
npm run publish:marketplace
echo "Successfully published release version ${{ steps.get_version.outputs.version }} to VS Code Marketplace and Open VSX Registry"
fi
- name: Get Changelog Entry
id: changelog
uses: mindsers/changelog-reader-action@v2
with:
# This expects a standard Keep a Changelog format
# "latest" means it will read whichever is the most recent version
# set in "## [1.2.3] - 2025-01-28" style
version: latest
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
files: "*.vsix"
body: ${{ steps.changelog.outputs.content }}
generate_release_notes: false
prerelease: ${{ github.event.inputs.release-type == 'pre-release' }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View file

@ -1,83 +0,0 @@
name: Release & Publish
on:
release:
types: [published]
workflow_dispatch:
permissions:
contents: write
packages: write
actions: read
checks: read
deployments: read
discussions: read
issues: read
pages: read
pull-requests: read
repository-projects: read
security-events: read
statuses: read
jobs:
test:
uses: ./.github/workflows/test.yml
release:
needs: test
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js environment
uses: actions/setup-node@v4
with:
node-version: 20.15.1
# Cache root dependencies - only reuse if package-lock.json exactly matches
- name: Cache root dependencies
uses: actions/cache@v4
id: root-cache
with:
path: node_modules
key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json') }}
# Cache webview-ui dependencies - only reuse if package-lock.json exactly matches
- name: Cache webview-ui dependencies
uses: actions/cache@v4
id: webview-cache
with:
path: webview-ui/node_modules
key: ${{ runner.os }}-npm-webview-${{ hashFiles('webview-ui/package-lock.json') }}
- name: Install root dependencies
if: steps.root-cache.outputs.cache-hit != 'true'
run: npm ci
- name: Install webview-ui dependencies
if: steps.webview-cache.outputs.cache-hit != 'true'
run: cd webview-ui && npm ci
- name: Build Extension
run: npm run build
- name: Install Publishing Tools
run: npm install -g vsce ovsx
- name: Package and Publish Extension
env:
VSCE_PAT: ${{ secrets.VSCE_PAT }}
OVSX_PAT: ${{ secrets.OVSX_PAT }}
run: |
current_package_version=$(node -p "require('./package.json').version")
npm run publish:marketplace
echo "Successfully published version $current_package_version to VS Code Marketplace and Open VSX Registry"
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
files: "*.vsix"
generate_release_notes: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}