174 lines
4.2 KiB
YAML
174 lines
4.2 KiB
YAML
name: Build and Release AudioTee.js
|
|
|
|
on:
|
|
release:
|
|
types: [published]
|
|
workflow_dispatch:
|
|
inputs:
|
|
version:
|
|
description: "Version to build (e.g., v1.0.0)"
|
|
required: true
|
|
default: "v1.0.0"
|
|
|
|
jobs:
|
|
build:
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- os: macos-latest
|
|
arch: arm64
|
|
node: "18"
|
|
- os: macos-13
|
|
arch: x64
|
|
node: "18"
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
steps:
|
|
- name: Checkout audiotee-js
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Checkout AudioTee (parent project)
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: your-org/audiotee
|
|
path: audiotee
|
|
ref: main
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: ${{ matrix.node }}
|
|
registry-url: "https://registry.npmjs.org"
|
|
|
|
- name: Setup Swift
|
|
uses: swift-actions/setup-swift@v1
|
|
with:
|
|
swift-version: "5.9"
|
|
|
|
- name: Build AudioTee binary
|
|
run: |
|
|
cd audiotee
|
|
swift build -c release
|
|
ls -la .build/release/
|
|
|
|
- name: Install Node.js dependencies
|
|
run: |
|
|
npm ci
|
|
|
|
- name: Build AudioTee.js package
|
|
env:
|
|
AUDIOTEE_BINARY_PATH: ../audiotee/.build/release/audiotee
|
|
run: |
|
|
npm run build
|
|
ls -la bin/
|
|
|
|
- name: Test package
|
|
run: |
|
|
# Quick test to ensure the package loads and binary works
|
|
timeout 10s npm test quick || true
|
|
|
|
- name: Package binary for distribution
|
|
run: |
|
|
npm run package
|
|
|
|
- name: List package contents
|
|
run: |
|
|
ls -la build/
|
|
|
|
- name: Publish binary to GitHub releases
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
npm run publish-binary
|
|
|
|
publish-npm:
|
|
needs: build
|
|
runs-on: ubuntu-latest
|
|
if: github.event_name == 'release'
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: "18"
|
|
registry-url: "https://registry.npmjs.org"
|
|
|
|
- name: Install dependencies
|
|
run: npm ci
|
|
|
|
- name: Publish to npm
|
|
env:
|
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
run: |
|
|
# Update version to match release tag
|
|
npm version ${{ github.event.release.tag_name }} --no-git-tag-version
|
|
npm publish
|
|
|
|
test-installation:
|
|
needs: publish-npm
|
|
runs-on: macos-latest
|
|
if: github.event_name == 'release'
|
|
|
|
steps:
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: "18"
|
|
|
|
- name: Test npm installation
|
|
run: |
|
|
# Test that the package can be installed and works
|
|
npm install audiotee-js@${{ github.event.release.tag_name }}
|
|
|
|
# Create a simple test
|
|
cat > test-install.js << 'EOF'
|
|
const { AudioTeeStream } = require('audiotee-js');
|
|
|
|
console.log('✅ Package imported successfully');
|
|
|
|
const stream = new AudioTeeStream({
|
|
format: 'json',
|
|
chunkDuration: 0.1
|
|
});
|
|
|
|
console.log('✅ AudioTeeStream created successfully');
|
|
|
|
let metadataReceived = false;
|
|
|
|
stream.on('metadata', () => {
|
|
metadataReceived = true;
|
|
console.log('✅ Metadata received');
|
|
stream.stop();
|
|
});
|
|
|
|
stream.on('error', (error) => {
|
|
console.error('❌ Error:', error.message);
|
|
process.exit(1);
|
|
});
|
|
|
|
stream.on('close', () => {
|
|
if (metadataReceived) {
|
|
console.log('✅ Installation test passed!');
|
|
process.exit(0);
|
|
} else {
|
|
console.error('❌ No metadata received');
|
|
process.exit(1);
|
|
}
|
|
});
|
|
|
|
setTimeout(() => {
|
|
console.error('❌ Test timeout');
|
|
stream.stop();
|
|
process.exit(1);
|
|
}, 5000);
|
|
|
|
console.log('🚀 Starting AudioTee...');
|
|
stream.start();
|
|
EOF
|
|
|
|
node test-install.js
|