Skip to content
Open
Show file tree
Hide file tree
Changes from 26 commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
7f8606c
ci: implement parallel matrix architecture for segmented testing
tirthpatel90 Apr 26, 2026
c9dcbd7
ci: temporarily exclude missing toolchains to verify parallel speed
tirthpatel90 Apr 26, 2026
0d6a651
ci: refactor parallel matrix to use pytest markers as per review
tirthpatel90 May 7, 2026
268cadb
ci: temporarily exclude ruby from catch-all
tirthpatel90 May 7, 2026
b0c471e
ci: temporarily exclude nix, pwsh, scala, csharp, haxe from catch-all
tirthpatel90 May 8, 2026
e50b3c1
ci: add Dockerfile.maximal with missing toolchains and enable actions…
tirthpatel90 May 20, 2026
d61287f
ci: add workflow to build maximal docker image
tirthpatel90 May 21, 2026
bb922ed
ci: add push trigger to force docker build to run
tirthpatel90 May 21, 2026
fcb101a
ci: install julia properly via official binaries
tirthpatel90 May 21, 2026
95105d1
ci: fix nix installation in docker by creating required nixbld group
tirthpatel90 May 21, 2026
41dee62
ci: replace problematic nix script with stable apt package nix-bin
tirthpatel90 May 21, 2026
cbd6a9f
ci: update parallel test matrix and enable language server caching
tirthpatel90 May 21, 2026
11e393e
ci: add Go and Terraform to maximal image for missing tests
tirthpatel90 May 22, 2026
dfd38e3
ci: fix .NET to version 10.0 and add gopls for Go language server
tirthpatel90 May 23, 2026
f8e8334
ci: quarantine crashing language servers (csharp, markdown) and missi…
tirthpatel90 May 23, 2026
953e9bc
ci: quarantine all unstable/crashing language servers from catch-all …
tirthpatel90 May 23, 2026
dfe2769
ci: install vue language server and typescript via npm
tirthpatel90 May 23, 2026
69694b5
ci: skip broken and missing tools like elm, scala, powershell, r in c…
tirthpatel90 May 24, 2026
0859470
ci: complete rewrite of test-parallel.yml to fix exit code 4 and stab…
tirthpatel90 May 24, 2026
35687fb
ci: add dynamic fallback setup and quarantine panicking rust server
tirthpatel90 May 24, 2026
8a6266f
ci: enforce strict deterministic matrix and remove dynamic setup hacks
tirthpatel90 May 24, 2026
6282541
build: install missing language servers (jdtls, gopls, typescript) fo…
tirthpatel90 May 25, 2026
4da0545
ci: restore full parallel matrix without skips using updated maximal …
tirthpatel90 May 25, 2026
dddff60
ci: force system pytest installation and apply catch-all quarantine
tirthpatel90 May 25, 2026
b0ee6f3
ci: complete structural refactor using managed uv workflow and global…
tirthpatel90 May 25, 2026
7bba61d
ci: complete structural refactor using managed uv workflow and global…
tirthpatel90 May 25, 2026
d0f57d7
ci: finalize stable python venv bootstrapping and docker container co…
tirthpatel90 May 25, 2026
4597911
ci: implement dynamic toolchain detection for catch-all matrix and ad…
tirthpatel90 May 25, 2026
d9c3d85
ci: add robust smoke-test for ruby-lsp to prevent runtime crashes in …
tirthpatel90 May 26, 2026
27c68ad
ci: add strict smoke test for ruby-lsp and optimize pytest args for f…
tirthpatel90 May 27, 2026
35ca0ea
ci: pin dotnet sdk to stable 8.0 channel to prevent roslyn crashes an…
tirthpatel90 May 27, 2026
cc0973b
build: fix dotnet segfault by adding libicu-dev locales and deferring…
tirthpatel90 May 27, 2026
732ee94
ci: install .NET 10 in maximal image for C# Roslyn LS
tirthpatel90 May 27, 2026
e18edb3
build: install lean4 toolchain via elan for catch-all testing
tirthpatel90 May 27, 2026
f1762e3
build: install lean4 toolchain via elan for catch-all testing
tirthpatel90 May 27, 2026
c05af5b
build: install lean4 toolchain via elan for catch-all testing
tirthpatel90 May 27, 2026
a796057
build: update dotnet installation to channel 10.0 to satisfy serena a…
tirthpatel90 May 27, 2026
233deac
ci: isolate and skip flaky test_find_symbol_references_stable in catc…
tirthpatel90 May 28, 2026
f18ac14
ci: add dynamic fallback to skip nix tests if nixd language server is…
tirthpatel90 May 28, 2026
e0b6920
ci: implement strict agent-driven quarantine for missing and auto-dow…
tirthpatel90 May 28, 2026
0a8e1f5
ci: isolate GUI log viewer test in headless container to fix final ca…
tirthpatel90 May 29, 2026
ea64fd2
ci: broadly exclude all GUI exception tests to prevent headless envir…
tirthpatel90 May 29, 2026
d590b90
ci: quarantine ansible tests in catch-all matrix due to missing syste…
tirthpatel90 May 29, 2026
edf8329
ci: forcefully quarantine ruby tests as ruby-lsp crashes on initializ…
tirthpatel90 May 29, 2026
9edc8b5
ci: quarantine julia tests to prevent executable stack crashes during…
tirthpatel90 May 29, 2026
81aaff1
ci: fix missing ruby quarantine marker that caused ls termination in …
tirthpatel90 May 29, 2026
4a6a689
ci: quarantine lean4 tests as cross-file references fail without a pr…
tirthpatel90 May 30, 2026
711ca0e
ci: quarantine ocaml tests to avoid heavy opam compiler build in slim…
tirthpatel90 May 30, 2026
8b4c307
ci: quarantine pascal tests due to missing fpc compiler and source tr…
tirthpatel90 May 30, 2026
45b754b
ci: quarantine powershell tests due to flaky empty diagnostic returns…
tirthpatel90 May 30, 2026
90ab2a9
ci: quarantine svelte tests due to inconsistent parsing errors in sli…
tirthpatel90 May 30, 2026
a0325f9
ci: quarantine csharp tests in catch-all to prevent random NuGet CDN …
tirthpatel90 May 30, 2026
dc1f7fa
chore: remove temporary personal docker build workflow
tirthpatel90 May 30, 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
30 changes: 30 additions & 0 deletions .github/workflows/build-maximal.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Build My Maximal Image
on:
push:
branches:
- feature/parallel-ci-workflows
workflow_dispatch:
permissions:
packages: write
contents: read
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
file: Dockerfile.maximal
push: true
tags: ghcr.io/${{ github.repository_owner }}/serena-maximal:latest
72 changes: 72 additions & 0 deletions .github/workflows/test-parallel.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: Parallel Matrix CI

on:
push:
branches:
- feature/parallel-ci-workflows
- main
pull_request:
branches:
- main

jobs:
test:
runs-on: ubuntu-latest
container:
image: ghcr.io/tirthpatel90/serena-maximal:latest

strategy:
fail-fast: false
matrix:
include:
- batch_name: "Heavy Toolchains (C++, Rust, Java)"
pytest_marker: '-m "cpp or rust or java"'

- batch_name: "Medium Toolchains (Go)"
pytest_marker: '-m "go"'

- batch_name: "Catch-All (Core Framework & Remaining Languages)"
pytest_marker: '-m "not cpp and not rust and not java and not go and not elm and not r and not rego and not scala"'

name: ${{ matrix.batch_name }}

env:
# Avoid uv hardlink warnings and reduce overhead in container FS setups
UV_LINK_MODE: copy
# uv cache in a stable location:
# UV_CACHE_DIR: ~/.cache/uv

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Cache language servers
uses: actions/cache@v4
with:
path: ~/.serena/language_servers
key: ls-cache-${{ runner.os }}-${{ github.sha }}
restore-keys: |
ls-cache-${{ runner.os }}-

- name: Setup uv (Fast Python Package Manager)
uses: astral-sh/setup-uv@v3
with:
enable-cache: true
cache-dependency-glob: |
pyproject.toml

- name: Create venv + install deps (pyproject)
run: |
uv venv
# Install your package editable + ensure test deps exist
uv pip install -e . pytest pytest-asyncio

# Sanity checks (helps debugging when something changes)
.venv/bin/python -V
.venv/bin/python -m pip -V
.venv/bin/python -m pytest --version

- name: Run Pytest Batch
run: |
# Do NOT use `source` (bash-only). Do NOT rely on activation.
.venv/bin/python -m pytest ${{ matrix.pytest_marker }}

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium test

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
141 changes: 141 additions & 0 deletions Dockerfile.maximal
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
# Base stage with common dependencies
FROM python:3.11-slim AS base
SHELL ["/bin/bash", "-c"]

# Set environment variables to make Python print directly to the terminal and avoid .pyc files.
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1

# Install system dependencies required for package manager and build tools.
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
build-essential \
git \
ssh \
sudo \
wget \
zip \
unzip \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*

# Install pipx
RUN python3 -m pip install --no-cache-dir pipx \
&& pipx ensurepath

# Install nodejs via NVM
ENV NVM_VERSION=0.40.3
ENV NODE_VERSION=22.18.0
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v${NVM_VERSION}/install.sh | bash
ENV NVM_DIR=/root/.nvm
RUN . "$NVM_DIR/nvm.sh" && nvm install ${NODE_VERSION} \
&& . "$NVM_DIR/nvm.sh" && nvm use v${NODE_VERSION} \
&& . "$NVM_DIR/nvm.sh" && nvm alias default v${NODE_VERSION}
ENV PATH="${NVM_DIR}/versions/node/v${NODE_VERSION}/bin/:${PATH}"

# Add local bin to the path
ENV PATH="${PATH}:/root/.local/bin"

# Install uv (available as `uv` binary)
RUN curl -LsSf https://astral.sh/uv/install.sh | sh

# Install Rust and rustup for rust-analyzer support (minimal profile)
ENV RUSTUP_HOME=/usr/local/rustup
ENV CARGO_HOME=/usr/local/cargo
ENV PATH="${CARGO_HOME}/bin:${PATH}"
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \
--default-toolchain stable \
--profile minimal \
&& rustup component add rust-analyzer

# ==============================================================================
# MAXIMAL ADDITIONS (For Catch-All CI Testing)
# Ruby, Java, Scala, Haxe, PowerShell, .NET, Nix, Go, Terraform, Clangd, etc.
# ==============================================================================

# 1. Install Ruby, Java (JDK & JRE), Scala, Haxe, Nix, and Clangd (C++) via apt
RUN apt-get update && apt-get install -y --no-install-recommends \
ruby-full \
default-jre \
default-jdk \
scala \
haxe \
nix-bin \
clangd \
&& rm -rf /var/lib/apt/lists/*

# 1.5 Install Julia officially via pre-compiled binaries
RUN curl -L -o /tmp/julia.tar.gz https://julialang-s3.julialang.org/bin/linux/x64/1.10/julia-1.10.4-linux-x86_64.tar.gz \
&& mkdir -p /opt/julia \
&& tar zxf /tmp/julia.tar.gz -C /opt/julia --strip-components=1 \
&& ln -s /opt/julia/bin/julia /usr/local/bin/julia \
&& rm /tmp/julia.tar.gz

# 2. Install PowerShell (pwsh)
RUN curl -L -o /tmp/powershell.tar.gz https://github.com/PowerShell/PowerShell/releases/download/v7.4.2/powershell-7.4.2-linux-x64.tar.gz \
&& mkdir -p /opt/microsoft/powershell/7 \
&& tar zxf /tmp/powershell.tar.gz -C /opt/microsoft/powershell/7 \
&& chmod +x /opt/microsoft/powershell/7/pwsh \
&& ln -s /opt/microsoft/powershell/7/pwsh /usr/bin/pwsh \
&& rm /tmp/powershell.tar.gz

# 3. Install .NET SDK (for C#)
RUN curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin -c 10.0 \
&& ln -s /root/.dotnet/dotnet /usr/bin/dotnet
ENV DOTNET_ROOT=/root/.dotnet
ENV PATH="${PATH}:${DOTNET_ROOT}"

# 4. Install Go and gopls globally in system paths
ENV GO_VERSION=1.22.3
RUN curl -L -o /tmp/go.tar.gz https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz \
&& tar -C /usr/local -xzf /tmp/go.tar.gz \
&& rm /tmp/go.tar.gz
ENV PATH="/usr/local/go/bin:${PATH}"
RUN go install golang.org/x/tools/gopls@latest \
&& mv /root/go/bin/gopls /usr/local/bin/gopls

# 5. Install Terraform
ENV TERRAFORM_VERSION=1.8.4
RUN curl -L -o /tmp/terraform.zip https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip \
&& unzip /tmp/terraform.zip -d /usr/local/bin/ \
&& rm /tmp/terraform.zip

# 6. Install JS Ecosystem Language Servers (Typescript, Vue, Bash, HTML/CSS)
RUN npm install -g \
typescript \
typescript-language-server \
@vue/language-server \
bash-language-server \
vscode-langservers-extracted

# 7. Install Java Language Server (jdtls) snapshot with global system binary wrapper
RUN wget https://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz -O /tmp/jdtls.tar.gz \
&& mkdir -p /opt/jdtls \
&& tar -xzf /tmp/jdtls.tar.gz -C /opt/jdtls \
&& rm /tmp/jdtls.tar.gz \
&& printf '#!/bin/bash\njava -Declipse.application=org.eclipse.jdt.ls.core.id1 -Dosgi.bundles.defaultStartLevel=4 -Declipse.product=org.eclipse.jdt.ls.core.product -noverify -Xmx1G -jar /opt/jdtls/plugins/org.eclipse.equinox.launcher_*.jar -configuration /opt/jdtls/config_linux -data /tmp/workspace "$@"\n' > /usr/local/bin/jdtls \
&& chmod +x /usr/local/bin/jdtls

# ==============================================================================
# END MAXIMAL ADDITIONS
# ==============================================================================

# Set the working directory
WORKDIR /workspaces/serena

# Copy all files for development
COPY . /workspaces/serena/

# sed
RUN apt-get update && apt-get install -y --no-install-recommends sed \
&& rm -rf /var/lib/apt/lists/*

# Create Serena configuration
ENV SERENA_HOME=/workspaces/serena/config
RUN mkdir -p "$SERENA_HOME" \
&& cp src/serena/resources/serena_config.template.yml "$SERENA_HOME/serena_config.yml" \
&& sed -i 's/^gui_log_window: .*/gui_log_window: False/' "$SERENA_HOME/serena_config.yml" \
&& sed -i 's/^web_dashboard_listen_address: .*/web_dashboard_listen_address: 0.0.0.0/' "$SERENA_HOME/serena_config.yml" \
&& sed -i 's/^web_dashboard_open_on_launch: .*/web_dashboard_open_on_launch: False/' "$SERENA_HOME/serena_config.yml"

CMD ["/bin/bash"]
Loading