Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
0d8cfd8
[fork] Simplify Testing
RomanNikitenko Jun 23, 2025
2003acd
chore: Add dependabot
RomanNikitenko Nov 13, 2025
90a2387
Fix githab workflow
RomanNikitenko Dec 4, 2025
4722b71
Add example of policy.json file
RomanNikitenko Dec 31, 2025
1ee9337
Fix publishing images
RomanNikitenko Jan 13, 2026
d277d0e
Add Roo Code as recommended extension
RomanNikitenko Jan 29, 2026
5e6582d
Merge remote-tracking branch 'eclipse/main'
RomanNikitenko Feb 8, 2026
5fc393b
Add CLAUDE.md with build commands and architecture guide
RomanNikitenko Feb 16, 2026
85da9dd
Merge remote-tracking branch 'eclipse/main'
RomanNikitenko Feb 27, 2026
102536e
Merge remote-tracking branch 'eclipse/main'
RomanNikitenko Mar 27, 2026
a456cf4
do not build musl assembly
RomanNikitenko Mar 27, 2026
7d3c0a1
Merge remote-tracking branch 'eclipse/main'
RomanNikitenko Apr 23, 2026
2f1ac0e
Improve rebase process
RomanNikitenko Apr 26, 2026
d1e61ba
Add workflow to check Upstream VS Code Release
RomanNikitenko Apr 26, 2026
fc34876
Add test skill
RomanNikitenko Apr 26, 2026
60416b6
Add workflow to trigger rebase via /rebase command on issues
RomanNikitenko Apr 26, 2026
cd86802
Improve workflow
RomanNikitenko Apr 26, 2026
384803d
Handle different statuses for the workflow
RomanNikitenko Apr 26, 2026
d6d2755
Post in-progress comment in the workflow
RomanNikitenko Apr 26, 2026
df2f75b
Improve rebase workflow
RomanNikitenko Apr 26, 2026
8dfd6db
Add issue routing and automation config to CLAUDE.md
RomanNikitenko Apr 27, 2026
aea3541
Move issue routing to top of CLAUDE.md to ensure it is read first
RomanNikitenko Apr 27, 2026
df6f967
Add auto-trigger workflow on issue creation
RomanNikitenko Apr 27, 2026
c774efe
Only create issue for the next VS Code version
RomanNikitenko Apr 27, 2026
0a3af5f
Use PAT_TOKEN for issue creation to trigger downstream workflows
RomanNikitenko Apr 27, 2026
45b8824
Route alignment issues to rebase skill
RomanNikitenko Apr 27, 2026
25693ce
Increase runner timeouts for rebase workflow
RomanNikitenko Apr 27, 2026
cf1ba33
Use che-code-dev container image for runner workflows
RomanNikitenko Apr 27, 2026
fed2326
Add rebase rule for code/build/gulpfile.compile.ts
RomanNikitenko Apr 27, 2026
fe4f818
Add PR workflow to detect missing rebase rules and auto-fix via Claude
RomanNikitenko Apr 27, 2026
637b452
Fix workflow
RomanNikitenko Apr 27, 2026
b9d4f13
Switch target remote to HTTPS for DevWorkspace compatibility
RomanNikitenko Apr 28, 2026
3210b6a
add arm support
RomanNikitenko May 15, 2026
8c95c47
Merge remote-tracking branch 'eclipse/main'
RomanNikitenko May 15, 2026
a0d712b
feat: Auto-start device auth from Copilot sign-in
RomanNikitenko Jun 6, 2026
68c241f
Merge remote-tracking branch 'fork/main' into test-pr
RomanNikitenko Jun 6, 2026
e3d47bf
feat: Optimize che-github-authentication session lifecycle
RomanNikitenko Jun 6, 2026
e1d1a1c
fix: preserve @github/copilot/sdk/index.js during extension packaging
RomanNikitenko Jun 7, 2026
f53495b
fix: Add retry logic to che-terminal machine-exec WebSocket connection
RomanNikitenko Jun 8, 2026
d52806d
Fix
RomanNikitenko Jun 8, 2026
e743814
improve sessions
RomanNikitenko Jun 10, 2026
98fda6a
improve
RomanNikitenko Jun 10, 2026
8e53a8d
improve
RomanNikitenko Jun 10, 2026
14e8dc1
Fix flickering
RomanNikitenko Jun 10, 2026
8cccb2b
fix sessionns
RomanNikitenko Jun 10, 2026
3014b80
use id
RomanNikitenko Jun 10, 2026
801b66d
improve removing sessions
RomanNikitenko Jun 10, 2026
2efa483
fix
RomanNikitenko Jun 10, 2026
b1729ca
fix
RomanNikitenko Jun 10, 2026
1c2e6e4
fix device auth
RomanNikitenko Jun 10, 2026
a3809cb
add logs
RomanNikitenko Jun 11, 2026
0806a5c
fix old dev auth token
RomanNikitenko Jun 11, 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
47 changes: 47 additions & 0 deletions .claude/skills/test-pr.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Skill: Test PR

You are working inside a project repository. Read `CLAUDE.md` at the repo root for the PR target repository and git identity configuration.

## Goal

Verify that the che-code-rebase-bot pipeline works end-to-end by making a trivial change, pushing a branch, and opening a pull request.

## Steps

1. **Configure git identity** using the values from the Automation Configuration section in `CLAUDE.md`.

2. **Create a new branch**:
```bash
git checkout -b test/rebase-bot-$(date +%Y%m%d-%H%M%S)
```

3. **Make a trivial change** — create or update the file `.claude-test`:
```bash
echo "Pipeline test executed at $(date -u +%Y-%m-%dT%H:%M:%SZ)" > .claude-test
```

4. **Commit and push**:
```bash
git add .claude-test
git commit -m "[rebase-bot]: test pipeline verification"
git push origin HEAD
```

5. **Create a pull request** against the PR target repository from `CLAUDE.md`. Include the issue URL (from the prompt that triggered this skill) in the body:
```bash
gh pr create \
--repo <PR target repository from CLAUDE.md> \
--title "[rebase-bot]: test pipeline verification" \
--body "Automated test PR created by che-code-rebase-bot to verify the pipeline works end-to-end. Safe to close.

### What issues does this PR fix?
<issue URL from the triggering prompt>"
```

6. **Print the result**: output the PR URL so the orchestrator can capture it.

## Important

- This is a test skill. The PR is safe to close without merging.
- Do NOT modify any real project files — only `.claude-test`.
- If push fails due to permissions, report the error clearly.
131 changes: 131 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
commit-message:
prefix: "deps(actions)"

- package-ecosystem: "docker"
directory: "/build/dockerfiles"
schedule:
interval: "weekly"
open-pull-requests-limit: 3
commit-message:
prefix: "deps(docker)"

- package-ecosystem: "npm"
directory: "/code"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
commit-message:
prefix: "deps(npm)"

- package-ecosystem: "npm"
directory: "/code/remote"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
commit-message:
prefix: "deps(npm)"

- package-ecosystem: "npm"
directory: "/code/build"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
commit-message:
prefix: "deps(npm)"

- package-ecosystem: "npm"
directory: "/code/extensions"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
commit-message:
prefix: "deps(npm)"

- package-ecosystem: "npm"
directory: "/code/extensions/che-api"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
commit-message:
prefix: "deps(npm)"

- package-ecosystem: "npm"
directory: "/code/extensions/che-activity-tracker"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
commit-message:
prefix: "deps(npm)"

- package-ecosystem: "npm"
directory: "/code/extensions/che-commands"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
commit-message:
prefix: "deps(npm)"

- package-ecosystem: "npm"
directory: "/code/extensions/che-github-authentication"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
commit-message:
prefix: "deps(npm)"

- package-ecosystem: "npm"
directory: "/code/extensions/che-port"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
commit-message:
prefix: "deps(npm)"

- package-ecosystem: "npm"
directory: "/code/extensions/che-remote"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
commit-message:
prefix: "deps(npm)"

- package-ecosystem: "npm"
directory: "/code/extensions/che-resource-monitor"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
commit-message:
prefix: "deps(npm)"

- package-ecosystem: "npm"
directory: "/code/extensions/che-telemetry"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
commit-message:
prefix: "deps(npm)"

- package-ecosystem: "npm"
directory: "/code/extensions/che-terminal"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
commit-message:
prefix: "deps(npm)"

- package-ecosystem: "npm"
directory: "/launcher"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
commit-message:
prefix: "deps(npm)"


176 changes: 176 additions & 0 deletions .github/scripts/check-unprotected-changes.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
#!/bin/bash
# This file was generated using AI assistance (Cursor AI) and reviewed by the maintainers.
#
# Detect files under code/ changed in a PR whose modifications are NOT fully
# protected by rebase rules. Two categories:
# - "Missing rule" — no rebase rule exists for the file at all
# - "Incomplete rule" — a rule exists but doesn't reproduce the current content
#
# For "incomplete" detection the script runs the actual rebase handler against
# upstream content and diffs the result against the working tree, reusing the
# test infrastructure from .claude/skills/test-rebase-rules/.
#
# Usage:
# bash check-unprotected-changes.sh --pr-comment <base>..<head>
#
# Prerequisites (for incomplete-rule detection):
# - upstream-code remote must be fetched for the current upstream version
#
# Exit codes:
# 0 — All modifications are fully covered
# 1 — Problems found
# 2 — Error
set -u

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
cd "$REPO_ROOT"

OUTPUT_MODE="text"
COMMIT_RANGE=""
for arg in "$@"; do
case "$arg" in
--pr-comment) OUTPUT_MODE="pr-comment" ;;
*..*) COMMIT_RANGE="$arg" ;;
esac
done

if [ -z "$COMMIT_RANGE" ]; then
REBASE_COMMIT=$(git log --format='%H' --grep="^Rebase against the upstream" -1)
if [ -z "$REBASE_COMMIT" ]; then
echo "ERROR: Could not find a rebase commit and no commit range provided." >&2
exit 2
fi
COMMIT_RANGE="${REBASE_COMMIT}..HEAD"
fi

UPSTREAM_VERSION=$(grep '^CURRENT_UPSTREAM_VERSION=' rebase.sh | head -1 | sed 's/.*="\(.*\)"/\1/')

HANDLER_SCRIPT="$REPO_ROOT/.claude/skills/test-rebase-rules/test-rebase-handler.sh"
RUN_ALL_TESTS="$REPO_ROOT/.claude/skills/test-rebase-rules/run-all-tests.sh"

# --- Build the set of files covered by rebase rules ---
COVERED_LIST=$(mktemp)
trap 'rm -f "$COVERED_LIST"' EXIT

while IFS= read -r line; do
if [[ "$line" =~ \[\[.*==.*\"([^\"]+)\".*\]\] ]]; then
echo "${BASH_REMATCH[1]}"
fi
done < <(sed -n '/^resolve_conflicts()/,/^}/p' rebase.sh) >> "$COVERED_LIST"

find .rebase/replace -name '*.json' -type f 2>/dev/null | while IFS= read -r rule_file; do
code_path="${rule_file#.rebase/replace/}"
code_path="${code_path%.json}"
if [[ "$code_path" != code/* ]]; then
code_path="code/$code_path"
fi
echo "$code_path"
done >> "$COVERED_LIST"

find .rebase/add -type f 2>/dev/null | while IFS= read -r f; do echo "${f#.rebase/add/}"; done >> "$COVERED_LIST"
find .rebase/override -type f 2>/dev/null | while IFS= read -r f; do echo "${f#.rebase/override/}"; done >> "$COVERED_LIST"

sort -u -o "$COVERED_LIST" "$COVERED_LIST"

# --- Collect changed files and classify ---
MISSING_RULE=()
TO_TEST=()

while IFS= read -r file_path; do
case "$file_path" in
*/package-lock.json) continue ;;
code/extensions/che-*) continue ;;
*/che/*.ts|*/che/*.js) continue ;;
esac

if grep -qxF "$file_path" "$COVERED_LIST"; then
TO_TEST+=("$file_path")
else
MISSING_RULE+=("$file_path")
fi
done < <(git diff --name-only "$COMMIT_RANGE" -- code/)

# --- Test files that have rules: are rules complete? ---
INCOMPLETE_RULE=()
HAS_UPSTREAM=false
if [ -n "$UPSTREAM_VERSION" ]; then
git rev-parse "upstream-code/$UPSTREAM_VERSION" > /dev/null 2>&1 && HAS_UPSTREAM=true
fi

if [ "$HAS_UPSTREAM" = true ] && [ ${#TO_TEST[@]} -gt 0 ] && [ -f "$RUN_ALL_TESTS" ]; then
TEST_OUTPUT=$(bash "$RUN_ALL_TESTS" "${TO_TEST[@]}" 2>&1) || true

while IFS= read -r line; do
if [[ "$line" =~ ^\|\ \`([^\`]+)\`\ \| ]]; then
failed_file="${BASH_REMATCH[1]}"
INCOMPLETE_RULE+=("$failed_file")
fi
done < <(echo "$TEST_OUTPUT" | sed -n '/^### Failures/,/^### /p' | grep '^| `')
fi

# --- Output ---
TOTAL_ISSUES=$(( ${#MISSING_RULE[@]} + ${#INCOMPLETE_RULE[@]} ))

if [ "$OUTPUT_MODE" = "pr-comment" ]; then
if [ $TOTAL_ISSUES -eq 0 ]; then
exit 0
fi

echo "<!-- rebase-rules-check -->"
echo "### Rebase Rules Check"
echo ""
echo "The following files were modified in this PR but their changes are **not fully protected** by rebase rules."
echo "Without proper rules, these changes **will be lost** during the next upstream rebase."
echo ""

if [ ${#MISSING_RULE[@]} -gt 0 ]; then
echo "#### Missing rules (no rebase rule exists)"
echo ""
echo "| # | File |"
echo "|---|------|"
i=1
for f in "${MISSING_RULE[@]}"; do
echo "| $i | \`$f\` |"
((i++))
done
echo ""
fi

if [ ${#INCOMPLETE_RULE[@]} -gt 0 ]; then
echo "#### Incomplete rules (rule exists but doesn't cover new changes)"
echo ""
echo "| # | File |"
echo "|---|------|"
i=1
for f in "${INCOMPLETE_RULE[@]}"; do
echo "| $i | \`$f\` |"
((i++))
done
echo ""
fi

echo "Comment \`/add-rebase-rules\` on this PR to add or update the rules automatically."
exit 1
fi

# Default text mode
if [ $TOTAL_ISSUES -eq 0 ]; then
echo "All modified files in code/ are fully covered by rebase rules."
exit 0
fi

echo "Found $TOTAL_ISSUES file(s) with rebase rule problems:"
echo ""
if [ ${#MISSING_RULE[@]} -gt 0 ]; then
echo "Missing rules:"
for f in "${MISSING_RULE[@]}"; do echo " - $f"; done
echo ""
fi
if [ ${#INCOMPLETE_RULE[@]} -gt 0 ]; then
echo "Incomplete rules:"
for f in "${INCOMPLETE_RULE[@]}"; do echo " - $f"; done
echo ""
fi
echo "Comment /add-rebase-rules on this PR to fix automatically."
exit 1
Loading
Loading