Skip to content
Merged

Next #36

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
b0b89cb
vscode-extension: create extension
Kyonru May 19, 2026
7a2816e
vscode-extension: add watch and vendor
Kyonru May 19, 2026
812eb20
lua: fix stackoverflow on love hooks
Kyonru May 19, 2026
baa5fc5
lua: introduce callback bus with priority override
Kyonru May 19, 2026
0c4622e
lua: add plugins unit test
Kyonru May 19, 2026
a8dab64
cli: improve linux vendoring
Kyonru May 19, 2026
a7ce4c6
cli: add managed key to identify flow type
Kyonru May 19, 2026
158d6dd
cli: improve configuration
Kyonru May 19, 2026
33c14a6
lua: shim hooks on load
Kyonru May 20, 2026
4a72864
feather: improve testing
Kyonru May 20, 2026
6f28818
feather: improve init process
Kyonru May 20, 2026
9524c0c
feather: improve upload process
Kyonru May 20, 2026
4d5c1ca
plugin: fix input replay
Kyonru May 20, 2026
d4b43b2
plugin: optimistic plugin update
Kyonru May 20, 2026
c0b1666
cli: improve build flow
Kyonru May 20, 2026
e30a3a2
cli: add fastlane draft
Kyonru May 20, 2026
969a2e5
docs: update roadmap
Kyonru May 20, 2026
c9872b1
docs: add extension readme
Kyonru May 20, 2026
f09dea9
vscode-extension: lock dependencies
Kyonru May 20, 2026
fa7a4a1
cli: fix regex issues
Kyonru May 20, 2026
361eda6
feather: session replay
May 21, 2026
050829a
docs: improve session replay examples and docs
May 21, 2026
eb8e1c5
docs: improve session performance
May 21, 2026
26b7388
lua: replay plugins now use the plugins handler bus instead of rewrit…
May 21, 2026
17980ec
lua: remove session replay from plugins tab
Kyonru May 21, 2026
ad0b7d4
feather: add session replay checkpoint
Kyonru May 21, 2026
e19b24f
lua: update tests
Kyonru May 22, 2026
9ef6413
feather: v1.3.0
Kyonru May 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 15 additions & 5 deletions .github/workflows/cli-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,14 @@ permissions:

jobs:
cli-e2e:
name: CLI end-to-end
runs-on: ubuntu-latest
timeout-minutes: 10
name: CLI end-to-end (${{ matrix.os }})
runs-on: ${{ matrix.os }}
timeout-minutes: 15

strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]

steps:
- name: Checkout
Expand All @@ -40,10 +45,15 @@ jobs:
node-version: 22.21.1
cache: "npm"

- name: Install LÖVE
- name: Install LÖVE (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y love
sudo apt-get install -y love squashfs-tools

- name: Install squashfs-tools (macOS)
if: runner.os == 'macOS'
run: brew install squashfs

- name: Install dependencies
run: npm ci
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ jobs:

- name: Run linting
run: npm run lint

- name: Build and test VS Code extension
run: npm run extension:test

lint-lua:
name: Run Lua (Love2D) Linting
runs-on: ubuntu-latest
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
- name: Install LÖVE
run: |
sudo apt-get update
sudo apt-get install -y love
sudo apt-get install -y love xvfb

- name: Get version from tag
id: get_version
Expand Down Expand Up @@ -58,6 +58,9 @@ jobs:
- name: Run CLI e2e
run: npm run test:cli:e2e

- name: Run Lua e2e
run: npm run test:lua:e2e

- name: Verify npm package contents
run: npm pack --workspace=cli --dry-run

Expand Down
108 changes: 108 additions & 0 deletions .github/workflows/vscode-extension.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
name: VS Code extension release

on:
push:
tags:
- "*"

jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write
outputs:
vsixFile: ${{ steps.package.outputs.vsixFile }}
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 22.21.1
package-manager-cache: false

- uses: oven-sh/setup-bun@v2

- run: npm ci

- name: Get version from tag
id: get_version
run: |
VERSION="${GITHUB_REF_NAME#v}"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"

- name: Verify extension package version
run: |
EXT_VERSION="$(node -p "require('./vscode-extension/package.json').version")"
if [ "$EXT_VERSION" != "${{ steps.get_version.outputs.version }}" ]; then
echo "Tag version ${{ steps.get_version.outputs.version }} does not match vscode-extension/package.json version $EXT_VERSION."
exit 1
fi

- name: Test extension
run: npm run extension:test

- name: Package extension
id: package
run: |
npm run extension:package
VERSION="${{ steps.get_version.outputs.version }}"
VSIX_PATH="$(ls vscode-extension/*.vsix | head -n 1)"
VSIX_FILE="feather-vscode-${VERSION}.vsix"
mkdir -p release-assets
cp "$VSIX_PATH" "release-assets/$VSIX_FILE"
cp cli/bin/feather "release-assets/feather-cli-darwin-arm64-${VERSION}.bin"
cp cli/bin/feather-darwin-x64 "release-assets/feather-cli-darwin-x64-${VERSION}.bin"
cp cli/bin/feather-linux-x64 "release-assets/feather-cli-linux-x64-${VERSION}.bin"
cp cli/bin/feather-win-x64.exe "release-assets/feather-cli-windows-x64-${VERSION}.exe"
echo "vsixPath=release-assets/$VSIX_FILE" >> "$GITHUB_OUTPUT"
echo "vsixFile=$VSIX_FILE" >> "$GITHUB_OUTPUT"

- name: Upload VSIX
uses: actions/upload-artifact@v4
with:
name: feather-vscode
path: ${{ steps.package.outputs.vsixPath }}

- name: Attach VSIX and CLI binaries to GitHub Release
uses: ncipollo/release-action@v1
with:
artifacts: release-assets/*
allowUpdates: true

publish-vs-marketplace:
runs-on: ubuntu-latest
needs: build
permissions:
contents: read
steps:
- name: Download VSIX
uses: actions/download-artifact@v4
with:
name: feather-vscode
path: .

- name: Publish to Visual Studio Marketplace
uses: HaaLeo/publish-vscode-extension@v2
with:
pat: ${{ secrets.VS_MARKETPLACE_TOKEN }}
registryUrl: https://marketplace.visualstudio.com
extensionFile: ${{ needs.build.outputs.vsixFile }}

publish-open-vsx:
runs-on: ubuntu-latest
needs: build
permissions:
contents: read
steps:
- name: Download VSIX
uses: actions/download-artifact@v4
with:
name: feather-vscode
path: .

- name: Publish to Open VSX
uses: HaaLeo/publish-vscode-extension@v2
with:
pat: ${{ secrets.OPEN_VSX_TOKEN }}
registryUrl: https://open-vsx.org
extensionFile: ${{ needs.build.outputs.vsixFile }}
9 changes: 8 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ dist-ssr
# Editor directories and files
.vscode/*
!.vscode/extensions.json
!.vscode/launch.json
!.vscode/tasks.json
.idea
.DS_Store
*.suo
Expand All @@ -31,4 +33,9 @@ test-results/
.env
builds/
vendor/
feather.build.json
feather.build.json

# VS Code extension build outputs
vscode-extension/bundled-*/
vscode-extension/out/
vscode-extension/*.vsix
4 changes: 3 additions & 1 deletion .husky/commit-msg
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ message_file="$1"
subject="$(sed -n '1p' "$message_file")"

case "$subject" in
ci:*|cli:*|package:*|plugin:*|app:*|lua:*|tauri:*|feather:*|docs:*)
ci:*|cli:*|package:*|plugin:*|app:*|lua:*|tauri:*|feather:*|docs:*|vscode-extension:*)
exit 0
;;
esac
Expand All @@ -23,6 +23,7 @@ Commit message must start with one of:
tauri:
feather:
docs:
vscode-extension:

Examples:
ci: update repo workflows
Expand All @@ -32,6 +33,7 @@ Examples:
tauri: update file permissions
feather: update repo structure
docs: add contribution guidelines
vscode-extension: update extension manifest
EOF

exit 1
2 changes: 1 addition & 1 deletion .husky/pre-commit
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ if ! git diff --exit-code cli/src/generated/plugin-catalog.ts; then
fi

bash scripts/set-version.sh
if ! git diff --exit-code package.json src-lua/feather/init.lua src-tauri/Cargo.toml src-tauri/tauri.conf.json; then
if ! git diff --exit-code package.json src-lua/feather/init.lua src-tauri/Cargo.toml src-tauri/tauri.conf.json cli/package.json vscode-extension/package.json; then
echo "[feather] Version files are out of sync — they have been updated, please stage them and commit again."
exit 1
fi
1 change: 0 additions & 1 deletion .npmrc

This file was deleted.

13 changes: 13 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Run Feather VS Code Extension",
"type": "extensionHost",
"request": "launch",
"args": ["--extensionDevelopmentPath=${workspaceFolder}/vscode-extension"],
"outFiles": ["${workspaceFolder}/vscode-extension/out/**/*.js"],
"preLaunchTask": "npm: extension:build"
}
]
}
12 changes: 12 additions & 0 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "npm: extension:build",
"type": "npm",
"script": "extension:build",
"group": "build",
"problemMatcher": "$tsc"
}
]
}
33 changes: 33 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,38 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [v1.3.0] - 2026-05-22 - The one with the extension

### Added

- VS Code Extension
- Session Replay
- CLI Fastlane draft support
- Lua plugin unit tests
- Lua callback bus with priority overrides

### Changed

- CLI managed key to identify flow type
- Replay plugins now use the plugin handler bus instead of rewriting LÖVE hooks
- Improved session performance documentation
- Improved session replay examples and documentation
- Improved Feather upload process
- Improved Feather init process
- Improved Feather testing
- Improved CLI build flow
- Improved CLI configuration
- Improved CLI Linux vendoring
- Updated roadmap
- Shim hooks on load

### Fixed

- Fixed regex issues in CLI
- Fixed optimistic plugin updates
- Fixed input replay
- Fixed stack overflow on LÖVE hooks

## [v1.2.0] - 2026-05-19 - The one with the shader and particles playground

### Added
Expand Down Expand Up @@ -492,6 +524,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- LuaRocks package.
- GitHub Actions CI.

[v1.3.0]: https://github.com/Kyonru/feather/compare/v1.2.0...v1.3.0
[v1.2.0]: https://github.com/Kyonru/feather/compare/v1.1.1...v1.2.0
[v1.1.1]: https://github.com/Kyonru/feather/compare/v1.1.0...v1.1.1
[v1.1.0]: https://github.com/Kyonru/feather/compare/v1.0.1...v1.1.0
Expand Down
Loading
Loading