Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
74 changes: 74 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
name: "Bug report"
description: "Report a bug to help us improve Pixel Agents."
title: "[Bug]: "
labels: ["bug"]
body:
- type: textarea
id: description
attributes:
label: "Describe the bug"
description: "A clear and concise description of what the bug is."
placeholder: "e.g., Characters freeze after switching terminals."
validations:
required: true

- type: textarea
id: reproduce
attributes:
label: "Steps to reproduce"
description: "List exact steps to reproduce the behavior."
placeholder: |
1. Open Pixel Agents panel
2. Click '+ Agent'
3. ...
validations:
required: true

- type: textarea
id: expected
attributes:
label: "Expected behavior"
description: "What should happen?"
validations:
required: true

- type: textarea
id: actual
attributes:
label: "Actual behavior"
description: "What happens instead? Include any error messages."
validations:
required: true

- type: textarea
id: screenshots
attributes:
label: "Screenshots / GIFs"
description: "If applicable, add screenshots or screen recordings."

- type: input
id: vscode-version
attributes:
label: "VS Code version"
description: "Run 'Help > About' to find your version."
placeholder: "e.g., 1.109.0"
validations:
required: true

- type: dropdown
id: os
attributes:
label: "Operating System"
options:
- Windows
- macOS
- Linux
validations:
required: true

- type: textarea
id: logs
attributes:
label: "Logs"
description: "Open Developer Tools (Help > Toggle Developer Tools) and paste any relevant console output."
render: shell
8 changes: 8 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: "Feature request"
url: "https://github.com/pablodelucca/pixel-agents/discussions/categories/ideas"
about: "Suggest new features or ideas in Discussions."
- name: "Question"
url: "https://github.com/pablodelucca/pixel-agents/discussions/categories/q-a"
about: "Ask questions and get help in Discussions."
32 changes: 32 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
version: 2
updates:
- package-ecosystem: npm
directory: /
schedule:
interval: weekly
day: monday
open-pull-requests-limit: 10
groups:
minor-and-patch:
update-types:
- minor
- patch

- package-ecosystem: npm
directory: /webview-ui
schedule:
interval: weekly
day: monday
open-pull-requests-limit: 10
groups:
minor-and-patch:
update-types:
- minor
- patch

- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
day: monday
open-pull-requests-limit: 5
25 changes: 25 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
## Description
<!-- What does this PR do and why? -->

## Type of change
<!-- Check the one that applies -->
- [ ] Bug fix
- [ ] New feature
- [ ] Refactor / code cleanup
- [ ] Documentation
- [ ] CI / build
- [ ] Other: ___

## Related issues
<!-- Link related issues: Closes #123, Fixes #456 -->

## Screenshots / GIFs
<!-- Required for UI changes. Delete this section if not applicable. -->

## Test plan
<!-- Check what applies, add your own test steps -->
- [ ] PR targets `main` branch
- [ ] `npm run build` passes locally
- [ ] Tested in Extension Development Host (F5)
- [ ] No inline constants (all in `src/constants.ts` or `webview-ui/src/constants.ts`)
- [ ] UI follows pixel art style (sharp corners, solid borders, pixel font)
172 changes: 172 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
# CI workflow for pixel-agents

name: CI

on:
pull_request:
paths-ignore:
- '**.md'
- 'LICENSE'
- '.github/FUNDING.yml'
push:
branches:
- main
paths-ignore:
- '**.md'
- 'LICENSE'
- '.github/FUNDING.yml'

permissions:
contents: read

concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

jobs:
ci:
runs-on: ubuntu-latest
timeout-minutes: 15

steps:
- name: Checkout
id: checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Node
id: setup_node
uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
cache: npm
cache-dependency-path: |
package-lock.json
webview-ui/package-lock.json

- name: Install Root Dependencies
id: install_root
run: npm ci

- name: Install Webview Dependencies
id: install_webview
working-directory: webview-ui
run: npm ci

# --- Quality Checks (blocking) ---

- name: Type Check
id: type_check
if: always() && steps.install_root.outcome == 'success'
run: npm run check-types
continue-on-error: true

- name: Root Lint
id: root_lint
if: always() && steps.install_root.outcome == 'success'
run: npm run lint
continue-on-error: true

- name: Webview Lint
id: webview_lint
if: always() && steps.install_webview.outcome == 'success'
working-directory: webview-ui
run: npm run lint
continue-on-error: true

- name: Format Check
id: format_check
if: always() && steps.install_root.outcome == 'success'
run: npm run format:check
continue-on-error: true

# --- Build (blocking) ---

- name: Build
id: build
if: always() && steps.install_root.outcome == 'success' && steps.install_webview.outcome == 'success'
run: |
node esbuild.js
cd webview-ui && npm run build
continue-on-error: true

# --- Advisory Checks (non-blocking) ---

- name: Audit Root Dependencies
id: audit_root
if: always() && steps.install_root.outcome == 'success'
run: npm audit --audit-level=high
continue-on-error: true

- name: Audit Webview Dependencies
id: audit_webview
if: always() && steps.install_webview.outcome == 'success'
working-directory: webview-ui
run: npm audit --audit-level=high
continue-on-error: true

# --- Summary ---

- name: Write Step Summary
if: always()
env:
CHECKOUT: ${{ steps.checkout.outcome }}
SETUP_NODE: ${{ steps.setup_node.outcome }}
INSTALL_ROOT: ${{ steps.install_root.outcome }}
INSTALL_WEBVIEW: ${{ steps.install_webview.outcome }}
TYPE_CHECK: ${{ steps.type_check.outcome }}
ROOT_LINT: ${{ steps.root_lint.outcome }}
WEBVIEW_LINT: ${{ steps.webview_lint.outcome }}
FORMAT_CHECK: ${{ steps.format_check.outcome }}
BUILD: ${{ steps.build.outcome }}
AUDIT_ROOT: ${{ steps.audit_root.outcome }}
AUDIT_WEBVIEW: ${{ steps.audit_webview.outcome }}
run: |
status() {
if [ "$1" = "success" ]; then echo "✅ PASS"; else echo "❌ FAIL"; fi
}
{
echo "## CI Results"
echo
echo "| Check | Result |"
echo "| --- | --- |"
echo "| Checkout | $(status "$CHECKOUT") |"
echo "| Setup Node | $(status "$SETUP_NODE") |"
echo "| Install root deps | $(status "$INSTALL_ROOT") |"
echo "| Install webview deps | $(status "$INSTALL_WEBVIEW") |"
echo "| **Type check** | $(status "$TYPE_CHECK") |"
echo "| **Root lint** | $(status "$ROOT_LINT") |"
echo "| **Webview lint** | $(status "$WEBVIEW_LINT") |"
echo "| **Format check** | $(status "$FORMAT_CHECK") |"
echo "| **Build** | $(status "$BUILD") |"
echo "| Audit root _(advisory)_ | $(status "$AUDIT_ROOT") |"
echo "| Audit webview _(advisory)_ | $(status "$AUDIT_WEBVIEW") |"
} >> "$GITHUB_STEP_SUMMARY"

# --- Final Gate ---

- name: Fail If Any Blocking Check Failed
if: always()
env:
CHECKOUT: ${{ steps.checkout.outcome }}
SETUP_NODE: ${{ steps.setup_node.outcome }}
INSTALL_ROOT: ${{ steps.install_root.outcome }}
INSTALL_WEBVIEW: ${{ steps.install_webview.outcome }}
TYPE_CHECK: ${{ steps.type_check.outcome }}
ROOT_LINT: ${{ steps.root_lint.outcome }}
WEBVIEW_LINT: ${{ steps.webview_lint.outcome }}
FORMAT_CHECK: ${{ steps.format_check.outcome }}
BUILD: ${{ steps.build.outcome }}
run: |
failed=0
for step in CHECKOUT SETUP_NODE INSTALL_ROOT INSTALL_WEBVIEW \
TYPE_CHECK ROOT_LINT WEBVIEW_LINT FORMAT_CHECK \
BUILD; do
eval "val=\$$step"
if [ "$val" != "success" ]; then
echo "::error::$step failed"
failed=1
fi
done
exit "$failed"
66 changes: 66 additions & 0 deletions .github/workflows/publish-extension.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: Publish Extension

on:
release:
types: [published]
workflow_dispatch:
inputs:
dry_run:
description: 'Package without publishing'
type: boolean
default: false

concurrency:
group: publish-extension
cancel-in-progress: false

jobs:
publish:
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
cache: npm
cache-dependency-path: |
package-lock.json
webview-ui/package-lock.json

- name: Install dependencies
run: npm ci

- name: Install webview dependencies
run: npm ci
working-directory: webview-ui

- name: Check types and lint
run: npm run check-types && npm run lint

- name: Publish to VS Code Marketplace
id: publish-vscode
uses: HaaLeo/publish-vscode-extension@v2
with:
pat: ${{ secrets.VSCE_PAT }}
registryUrl: https://marketplace.visualstudio.com
dryRun: ${{ inputs.dry_run == 'true' }}

- name: Publish to Open VSX
uses: HaaLeo/publish-vscode-extension@v2
with:
pat: ${{ secrets.OPEN_VSX_TOKEN }}
registryUrl: https://open-vsx.org
extensionFile: ${{ steps.publish-vscode.outputs.vsixPath }}
dryRun: ${{ inputs.dry_run == 'true' }}

- name: Upload VSIX to Release
if: github.event_name == 'release'
uses: softprops/action-gh-release@v2
with:
files: ${{ steps.publish-vscode.outputs.vsixPath }}
Loading
Loading