name: Release
on:
push:
tags:
- 'v*'
jobs:
test-release:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: latest
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Install dependencies
run: bun install
- name: Build project
run: bun run build:all
- name: Run full test suite
run: bun test
- name: Run linting
run: bun run lint
- name: Test package integrity
run: |
npm pack --dry-run
env:
CI: true
- name: Verify CLI functionality
run: |
bun run serve --help
timeout 5s bun run serve || true
publish:
runs-on: ubuntu-latest
needs: test-release
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: latest
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Install dependencies
run: bun install
- name: Build project (native platform only)
run: bun run build:all
- name: Update package.json for public release
run: |
# Remove private flag for npm publishing
sed -i 's/"private": true,/"private": false,/' package.json
- name: Configure npm registry
run: |
echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc
- name: Publish to npm
run: |
# Extract version from tag
VERSION=${GITHUB_REF#refs/tags/v}
# Update version in package.json
bun run --silent -e "
const pkg = require('./package.json');
pkg.version = '$VERSION';
require('fs').writeFileSync('./package.json', JSON.stringify(pkg, null, 2));
"
# Publish to npm
npm publish --access public
- name: Create GitHub Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
body: |
## Changes
See [CHANGELOG.md](CHANGELOG.md) for details.
## Installation
```bash
npm install -g moidvk
```
## Usage
```bash
moidvk serve
```
draft: false
prerelease: false