Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
cf7ca9b
GPUI Kit entra en el arbol, y el plan para colgarle la ventana
Villoh Sep 8, 2026
c42c568
Donde retomar el porte del controlador
Villoh Sep 8, 2026
53bf201
Portar AppController al main actual
Villoh Sep 8, 2026
13b125d
Merge remote-tracking branch 'origin/main' into gpui-kit-redesign-v2
Villoh Sep 8, 2026
b886cbb
Fix GUI merge with current main
Villoh Sep 8, 2026
c1740d0
Merge b886cbb9b3c5ee1025c1ee174ab613168f275f46 into 05bbafe219082ae31…
Villoh Sep 8, 2026
f10f5b4
Merge remote-tracking branch 'origin/main' into gpui-kit-redesign
Villoh Sep 11, 2026
1e5f707
Eliminar spike GPUI obsoleto
Villoh Sep 11, 2026
531fed7
La ventana GPUI habla el idioma que le toca
Villoh Sep 11, 2026
1e3d52b
Los ajustes se pueden cambiar desde la ventana GPUI
Villoh Sep 11, 2026
1c58bef
Los atajos de teclado llegan a la ventana GPUI
Villoh Sep 11, 2026
d45cc5e
El boton derecho sobre una fila ofrece lo que se puede hacer con ella
Villoh Sep 11, 2026
3897684
Las columnas de la ventana GPUI se pueden estrechar y ensanchar
Villoh Sep 11, 2026
83aedf2
La vista plana llega a la ventana GPUI
Villoh Sep 11, 2026
3e16530
La ventana GPUI puede cambiar el archivo, no solo mirarlo
Villoh Sep 11, 2026
88c8c6c
Los archivos recientes y la codificacion de nombres llegan a GPUI
Villoh Sep 11, 2026
c733288
El visor de entradas llega a la ventana GPUI
Villoh Sep 11, 2026
cf49f1f
Recuperar mover dentro del archivo, que se comio el merge
Villoh Sep 11, 2026
7589690
Recuperar el aviso de version nueva y los ajustes que no se guardaban
Villoh Sep 11, 2026
11c0a4e
Recuperar la ventana de progreso con reloj, pausa y tiempo restante
Villoh Sep 11, 2026
dfca793
Parar un trabajo no es que haya fallado
Villoh Sep 11, 2026
20ae868
La goma de seleccion y la rueda como boton llegan a GPUI
Villoh Sep 11, 2026
a22fcdc
Los atajos del menu dejan de pegarse al nombre de la entrada
Villoh Sep 11, 2026
2bb1e8e
La barra de arriba pasa a ser de Arca y no de Windows
Villoh Sep 11, 2026
69f91d6
Arreglar la goma que no marcaba nada y el arrastre que no salia de la…
Villoh Sep 11, 2026
57598ca
La goma y el arrastre dejan de reconstruir la lista en cada movimiento
Villoh Sep 11, 2026
d8fe0a9
Depuracion deja de compilar GPUI sin optimizar
Villoh Sep 11, 2026
7c7e312
Use native GPUI overflow submenus
Villoh Sep 11, 2026
c95f0aa
Use native GPUI Kit search input
Villoh Sep 11, 2026
2f88a46
Remove redundant native picker overlay
Villoh Sep 11, 2026
16c4a0d
Migrate arca-gui to GPUI Kit
Villoh Sep 11, 2026
b29489f
refactor arca-gui into focused modules
Villoh Sep 11, 2026
2ac80a3
Fix cross-platform CI builds
Villoh Sep 11, 2026
4b7b42d
Fix Linux clippy and cache CI builds
Villoh Sep 11, 2026
19c3f41
Keep CI cache on failed runs
Villoh Sep 11, 2026
b47024f
Install XKB common X11 headers in CI
Villoh Sep 11, 2026
b93855e
Shorten CI release validation builds
Villoh Sep 11, 2026
830a532
Avoid repeated GPUI test linking on platform jobs
Villoh Sep 11, 2026
2157c6d
Separate test and platform build jobs
Villoh Sep 11, 2026
f946ca6
Build Windows release under the installer target
Villoh Sep 11, 2026
ad4c11e
Keep installers in release packaging only
Villoh Sep 11, 2026
deba7e2
Use absolute CLI path for interoperability
Villoh Sep 11, 2026
bba33e3
docs: add contribution guidelines
Villoh Sep 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
131 changes: 59 additions & 72 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,98 +7,85 @@ on:

env:
CARGO_TERM_COLOR: always
# CI validates release code paths; the tag workflow pays for production LTO.
CARGO_PROFILE_RELEASE_LTO: "off"
CARGO_PROFILE_RELEASE_CODEGEN_UNITS: "16"

jobs:
test:
tests:
name: Tests and interoperability
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
- uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true
- name: Reference tools
run: sudo apt-get update && sudo apt-get install -y zip unzip p7zip-full zstd

# The window is part of the workspace, so this job builds it too. eframe
# needs these headers on Linux; on Windows and macOS nothing is required
# because the system already ships them.
run: >-
sudo apt-get update && sudo apt-get install -y zip unzip p7zip-full
zstd
- name: Window dependencies
run: sudo apt-get install -y libxkbcommon-dev libwayland-dev libxrandr-dev libxi-dev libgl1-mesa-dev libxcursor-dev libxinerama-dev
- run: cargo clippy --workspace --all-targets -- -D warnings
run: >-
sudo apt-get install -y libxkbcommon-dev libxkbcommon-x11-dev
libwayland-dev libxrandr-dev libxi-dev libgl1-mesa-dev
libxcursor-dev libxinerama-dev libfontconfig1-dev

# The GUI test binary is linked once, on Linux. Platform jobs validate
# their release builds without linking this large GPUI test binary again.
- run: cargo clippy --workspace --bins -- -D warnings
- run: cargo test --workspace
- name: Build without the C codecs (pure Rust)
run: cargo build --release --no-default-features
- run: cargo build --release
- name: Interoperability verified by hash
run: bash interop.sh

# The installer was written on Windows: this is the only thing checking
# that it really works on Linux, there and back.
- name: Installer, there and back
run: |
./install.sh
test -x "$HOME/.local/bin/arca" && test -x "$HOME/.local/bin/arca-gui"
"$HOME/.local/bin/arca" --version
./install.sh --uninstall
test ! -e "$HOME/.local/bin/arca" && test ! -e "$HOME/.local/bin/arca-gui"
# Interoperability exercises the CLI; there is no reason to build GPUI
# just to obtain arca for this check.
- name: Build CLI without the C codecs
run: cargo build --no-default-features -p arca-cli
- name: Build CLI with the default codecs
run: cargo build -p arca-cli
- name: Interoperability verified by hash
run: ARCA="$GITHUB_WORKSPACE/target/debug/arca" bash interop.sh

windows:
name: Build on Windows
runs-on: windows-latest
build:
name: Build on ${{ matrix.name }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- name: Linux
os: ubuntu-latest
- name: Windows
os: windows-latest
- name: macOS
os: macos-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo build --release
- run: cargo test --workspace
# No continue-on-error: the release has been building this without a net
# since v0.3.0, so letting it slide here only hid a breakage until
# publishing time. It lives outside the workspace, hence the directory.
- uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true

- name: Window dependencies
if: matrix.os == 'ubuntu-latest'
run: >-
sudo apt-get update && sudo apt-get install -y
libxkbcommon-dev libxkbcommon-x11-dev libwayland-dev libxrandr-dev
libxi-dev libgl1-mesa-dev libxcursor-dev libxinerama-dev
libfontconfig1-dev

- name: Build release binaries
if: matrix.os != 'windows-latest'
run: cargo build --release

- name: Build Windows release binaries
if: matrix.os == 'windows-latest'
run: cargo build --release --target x86_64-pc-windows-msvc
- name: Shell extension
if: matrix.os == 'windows-latest'
working-directory: windows/arca-shell
run: |
cargo build --release
cargo test
cargo clippy --release --all-targets -- -D warnings

# The installer used to be compiled for the first time during a release,
# which is where two breakages were found: once a wrong path to the DLL,
# once Pascal that did not compile. Neither was visible until a tag had
# already been pushed. It is built here now, on every push, with the same
# arguments the release uses.
- name: Windows installer
shell: bash
run: |
set -eu
cargo build --release --target x86_64-pc-windows-msvc
cargo build --release --target x86_64-pc-windows-msvc \
--manifest-path windows/arca-shell/Cargo.toml
# The installer stamps the version into AppxManifest.xml with Inno's
# Pascal, whose strings go through the ANSI code page: lossless only
# while that file stays ASCII. It used to be Spanish with accents,
# and no amount of Pascal made that survive the round trip.
if LC_ALL=C grep -n '[^[:print:][:space:]]' windows/AppxManifest.xml; then
echo "AppxManifest.xml has non-ASCII bytes on those lines"; exit 1
fi
ISCC="/c/Program Files (x86)/Inno Setup 6/ISCC.exe"
test -f "$ISCC" || choco install innosetup -y --no-progress
BIN='//DBinDir=..\target\x86_64-pc-windows-msvc\release'
SHELL_DIR='//DShellDir=arca-shell\target\x86_64-pc-windows-msvc\release'
"$ISCC" //DVersion=0.0.0 "$BIN" "$SHELL_DIR" windows/arca.iss
test -f dist/arca-setup-0.0.0-x86_64.exe

macos:
name: Build on macOS
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo build --release
- run: cargo test --workspace
- name: Installer, there and back
run: |
./install.sh
test -x "$HOME/.local/bin/arca" && test -x "$HOME/.local/bin/arca-gui"
"$HOME/.local/bin/arca" --version
./install.sh --uninstall
test ! -e "$HOME/.local/bin/arca" && test ! -e "$HOME/.local/bin/arca-gui"
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/target
**/target
Cargo.lock
# Keep reproducible dependency graphs for the workspace.
!Cargo.lock
windows/salida/
*.zip
*.tar
Expand Down
94 changes: 94 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# Arca contribution guide

This file defines the project-wide rules for agents and contributors. More-specific `AGENTS.md` files override these rules for their directory.

## Project shape

Arca is a cross-platform archiver written in Rust. The workspace contains:

- `arca-core`: shared errors, bounded parsing, limits, and path safety.
- `arca-zip`: ZIP/Zip64 reading and writing, compression, and encryption.
- `arca-tar`: TAR reading and writing.
- `arca-cli`: the `arca` command-line binary.
- `arca-gui`: the desktop window.
- `arca-icons`: desktop file-type icons.
- `arca-drag`: drag-and-drop integration.
- `arca-net`: networking support.
- `windows/arca-shell`: Windows Explorer integration; it is outside the workspace.

Read `README.md` before making broad changes. Design rationale and project history live in `Claude outputs/CLAUDE.md` and `docs/plans/`.

## General rules

- Keep changes focused and minimal. Do not rewrite unrelated code or discard existing working-tree changes.
- Reuse existing helpers, types, and patterns before adding new ones.
- Preserve the safe-Rust boundary: parsers that process untrusted archive bytes must remain free of `unsafe` code.
- Every parser change must include a test for malformed or truncated input and must not panic.
- Keep internal identifiers and source strings ASCII-only. User-facing Spanish text and Markdown documentation must use correct accents.
- Do not add comments to `src/` unless they explain a non-obvious safety or correctness invariant. Build files and CI configuration may include explanatory comments.
- Never publish benchmark numbers without the command needed to reproduce them.

## Rust workflow

Run the narrowest relevant checks while iterating, then run the full checks before handing work over:

```sh
cargo fmt --all -- --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
cargo build --release --no-default-features
cargo build --release
bash interop.sh
```

For Windows-only changes, also run the commands from the relevant directory, including `cargo test` and `cargo clippy --release --all-targets -- -D warnings` in `windows/arca-shell` when applicable.

## Commits

Use [Conventional Commits](https://www.conventionalcommits.org/) in **English**.

Format:

```text
<type>(<scope>): <imperative description>
```

Rules:

- Use a lowercase type and scope; omit the scope when it adds no information.
- Write the subject in English, imperative mood, in sentence case, without a trailing period.
- Keep the subject concise (preferably 72 characters or fewer).
- Use the body to explain **why**, not to restate the diff. Write it in English too.
- Add `!` after the type or scope for a breaking change and explain the migration in the body.
- Do not combine unrelated changes in one commit.

Allowed types:

- `feat`: user-visible functionality
- `fix`: bug fix
- `perf`: measurable performance improvement
- `refactor`: behavior-preserving code change
- `test`: tests only
- `docs`: documentation only
- `build`: build system or dependency changes
- `ci`: continuous-integration changes
- `chore`: maintenance that does not fit the categories above
- `revert`: revert a previous commit

Good examples:

```text
feat(arca-cli): add archive password command
fix(arca-zip): reject truncated central directory
perf(arca-gui): avoid rebuilding rows during drag selection
docs: document interoperability checks
```

Pull request titles should follow the same format. The description should state the user-visible or technical outcome, relevant tests, and any platform limitations.

## Documentation and releases

- Put architectural plans in `docs/plans/`.
- Keep `README.md` focused on user-facing usage, supported formats, interoperability, and reproducible checks.
- Keep brand rules in `brand/BRAND.md`.
- Do not tag a release until the tag version matches `Cargo.toml` and CI is green.
Loading
Loading